mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-29 11:43:48 +02:00
* Update Vue devtools
* upgrade vue pinia element-plus vue-i18n, add vite
* fix: i18n
* global components
* change v-deep
* upgrade vue-lazyload
* data table
* update enlint and safe-dialog
* package.json and vite.config.js
* el-icon
* el-message
* vue 2 -> vue3 migration changes
* $pinia
* dialog
* el-popover slot
* lint
* chore
* slot
* scss
* remote state access
* misc
* jsconfig
* el-button size mini -> small
* :model-value
* ElMessageBox
* datatable
* remove v-lazyload
* template #dropdown
* mini -> small
* css
* byebye hideTooltips
* use sass-embedded
* Update SQLite, remove unneeded libraries
* Fix shift remove local avatar favorites
* Electron arm64
* arm64 support
* bye pug
* f-word vite hah
* misc
* remove safe dialog component
* Add self invite to launch dialog
* Fix errors
* Icons 1
* improve localfavorite loading performance
* improve favorites world item performance
* dialog visibility changes for Element Plus
* clear element plus error
* import performance
* revert App.vue hah
* hah
* Revert "Add self invite to launch dialog"
This reverts commit 4801cfad58.
* Toggle self invite/open in-game
* Self invite on launch dialog
* el-button icon
* el-icon
* fix user dialog tab switching logic
* fix PlayerList
* Formatting changes
* More icons
* Fix friend log table
* loading margin
* fix markdown
* fix world dialog tab switching issue
* Fixes and formatting
* fix: global i18n.t export
* fix favorites world tab not working
* Create instance, displayName
* Remove group members sort by userId
* Fix loading dialog tabs on swtich
* Star
* charts console.warn
* wip: fix charts
* wip: fix charts
* wip: charts composables
* fix favorite item tooltip warning
* Fixes and formatting
* Clean up image dialogs
* Remove unused method
* Fix platform/size border
* Fix platform/size border
* $vr
* fix friendExportDialogVisible binding
* ElMessageBox and Settings
* Login formatting
* Rename VR overlay query
* Fix image popover and userdialog badges
* Formatting
* Big buttons
* Fixes, update Cef
* Fix gameLog table nav buttons jumping around while using nav buttons
* Fix z-index
* vr overlay
* vite input add theme
* defineAsyncComponent
* ISO 639-1
* fix i18n
* clean t
* Formatting, fix calendar, rotate arrows
* Show user status when user is offline
* Fix VR overlay
* fix theme and clean up
* split InstanceActivity
* tweak
* Fix VR overlay formatting
* fix scss var
* AppDebug hahahaha
* Years
* remove reactive
* improve perf
* state hah…
* fix user rendering poblems when user object is not yet loaded
* improve perf
* Update avatar/world image uploader, licenses, remove previous images dialog (old images are now deleted)
* improve perf 1
* Suppress stray errors
* fix traveling location display issue
* Fix empty instance creator
* improve friend list refresh performance
* fix main charts
* fix chart
* Fix darkmode
* Fix avatar dialog tags
---------
Co-authored-by: pa <maplenagisa@gmail.com>
212 lines
6.4 KiB
JavaScript
212 lines
6.4 KiB
JavaScript
import { defineStore } from 'pinia';
|
||
import { computed, reactive, watch } from 'vue';
|
||
import { ElMessage } from 'element-plus';
|
||
import { instanceRequest, inviteMessagesRequest } from '../api';
|
||
import { watchState } from '../service/watchState';
|
||
import { parseLocation } from '../shared/utils';
|
||
import { useInstanceStore } from './instance';
|
||
import { useGameStore } from './game';
|
||
import { useLaunchStore } from './launch';
|
||
import { useAdvancedSettingsStore } from './settings/advanced';
|
||
|
||
export const useInviteStore = defineStore('Invite', () => {
|
||
const instanceStore = useInstanceStore();
|
||
const gameStore = useGameStore();
|
||
const launchStore = useLaunchStore();
|
||
const advancedSettingsStore = useAdvancedSettingsStore();
|
||
const state = reactive({
|
||
editInviteMessageDialog: {
|
||
visible: false,
|
||
inviteMessage: {},
|
||
messageType: '',
|
||
newMessage: ''
|
||
},
|
||
inviteMessageTable: {
|
||
data: [],
|
||
tableProps: {
|
||
stripe: true,
|
||
size: 'small'
|
||
},
|
||
layout: 'table',
|
||
visible: false
|
||
},
|
||
inviteResponseMessageTable: {
|
||
data: [],
|
||
tableProps: {
|
||
stripe: true,
|
||
size: 'small'
|
||
},
|
||
layout: 'table',
|
||
visible: false
|
||
},
|
||
inviteRequestMessageTable: {
|
||
data: [],
|
||
tableProps: {
|
||
stripe: true,
|
||
size: 'small'
|
||
},
|
||
layout: 'table',
|
||
visible: false
|
||
},
|
||
inviteRequestResponseMessageTable: {
|
||
data: [],
|
||
tableProps: {
|
||
stripe: true,
|
||
size: 'small'
|
||
},
|
||
layout: 'table',
|
||
visible: false
|
||
}
|
||
});
|
||
|
||
watch(
|
||
() => watchState.isLoggedIn,
|
||
() => {
|
||
state.inviteMessageTable.data = [];
|
||
state.inviteResponseMessageTable.data = [];
|
||
state.inviteRequestMessageTable.data = [];
|
||
state.inviteRequestResponseMessageTable.data = [];
|
||
state.editInviteMessageDialog.visible = false;
|
||
state.inviteMessageTable.visible = false;
|
||
state.inviteResponseMessageTable.visible = false;
|
||
state.inviteRequestMessageTable.visible = false;
|
||
state.inviteRequestResponseMessageTable.visible = false;
|
||
},
|
||
{ flush: 'sync' }
|
||
);
|
||
|
||
const editInviteMessageDialog = computed({
|
||
get: () => state.editInviteMessageDialog,
|
||
set: (value) => {
|
||
state.editInviteMessageDialog = value;
|
||
}
|
||
});
|
||
|
||
const inviteMessageTable = computed({
|
||
get: () => state.inviteMessageTable,
|
||
set: (value) => {
|
||
state.inviteMessageTable = value;
|
||
}
|
||
});
|
||
|
||
const inviteResponseMessageTable = computed({
|
||
get: () => state.inviteResponseMessageTable,
|
||
set: (value) => {
|
||
state.inviteResponseMessageTable = value;
|
||
}
|
||
});
|
||
|
||
const inviteRequestMessageTable = computed({
|
||
get: () => state.inviteRequestMessageTable,
|
||
set: (value) => {
|
||
state.inviteRequestMessageTable = value;
|
||
}
|
||
});
|
||
|
||
const inviteRequestResponseMessageTable = computed({
|
||
get: () => state.inviteRequestResponseMessageTable,
|
||
set: (value) => {
|
||
state.inviteRequestResponseMessageTable = value;
|
||
}
|
||
});
|
||
|
||
/**
|
||
*
|
||
* @param {string} messageType
|
||
* @param {any} inviteMessage
|
||
*/
|
||
function showEditInviteMessageDialog(messageType, inviteMessage) {
|
||
const D = state.editInviteMessageDialog;
|
||
D.newMessage = inviteMessage.message;
|
||
D.visible = true;
|
||
D.inviteMessage = inviteMessage;
|
||
D.messageType = messageType;
|
||
}
|
||
|
||
/**
|
||
*
|
||
* @param {'message' | 'request' | 'response' | 'requestResponse'} mode
|
||
*/
|
||
function refreshInviteMessageTableData(mode) {
|
||
inviteMessagesRequest
|
||
.refreshInviteMessageTableData(mode)
|
||
.then(({ json }) => {
|
||
switch (mode) {
|
||
case 'message':
|
||
state.inviteMessageTable.data = json;
|
||
break;
|
||
case 'response':
|
||
state.inviteResponseMessageTable.data = json;
|
||
break;
|
||
case 'request':
|
||
state.inviteRequestMessageTable.data = json;
|
||
break;
|
||
case 'requestResponse':
|
||
state.inviteRequestResponseMessageTable.data = json;
|
||
break;
|
||
}
|
||
})
|
||
.catch((err) => {
|
||
console.error('refreshInviteMessageTableData Failed:', err);
|
||
});
|
||
}
|
||
|
||
function canOpenInstanceInGame() {
|
||
return (
|
||
!LINUX &&
|
||
gameStore.isGameRunning &&
|
||
!advancedSettingsStore.selfInviteOverride
|
||
);
|
||
}
|
||
|
||
function newInstanceSelfInvite(worldId) {
|
||
instanceStore.createNewInstance(worldId).then((args) => {
|
||
const location = args?.json?.location;
|
||
if (!location) {
|
||
ElMessage({
|
||
message: 'Failed to create instance',
|
||
type: 'error'
|
||
});
|
||
return;
|
||
}
|
||
// self invite
|
||
const L = parseLocation(location);
|
||
if (!L.isRealInstance) {
|
||
return;
|
||
}
|
||
if (canOpenInstanceInGame()) {
|
||
const secureOrShortName =
|
||
args.json.shortName || args.json.secureName;
|
||
launchStore.tryOpenInstanceInVrc(location, secureOrShortName);
|
||
return;
|
||
}
|
||
instanceRequest
|
||
.selfInvite({
|
||
instanceId: L.instanceId,
|
||
worldId: L.worldId
|
||
})
|
||
.then((args) => {
|
||
ElMessage({
|
||
message: 'Self invite sent',
|
||
type: 'success'
|
||
});
|
||
return args;
|
||
});
|
||
});
|
||
}
|
||
|
||
return {
|
||
state,
|
||
|
||
editInviteMessageDialog,
|
||
inviteMessageTable,
|
||
inviteResponseMessageTable,
|
||
inviteRequestMessageTable,
|
||
inviteRequestResponseMessageTable,
|
||
showEditInviteMessageDialog,
|
||
refreshInviteMessageTableData,
|
||
newInstanceSelfInvite,
|
||
canOpenInstanceInGame
|
||
};
|
||
});
|