wip protected, already solved error http handling for createroom

This commit is contained in:
simplonco
2023-01-14 13:07:18 +01:00
parent 8e4ce8e9a8
commit 356e1caac3
7 changed files with 163 additions and 65 deletions

View File

@@ -3,4 +3,15 @@ export interface Room
name: string;
type: "public" | "protected" | "private" | "direct" | "user";
users?: string[];
client_name?: string;
protection?: boolean;
}
export interface FetchResponse
{
status: number;
code?: string;
display?: boolean;
message?: string;
room?: any;
}

View File

@@ -3,6 +3,7 @@
import { msgs, layout, allowed_chars } from './Store_chat';
import { change_room, create_room } from './Request_rooms';
import { onMount } from 'svelte';
import type { FetchResponse } from './Interface_chat';
import Button from './Element_button.svelte';
import Warning from './Element_warning.svelte';
@@ -22,10 +23,8 @@
let room_type: string;
let is_protected = false;
let room_password: string;
let response = {
status: 0,
message: "",
}
let response: FetchResponse;
let show_error = false;
async function handleSubmit(evt)
{
@@ -37,12 +36,14 @@
let room = {
name: room_name,
type: room_type,
protection: is_protected,
};
if (is_protected === true)
room.password = room_password;
// send the new room
response = await create_room(room);
show_error = response.display;
// go to room
if (response.status === 200)
await change_room(response.room);
@@ -70,7 +71,7 @@
<!-- panel_create -->
<div class="panel panel_create __border_top">
<form on:submit|preventDefault={handleSubmit}>
{#if response.status >= 300}
{#if show_error}
<Warning content={response.message}/>
{/if}
<!-- name: -->

View File

@@ -1,17 +1,16 @@
<script lang="ts">
import { layout, current_room_name, current_room_type } from './Store_chat';
import { change_room } from './Request_rooms';
import { change_room, send_password } from './Request_rooms';
import type { FetchResponse } from './Interface_chat';
import Button from './Element_button.svelte';
import Warning from './Element_warning.svelte';
export let back = "";
let room_password: string;
let response = {
status: 0,
message: "",
};
let response: FetchResponse;
let show_error = false;
async function handleSubmit(evt)
{
@@ -26,8 +25,13 @@
password: room_password,
};
// send password
response = await send_password(room);
show_error = response.display;
// go to room
response = await change_room(room);
if (response.status === 200)
await change_room(response.room);
}
</script>
@@ -59,7 +63,7 @@
</form>
<form on:submit|preventDefault={handleSubmit}>
{#if response.status >= 300}
{#if show_error}
<Warning content={response.message}/>
{/if}
<label for="chat_pswd"><p>enter password :</p></label>

View File

@@ -1,5 +1,6 @@
import { msgs, user, layout, socket, current_room_name, current_room_type } from './Store_chat';
import type { Room } from './Interface_chat';
import type { Room, FetchResponse } from './Interface_chat';
import { set_client_name_on_room, fill_fetch_response } from './Request_utils';
export async function get_room_messages()
{
@@ -24,23 +25,31 @@ export async function create_room(room: Room)
{
console.log("in create_room");
let response: FetchResponse = { status: 0 };
// send the new room
const response = await fetch('/api/v2/chat/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(room),
});
try {
const resp = await fetch('/api/v2/chat/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(room),
});
console.log("resp.status:");
console.log(resp.status);
response.status = resp.status;
if (!resp.ok)
throw new Error(resp.statusText);
// get response status and message
let response_status = response.status;
let data = await response.json();
let response_message = "";
// get response message
let data = await resp.json();
fill_fetch_response(response, data);
}
catch (error)
{
console.error('Error', error);
}
return {
status: response_status,
message: data.message,
room: data.room,
};
return response;
}
export async function join_room(room: Room)
@@ -57,21 +66,6 @@ export async function join_room(room: Room)
return data.room;
}
function set_client_name_on_room(room: Room)
{
console.log("in set_client_name_on_room, for room:", room);
if (room.type === 'direct')
{
console.log("in direct room");
room.client_name = room.users[0];
if (room.client_name === user.username)
room.client_name = room.users[1];
}
else
room.client_name = room.name;
return room;
}
export async function change_room(room: Room)
{
console.log("in change_room");
@@ -92,6 +86,37 @@ export async function change_room(room: Room)
layout.set("room");
}
export async function send_password(room: Room)
{
console.log("in create_room");
let response: FetchResponse = { status: 0 };
// send the new room
try {
const resp = await fetch('/api/v2/chat/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(room),
});
console.log("resp.status:");
console.log(resp.status);
response.status = resp.status;
if (!resp.ok)
throw new Error(resp.statusText);
// get response message
let data = await resp.json();
fill_fetch_response(response, data);
}
catch (error)
{
console.error('Error', error);
}
return response;
}
export async function invite_user(user_name: string)
{
console.log("in invite_user");

View File

@@ -0,0 +1,29 @@
import { user } from './Store_chat';
import type { Room, FetchResponse } from './Interface_chat';
export function set_client_name_on_room(room: Room)
{
console.log("in set_client_name_on_room, for room:", room);
if (room.type === 'direct')
{
console.log("in direct room");
room.client_name = room.users[0];
if (room.client_name === user.username)
room.client_name = room.users[1];
}
else
room.client_name = room.name;
return room;
}
export function fill_fetch_response(response: FetchResponse, data: any)
{
if (data.display)
response.display = data.display;
if (data.code)
response.code = data.code;
if (data.message)
response.message = data.message;
if (data.room)
response.room = data.room;
}