nicolas-arnaud
2 years ago
6 changed files with 156 additions and 228 deletions
@ -1,174 +0,0 @@ |
|||
<script lang="ts" context="module"> |
|||
import { API_URL, store } from "../Auth"; |
|||
import { APPSTATE} from "../App.svelte"; |
|||
import { createEventDispatcher } from "svelte"; |
|||
import { formatChannelNames, type ChannelsType } from "./Channels.svelte"; |
|||
import { show_popup } from "./Alert/content"; |
|||
import type { CreateChannelDto } from "./dtos/create-channel.dto"; |
|||
</script> |
|||
|
|||
<script lang="ts"> |
|||
export let username: string = ""; |
|||
export let setAppState: (newState: APPSTATE | string) => void; |
|||
|
|||
const dispatch = createEventDispatcher(); |
|||
|
|||
async function getDMs(username: string): Promise<Response | null> { |
|||
const res = await fetch(API_URL + "/channels/dms/" + username, { |
|||
credentials: "include", |
|||
mode: "cors", |
|||
}) |
|||
if (res.ok) |
|||
return res; |
|||
else |
|||
return null; |
|||
} |
|||
|
|||
async function openDirectChat() { |
|||
const DMUsername = username; |
|||
let DMChannel: Array<ChannelsType> = []; |
|||
const res = await getDMs(DMUsername) |
|||
if (res && res.ok) { |
|||
DMChannel = await res.json(); |
|||
if (DMChannel.length != 0) |
|||
await formatChannelNames(DMChannel) |
|||
setAppState(APPSTATE.CHANNELS + "#" + DMChannel[0].name) |
|||
} else { |
|||
console.log("Creating DMChannel: " + $store.username + "&" + DMUsername) |
|||
const body: CreateChannelDto = { |
|||
name: "none", |
|||
owner: $store.ftId, |
|||
password: "", |
|||
isPrivate: true, |
|||
isDM: true, |
|||
otherDMedUsername: DMUsername |
|||
} |
|||
fetch(API_URL + "/channels", { |
|||
credentials: "include", |
|||
method: "POST", |
|||
mode: "cors", |
|||
headers: { |
|||
"Content-Type": "application/json", |
|||
}, |
|||
body: JSON.stringify(body), |
|||
}).then(async () => { |
|||
const response = await getDMs(DMUsername) |
|||
if (response && response.ok) { |
|||
DMChannel = await response.json(); |
|||
if (DMChannel.length != 0) { |
|||
await formatChannelNames(DMChannel) |
|||
setAppState(APPSTATE.CHANNELS + "#" + DMChannel[0].name) |
|||
} else { |
|||
show_popup("Error: Couldn't create DM.", false) |
|||
} |
|||
} else { |
|||
show_popup("Error: Couldn't create DM.", false) |
|||
} |
|||
}).catch(() => { |
|||
show_popup("Error: Couldn't create DM.", false) |
|||
}) |
|||
} |
|||
} |
|||
|
|||
const blockUser = async (username: string) => { |
|||
let response = await fetch(API_URL + "/users/" + username + "/byname", { |
|||
credentials: "include", |
|||
mode: "cors", |
|||
}); |
|||
if (response.ok) { |
|||
const target = await response.json(); |
|||
response = await fetch(API_URL + "/users/block/" + target.ftId, { |
|||
method: "GET", |
|||
credentials: "include", |
|||
mode: "cors" |
|||
}); |
|||
dispatch("updateHiddens", username) |
|||
} |
|||
if (response.ok) await show_popup("User blocked", false); |
|||
else { |
|||
const error = await response.json(); |
|||
await show_popup(error.message, false); |
|||
} |
|||
dispatch("close") |
|||
}; |
|||
|
|||
//--------------------------------------------------------------------------------/ |
|||
|
|||
const unblockUser = async (username: string) => { |
|||
let response = await fetch(API_URL + "/users/" + username + "/byname", { |
|||
credentials: "include", |
|||
mode: "cors", |
|||
}); |
|||
if (response.ok) { |
|||
const target = await response.json(); |
|||
response = await fetch(API_URL + "/users/block/" + target.ftId, { |
|||
credentials: "include", |
|||
method: "DELETE", |
|||
mode: "cors" |
|||
}); |
|||
dispatch("updateHiddens", username) |
|||
} |
|||
if (response.ok) await show_popup("User unblocked", false); |
|||
else { |
|||
const error = await response.json(); |
|||
await show_popup(error.message, false); |
|||
} |
|||
dispatch("close") |
|||
}; |
|||
</script> |
|||
|
|||
<div |
|||
class="user-menu" |
|||
on:click|stopPropagation |
|||
on:keydown|stopPropagation |
|||
> |
|||
<ul> |
|||
<li> |
|||
<button on:click={openDirectChat}> Send Message </button> |
|||
</li> |
|||
<li> |
|||
<button on:click={() => dispatch("view-profile", username)}> |
|||
View Profile |
|||
</button> |
|||
</li> |
|||
<li> |
|||
<button on:click={() => dispatch("add-friend", username)}> |
|||
Add Friend |
|||
</button> |
|||
</li> |
|||
<li> |
|||
<button on:click={() => dispatch("invite-to-game", username)}> |
|||
Invite to Game |
|||
</button> |
|||
</li> |
|||
<li> |
|||
<button on:click={() => blockUser(username)}> |
|||
Block User |
|||
</button> |
|||
</li> |
|||
<li><button on:click={() => dispatch("close")}> Close </button></li> |
|||
</ul> |
|||
</div> |
|||
<style> |
|||
.user-menu { |
|||
position: absolute; |
|||
background-color: #ffffff; |
|||
border: 1px solid #dedede; |
|||
border-radius: 5px; |
|||
padding: 1rem; |
|||
max-height: 70%; |
|||
overflow-y: auto; |
|||
z-index: 1; |
|||
} |
|||
|
|||
ul { |
|||
list-style: none; |
|||
padding: 0; |
|||
margin: 0; |
|||
} |
|||
|
|||
li { |
|||
margin-bottom: 0.5rem; |
|||
} |
|||
|
|||
</style> |
Loading…
Reference in new issue