Skip to content

Commit c37be10

Browse files
committed
fix(web): person asset grid
1 parent d6729c5 commit c37be10

File tree

1 file changed

+39
-46
lines changed
  • web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]

1 file changed

+39
-46
lines changed

Diff for: web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte

+39-46
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,19 @@
7676
isArchived: false,
7777
personId: data.person.id,
7878
});
79+
80+
$: person = data.person;
81+
$: thumbnailData = getPeopleThumbnailUrl(person);
82+
$: if (person) {
83+
void assetStore.updateOptions({ personId: person.id });
84+
}
85+
7986
const assetInteractionStore = createAssetInteractionStore();
8087
const { selectedAssets, isMultiSelectState } = assetInteractionStore;
8188
8289
let viewMode: ViewMode = ViewMode.VIEW_ASSETS;
8390
let isEditingName = false;
8491
let previousRoute: string = AppRoute.EXPLORE;
85-
let previousPersonId: string = data.person.id;
8692
let people: PersonResponseDto[] = [];
8793
let personMerge1: PersonResponseDto;
8894
let personMerge2: PersonResponseDto;
@@ -91,9 +97,6 @@
9197
let refreshAssetGrid = false;
9298
9399
let personName = '';
94-
$: thumbnailData = getPeopleThumbnailUrl(data.person);
95-
96-
let name: string = data.person.name;
97100
let suggestedPeople: PersonResponseDto[] = [];
98101
99102
/**
@@ -120,8 +123,8 @@
120123
}
121124
122125
return websocketEvents.on('on_person_thumbnail', (personId: string) => {
123-
if (data.person.id === personId) {
124-
thumbnailData = getPeopleThumbnailUrl(data.person, Date.now().toString());
126+
if (person.id === personId) {
127+
thumbnailData = getPeopleThumbnailUrl(person, Date.now().toString());
125128
}
126129
});
127130
});
@@ -141,7 +144,7 @@
141144
142145
const updateAssetCount = async () => {
143146
try {
144-
const { assets } = await getPersonStatistics({ id: data.person.id });
147+
const { assets } = await getPersonStatistics({ id: person.id });
145148
numberOfAssets = assets;
146149
} catch (error) {
147150
handleError(error, "Can't update the asset count");
@@ -150,20 +153,11 @@
150153
151154
afterNavigate(({ from }) => {
152155
// Prevent setting previousRoute to the current page.
153-
if (from && from.route.id !== $page.route.id) {
156+
if (from?.url && from.route.id !== $page.route.id) {
154157
previousRoute = from.url.href;
155158
}
156-
if (previousPersonId !== data.person.id) {
157-
handlePromiseError(updateAssetCount());
158-
assetStore.destroy();
159-
assetStore = new AssetStore({
160-
isArchived: false,
161-
personId: data.person.id,
162-
});
163-
previousPersonId = data.person.id;
164-
name = data.person.name;
165-
refreshAssetGrid = !refreshAssetGrid;
166-
}
159+
160+
handlePromiseError(updateAssetCount());
167161
});
168162
169163
const handleUnmerge = () => {
@@ -179,8 +173,8 @@
179173
const toggleHidePerson = async () => {
180174
try {
181175
await updatePerson({
182-
id: data.person.id,
183-
personUpdateDto: { isHidden: !data.person.isHidden },
176+
id: person.id,
177+
personUpdateDto: { isHidden: !person.isHidden },
184178
});
185179
186180
notificationController.show({
@@ -208,7 +202,7 @@
208202
return;
209203
}
210204
try {
211-
await updatePerson({ id: data.person.id, personUpdateDto: { featureFaceAssetId: asset.id } });
205+
await updatePerson({ id: person.id, personUpdateDto: { featureFaceAssetId: asset.id } });
212206
notificationController.show({ message: $t('feature_photo_updated'), type: NotificationType.Info });
213207
} catch (error) {
214208
handleError(error, $t('errors.unable_to_set_feature_photo'));
@@ -233,7 +227,7 @@
233227
type: NotificationType.Info,
234228
});
235229
people = people.filter((person: PersonResponseDto) => person.id !== personToMerge.id);
236-
if (personToBeMergedIn.name != personName && data.person.id === personToBeMergedIn.id) {
230+
if (personToBeMergedIn.name != personName && person.id === personToBeMergedIn.id) {
237231
await updateAssetCount();
238232
refreshAssetGrid = !refreshAssetGrid;
239233
return;
@@ -244,22 +238,22 @@
244238
}
245239
};
246240
247-
const handleSuggestPeople = (person: PersonResponseDto) => {
241+
const handleSuggestPeople = (person2: PersonResponseDto) => {
248242
isEditingName = false;
249243
potentialMergePeople = [];
250244
personName = person.name;
251-
personMerge1 = data.person;
252-
personMerge2 = person;
245+
personMerge1 = person;
246+
personMerge2 = person2;
253247
viewMode = ViewMode.SUGGEST_MERGE;
254248
};
255249
256250
const changeName = async () => {
257251
viewMode = ViewMode.VIEW_ASSETS;
258-
data.person.name = personName;
252+
person.name = personName;
259253
try {
260254
isEditingName = false;
261255
262-
await updatePerson({ id: data.person.id, personUpdateDto: { name: personName } });
256+
await updatePerson({ id: person.id, personUpdateDto: { name: personName } });
263257
264258
notificationController.show({
265259
message: $t('change_name_successfully'),
@@ -283,7 +277,7 @@
283277
potentialMergePeople = [];
284278
personName = name;
285279
286-
if (data.person.name === personName) {
280+
if (person.name === personName) {
287281
return;
288282
}
289283
if (name === '') {
@@ -294,12 +288,11 @@
294288
const result = await searchPerson({ name: personName, withHidden: true });
295289
296290
const existingPerson = result.find(
297-
(person: PersonResponseDto) =>
298-
person.name.toLowerCase() === personName.toLowerCase() && person.id !== data.person.id && person.name,
291+
({ name, id }: PersonResponseDto) => name.toLowerCase() === personName.toLowerCase() && id !== person.id && name,
299292
);
300293
if (existingPerson) {
301294
personMerge2 = existingPerson;
302-
personMerge1 = data.person;
295+
personMerge1 = person;
303296
potentialMergePeople = result
304297
.filter(
305298
(person: PersonResponseDto) =>
@@ -318,10 +311,10 @@
318311
const handleSetBirthDate = async (birthDate: string) => {
319312
try {
320313
viewMode = ViewMode.VIEW_ASSETS;
321-
data.person.birthDate = birthDate;
314+
person.birthDate = birthDate;
322315
323316
const updatedPerson = await updatePerson({
324-
id: data.person.id,
317+
id: person.id,
325318
personUpdateDto: { birthDate: birthDate.length > 0 ? birthDate : null },
326319
});
327320
@@ -354,7 +347,7 @@
354347
{#if viewMode === ViewMode.UNASSIGN_ASSETS}
355348
<UnMergeFaceSelector
356349
assetIds={[...$selectedAssets].map((a) => a.id)}
357-
personAssets={data.person}
350+
personAssets={person}
358351
on:close={() => (viewMode = ViewMode.VIEW_ASSETS)}
359352
on:confirm={handleUnmerge}
360353
/>
@@ -373,14 +366,14 @@
373366

374367
{#if viewMode === ViewMode.BIRTH_DATE}
375368
<SetBirthDateModal
376-
birthDate={data.person.birthDate ?? ''}
369+
birthDate={person.birthDate ?? ''}
377370
on:close={() => (viewMode = ViewMode.VIEW_ASSETS)}
378371
on:updated={(event) => handleSetBirthDate(event.detail)}
379372
/>
380373
{/if}
381374

382375
{#if viewMode === ViewMode.MERGE_PEOPLE}
383-
<MergeFaceSelector person={data.person} on:back={handleGoBack} on:merge={({ detail }) => handleMerge(detail)} />
376+
<MergeFaceSelector {person} on:back={handleGoBack} on:merge={({ detail }) => handleMerge(detail)} />
384377
{/if}
385378

386379
<header>
@@ -394,7 +387,7 @@
394387
</ButtonContextMenu>
395388
<FavoriteAction removeFavorite={isAllFavorite} onFavorite={() => assetStore.triggerUpdate()} />
396389
<ButtonContextMenu icon={mdiDotsVertical} title={$t('add')}>
397-
<DownloadAction menuItem filename="{data.person.name || 'immich'}.zip" />
390+
<DownloadAction menuItem filename="{person.name || 'immich'}.zip" />
398391
<MenuOption
399392
icon={mdiAccountMultipleCheckOutline}
400393
text={$t('fix_incorrect_match')}
@@ -417,8 +410,8 @@
417410
onClick={() => (viewMode = ViewMode.SELECT_PERSON)}
418411
/>
419412
<MenuOption
420-
text={data.person.isHidden ? $t('unhide_person') : $t('hide_person')}
421-
icon={data.person.isHidden ? mdiEyeOutline : mdiEyeOffOutline}
413+
text={person.isHidden ? $t('unhide_person') : $t('hide_person')}
414+
icon={person.isHidden ? mdiEyeOutline : mdiEyeOffOutline}
422415
onClick={() => toggleHidePerson()}
423416
/>
424417
<MenuOption
@@ -445,7 +438,7 @@
445438
</header>
446439

447440
<main class="relative h-screen overflow-hidden bg-immich-bg tall:ml-4 pt-[var(--navbar-height)] dark:bg-immich-dark-bg">
448-
{#key refreshAssetGrid}
441+
{#key person.id}
449442
<AssetGrid
450443
enableRouting={true}
451444
{assetStore}
@@ -468,9 +461,9 @@
468461
<section class="flex w-64 sm:w-96 place-items-center border-black">
469462
{#if isEditingName}
470463
<EditNameInput
471-
person={data.person}
464+
{person}
472465
bind:suggestedPeople
473-
bind:name
466+
name={person.name}
474467
bind:isSearchingPeople
475468
on:change={(event) => handleNameChange(event.detail)}
476469
{thumbnailData}
@@ -487,15 +480,15 @@
487480
circle
488481
shadow
489482
url={thumbnailData}
490-
altText={data.person.name}
483+
altText={person.name}
491484
widthStyle="3.375rem"
492485
heightStyle="3.375rem"
493486
/>
494487
<div
495488
class="flex flex-col justify-center text-left px-4 h-14 text-immich-primary dark:text-immich-dark-primary"
496489
>
497-
{#if data.person.name}
498-
<p class="w-40 sm:w-72 font-medium truncate">{data.person.name}</p>
490+
{#if person.name}
491+
<p class="w-40 sm:w-72 font-medium truncate">{person.name}</p>
499492
<p class="absolute w-fit text-sm text-gray-500 dark:text-immich-gray bottom-0">
500493
{$t('assets_count', { values: { count: numberOfAssets } })}
501494
</p>

0 commit comments

Comments
 (0)