Skip to content

Commit d149714

Browse files
authored
Merge pull request #14 from DISIC/dev
Dev
2 parents 0b411ac + b93624c commit d149714

File tree

4 files changed

+89
-53
lines changed

4 files changed

+89
-53
lines changed

src/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,8 @@ function App() {
302302
sendEmail={sendEmail}
303303
joinConference={joinConference}
304304
authenticated={authenticated}
305+
conferenceNumber={conferenceNumber}
306+
participantNumber={participantsNumber}
305307
/>
306308
}
307309
/>

src/pages/home/AuthModal.tsx

Lines changed: 8 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ import { Input } from '@codegouvfr/react-dsfr/Input';
44
import { Checkbox } from '@codegouvfr/react-dsfr/Checkbox';
55
import { Badge } from '@codegouvfr/react-dsfr/Badge';
66
import CalendarModalComponent from './CalendarModal';
7-
import api from '../../axios/axios';
87

98
import { useState, useEffect } from 'react';
10-
import { redirect, useNavigate } from 'react-router-dom';
119

1210
import styles from './AuthModal.module.css';
1311

@@ -28,6 +26,7 @@ interface AuthModalProps {
2826
authenticated: boolean | null;
2927
setOpen: (e: boolean) => void;
3028
buttons: boolean;
29+
openModal: boolean;
3130
}
3231

