mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-01 12:43:46 +02:00
65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
import { nextTick, ref } from 'vue';
|
|
|
|
/**
|
|
* @param {object} options
|
|
* @param {Function} options.createGroup - store function to create a new local group
|
|
* @param {Function} options.selectGroup - function to select a group after creation
|
|
* @returns {object}
|
|
*/
|
|
export function useFavoritesLocalGroups(options = {}) {
|
|
const { createGroup, selectGroup, canCreate = () => true } = options;
|
|
|
|
const isCreatingLocalGroup = ref(false);
|
|
const newLocalGroupName = ref('');
|
|
const newLocalGroupInput = ref(null);
|
|
|
|
/**
|
|
* @returns {void}
|
|
*/
|
|
function startLocalGroupCreation() {
|
|
if (!canCreate() || isCreatingLocalGroup.value) {
|
|
return;
|
|
}
|
|
isCreatingLocalGroup.value = true;
|
|
newLocalGroupName.value = '';
|
|
nextTick(() => {
|
|
const el =
|
|
newLocalGroupInput.value?.$el ?? newLocalGroupInput.value;
|
|
el?.focus?.();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* @returns {void}
|
|
*/
|
|
function cancelLocalGroupCreation() {
|
|
isCreatingLocalGroup.value = false;
|
|
newLocalGroupName.value = '';
|
|
}
|
|
|
|
/**
|
|
* @returns {void}
|
|
*/
|
|
function handleLocalGroupCreationConfirm() {
|
|
const name = newLocalGroupName.value.trim();
|
|
if (!name) {
|
|
cancelLocalGroupCreation();
|
|
return;
|
|
}
|
|
createGroup(name);
|
|
cancelLocalGroupCreation();
|
|
nextTick(() => {
|
|
selectGroup('local', name, { userInitiated: true });
|
|
});
|
|
}
|
|
|
|
return {
|
|
isCreatingLocalGroup,
|
|
newLocalGroupName,
|
|
newLocalGroupInput,
|
|
startLocalGroupCreation,
|
|
cancelLocalGroupCreation,
|
|
handleLocalGroupCreationConfirm
|
|
};
|
|
}
|