Skip to content

Commit e7f8134

Browse files
authored
Merge pull request #4495 from traPtitech/fix/user-list
ユーザーリストの画面共有をいい感じに
2 parents 17afeb3 + 5da6b8f commit e7f8134

File tree

2 files changed

+260
-192
lines changed

2 files changed

+260
-192
lines changed

src/components/Main/MainView/QallView/QallView.vue

Lines changed: 135 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ const toggleVideo = async () => {
7070
isCameraOn.value = false
7171
}
7272
} catch (err) {
73-
// eslint-disable-next-line no-console
7473
console.error('Failed to toggle video:', err)
7574
}
7675
}
@@ -93,7 +92,6 @@ const toggleScreen = async () => {
9392
isScreenSharing.value = false
9493
}
9594
} catch (err) {
96-
// eslint-disable-next-line no-console
9795
console.error('Failed to toggle screen sharing:', err)
9896
}
9997
}
@@ -191,120 +189,98 @@ const showShareScreenSettingDetail = ref(false)
191189
:class="$style.closeButton"
192190
@click="isSubView = true"
193191
/>
194-
<UserList />
195-
196-
<div :class="$style.TrackContainer">
197-
<div :class="$style.controlBar">
198-
<div :class="$style.smallButtonGroup">
199-
<div :class="$style.soundBoardButton">
200-
<CallControlButtonSmall
201-
icon="sound_detection_loud_sound"
202-
:on-click="handleSound"
192+
193+
<!-- 縦並び用のラッパ -->
194+
<div :class="$style.stackContainer">
195+
<UserList :class="$style.userList" />
196+
197+
<div :class="$style.controlBarContainer">
198+
<div :class="$style.controlBar">
199+
<div :class="$style.smallButtonGroup">
200+
<div :class="$style.soundBoardButton">
201+
<CallControlButtonSmall
202+
icon="sound_detection_loud_sound"
203+
:on-click="handleSound"
204+
/>
205+
<ClickOutside @click-outside="showSoundBoard = false">
206+
<SoundBoard v-if="showSoundBoard" />
207+
</ClickOutside>
208+
</div>
209+
<div ref="reactionButton">
210+
<CallControlButtonSmall
211+
icon="add_reaction"
212+
:on-click="handleReaction"
213+
/>
214+
</div>
215+
</div>
216+
<div :class="$style.verticalBar"></div>
217+
<div :class="$style.buttonWithDetail">
218+
<CallControlButton
219+
:icon="screenShareIcon"
220+
:is-on="isScreenSharing"
221+
:on-click="toggleScreen"
222+
:mdi="false"
223+
:inverted="isScreenSharing"
224+
/>
225+
<DetailButton @click="showShareScreenSettingDetail = true" />
226+
<ScreenShareDetailSetting
227+
:open="showShareScreenSettingDetail"
228+
@add="isScreenSharing = true"
229+
@close="showShareScreenSettingDetail = false"
203230
/>
204-
<ClickOutside @click-outside="showSoundBoard = false">
205-
<SoundBoard v-if="showSoundBoard" />
206-
</ClickOutside>
207231
</div>
208-
<div ref="reactionButton">
209-
<CallControlButtonSmall
210-
icon="add_reaction"
211-
:on-click="handleReaction"
232+
<div :class="$style.buttonWithDetail">
233+
<CallControlButton
234+
:icon="cameraIcon"
235+
:is-on="isCameraOn"
236+
:on-click="toggleVideo"
237+
:inverted="isCameraOn"
238+
/>
239+
<DetailButton
240+
:inverted="isCameraOn"
241+
@click="showCameraDetailSetting = true"
242+
/>
243+
<CameraDetailSetting
244+
:open="showCameraDetailSetting"
245+
:video-inputs="videoInputs"
246+
@save="handleBackgroundSave"
247+
@add="isCameraOn = true"
248+
@close="showCameraDetailSetting = false"
212249
/>
213250
</div>
214-
</div>
215-
<div :class="$style.verticalBar"></div>
216-
<div :class="$style.buttonWithDetail">
217251
<CallControlButton
218-
:icon="screenShareIcon"
219-
:is-on="isScreenSharing"
220-
:on-click="toggleScreen"
221-
:mdi="false"
222-
:inverted="isScreenSharing"
223-
/>
224-
<DetailButton
225-
@click="
226-
() => {
227-
showShareScreenSettingDetail = true
228-
}
229-
"
230-
/>
231-
<ScreenShareDetailSetting
232-
:open="showShareScreenSettingDetail"
233-
@add="
234-
() => {
235-
isScreenSharing = true
236-
}
237-
"
238-
@close="
239-
() => {
240-
showShareScreenSettingDetail = false
241-
}
242-
"
252+
:icon="micIcon"
253+
:is-on="isMicOn"
254+
:on-click="toggleAudio"
255+
:inverted="isMicOn"
243256
/>
244-
</div>
245-
<div :class="$style.buttonWithDetail">
246257
<CallControlButton
247-
:icon="cameraIcon"
248-
:is-on="isCameraOn"
249-
:on-click="toggleVideo"
250-
:inverted="isCameraOn"
251-
/>
252-
<DetailButton
253-
:inverted="isCameraOn"
254-
@click="
255-
() => {
256-
showCameraDetailSetting = true
257-
}
258-
"
259-
/>
260-
<CameraDetailSetting
261-
:open="showCameraDetailSetting"
262-
:video-inputs="videoInputs"
263-
@save="handleBackgroundSave"
264-
@add="
265-
() => {
266-
isCameraOn = true
267-
}
268-
"
269-
@close="
270-
() => {
271-
showCameraDetailSetting = false
272-
}
273-
"
258+
icon="phone-hangup"
259+
is-on
260+
:on-click="leaveQall"
261+
:on-background-color="'#F26451'"
274262
/>
275-
</div>
276-
<CallControlButton
277-
:icon="micIcon"
278-
:is-on="isMicOn"
279-
:on-click="toggleAudio"
280-
:inverted="isMicOn"
281-
/>
282-
<CallControlButton
283-
icon="phone-hangup"
284-
is-on
285-
:on-click="leaveQall"
286-
:on-background-color="'#F26451'"
287-
/>
288-
<div :class="$style.verticalBar"></div>
289-
<div :class="$style.smallButtonGroup">
290-
<div :class="$style.participantsContainer">
291-
<ClickOutside @click-outside="showParticipants = false">
292-
<div v-if="showParticipants" :class="$style.participantsList">
293-
<div :class="$style.participantsContent">
294-
<participant-list
295-
v-for="participant in filteredParticipants"
296-
:key="participant.user.id"
297-
:participant="participant.user"
298-
:track-info="getParticipantTrackInfo(participant)!"
299-
/>
263+
<div :class="$style.verticalBar"></div>
264+
<div :class="$style.smallButtonGroup">
265+
<div :class="$style.participantsContainer">
266+
<ClickOutside @click-outside="showParticipants = false">
267+
<div v-if="showParticipants" :class="$style.participantsList">
268+
<div :class="$style.participantsContent">
269+
<participant-list
270+
v-for="participant in filteredParticipants"
271+
:key="participant.user.id"
272+
:participant="participant.user"
273+
:track-info="getParticipantTrackInfo(participant)!"
274+
/>
275+
</div>
300276
</div>
301-
</div>
302-
</ClickOutside>
303-
<CallControlButtonSmall
304-
icon="account-multiple"
305-
:on-click="handleGroup"
306-
mdi
307-
/>
277+
</ClickOutside>
278+
<CallControlButtonSmall
279+
icon="account-multiple"
280+
:on-click="handleGroup"
281+
mdi
282+
/>
283+
</div>
308284
</div>
309285
</div>
310286
</div>
@@ -314,55 +290,33 @@ const showShareScreenSettingDetail = ref(false)
314290
</template>
315291

