diff --git a/html/src/app.js b/html/src/app.js
index 565b10cc..1872e486 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -2324,6 +2324,31 @@ speechSynthesis.getVoices();
});
};
+ /*
+ params: {
+ worldId: string,
+ type: string,
+ region: string,
+ ownerId: string,
+ roleIds: string[],
+ groupAccessType: string,
+ queueEnabled: boolean
+ }
+ */
+ API.createInstance = function (params) {
+ return this.call('instances', {
+ method: 'POST',
+ params
+ }).then((json) => {
+ var args = {
+ json,
+ params
+ };
+ this.$emit('INSTANCE', args);
+ return args;
+ });
+ };
+
/*
params: {
worldId: string,
@@ -12034,9 +12059,12 @@ speechSynthesis.getVoices();
$app.data.searchAvatarFilter = '';
$app.data.searchAvatarSort = '';
$app.data.searchAvatarFilterRemote = '';
+ $app.data.searchGroupResults = [];
+ $app.data.searchGroupParams = {};
$app.data.isSearchUserLoading = false;
$app.data.isSearchWorldLoading = false;
$app.data.isSearchAvatarLoading = false;
+ $app.data.isSearchGroupLoading = false;
API.$on('LOGIN', function () {
$app.searchText = '';
@@ -12051,6 +12079,8 @@ speechSynthesis.getVoices();
$app.searchAvatarFilter = '';
$app.searchAvatarSort = '';
$app.searchAvatarFilterRemote = '';
+ $app.searchGroupResults = [];
+ $app.searchGroupParams = {};
$app.isSearchUserLoading = false;
$app.isSearchWorldLoading = false;
$app.isSearchAvatarLoading = false;
@@ -12065,6 +12095,7 @@ speechSynthesis.getVoices();
this.searchAvatarResults = [];
this.searchAvatarPage = [];
this.searchAvatarPageNum = 0;
+ this.searchGroupResults = [];
};
$app.methods.search = function () {
@@ -12078,6 +12109,9 @@ speechSynthesis.getVoices();
case '2':
this.searchAvatar();
break;
+ case '3':
+ this.searchGroup();
+ break;
}
};
@@ -12326,6 +12360,41 @@ speechSynthesis.getVoices();
);
};
+ $app.methods.searchGroup = async function () {
+ this.searchGroupParams = {
+ n: 10,
+ offset: 0,
+ query: this.replaceBioSymbols(this.searchText)
+ };
+ await this.moreSearchGroup();
+ };
+
+ $app.methods.moreSearchGroup = async function (go) {
+ var params = this.searchGroupParams;
+ if (go) {
+ params.offset += params.n * go;
+ if (params.offset < 0) {
+ params.offset = 0;
+ }
+ }
+ this.isSearchGroupLoading = true;
+ await API.groupSearch(params)
+ .finally(() => {
+ this.isSearchGroupLoading = false;
+ })
+ .then((args) => {
+ var map = new Map();
+ for (var json of args.json) {
+ var ref = API.cachedGroups.get(json.id);
+ if (typeof ref !== 'undefined') {
+ map.set(ref.id, ref);
+ }
+ }
+ this.searchGroupResults = Array.from(map.values());
+ return args;
+ });
+ };
+
// #endregion
// #region | App: Favorite
@@ -25025,6 +25094,52 @@ speechSynthesis.getVoices();
});
};
+ API.getUsersGroupInstances = function () {
+ return this.call(`users/${this.currentUser.id}/instances/groups`, {
+ method: 'GET'
+ }).then((json) => {
+ var args = {
+ json
+ };
+ this.$emit('GROUP:USER:INSTANCES', args);
+ return args;
+ });
+ };
+
+ /*
+ params: {
+ query: string,
+ n: number,
+ offset: number,
+ order: string,
+ sortBy: string
+ }
+ */
+ API.groupSearch = function (params) {
+ return this.call(`groups`, {
+ method: 'GET',
+ params
+ }).then((json) => {
+ var args = {
+ json,
+ params
+ };
+ this.$emit('GROUP:SEARCH', args);
+ return args;
+ });
+ };
+
+ API.$on('GROUP:SEARCH', function (args) {
+ for (var json of args.json) {
+ this.$emit('GROUP', {
+ json,
+ params: {
+ groupId: json.id
+ }
+ });
+ }
+ });
+
/*
params: {
groupId: string
diff --git a/html/src/localization/strings/en.json b/html/src/localization/strings/en.json
index dce1f25d..7d1af2d1 100644
--- a/html/src/localization/strings/en.json
+++ b/html/src/localization/strings/en.json
@@ -73,6 +73,9 @@
"sort_update": "Sort by update",
"sort_created": "Sort by created"
},
+ "group": {
+ "header": "Group"
+ },
"prev_page": "Prev",
"next_page": "Next"
},
diff --git a/html/src/mixins/tabs/search.pug b/html/src/mixins/tabs/search.pug
index f0e3811f..aa3741f2 100644
--- a/html/src/mixins/tabs/search.pug
+++ b/html/src/mixins/tabs/search.pug
@@ -71,3 +71,18 @@ mixin searchTab()
el-button-group(style="margin-top:15px")
el-button(v-if="searchAvatarPageNum" @click="moreSearchAvatar(-1)" icon="el-icon-back" size="small") {{ $t('view.search.prev_page') }}
el-button(v-if="searchAvatarResults.length > 10 && (searchAvatarPageNum + 1) * 10 < searchAvatarResults.length" @click="moreSearchAvatar(1)" icon="el-icon-right" size="small") {{ $t('view.search.next_page') }}
+ el-tab-pane(:label="$t('view.search.group.header')" v-loading="isSearchGroupLoading" style="min-height:60px")
+ .x-friend-list
+ .x-friend-item(v-for="group in searchGroupResults" :key="group.id" @click="showGroupDialog(group.id)")
+ template(v-once)
+ .avatar
+ img(v-lazy="group.iconUrl")
+ .detail
+ span.name
+ span(v-text="group.name")
+ span(style="margin-left:5px;font-weight:normal") ({{ group.memberCount }})
+ span(style="margin-left:5px;color:#909399;font-weight:normal;font-family:monospace;font-size:12px") {{ group.shortCode }}.{{ group.discriminator }}
+ span.extra(v-text="group.description")
+ el-button-group(style="margin-top:15px")
+ el-button(v-if="searchGroupParams.offset" @click="moreSearchGroup(-1)" icon="el-icon-back" size="small") {{ $t('view.search.prev_page') }}
+ el-button(v-if="searchGroupResults.length" @click="moreSearchGroup(1)" icon="el-icon-right" size="small") {{ $t('view.search.next_page') }}
\ No newline at end of file