cette fois on est bon
This commit is contained in:
parent
71038c169c
commit
2dc81bb4e3
Binary file not shown.
@ -40,12 +40,14 @@
|
|||||||
const exerciceStore = getContext<{ exerciceStore: any }>("exerciceStore");
|
const exerciceStore = getContext<{ exerciceStore: any }>("exerciceStore");
|
||||||
const tagsStore = getContext<{ tagsStore: any }>("tagsStore");
|
const tagsStore = getContext<{ tagsStore: any }>("tagsStore");
|
||||||
const { navigate } = getContext<{ navigate: Function }>("navigation");
|
const { navigate } = getContext<{ navigate: Function }>("navigation");
|
||||||
const {success, error} = getContext<{ success: Function, error: Function }>("notif");
|
const { success, error } = getContext<{ success: Function, error: Function }>("notif");
|
||||||
|
let loading = false
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<form
|
<form
|
||||||
action=""
|
action=""
|
||||||
on:submit|preventDefault={() => {
|
on:submit|preventDefault={() => {
|
||||||
|
loading = true
|
||||||
if (editing && exo != null) {
|
if (editing && exo != null) {
|
||||||
editExo(exo.id_code, {
|
editExo(exo.id_code, {
|
||||||
name: $name.value,
|
name: $name.value,
|
||||||
@ -53,21 +55,25 @@
|
|||||||
private: $prv.value,
|
private: $prv.value,
|
||||||
...($model.dirty == true && { file: $model.value[0] })
|
...($model.dirty == true && { file: $model.value[0] })
|
||||||
}).then((r) => {
|
}).then((r) => {
|
||||||
|
loading=false
|
||||||
success('Exercice modifié !', `Exercice ${r.data.name} modifié avec succès !`)
|
success('Exercice modifié !', `Exercice ${r.data.name} modifié avec succès !`)
|
||||||
exo=r.data
|
exo=r.data
|
||||||
updateExo(r.data);
|
updateExo(r.data);
|
||||||
cancel()
|
cancel()
|
||||||
}).catch((e) => {
|
}).catch((e) => {
|
||||||
|
loading=false
|
||||||
console.log(e)
|
console.log(e)
|
||||||
error('Erreur', 'Une erreur est survenue lors de la modification de l\'exercice')
|
error('Erreur', 'Une erreur est survenue lors de la modification de l\'exercice')
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
createExo({
|
createExo({
|
||||||
name: $name.value,
|
name: $name.value,
|
||||||
consigne: $consigne.value,
|
consigne: $consigne.value,
|
||||||
private: $prv.value,
|
private: $prv.value,
|
||||||
file: $model.value[0]
|
file: $model.value[0]
|
||||||
}).then((r) => {
|
}).then((r) => {
|
||||||
|
loading=false
|
||||||
updateExo(r.data);
|
updateExo(r.data);
|
||||||
success('Exercice créé !', `Exercice ${r.data.name} créé avec succès !`)
|
success('Exercice créé !', `Exercice ${r.data.name} créé avec succès !`)
|
||||||
goto(`/exercices/${r.data.id_code}`)
|
goto(`/exercices/${r.data.id_code}`)
|
||||||
@ -84,6 +90,7 @@
|
|||||||
}, true
|
}, true
|
||||||
);
|
);
|
||||||
}).catch((e) => {
|
}).catch((e) => {
|
||||||
|
loading=false
|
||||||
error('Erreur', 'Une erreur est survenue lors de la création de l\'exercice')
|
error('Erreur', 'Une erreur est survenue lors de la création de l\'exercice')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -117,7 +124,13 @@
|
|||||||
defaultValue={editing &&exo!= null? exo.exo_source: null} />
|
defaultValue={editing &&exo!= null? exo.exo_source: null} />
|
||||||
|
|
||||||
<div class="wp-100">
|
<div class="wp-100">
|
||||||
<button class="primary-btn" disabled={!$myForm.valid}>Modifier</button>
|
<button class="primary-btn" disabled={!$myForm.valid}>
|
||||||
|
{#if !loading}
|
||||||
|
{editing ? "Modifier" : "Créer"}
|
||||||
|
{:else}
|
||||||
|
<span class="spinner"></span>
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
<button
|
<button
|
||||||
class="danger-btn"
|
class="danger-btn"
|
||||||
on:click|preventDefault={() => {
|
on:click|preventDefault={() => {
|
||||||
@ -146,4 +159,9 @@
|
|||||||
gap: 10px;
|
gap: 10px;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
}
|
}
|
||||||
|
.spinner{
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
border-width: 2px!important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<span class="inputLabel" class:error={errors.length !== 0}>
|
<span class="inputLabel" class:error={errors.length !== 0}>
|
||||||
|
<div style:position="relative">
|
||||||
<input
|
<input
|
||||||
use:typeAction
|
use:typeAction
|
||||||
on:input={(e)=>{change(e)}}
|
on:input={(e)=>{change(e)}}
|
||||||
@ -48,7 +48,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
</div>
|
||||||
<span class="bar" />
|
<span class="bar" />
|
||||||
|
|
||||||
{#if errors.length !== 0}
|
{#if errors.length !== 0}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
const room: Writable<Room> = getContext("room");
|
const room: Writable<Room> = getContext("room");
|
||||||
const member: Writable<Member> = getContext("member");
|
const member: Writable<Member> = getContext("member");
|
||||||
const { send } = getContext<{ send: Function }>("ws");
|
const { send } = getContext<{ send: Function }>("ws");
|
||||||
|
const { alert } = getContext<{ alert: Function }>("alert");
|
||||||
$: online =
|
$: online =
|
||||||
$room != null
|
$room != null
|
||||||
? $room.members.filter((r): r is Member => "online" in r && r.online == true)
|
? $room.members.filter((r): r is Member => "online" in r && r.online == true)
|
||||||
@ -25,6 +25,16 @@
|
|||||||
$room != null
|
$room != null
|
||||||
? $room.members.filter((r): r is Waiter => "waiter_id" in r && !!r.waiter_id)
|
? $room.members.filter((r): r is Waiter => "waiter_id" in r && !!r.waiter_id)
|
||||||
: [];
|
: [];
|
||||||
|
const ban = (m: Member) => {
|
||||||
|
if (!$member.isAdmin || m.isAdmin) return;
|
||||||
|
alert(
|
||||||
|
{
|
||||||
|
title: "Bannir", description: "Êtes-vous sûr de vouloir bannir cet utilisateur ?", validate: () => {
|
||||||
|
send("ban", { member_id: m.id_code });
|
||||||
|
}, validateButton: "Bannir"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="members">
|
<div class="members">
|
||||||
@ -66,9 +76,7 @@
|
|||||||
class:member={m.id_code == $member.id_code}
|
class:member={m.id_code == $member.id_code}
|
||||||
class="online"
|
class="online"
|
||||||
title={$member.isAdmin && !m.isAdmin ? 'Bannir' : ''}
|
title={$member.isAdmin && !m.isAdmin ? 'Bannir' : ''}
|
||||||
on:click={() => {
|
on:click={(e)=>ban(m)}
|
||||||
$member.isAdmin && !m.isAdmin && send('ban', { member_id: m.id_code });
|
|
||||||
}}
|
|
||||||
on:keydown={() => {}}
|
on:keydown={() => {}}
|
||||||
>
|
>
|
||||||
{m.username}
|
{m.username}
|
||||||
@ -90,9 +98,7 @@
|
|||||||
class:bannable={m.id_code != $member.id_code && $member.isAdmin && !m.isAdmin}
|
class:bannable={m.id_code != $member.id_code && $member.isAdmin && !m.isAdmin}
|
||||||
class:member={m.id_code == $member.id_code}
|
class:member={m.id_code == $member.id_code}
|
||||||
title={$member.isAdmin && !m.isAdmin ? 'Bannir' : ''}
|
title={$member.isAdmin && !m.isAdmin ? 'Bannir' : ''}
|
||||||
on:click={() => {
|
on:click={(e)=>ban(m)}
|
||||||
$member.isAdmin && !m.isAdmin && send('ban', { member_id: m.id_code });
|
|
||||||
}}
|
|
||||||
on:keydown={() => {}}
|
on:keydown={() => {}}
|
||||||
>
|
>
|
||||||
{m.username}
|
{m.username}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
||||||
import {goto} from "$app/navigation";
|
import {goto} from "$app/navigation";
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="rooms">
|
<div class="rooms">
|
||||||
@ -26,4 +27,5 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
gap: 20px;
|
gap: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
@ -102,6 +102,7 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($room != null) {
|
if ($room != null) {
|
||||||
|
info("Départ", `*${data.member.username}* n'est plus dans la salle`);
|
||||||
$room.members = [
|
$room.members = [
|
||||||
...$room.members.filter((r) => "waiter_id" in r || r.id_code != data.member.id_code)
|
...$room.members.filter((r) => "waiter_id" in r || r.id_code != data.member.id_code)
|
||||||
];
|
];
|
||||||
@ -211,6 +212,7 @@
|
|||||||
|
|
||||||
case "joined":
|
case "joined":
|
||||||
if ($room != null) {
|
if ($room != null) {
|
||||||
|
info("Arrivée", `*${data.member.username}* a rejoint la salle`)
|
||||||
$room.members = [
|
$room.members = [
|
||||||
...$room?.members.filter(
|
...$room?.members.filter(
|
||||||
(m) =>
|
(m) =>
|
||||||
@ -358,6 +360,7 @@
|
|||||||
$parcours.validated = $parcours.pb.mistakes <= $parcours.max_mistakes;
|
$parcours.validated = $parcours.pb.mistakes <= $parcours.max_mistakes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return
|
||||||
case "challenge_change":
|
case "challenge_change":
|
||||||
if ($parcours != null && $member != null && !!$parcours.challenges[data.member]) {
|
if ($parcours != null && $member != null && !!$parcours.challenges[data.member]) {
|
||||||
$parcours.challenges[data.member].challenges = $parcours.challenges[
|
$parcours.challenges[data.member].challenges = $parcours.challenges[
|
||||||
@ -447,6 +450,7 @@
|
|||||||
|
|
||||||
$: console.log("edit", $page.url.searchParams.get("a"));
|
$: console.log("edit", $page.url.searchParams.get("a"));
|
||||||
onDestroy(() => {
|
onDestroy(() => {
|
||||||
|
|
||||||
ws.close(1000);
|
ws.close(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
let name = "";
|
let name = "";
|
||||||
let pseudo = "";
|
let pseudo = "";
|
||||||
const { isAuth } = getContext("auth");
|
const { isAuth } = getContext("auth");
|
||||||
|
let loading = false;
|
||||||
|
const { error } = getContext("notif");
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@ -20,15 +22,27 @@
|
|||||||
class="primary-btn"
|
class="primary-btn"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
console.log('(NAME)', name)
|
console.log('(NAME)', name)
|
||||||
|
loading = true
|
||||||
createRoom({ name }, !$isAuth ? pseudo : null).then((r) => {
|
createRoom({ name }, !$isAuth ? pseudo : null).then((r) => {
|
||||||
|
|
||||||
if(!$isAuth){
|
if(!$isAuth){
|
||||||
sessionStorage.setItem('reconnect', r.member)
|
sessionStorage.setItem('reconnect', r.member)
|
||||||
}
|
}
|
||||||
goto(`/room/${r.room}`);
|
goto(`/room/${r.room}`);
|
||||||
});
|
loading= false
|
||||||
|
}).catch((e) => {
|
||||||
|
error("Erreur", "Une erreur est survenue lors de la création de la salle")
|
||||||
|
loading= false
|
||||||
|
console.log(e);
|
||||||
|
});
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Valider
|
{#if loading}
|
||||||
|
<span class="spinner"></span>
|
||||||
|
{:else}
|
||||||
|
Créer
|
||||||
|
{/if}
|
||||||
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -51,4 +65,10 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.spinner {
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
border-width: 2px !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
|
|
||||||
let room = "";
|
let room = "";
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
$: {
|
$: {
|
||||||
!$initialLoading && !!$isAuth && goto('/dashboard');
|
!$initialLoading && !!$isAuth && goto('/dashboard');
|
||||||
}
|
}
|
||||||
|
let loading = false
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="parent">
|
<div class="parent">
|
||||||
@ -37,13 +38,19 @@
|
|||||||
<button
|
<button
|
||||||
class="primary-btn"
|
class="primary-btn"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
login(username, password).catch((r) => {
|
loading = true;
|
||||||
|
login(username, password).then(()=>{loading=false}).catch((r) => {
|
||||||
errors = { ...errors, ...r.data.detail };
|
errors = { ...errors, ...r.data.detail };
|
||||||
|
loading = false;
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
|
|
||||||
>
|
>
|
||||||
Se connecter
|
{#if loading}
|
||||||
|
<span class="spinner" />
|
||||||
|
{:else}
|
||||||
|
Se connecter
|
||||||
|
{/if}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -65,4 +72,9 @@
|
|||||||
gap: 20px;
|
gap: 20px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.spinner{
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
border-width: 2px!important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
const myForm = form(username, password, confirm);
|
const myForm = form(username, password, confirm);
|
||||||
|
|
||||||
$: !$initialLoading && !!$isAuth && goto('/dashboard');
|
$: !$initialLoading && !!$isAuth && goto('/dashboard');
|
||||||
|
let loading = false
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="parent">
|
<div class="parent">
|
||||||
@ -62,7 +63,9 @@
|
|||||||
<button
|
<button
|
||||||
class="primary-btn"
|
class="primary-btn"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
register($username.value, $password.value, $confirm.value).catch((r) => {
|
loading = true
|
||||||
|
register($username.value, $password.value, $confirm.value).then(()=>{loading=false}).catch((r) => {
|
||||||
|
loading = false
|
||||||
console.log('ERREUR', r);
|
console.log('ERREUR', r);
|
||||||
|
|
||||||
errors = { ...errors, ...r.data.detail };
|
errors = { ...errors, ...r.data.detail };
|
||||||
@ -70,7 +73,12 @@
|
|||||||
}}
|
}}
|
||||||
disabled={!$myForm.valid}
|
disabled={!$myForm.valid}
|
||||||
>
|
>
|
||||||
S'inscrire
|
<!-- loading et span.spinner else text-->
|
||||||
|
{#if loading}
|
||||||
|
<span class="spinner"></span>
|
||||||
|
{:else}
|
||||||
|
S'inscrire
|
||||||
|
{/if}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -92,4 +100,9 @@
|
|||||||
gap: 20px;
|
gap: 20px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.spinner{
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
border-width: 2px!important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -9,7 +9,6 @@ export const connect = (url,) => {
|
|||||||
const ws = new ReconnectingWebSocket(url);
|
const ws = new ReconnectingWebSocket(url);
|
||||||
|
|
||||||
ws.onmessage = (m) => {
|
ws.onmessage = (m) => {
|
||||||
console.log('MESAGE', m)
|
|
||||||
|
|
||||||
messages.update((o) => [JSON.parse(m.data), ...o]);
|
messages.update((o) => [JSON.parse(m.data), ...o]);
|
||||||
Object.values(get(handlers)).map(h => {
|
Object.values(get(handlers)).map(h => {
|
||||||
|
Loading…
Reference in New Issue
Block a user