Syncing stashes on actor merge, improved merge dialog feedback.
This commit is contained in:
@@ -58,7 +58,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="dialog-actions">
|
<div class="dialog-actions">
|
||||||
|
<Ellipsis v-if="submitted" />
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
v-else
|
||||||
type="submit"
|
type="submit"
|
||||||
class="button button-primary"
|
class="button button-primary"
|
||||||
:disabled="!targetActor"
|
:disabled="!targetActor"
|
||||||
@@ -73,6 +76,7 @@
|
|||||||
import { ref, onMounted } from 'vue';
|
import { ref, onMounted } from 'vue';
|
||||||
|
|
||||||
import Dialog from '#/components/dialog/dialog.vue';
|
import Dialog from '#/components/dialog/dialog.vue';
|
||||||
|
import Ellipsis from '#/components/loading/ellipsis.vue';
|
||||||
|
|
||||||
import { get, post } from '#/src/api.js';
|
import { get, post } from '#/src/api.js';
|
||||||
|
|
||||||
@@ -89,6 +93,7 @@ const targetActor = ref(null);
|
|||||||
const actorInput = ref(null);
|
const actorInput = ref(null);
|
||||||
const actorQuery = ref('');
|
const actorQuery = ref('');
|
||||||
const actorResults = ref([]);
|
const actorResults = ref([]);
|
||||||
|
const submitted = ref(false);
|
||||||
|
|
||||||
async function searchActors() {
|
async function searchActors() {
|
||||||
const res = await get('/actors', {
|
const res = await get('/actors', {
|
||||||
@@ -101,12 +106,16 @@ async function searchActors() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function merge() {
|
async function merge() {
|
||||||
|
submitted.value = true;
|
||||||
|
|
||||||
await post(`/actors/${targetActor.value.id}/merge/${props.actor.id}`, null, {
|
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}`,
|
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}`,
|
errorFeedback: `Failed to merge ${props.actor.entity ? `${props.actor.name} (${props.actor.entity.name})` : props.actor.name} into ${targetActor.value.name}`,
|
||||||
appendErrorMessage: true,
|
appendErrorMessage: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
submitted.value = false;
|
||||||
|
|
||||||
emit('close');
|
emit('close');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,4 +192,13 @@ onMounted(() => {
|
|||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.load-container {
|
||||||
|
height: 2rem;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0 1rem;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import slugify from '../utils/slugify.js';
|
|||||||
import { curateRevision } from './revisions.js';
|
import { curateRevision } from './revisions.js';
|
||||||
import { interpolateProfiles, platformsByHostname } from '../common/actors.mjs'; // eslint-disable-line import/namespace
|
import { interpolateProfiles, platformsByHostname } from '../common/actors.mjs'; // eslint-disable-line import/namespace
|
||||||
import { resolvePlace } from '../common/geo.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';
|
import verifyAbility from '../utils/verify-ability.js';
|
||||||
|
|
||||||
const logger = initLogger();
|
const logger = initLogger();
|
||||||
@@ -600,6 +600,11 @@ export async function mergeActors(targetActorId, sourceActorId, reqUser) {
|
|||||||
.where('actor_id', sourceActorId)
|
.where('actor_id', sourceActorId)
|
||||||
.returning('release_id');
|
.returning('release_id');
|
||||||
|
|
||||||
|
await trx('stashes_actors')
|
||||||
|
.update('actor_id', targetActorId)
|
||||||
|
.where('actor_id', sourceActorId)
|
||||||
|
.returning('id');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await trx.commit();
|
await trx.commit();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -616,7 +621,11 @@ export async function mergeActors(targetActorId, sourceActorId, reqUser) {
|
|||||||
omit,
|
omit,
|
||||||
}, { refreshView: false });
|
}, { 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 {
|
return {
|
||||||
scenes: mergedScenes.length,
|
scenes: mergedScenes.length,
|
||||||
|
|||||||
Reference in New Issue
Block a user