changes to allowed audio formats in new recording window

This commit is contained in:
Nuwan 2023-10-03 01:16:09 +05:30
parent 5618b08e79
commit 25586e06fc
3 changed files with 163 additions and 1 deletions

View File

@ -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 (
<div>
<Card>
<FalconCardHeader title={t('new.page_title', { ns: 'sessions' })} titleClass="font-weight-bold" />
<CardBody className="pt-0">
<Row>
<Col>
<Form onSubmit={handleSubmit}>
<FormGroup className="mb-3">
<Label>
{t('new.privacy', { ns: 'sessions' })}{' '}
<JKTooltip title={t('new.privacy_help', { ns: 'sessions' })} />
</Label>
<Input type="select" aria-label="Session Privacy" name="privacy" value={privacy} onChange={(e) => setPrivacy(e.target.value)} data-testid="session-privacy">
<option value="1">{t('new.privacy_opt_public', { ns: 'sessions' })}</option>
<option value="2">{t('new.privacy_opt_private_invite', { ns: 'sessions' })}</option>
<option value="3">{t('new.privacy_opt_private_approve', { ns: 'sessions' })}</option>
</Input>
</FormGroup>
<FormGroup className="mb-3">
<Label>
{t('new.invitations', { ns: 'sessions' })}{' '}
<JKTooltip title={t('new.invitations_help', { ns: 'sessions' })} />
</Label>
<JKFriendsAutoComplete friends={friends} onSelect={handleOnSelect} />
{ invitees.length > 0 &&
<JKSessionInviteesChips invitees={invitees} removeInvitee={removeInvitee} />
}
</FormGroup>
<FormGroup className="mb-3">
<Label>
{t('new.description', { ns: 'sessions' })}{' '}
<JKTooltip title={t('new.description_help', { ns: 'sessions' })} />
</Label>
<Input
value={description}
onChange={(e) => setDescription(e.target.value)}
name="description"
type="textarea"
data-testid="session-description"
placeholder={t('new.description_placeholder', { ns: 'sessions' })}
/>
</FormGroup>
<FormGroup className="mb-3">
<Button color="primary" data-testid="btn-create-session">{t('new.create_session', { ns: 'sessions' })}</Button>
</FormGroup>
</Form>
</Col>
<Col />
</Row>
</CardBody>
</Card>
</div>
);
};
export default JKNewMusicSession;

View File

@ -36,7 +36,7 @@
CHAT: "1"
};
context.JK.AUDIO_FORMATS = ['.mp3', '.wav', '.ogg', '.wma'];
context.JK.AUDIO_FORMATS = ['.mp3', '.vob', '.wav', '.flac', '.au'];
context.JK.VIDEO_FORMATS = ['.mp4', '.mov', '.vob', '.wmv'];
context.JK.RECORD_TYPE_AUDIO = 'audio-only'
context.JK.RECORD_TYPE_BOTH = 'audio-video'

View File

@ -102,6 +102,7 @@
var groupedTracks = groupTracksToClient(recording);
//await jamClient.StartRecording(recording["id"], groupedTracks, recordVideo, recordChat, recordFramerate);
//TODO: need a modified version of jamClient.StartRecording
alert('StartMediaRecording')
await jamClient.StartMediaRecording(recording["id"], groupedTracks, recordSettings)
})
.catch(function(jqXHR) {