316292
<style lang="scss" module>
317-
.participantsContainer {
293+
.Block {
294+
height: 100%;
295+
width: 100%;
318296
position: relative;
297+
display: flex;
298+
flex-direction: column;
299+
overflow: hidden;
319300
}
320301
321-
.participantsList {
322-
position: absolute;
323-
bottom: 100%;
324-
right: 50%;
325-
width: 450px;
326-
height: 300px;
327-
@include background-primary;
328-
border-radius: 8px;
329-
margin-bottom: 8px;
330-
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
331-
transform: translateX(50%);
332-
@include color-ui-primary;
333-
}
334-
335-
.participantsContent {
302+
.stackContainer {
303+
display: flex;
304+
flex-direction: column;
305+
align-items: center;
306+
gap: 16px;
336307
height: 100%;
337-
overflow-y: auto;
338-
padding: 16px;
339-
border: 2px solid $theme-background-secondary-default;
340-
border-radius: 8px;
341-
}
342-
343-
.TrackContainer {
344-
height: fit-content;
345-
}
346-
347-
.channelView {
348-
position: absolute;
349-
width: 30%;
350-
right: 0;
351-
bottom: 0;
352308
}
353309
354-
.Block {
355-
height: 100%;
356-
height: 100%;
310+
.userList {
311+
flex-grow: 1;
357312
}
358313
359-
.Header {
360-
font: {
361-
size: 30px;
362-
weight: bold;
363-
}
364-
color: green;
365-
text-align: center;
314+
.controlBarContainer {
315+
width: 100%;
316+
display: flex;
317+
justify-content: end;
318+
flex-grow: 0;
319+
margin-bottom: 24px;
366320
}
367321
368322
.controlBar {
@@ -373,13 +327,6 @@ const showShareScreenSettingDetail = ref(false)
373327
width: 100%;
374328
}
375329
376-
.verticalBar {
377-
width: 1px;
378-
height: 64px;
379-
background-color: #ced6db;
380-
margin: 0 16px;
381-
}
382-
383330
.smallButtonGroup {
384331
display: flex;
385332
align-items: center;
@@ -395,6 +342,39 @@ const showShareScreenSettingDetail = ref(false)
395342
position: relative;
396343
}
397344
345+
.participantsContainer {
346+
position: relative;
347+
}
348+
349+
.participantsList {
350+
position: absolute;
351+
bottom: 100%;
352+
right: 50%;
353+
width: 450px;
354+
height: 300px;
355+
@include background-primary;
356+
border-radius: 8px;
357+
margin-bottom: 8px;
358+
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
359+
transform: translateX(50%);
360+
@include color-ui-primary;
361+
}
362+
363+
.participantsContent {
364+
height: 100%;
365+
overflow-y: auto;
366+
padding: 16px;
367+
border: 2px solid $theme-background-secondary-default;
368+
border-radius: 8px;
369+
}
370+
371+
.verticalBar {
372+
width: 1px;
373+
height: 64px;
374+
background-color: #ced6db;
375+
margin: 0 16px;
376+
}
377+
398378
.closeButton {
399379
position: absolute;
400380
top: 1rem;

0 commit comments

Comments
 (0)