fixed ui layout and integrated starting new chat session
This commit is contained in:
@@ -116,6 +116,7 @@ h1
|
|||||||
justify-content: space-around
|
justify-content: space-around
|
||||||
padding: 10px
|
padding: 10px
|
||||||
color: $c-default-icon
|
color: $c-default-icon
|
||||||
|
background-color: white
|
||||||
|
|
||||||
.navbar-item
|
.navbar-item
|
||||||
text-decoration: none
|
text-decoration: none
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import Japanese from '../assets/img/lang/ja.svg'
|
|||||||
// db.user: Current logged-in user
|
// db.user: Current logged-in user
|
||||||
const db = localStorage
|
const db = localStorage
|
||||||
|
|
||||||
|
const backendUrl = 'https://localhost:8000'
|
||||||
|
|
||||||
export interface Lang {
|
export interface Lang {
|
||||||
name: string
|
name: string
|
||||||
code: string
|
code: string
|
||||||
@@ -26,6 +28,8 @@ export function signup(username: string, password: string, language: string)
|
|||||||
|
|
||||||
users[username] = {password, language}
|
users[username] = {password, language}
|
||||||
db.users = JSON.stringify(users)
|
db.users = JSON.stringify(users)
|
||||||
|
|
||||||
|
db.user = username
|
||||||
}
|
}
|
||||||
|
|
||||||
export function login(username: string, password: string)
|
export function login(username: string, password: string)
|
||||||
@@ -46,3 +50,70 @@ export function isLoggedIn()
|
|||||||
{
|
{
|
||||||
return !!db.user
|
return !!db.user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getLanguage(username: string)
|
||||||
|
{
|
||||||
|
const users = JSON.parse(db.users)
|
||||||
|
return users[username].language
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getUsername()
|
||||||
|
{
|
||||||
|
return db.user
|
||||||
|
}
|
||||||
|
|
||||||
|
async function post(endpoint: string, body: any) {
|
||||||
|
const response = await fetch(`${backendUrl}/${endpoint}`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify(body),
|
||||||
|
});
|
||||||
|
|
||||||
|
return response;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CharacterChatCreationRequest
|
||||||
|
{
|
||||||
|
character: string;
|
||||||
|
user_name: string;
|
||||||
|
language: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CharacterChatCreationResponse
|
||||||
|
{
|
||||||
|
// this shoudl be of type UUID
|
||||||
|
chat_id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function startFictionalChat(character: string): Promise<CharacterChatCreationResponse> {
|
||||||
|
const currUser = getUsername();
|
||||||
|
const language = getLanguage(currUser);
|
||||||
|
|
||||||
|
const request: CharacterChatCreationRequest = {
|
||||||
|
character: character,
|
||||||
|
user_name: currUser,
|
||||||
|
language: language
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log('Sending request:', request);
|
||||||
|
|
||||||
|
const response = await fetch(`${backendUrl}/character-chat`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify(request),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
const errorData = await response.json();
|
||||||
|
throw new Error(`HTTP error! status: ${response.status}, message: ${errorData.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return await response.json();
|
||||||
|
}
|
||||||
|
|
||||||
|
// export interface
|
||||||
@@ -6,7 +6,7 @@ import { useState } from 'react';
|
|||||||
export default function Character() {
|
export default function Character() {
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { name, image } = location.state;
|
const { name, image , sessionId } = location.state;
|
||||||
|
|
||||||
const [messages, setMessages] = useState([
|
const [messages, setMessages] = useState([
|
||||||
{ text: 'Hello!', sender: 'me' },
|
{ text: 'Hello!', sender: 'me' },
|
||||||
@@ -15,7 +15,8 @@ export default function Character() {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
function handleRecord() {
|
function handleRecord() {
|
||||||
// handle the recording
|
console.log("Recording...");
|
||||||
|
console.log(sessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -3,35 +3,35 @@ import Ash from "../assets/img/ash.png"
|
|||||||
import C3PO from "../assets/img/c3po.png"
|
import C3PO from "../assets/img/c3po.png"
|
||||||
import { useNavigate } from "react-router-dom"
|
import { useNavigate } from "react-router-dom"
|
||||||
import CharacterBadge from "../components/CharacterBadge"
|
import CharacterBadge from "../components/CharacterBadge"
|
||||||
|
import { startFictionalChat } from "../logic/sdk"
|
||||||
|
|
||||||
export default function CharacterSelection() {
|
export default function CharacterSelection() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
const characters = [
|
const characters = [
|
||||||
{ name: 'Ash', image: Ash },
|
{ name: 'Ash', image: Ash, alias: 'ash_pokemon'},
|
||||||
{ name: 'C3PO', image: C3PO },
|
{ name: 'C3PO', image: C3PO, alias: 'c3po_starwars'},
|
||||||
// Add more characters here
|
// Add more characters here
|
||||||
];
|
];
|
||||||
|
|
||||||
const startSession = () => {
|
const handleCharacterClick = (characterName: string, characterImage: string, alias: string) => {
|
||||||
// Start a session with the selected character
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleCharacterClick = (characterName: string, characterImage: string) => {
|
startFictionalChat(alias).then((sessionId) => {
|
||||||
navigate('/character', { state: { name: characterName, image: characterImage } });
|
navigate('/character', { state: { name: characterName, image: characterImage, sessionId: sessionId } });
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div >
|
<div className="flex flex-col items-center justify-center">
|
||||||
<div className="v-layout p-10">
|
<div className="v-layout p-10">
|
||||||
<h1 className="text-center">Talk With...</h1>
|
<h1 className="text-center">Talk With...</h1>
|
||||||
<div className="grid grid-cols-2 gap-3">
|
<div className="flex flex-wrap justify-center gap-3">
|
||||||
{characters.map(character => (
|
{characters.map(character => (
|
||||||
<CharacterBadge
|
<CharacterBadge
|
||||||
key={character.name}
|
key={character.name}
|
||||||
name={character.name}
|
name={character.name}
|
||||||
image={character.image}
|
image={character.image}
|
||||||
onClick={() => handleCharacterClick(character.name, character.image)}
|
onClick={() => handleCharacterClick(character.name, character.image, character.alias)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user