3332
function roomNameConstraintOk(roomName: string) {
@@ -54,51 +53,9 @@ export default function AuthModal(props: AuthModalProps) {
5453
props.setOpen(true);
5554
};
5655

57-
const navigate = useNavigate();
58-
59-
function handle(e: any) {
60-
e.preventDefault();
61-
if (!props.roomName) {
62-
const room = generateRoomName();
63-
props.setRoomName(room);
64-
if (roomNameConstraintOk(room)) {
65-
api.get('/authentication/whereami').then(res => {
66-
if (res.data.toLowerCase() == 'internet') {
67-
if (!props.authenticated) {
68-
modal.open();
69-
}
70-
if (props.authenticated) {
71-
props.joinConference(room);
72-
}
73-
}
74-
if (res.data.toLowerCase() !== 'internet') {
75-
props.joinConference(room);
76-
}
77-
});
78-
}
79-
} else if (roomNameConstraintOk(props.roomName)) {
80-
api
81-
.get('/roomExists/' + props.roomName)
82-
.then(res => {
83-
return navigate('/' + props.roomName);
84-
})
85-
.catch(err => {
86-
api.get('/authentication/whereami').then(res => {
87-
if (res.data.toLowerCase() == 'internet') {
88-
if (!props.authenticated) {
89-
return modal.open();
90-
}
91-
if (props.authenticated) {
92-
return props.joinConference(props.roomName);
93-
}
94-
}
95-
if (res.data.toLowerCase() !== 'internet') {
96-
return props.joinConference(props.roomName);
97-
}
98-
});
99-
});
100-
}
101-
}
56+
useEffect(() => {
57+
props.openModal ? modal.open() : null;
58+
}, [props.openModal]);
10259

10360
useEffect(() => {
10461
props.setIsWhitelisted(null);
@@ -206,6 +163,7 @@ export default function AuthModal(props: AuthModalProps) {
206163
<Button
207164
className={styles.modalButtons}
208165
onClick={() => mailSender(props.roomName)}
166+
type="button"
209167
>
210168
<span className={styles.hidden} id="input-desc-error">
211169
text
@@ -229,10 +187,10 @@ export default function AuthModal(props: AuthModalProps) {
229187
</modal.Component>
230188
<div className={styles.buttons}>
231189
<Button
232-
onClick={handle}
190+
// onClick={handle}
191+
type="submit"
233192
className={styles.button}
234193
disabled={!roomNameConstraintOk(props.roomName)}
235-
type="submit"
236194
>
237195
Rejoindre ou créer
238196
</Button>
@@ -244,6 +202,7 @@ export default function AuthModal(props: AuthModalProps) {
244202
className={styles.button}
245203
nativeButtonProps={{ id: 'copyButton' }}
246204
onClick={copyLink}
205+
type="button"
247206
>
248207
Copier le lien
249208
</Button>

src/pages/home/Home.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ interface AuthModalProps {
1313
setRoomName: (e: any) => void;
1414
joinConference: (e: any) => void;
1515
authenticated: boolean | null;
16+
conferenceNumber: number;
17+
participantNumber: number;
1618
}
1719

1820
function Home(props: AuthModalProps) {

src/pages/home/HomeForm.tsx

Lines changed: 77 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { Alert } from '@codegouvfr/react-dsfr/Alert';
99
import MuiAlert from '@mui/material/Alert';
1010
import Snackbar, { SnackbarCloseReason } from '@mui/material/Snackbar';
1111
import ShuffleIcon from '@mui/icons-material/Shuffle';
12+
import api from '../../axios/axios';
13+
import { redirect, useNavigate } from 'react-router-dom';
1214
import { fr } from '@codegouvfr/react-dsfr';
1315

1416
interface AuthModalProps {
@@ -23,12 +25,68 @@ interface AuthModalProps {
2325
authenticated: boolean | null;
2426
setButtons: (a: boolean) => void;
2527
buttons: boolean;
28+
conferenceNumber: number;
29+
participantNumber: number;
2630
}
2731

2832
function HomeForm(props: AuthModalProps) {
2933
const [message, setMessage] = useState<JSX.Element | string>(<></>);
3034
const [messageType, setMessageType] = useState<string>('');
3135
const [open, setOpen] = useState(false);
36+
const [openModal, setOpenModal] = useState(false);
37+
38+
const navigate = useNavigate();
39+
40+
function handle() {
41+
function roomNameConstraintOk(roomName: string) {
42+
const regex = new RegExp(
43+
'^(?=(?:[a-zA-Z0-9]*[a-zA-Z]))(?=(?:[a-zA-Z0-9]*[0-9]){3})[a-zA-Z0-9]{10,}$'
44+
);
45+
return regex.test(roomName);
46+
}
47+
if (!props.roomName) {
48+
const room = generateRoomName();
49+
props.setRoomName(room);
50+
if (roomNameConstraintOk(room)) {
51+
api.get('/authentication/whereami').then(res => {
52+
if (res.data.toLowerCase() == 'internet') {
53+
if (!props.authenticated) {
54+
// modal.open();
55+
setOpenModal(true);
56+
}
57+
if (props.authenticated) {
58+
props.joinConference(room);
59+
}
60+
}
61+
if (res.data.toLowerCase() !== 'internet') {
62+
props.joinConference(room);
63+
}
64+
});
65+
}
66+
} else if (roomNameConstraintOk(props.roomName)) {
67+
api
68+
.get('/roomExists/' + props.roomName)
69+
.then(res => {
70+
return navigate('/' + props.roomName);
71+
})
72+
.catch(err => {
73+
api.get('/authentication/whereami').then(res => {
74+
if (res.data.toLowerCase() == 'internet') {
75+
if (!props.authenticated) {
76+
setOpenModal(true);
77+
}
78+
if (props.authenticated) {
79+
return props.joinConference(props.roomName);
80+
}
81+
}
82+
if (res.data.toLowerCase() !== 'internet') {
83+
return props.joinConference(props.roomName);
84+
}
85+
});
86+
});
87+
}
88+
setOpenModal(false);
89+
}
3290

3391
const change = (e: string) => {
3492
verifyAndSetVAlue(e);
@@ -171,7 +229,13 @@ function HomeForm(props: AuthModalProps) {
171229
<div className={styles.HomeForm}>
172230
<h3>La WebConférence de l'État pour tous les agents publics</h3>
173231
<p>Audio, vidéo, chat, partage d'écran et de documents</p>
174-
<div className={styles.form}>
232+
<form
233+
className={styles.form}
234+
onSubmit={e => {
235+
e.preventDefault();
236+
handle();
237+
}}
238+
>
175239
<div className={styles.confButtons}>
176240
<Input
177241
style={{ width: '100%' }}
@@ -188,30 +252,39 @@ function HomeForm(props: AuthModalProps) {
188252
onChange: (e: any) => change(e.target.value),
189253
}}
190254
/>
255+
191256
<Button
192257
className={styles.plusButton}
193258
onClick={e => {
194259
e.preventDefault();
195260
verifyAndSetVAlue(generateRoomName());
196261
}}
262+
type="button"
197263
>
198264
<ShuffleIcon />
199265
</Button>
200266
</div>
201267
<div className={styles.confButtons}>
202-
<AuthModal {...props} setOpen={setOpen} buttons={props.buttons} />
268+
<AuthModal
269+
{...props}
270+
setOpen={setOpen}
271+
buttons={props.buttons}
272+
openModal={openModal}
273+
/>
203274
<Button
204275
className={styles.plusButton}
205276
onClick={() => props.setButtons(!props.buttons)}
206277
nativeButtonProps={{ id: 'plusButton' }}
278+
type="button"
207279
>
208280
{props.buttons ? down : up}
209281
</Button>
210282
</div>
211-
</div>
283+
</form>
212284
<p>{message}</p>
213285
<Badge severity="info">
214-
Actuellement, il y a 0 conférences et 0 participants.
286+
Actuellement, il y a {props.conferenceNumber} conférences et{' '}
287+
{props.participantNumber} participants.
215288
</Badge>
216289
<hr />
217290
<Alert

0 commit comments

Comments
 (0)