feat: smart merge (#6508)

* pr feedback

* fix: tests

* update assets statistics

* pr feedback

* pr feedback

* fix: linter

* pr feedback

* fix: don't limit the smart merge

* pr feedback

* fix: server code

* remove slider

* fix: tests

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
This commit is contained in:
martin
2024-01-19 18:52:26 +01:00
committed by GitHub
parent f80f867976
commit 17eaeb695e
6 changed files with 70 additions and 10 deletions

View File

@@ -26,7 +26,7 @@
let dispatch = createEventDispatcher<{
back: void;
merge: void;
merge: PersonResponseDto;
}>();
$: hasSelection = selectedPeople.length > 0;
@@ -68,16 +68,17 @@
const handleMerge = async () => {
try {
const { data: results } = await api.personApi.mergePerson({
let { data: results } = await api.personApi.mergePerson({
id: person.id,
mergePersonDto: { ids: selectedPeople.map(({ id }) => id) },
});
const { data: mergedPerson } = await api.personApi.getPerson({ id: person.id });
const count = results.filter(({ success }) => success).length;
notificationController.show({
message: `Merged ${count} ${count === 1 ? 'person' : 'people'}`,
type: NotificationType.Info,
});
dispatch('merge');
dispatch('merge', mergedPerson);
} catch (error) {
handleError(error, 'Cannot merge people');
} finally {

View File

@@ -165,8 +165,12 @@
id: personMerge2.id,
mergePersonDto: { ids: [personToMerge.id] },
});
const { data: mergedPerson } = await api.personApi.getPerson({ id: personToMerge.id });
countVisiblePeople--;
people = people.filter((person: PersonResponseDto) => person.id !== personToMerge.id);
people = people.map((person: PersonResponseDto) => (person.id === personMerge2.id ? mergedPerson : person));
notificationController.show({
message: 'Merge people succesfully',

View File

@@ -185,8 +185,13 @@
}
};
const handleMerge = () => {
const handleMerge = async (person: PersonResponseDto) => {
const { data: statistics } = await api.personApi.getPersonStatistics({ id: person.id });
numberOfAssets = statistics.assets;
handleGoBack();
data.person = person;
refreshAssetGrid = !refreshAssetGrid;
};
@@ -374,7 +379,7 @@
{/if}
{#if viewMode === ViewMode.MERGE_PEOPLE}
<MergeFaceSelector person={data.person} on:back={handleGoBack} on:merge={handleMerge} />
<MergeFaceSelector person={data.person} on:back={handleGoBack} on:merge={({ detail }) => handleMerge(detail)} />
{/if}
<header>