diff --git a/src/components/Estimates.svelte b/src/components/Estimates.svelte
index 83d7c4a..834a792 100644
--- a/src/components/Estimates.svelte
+++ b/src/components/Estimates.svelte
@@ -1,28 +1,31 @@
Simply start a room and share the URL to everyone else who needs to join the estimation session.
+
+
+
diff --git a/src/routes/estimation/[roomId]/+page.svelte b/src/routes/estimation/[roomId]/+page.svelte
index f493fba..a5d1912 100644
--- a/src/routes/estimation/[roomId]/+page.svelte
+++ b/src/routes/estimation/[roomId]/+page.svelte
@@ -56,11 +56,12 @@
let showModal = true;
const userId = generateId();
let users: Array = [];
- let estimateGroups: { [key: number]: string[] } = {};
+ let estimateGroups: { [key: number | string]: string[] } = {};
let showRestartButton = false;
let showEstimates = false;
let disableEstimates: boolean = false;
let audioElement;
+ let selectedCardSet;
function closeModal() {
showModal = false;
@@ -104,6 +105,8 @@
if (message.type === 'user-joined') {
sendMessage(socket, { type: 'get-user-estimates' });
} else if (message.type === 'user-estimates') {
+ selectedCardSet = message.selectedCardSet.values;
+
message.users.forEach((user) => {
let updatedUser = users.find((u) => u.userId === user.userId);
if (updatedUser === undefined) {
@@ -187,7 +190,7 @@
>Share Room Link
-
+
{#if Object.keys(estimateGroups).length > 0}
diff --git a/src/server/classes/Room.ts b/src/server/classes/Room.ts
index af6ddd4..ae349a1 100644
--- a/src/server/classes/Room.ts
+++ b/src/server/classes/Room.ts
@@ -1,12 +1,43 @@
import { WebSocket } from 'ws';
import { User } from './User';
+class CardSet {
+ name: string;
+ values: Array;
+ example: string;
+
+ constructor(name: string, values: Array, example: string) {
+ this.name = name;
+ this.values = values;
+ this.example = example;
+ }
+}
+
+export const cardSets: Array = [
+ { name: 'Fibonacci', values: [1, 2, 3, 5, 8, 13, 21, '?'], example: '(1, 2, 3, 5)' },
+ {
+ name: 'T-Shirt Sizing',
+ values: ['XS', 'S', 'M', 'L', 'XL', 'XXL', '?'],
+ example: '(XS, S, M, L)'
+ },
+ { name: 'Powers of 2', values: [1, 2, 4, 8, 16, 32, '?'], example: '(1, 2, 4, 8)' },
+ { name: 'Sequential', values: [1, 2, 3, 4, 5, 6, 7, 8, 9, '?'], example: '(1, 2, 3, 4)' }
+];
+
export class Room {
id: string;
+ cardSet: CardSet;
users: Map;
- constructor(id: string) {
+ constructor(id: string, cardSetName: string) {
this.id = id;
+ const cardSet = cardSets.find((cardSet) => cardSet.name === cardSetName);
+ if (cardSet) {
+ this.cardSet = cardSet;
+ } else {
+ this.cardSet = cardSets[0];
+ }
+
this.users = new Map();
}
diff --git a/src/server/websocket.ts b/src/server/websocket.ts
index aff0a10..11b82b6 100644
--- a/src/server/websocket.ts
+++ b/src/server/websocket.ts
@@ -1,6 +1,6 @@
import express from 'express';
import { WebSocketServer, WebSocket } from 'ws';
-import { Room } from './classes/Room.js';
+import { Room, cardSets } from './classes/Room.js';
import { User } from './classes/User.js';
import { JoinRoomMessage } from './classes/messages/JoinRoomMessage.js';
import { ChangeEstimateMessage } from './classes/messages/ChangeEstimateMessage.js';
@@ -62,23 +62,31 @@ wss.on('connection', (ws: WebSocket, req) => {
ws.on('error', onSocketPostError);
+ function createRoom(roomId: string, cardSetName: string) {
+ room = new Room(roomId, cardSetName);
+ rooms.add(room);
+ }
+
ws.on('message', (message) => {
const data = JSON.parse(message.toString());
- if (data.type === 'join-room') {
+ if (data.type === 'create-room') {
+ const roomId = data.roomId;
+ const cardSetName = data.cardSetName;
+ createRoom(roomId, cardSetName);
+ } else if (data.type === 'join-room') {
const joinRoomMessage: JoinRoomMessage = data as JoinRoomMessage;
const { roomId, userId, name } = joinRoomMessage;
room = getRoomById(roomId);
// Create room if it doesn't already exist
if (!room) {
- room = new Room(roomId);
- rooms.add(room);
+ createRoom(roomId, data.cardSetName);
}
// Create the user in the room
const user = new User(userId, name);
- room.addUser(ws, user);
+ room!.addUser(ws, user);
broadcastToRoom(roomId, { type: 'user-joined', message: `${name} has joined the room` });
} else if (data.type === 'select-estimate') {
@@ -144,7 +152,7 @@ wss.on('connection', (ws: WebSocket, req) => {
} else if (data.type === 'get-user-estimates') {
if (room) {
const users = room.getUsers();
- broadcastToRoom(room.id, { type: 'user-estimates', users });
+ broadcastToRoom(room.id, { type: 'user-estimates', users, selectedCardSet: room.cardSet });
}
} else if (data.type === 'trigger-emoji') {
const { cardId, emoji } = data;