Merge pull request #1444 from valadaptive/characters-endpoint

Move character endpoints into their own module
This commit is contained in:
Cohee
2023-12-06 23:45:14 +02:00
committed by GitHub
8 changed files with 1110 additions and 1027 deletions

View File

@@ -53,7 +53,7 @@ class CharacterContextMenu {
static duplicate = async (characterId) => {
const character = CharacterContextMenu.#getCharacter(characterId);
return fetch('/dupecharacter', {
return fetch('/api/characters/duplicate', {
method: 'POST',
headers: getRequestHeaders(),
body: JSON.stringify({ avatar_url: character.avatar }),
@@ -69,30 +69,31 @@ class CharacterContextMenu {
*/
static favorite = async (characterId) => {
const character = CharacterContextMenu.#getCharacter(characterId);
const newFavState = !character.data.extensions.fav;
// Only set fav for V2 spec
const data = {
name: character.name,
avatar: character.avatar,
data: {
extensions: {
fav: !character.data.extensions.fav,
fav: newFavState,
},
},
fav: newFavState,
};
return fetch('/v2/editcharacterattribute', {
const mergeResponse = await fetch('/api/characters/merge-attributes', {
method: 'POST',
headers: getRequestHeaders(),
body: JSON.stringify(data),
}).then((response) => {
if (response.ok) {
const element = document.getElementById(`CharID${characterId}`);
element.classList.toggle('is_fav');
} else {
response.json().then(json => toastr.error('Character not saved. Error: ' + json.message + '. Field: ' + json.error));
}
});
if (!mergeResponse.ok) {
mergeResponse.json().then(json => toastr.error(`Character not saved. Error: ${json.message}. Field: ${json.error}`));
}
const element = document.getElementById(`CharID${characterId}`);
element.classList.toggle('is_fav');
};
/**
@@ -115,7 +116,7 @@ class CharacterContextMenu {
static delete = async (characterId, deleteChats = false) => {
const character = CharacterContextMenu.#getCharacter(characterId);
return fetch('/deletecharacter', {
return fetch('/api/characters/delete', {
method: 'POST',
headers: getRequestHeaders(),
body: JSON.stringify({ avatar_url: character.avatar, delete_chats: deleteChats }),
@@ -124,7 +125,7 @@ class CharacterContextMenu {
if (response.ok) {
deleteCharacter(character.name, character.avatar).then(() => {
if (deleteChats) {
fetch('/getallchatsofcharacter', {
fetch('/api/characters/chats', {
method: 'POST',
body: JSON.stringify({ avatar_url: character.avatar }),
headers: getRequestHeaders(),
@@ -484,7 +485,7 @@ class BulkEditOverlay {
this.container.removeEventListener('mouseup', cancelHold);
this.container.removeEventListener('touchend', cancelHold);
},
BulkEditOverlay.longPressDelay);
BulkEditOverlay.longPressDelay);
};
handleLongPressEnd = (event) => {
@@ -529,7 +530,7 @@ class BulkEditOverlay {
#getEnabledElements = () => [...this.container.getElementsByClassName(BulkEditOverlay.characterClass)];
#getDisabledElements = () =>[...this.container.getElementsByClassName(BulkEditOverlay.groupClass), ...this.container.getElementsByClassName(BulkEditOverlay.bogusFolderClass)];
#getDisabledElements = () => [...this.container.getElementsByClassName(BulkEditOverlay.groupClass), ...this.container.getElementsByClassName(BulkEditOverlay.bogusFolderClass)];
toggleCharacterSelected = event => {
event.stopPropagation();
@@ -572,12 +573,20 @@ class BulkEditOverlay {
/**
* Concurrently handle character favorite requests.
*
* @returns {Promise<number>}
* @returns {Promise<void>}
*/
handleContextMenuFavorite = () => Promise.all(this.selectedCharacters.map(async characterId => CharacterContextMenu.favorite(characterId)))
.then(() => getCharacters())
.then(() => favsToHotswap())
.then(() => this.browseState());
handleContextMenuFavorite = async () => {
const promises = [];
for (const characterId of this.selectedCharacters) {
promises.push(CharacterContextMenu.favorite(characterId));
}
await Promise.allSettled(promises);
await getCharacters();
await favsToHotswap();
this.browseState();
};
/**
* Concurrently handle character duplicate requests.

View File

@@ -42,7 +42,7 @@ async function getExistingChatNames() {
const data = await getGroupPastChats(selected_group);
return data.map(x => x.file_name);
} else {
const response = await fetch('/getallchatsofcharacter', {
const response = await fetch('/api/characters/chats', {
method: 'POST',
headers: getRequestHeaders(),
body: JSON.stringify({ avatar_url: characters[this_chid].avatar }),