Files
VRCX/src/mixins/dialogs/newInstance.pug
T
2025-03-13 11:52:24 +13:00

309 lines
21 KiB
Plaintext

mixin newInstance
el-dialog.x-dialog(
:before-close='beforeDialogClose'
@mousedown.native='dialogMouseDown'
@mouseup.native='dialogMouseUp'
ref='newInstanceDialog'
:visible.sync='newInstanceDialog.visible'
:title='$t("dialog.new_instance.header")'
width='650px')
el-tabs(type='card' v-model='newInstanceDialog.selectedTab' @tab-click='newInstanceTabClick')
el-tab-pane(:label='$t("dialog.new_instance.normal")')
el-form(v-if='newInstanceDialog.visible' :model='newInstanceDialog' label-width='150px')
el-form-item(:label='$t("dialog.new_instance.access_type")')
el-radio-group(v-model='newInstanceDialog.accessType' size='mini' @change='buildInstance')
el-radio-button(label='public') {{ $t('dialog.new_instance.access_type_public') }}
el-radio-button(label='group') {{ $t('dialog.new_instance.access_type_group') }}
el-radio-button(label='friends+') {{ $t('dialog.new_instance.access_type_friend_plus') }}
el-radio-button(label='friends') {{ $t('dialog.new_instance.access_type_friend') }}
el-radio-button(label='invite+') {{ $t('dialog.new_instance.access_type_invite_plus') }}
el-radio-button(label='invite') {{ $t('dialog.new_instance.access_type_invite') }}
el-form-item(
:label='$t("dialog.new_instance.group_access_type")'
v-if='newInstanceDialog.accessType === "group"')
el-radio-group(v-model='newInstanceDialog.groupAccessType' size='mini' @change='buildInstance')
el-radio-button(
label='members'
:disabled='!hasGroupPermission(newInstanceDialog.groupRef, "group-instance-open-create")') {{ $t('dialog.new_instance.group_access_type_members') }}
el-radio-button(
label='plus'
:disabled='!hasGroupPermission(newInstanceDialog.groupRef, "group-instance-plus-create")') {{ $t('dialog.new_instance.group_access_type_plus') }}
el-radio-button(
label='public'
:disabled='!hasGroupPermission(newInstanceDialog.groupRef, "group-instance-public-create") || newInstanceDialog.groupRef.privacy === "private"') {{ $t('dialog.new_instance.group_access_type_public') }}
el-form-item(:label='$t("dialog.new_instance.region")')
el-radio-group(v-model='newInstanceDialog.region' size='mini' @change='buildInstance')
el-radio-button(label='US West') {{ $t('dialog.new_instance.region_usw') }}
el-radio-button(label='US East') {{ $t('dialog.new_instance.region_use') }}
el-radio-button(label='Europe') {{ $t('dialog.new_instance.region_eu') }}
el-radio-button(label='Japan') {{ $t('dialog.new_instance.region_jp') }}
el-form-item(:label='$t("dialog.new_instance.content_settings")')
el-select(
v-model='newInstanceDialog.selectedContentSettings'
multiple
:placeholder='$t("dialog.new_instance.content_placeholder")'
style='width: 100%'
@change='buildInstance')
el-option-group(:label='$t("dialog.new_instance.content_placeholder")')
el-option.x-friend-item(value='emoji' :label='$t("dialog.new_instance.content_emoji")')
el-option.x-friend-item(
value='stickers'
:label='$t("dialog.new_instance.content_stickers")')
el-option.x-friend-item(
value='pedestals'
:label='$t("dialog.new_instance.content_pedestals")')
el-option.x-friend-item(
value='prints'
:label='$t("dialog.new_instance.content_prints")')
el-option.x-friend-item(
value='drones'
:label='$t("dialog.new_instance.content_drones")')
el-form-item(
:label='$t("dialog.new_instance.queueEnabled")'
v-if='newInstanceDialog.accessType === "group"')
el-checkbox(v-model='newInstanceDialog.queueEnabled' @change='buildInstance')
el-form-item(
:label='$t("dialog.new_instance.ageGate")'
v-if='newInstanceDialog.accessType === "group"')
el-checkbox(
v-model='newInstanceDialog.ageGate'
@change='buildInstance'
:disabled='!hasGroupPermission(newInstanceDialog.groupRef, "group-instance-age-gated-create")')
el-form-item(:label='$t("dialog.new_instance.world_id")')
el-input(
v-model='newInstanceDialog.worldId'
size='mini'
@click.native='$event.target.tagName === "INPUT" && $event.target.select()'
@change='buildInstance')
el-form-item(
:label='$t("dialog.new_instance.group_id")'
v-if='newInstanceDialog.accessType === "group"')
el-select(
v-model='newInstanceDialog.groupId'
clearable
:placeholder='$t("dialog.new_instance.group_placeholder")'
filterable
style='width: 100%'
@change='buildInstance')
el-option-group(:label='$t("dialog.new_instance.group_placeholder")')
el-option.x-friend-item(
v-if='group && (hasGroupPermission(group, "group-instance-public-create") || hasGroupPermission(group, "group-instance-plus-create") || hasGroupPermission(group, "group-instance-open-create"))'
v-for='group in API.currentUserGroups.values()'
:key='group.id'
:label='group.name'
:value='group.id'
style='height: auto; width: 478px')
.avatar
img(v-lazy='group.iconUrl')
.detail
span.name(v-text='group.name')
el-form-item(
:label='$t("dialog.new_instance.roles")'
v-if='newInstanceDialog.accessType === "group" && newInstanceDialog.groupAccessType === "members"')
el-select(
v-model='newInstanceDialog.roleIds'
multiple
clearable
:placeholder='$t("dialog.new_instance.role_placeholder")'
style='width: 100%'
@change='buildInstance')
el-option-group(:label='$t("dialog.new_instance.role_placeholder")')
el-option.x-friend-item(
v-for='role in newInstanceDialog.selectedGroupRoles'
:key='role.id'
:label='role.name'
:value='role.id'
style='height: auto; width: 478px')
.detail
span.name(v-text='role.name')
template(v-if='newInstanceDialog.instanceCreated')
el-form-item(:label='$t("dialog.new_instance.location")')
el-input(
v-model='newInstanceDialog.location'
size='mini'
readonly
@click.native='$event.target.tagName === "INPUT" && $event.target.select()')
el-form-item(:label='$t("dialog.new_instance.url")')
el-input(v-model='newInstanceDialog.url' size='mini' readonly)
el-tab-pane(:label='$t("dialog.new_instance.legacy")')
el-form(v-if='newInstanceDialog.visible' :model='newInstanceDialog' label-width='150px')
el-form-item(:label='$t("dialog.new_instance.access_type")')
el-radio-group(
v-model='newInstanceDialog.accessType'
size='mini'
@change='buildLegacyInstance')
el-radio-button(label='public') {{ $t('dialog.new_instance.access_type_public') }}
el-radio-button(label='group') {{ $t('dialog.new_instance.access_type_group') }}
el-radio-button(label='friends+') {{ $t('dialog.new_instance.access_type_friend_plus') }}
el-radio-button(label='friends') {{ $t('dialog.new_instance.access_type_friend') }}
el-radio-button(label='invite+') {{ $t('dialog.new_instance.access_type_invite_plus') }}
el-radio-button(label='invite') {{ $t('dialog.new_instance.access_type_invite') }}
el-form-item(
:label='$t("dialog.new_instance.group_access_type")'
v-if='newInstanceDialog.accessType === "group"')
el-radio-group(
v-model='newInstanceDialog.groupAccessType'
size='mini'
@change='buildLegacyInstance')
el-radio-button(label='members') {{ $t('dialog.new_instance.group_access_type_members') }}
el-radio-button(label='plus') {{ $t('dialog.new_instance.group_access_type_plus') }}
el-radio-button(label='public') {{ $t('dialog.new_instance.group_access_type_public') }}
//- el-form-item(label="Strict" v-if="newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite'")
//- el-checkbox(v-model="newInstanceDialog.strict") Prevent non friends joining via URL/Instance ID
el-form-item(:label='$t("dialog.new_instance.region")')
el-radio-group(v-model='newInstanceDialog.region' size='mini' @change='buildLegacyInstance')
el-radio-button(label='US West') {{ $t('dialog.new_instance.region_usw') }}
el-radio-button(label='US East') {{ $t('dialog.new_instance.region_use') }}
el-radio-button(label='Europe') {{ $t('dialog.new_instance.region_eu') }}
el-radio-button(label='Japan') {{ $t('dialog.new_instance.region_jp') }}
el-form-item(
:label='$t("dialog.new_instance.ageGate")'
v-if='newInstanceDialog.accessType === "group"')
el-checkbox(v-model='newInstanceDialog.ageGate' @change='buildInstance')
el-form-item(:label='$t("dialog.new_instance.world_id")')
el-input(
v-model='newInstanceDialog.worldId'
size='mini'
@click.native='$event.target.tagName === "INPUT" && $event.target.select()'
@change='buildLegacyInstance')
el-form-item(:label='$t("dialog.new_instance.instance_id")')
el-input(
v-model='newInstanceDialog.instanceName'
:placeholder='$t("dialog.new_instance.instance_id_placeholder")'
size='mini'
@change='buildLegacyInstance')
el-form-item(
:label='$t("dialog.new_instance.instance_creator")'
v-if='newInstanceDialog.accessType !== "public" && newInstanceDialog.accessType !== "group"')
el-select(
v-model='newInstanceDialog.userId'
clearable
:placeholder='$t("dialog.new_instance.instance_creator_placeholder")'
filterable
style='width: 100%'
@change='buildLegacyInstance')
el-option-group(v-if='API.currentUser' :label='$t("side_panel.me")')
el-option.x-friend-item(
:label='API.currentUser.displayName'
:value='API.currentUser.id'
style='height: auto')
.avatar(:class='userStatusClass(API.currentUser)')
img(v-lazy='userImage(API.currentUser)')
.detail
span.name(v-text='API.currentUser.displayName')
el-option-group(v-if='vipFriends.length' :label='$t("side_panel.favorite")')
el-option.x-friend-item(
v-for='friend in vipFriends'
:key='friend.id'
:label='friend.name'
:value='friend.id'
style='height: auto')
template(v-if='friend.ref')
.avatar(:class='userStatusClass(friend.ref)')
img(v-lazy='userImage(friend.ref)')
.detail
span.name(
v-text='friend.ref.displayName'
:style='{ color: friend.ref.$userColour }')
span(v-else v-text='friend.id')
el-option-group(v-if='onlineFriends.length' :label='$t("side_panel.online")')
el-option.x-friend-item(
v-for='friend in onlineFriends'
:key='friend.id'
:label='friend.name'
:value='friend.id'
style='height: auto')
template(v-if='friend.ref')
.avatar(:class='userStatusClass(friend.ref)')
img(v-lazy='userImage(friend.ref)')
.detail
span.name(
v-text='friend.ref.displayName'
:style='{ color: friend.ref.$userColour }')
span(v-else v-text='friend.id')
el-option-group(v-if='activeFriends.length' :label='$t("side_panel.active")')
el-option.x-friend-item(
v-for='friend in activeFriends'
:key='friend.id'
:label='friend.name'
:value='friend.id'
style='height: auto')
template(v-if='friend.ref')
.avatar
img(v-lazy='userImage(friend.ref)')
.detail
span.name(
v-text='friend.ref.displayName'
:style='{ color: friend.ref.$userColour }')
span(v-else v-text='friend.id')
el-option-group(v-if='offlineFriends.length' :label='$t("side_panel.offline")')
el-option.x-friend-item(
v-for='friend in offlineFriends'
:key='friend.id'
:label='friend.name'
:value='friend.id'
style='height: auto')
template(v-if='friend.ref')
.avatar
img(v-lazy='userImage(friend.ref)')
.detail
span.name(
v-text='friend.ref.displayName'
:style='{ color: friend.ref.$userColour }')
span(v-else v-text='friend.id')
el-form-item(
:label='$t("dialog.new_instance.group_id")'
v-if='newInstanceDialog.accessType === "group"')
el-select(
v-model='newInstanceDialog.groupId'
clearable
:placeholder='$t("dialog.new_instance.group_placeholder")'
filterable
style='width: 100%'
@change='buildLegacyInstance')
el-option-group(:label='$t("dialog.new_instance.group_placeholder")')
el-option.x-friend-item(
v-if='group'
v-for='group in API.currentUserGroups.values()'
:key='group.id'
:label='group.name'
:value='group.id'
style='height: auto; width: 478px')
.avatar
img(v-lazy='group.iconUrl')
.detail
span.name(v-text='group.name')
el-form-item(:label='$t("dialog.new_instance.location")')
el-input(
v-model='newInstanceDialog.location'
size='mini'
readonly
@click.native='$event.target.tagName === "INPUT" && $event.target.select()')
el-form-item(:label='$t("dialog.new_instance.url")')
el-input(v-model='newInstanceDialog.url' size='mini' readonly)
template(#footer v-if='newInstanceDialog.selectedTab === "0"')
template(v-if='newInstanceDialog.instanceCreated')
el-button(size='small' @click='copyInstanceUrl(newInstanceDialog.location)') {{ $t('dialog.new_instance.copy_url') }}
el-button(size='small' @click='selfInvite(newInstanceDialog.location)') {{ $t('dialog.new_instance.self_invite') }}
el-button(
size='small'
@click='showInviteDialog(newInstanceDialog.location)'
:disabled='(newInstanceDialog.accessType === "friends" || newInstanceDialog.accessType === "invite") && newInstanceDialog.userId !== API.currentUser.id') {{ $t('dialog.new_instance.invite') }}
el-button(
type='primary'
size='small'
@click='showLaunchDialog(newInstanceDialog.location, newInstanceDialog.shortName)') {{ $t('dialog.new_instance.launch') }}
template(v-else)
el-button(type='primary' size='small' @click='createNewInstance()') {{ $t('dialog.new_instance.create_instance') }}
template(#footer v-else-if='newInstanceDialog.selectedTab === "1"')
el-button(size='small' @click='copyInstanceUrl(newInstanceDialog.location)') {{ $t('dialog.new_instance.copy_url') }}
el-button(size='small' @click='selfInvite(newInstanceDialog.location)') {{ $t('dialog.new_instance.self_invite') }}
el-button(
size='small'
@click='showInviteDialog(newInstanceDialog.location)'
:disabled='(newInstanceDialog.accessType === "friends" || newInstanceDialog.accessType === "invite") && newInstanceDialog.userId !== API.currentUser.id') {{ $t('dialog.new_instance.invite') }}
el-button(
type='primary'
size='small'
@click='showLaunchDialog(newInstanceDialog.location, newInstanceDialog.shortName)') {{ $t('dialog.new_instance.launch') }}