Files
VRCX/src/stores/invite.js
pa f4f78bb5ec refactor: app.js (#1291)
* refactor: frontend

* Fix avatar gallery sort

* Update .NET dependencies

* Update npm dependencies

electron v37.1.0

* bulkRefreshFriends

* fix dark theme

* Remove crowdin

* Fix config.json dialog not updating

* VRCX log file fixes & add Cef log

* Remove SharedVariable, fix startup

* Revert init theme change

* Logging date not working? Fix WinformThemer designer error

* Add Cef request hander, no more escaping main page

* clean

* fix

* fix

* clean

* uh

* Apply thememode at startup, fixes random user colours

* Split database into files

* Instance info remove empty lines

* Open external VRC links with VRCX

* Electron fixes

* fix userdialog style

* ohhhh

* fix store

* fix store

* fix: load all group members after kicking a user

* fix: world dialog favorite button style

* fix: Clear VRCX Cache Timer input value

* clean

* Fix VR overlay

* Fix VR overlay 2

* Fix Discord discord rich presence for RPC worlds

* Clean up age verified user tags

* Fix playerList being occupied after program reload

* no `this`

* Fix login stuck loading

* writable: false

* Hide dialogs on logout

* add flush sync option

* rm LOGIN event

* rm LOGOUT event

* remove duplicate event listeners

* remove duplicate event listeners

* clean

* remove duplicate event listeners

* clean

* fix theme style

* fix t

* clearable

* clean

* fix ipcEvent

* Small changes

* Popcorn Palace support

* Remove checkActiveFriends

* Clean up

* Fix dragEnterCef

* Block API requests when not logged in

* Clear state on login & logout

* Fix worldDialog instances not updating

* use <script setup>

* Fix avatar change event, CheckGameRunning at startup

* Fix image dragging

* fix

* Remove PWI

* fix updateLoop

* add webpack-dev-server to dev environment

* rm unnecessary chunks

* use <script setup>

* webpack-dev-server changes

* use <script setup>

* use <script setup>

* Fix UGC text size

* Split login event

* t

* use <script setup>

* fix

* Update .gitignore and enable checkJs in jsconfig

* fix i18n t

* use <script setup>

* use <script setup>

* clean

* global types

* fix

* use checkJs for debugging

* Add watchState for login watchers

* fix .vue template

* type fixes

* rm Vue.filter

* Cef v138.0.170, VC++ 2022

* Settings fixes

* Remove 'USER:CURRENT'

* clean up 2FA callbacks

* remove userApply

* rm i18n import

* notification handling to use notification store methods

* refactor favorite handling to use favorite store methods and clean up event emissions

* refactor moderation handling to use dedicated functions for player moderation events

* refactor friend handling to use dedicated functions for friend events

* Fix program startup, move lang init

* Fix friend state

* Fix status change error

* Fix user notes diff

* fix

* rm group event

* rm auth event

* rm avatar event

* clean

* clean

* getUser

* getFriends

* getFavoriteWorlds, getFavoriteAvatars

* AvatarGalleryUpload btn style & package.json update

* Fix friend requests

* Apply user

* Apply world

* Fix note diff

* Fix VR overlay

* Fixes

* Update build scripts

* Apply avatar

* Apply instance

* Apply group

* update hidden VRC+ badge

* Fix sameInstance "private"

* fix 502/504 API errors

* fix 502/504 API errors

* clean

* Fix friend in same instance on orange showing twice in friends list

* Add back in broken friend state repair methods

* add types

---------

Co-authored-by: Natsumi <cmcooper123@hotmail.com>
2025-07-14 15:00:08 +12:00

190 lines
5.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineStore } from 'pinia';
import { computed, reactive, watch } from 'vue';
import { instanceRequest, inviteMessagesRequest } from '../api';
import { $app } from '../app';
import { watchState } from '../service/watchState';
import { parseLocation } from '../shared/utils';
import { useInstanceStore } from './instance';
export const useInviteStore = defineStore('Invite', () => {
const instanceStore = useInstanceStore();
const state = reactive({
editInviteMessageDialog: {
visible: false,
inviteMessage: {},
messageType: '',
newMessage: ''
},
inviteMessageTable: {
data: [],
tableProps: {
stripe: true,
size: 'mini'
},
layout: 'table',
visible: false
},
inviteResponseMessageTable: {
data: [],
tableProps: {
stripe: true,
size: 'mini'
},
layout: 'table',
visible: false
},
inviteRequestMessageTable: {
data: [],
tableProps: {
stripe: true,
size: 'mini'
},
layout: 'table',
visible: false
},
inviteRequestResponseMessageTable: {
data: [],
tableProps: {
stripe: true,
size: 'mini'
},
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 {string} 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 newInstanceSelfInvite(worldId) {
instanceStore.createNewInstance(worldId).then((args) => {
const location = args?.json?.location;
if (!location) {
$app.$message({
message: 'Failed to create instance',
type: 'error'
});
return;
}
// self invite
const L = parseLocation(location);
if (!L.isRealInstance) {
return;
}
instanceRequest
.selfInvite({
instanceId: L.instanceId,
worldId: L.worldId
})
.then((args) => {
$app.$message({
message: 'Self invite sent',
type: 'success'
});
return args;
});
});
}
return {
state,
editInviteMessageDialog,
inviteMessageTable,
inviteResponseMessageTable,
inviteRequestMessageTable,
inviteRequestResponseMessageTable,
showEditInviteMessageDialog,
refreshInviteMessageTableData,
newInstanceSelfInvite
};
});