mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-25 01:33:51 +02:00
76 lines
1.8 KiB
JavaScript
76 lines
1.8 KiB
JavaScript
import { ref } from 'vue';
|
|
import { storeToRefs } from 'pinia';
|
|
|
|
import { useSearchStore } from '../../../stores';
|
|
import { replaceBioSymbols } from '../../../shared/utils';
|
|
import { groupRequest } from '../../../api';
|
|
|
|
/**
|
|
* Group search composable for Search view.
|
|
* Manages group search state and pagination.
|
|
*/
|
|
export function useSearchGroup() {
|
|
const { searchText } = storeToRefs(useSearchStore());
|
|
|
|
const searchGroupParams = ref({});
|
|
const searchGroupResults = ref([]);
|
|
const isSearchGroupLoading = ref(false);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
async function searchGroup() {
|
|
searchGroupParams.value = {
|
|
n: 10,
|
|
offset: 0,
|
|
query: replaceBioSymbols(searchText.value)
|
|
};
|
|
await moreSearchGroup();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param go
|
|
*/
|
|
async function moreSearchGroup(go) {
|
|
const params = searchGroupParams.value;
|
|
if (go) {
|
|
params.offset += params.n * go;
|
|
if (params.offset < 0) {
|
|
params.offset = 0;
|
|
}
|
|
}
|
|
isSearchGroupLoading.value = true;
|
|
await groupRequest
|
|
.groupSearch(params)
|
|
.finally(() => {
|
|
isSearchGroupLoading.value = false;
|
|
})
|
|
.then((args) => {
|
|
const map = new Map();
|
|
for (const json of args.json) {
|
|
map.set(json.id, json);
|
|
}
|
|
searchGroupResults.value = Array.from(map.values());
|
|
return args;
|
|
});
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
function clearGroupSearch() {
|
|
searchGroupParams.value = {};
|
|
searchGroupResults.value = [];
|
|
}
|
|
|
|
return {
|
|
searchGroupParams,
|
|
searchGroupResults,
|
|
isSearchGroupLoading,
|
|
searchGroup,
|
|
moreSearchGroup,
|
|
clearGroupSearch
|
|
};
|
|
}
|