diff --git a/jam-ui/src/components/page/JKNewMusicSession.js b/jam-ui/src/components/page/JKNewMusicSession.js new file mode 100644 index 000000000..7b611d12e --- /dev/null +++ b/jam-ui/src/components/page/JKNewMusicSession.js @@ -0,0 +1,161 @@ +import React, { useRef, useState, useEffect } from 'react'; +import { Form, FormGroup, Input, Label, Card, CardBody, Button, Row, Col } from 'reactstrap'; +import FalconCardHeader from '../common/FalconCardHeader'; +import JKTooltip from '../common/JKTooltip'; +import { useTranslation } from 'react-i18next'; +import { useAuth } from '../../context/UserAuth'; +import JKFriendsAutoComplete from '../people/JKFriendsAutoComplete'; +import JKSessionInviteesChips from '../people/JKSessionInviteesChips'; +import { getFriends } from '../../helpers/rest'; + +const JKNewMusicSession = () => { + const { currentUser } = useAuth(); + const { t } = useTranslation(); + const [friends, setFriends] = useState([]); + const [isFriendsFetched, setIsFriendsFetched] = useState(false) + const [description, setDescription] = useState("") + const [invitees, setInvitees] = useState([]); + const [privacy, setPrivacy] = useState("1"); + + useEffect(() => { + fetchFriends(); + }, []); + + useEffect(() => { + if(isFriendsFetched){ + populateFormDataFromLocalStorage() + } + }, [isFriendsFetched]) + + const fetchFriends = () => { + getFriends(currentUser.id) + .then(resp => { + if (resp.ok) { + return resp.json(); + } + }) + .then(data => { + console.log('friends = ', data) + setFriends(data); + setIsFriendsFetched(true); + }); + } + + const populateFormDataFromLocalStorage = () => { + try { + const formData = localStorage.getItem('formData'); + if(formData){ + const formDataItems = JSON.parse(formData); + setDescription(formDataItems['description']); + setPrivacy(formDataItems['privacy']); + const inviteeIds = formDataItems['inviteeIds']; + const invitees = friends.filter(f => inviteeIds.includes(f.id)); + updateSessionInvitations(invitees); + } + } catch (error) { + console.error('localStorage is not available', error) + } + } + + const handleSubmit = event => { + event.preventDefault(); + const formData = new FormData(event.target); + const payload = { + privacy: formData.get('privacy'), + description: formData.get('description'), + inviteeIds: invitees.map(i => i.id) + }; + console.log(payload); //TODO: handle payload + + try { + //store this payload in localstorage. + localStorage.setItem('formData', JSON.stringify(payload)) + } catch (error) { + console.error("localStorage is not available", error); + } + //if JamKazam application is not upload on the local computer + //Show a modal dialog for the user + //TODO: need a new backend api to start the session with the formdata + + }; + + const handleOnSelect = submittedItems => { + updateSessionInvitations(submittedItems) + }; + + const updateSessionInvitations = (submittedInvitees) => { + const updatedInvitees = Array.from(new Set([...invitees, ...submittedInvitees])); + setInvitees(updatedInvitees); + + const friendIds = submittedInvitees.map(si => si.id) + const updatedFriends = friends.filter(f => !friendIds.includes(f.id)); + setFriends(updatedFriends); + } + + const removeInvitee = invitee => { + const updatedInvitees = invitees.filter(i => i.id !== invitee.id); + setInvitees(updatedInvitees); + const updatedFriends = [...friends, invitee]; + setFriends(updatedFriends); + }; + + return ( +