Compare commits

...

2 Commits

Author SHA1 Message Date
f7425cdc03 0.50.2 2026-06-09 01:23:32 +02:00
d9f432ef73 Syncing stashes on actor merge, improved merge dialog feedback. 2026-06-09 01:23:23 +02:00
4 changed files with 32 additions and 5 deletions

View File

@@ -58,7 +58,10 @@
</template>
<div class="dialog-actions">
<Ellipsis v-if="submitted" />
<button
v-else
type="submit"
class="button button-primary"
:disabled="!targetActor"
@@ -73,6 +76,7 @@
import { ref, onMounted } from 'vue';
import Dialog from '#/components/dialog/dialog.vue';
import Ellipsis from '#/components/loading/ellipsis.vue';
import { get, post } from '#/src/api.js';
@@ -89,6 +93,7 @@ const targetActor = ref(null);
const actorInput = ref(null);
const actorQuery = ref('');
const actorResults = ref([]);
const submitted = ref(false);
async function searchActors() {
const res = await get('/actors', {
@@ -101,12 +106,16 @@ async function searchActors() {
}
async function merge() {
submitted.value = true;
await post(`/actors/${targetActor.value.id}/merge/${props.actor.id}`, null, {
successFeedback: `Merged ${props.actor.entity ? `${props.actor.name} (${props.actor.entity.name})` : props.actor.name} into ${targetActor.value.name}`,
errorFeedback: `Failed to merge ${props.actor.entity ? `${props.actor.name} (${props.actor.entity.name})` : props.actor.name} into ${targetActor.value.name}`,
appendErrorMessage: true,
});
submitted.value = false;
emit('close');
}
@@ -183,4 +192,13 @@ onMounted(() => {
font-family: monospace;
font-size: 1rem;
}
.load-container {
height: 2rem;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
padding: 0 1rem;
}
</style>

4
package-lock.json generated
View File

@@ -1,11 +1,11 @@
{
"name": "traxxx-web",
"version": "0.50.1",
"version": "0.50.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"version": "0.50.1",
"version": "0.50.2",
"dependencies": {
"@brillout/json-serializer": "^0.5.8",
"@dicebear/collection": "^7.0.5",

View File

@@ -92,7 +92,7 @@
"overrides": {
"vite": "$vite"
},
"version": "0.50.1",
"version": "0.50.2",
"imports": {
"#/*": "./*.js"
}

View File

@@ -22,7 +22,7 @@ import slugify from '../utils/slugify.js';
import { curateRevision } from './revisions.js';
import { interpolateProfiles, platformsByHostname } from '../common/actors.mjs'; // eslint-disable-line import/namespace
import { resolvePlace } from '../common/geo.mjs'; // eslint-disable-line import/namespace
import { syncScenes, syncActors } from './sync.js';
import { syncScenes, syncActors, syncStashes } from './sync.js';
import verifyAbility from '../utils/verify-ability.js';
const logger = initLogger();
@@ -600,6 +600,11 @@ export async function mergeActors(targetActorId, sourceActorId, reqUser) {
.where('actor_id', sourceActorId)
.returning('release_id');
await trx('stashes_actors')
.update('actor_id', targetActorId)
.where('actor_id', sourceActorId)
.returning('id');
try {
await trx.commit();
} catch (error) {
@@ -616,7 +621,11 @@ export async function mergeActors(targetActorId, sourceActorId, reqUser) {
omit,
}, { refreshView: false });
await syncScenes(mergedScenes.map((scene) => scene.release_id));
await Promise.all([
syncScenes(mergedScenes.map((scene) => scene.release_id)),
syncActors([targetActorId, sourceActorId]),
syncStashes('actor', [targetActorId, sourceActorId]),
]);
return {
scenes: mergedScenes.length,