Syncing stashes on actor merge, improved merge dialog feedback.
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user