diff --git a/web/src/lib/components/faces-page/set-birth-date-modal.svelte b/web/src/lib/components/faces-page/set-birth-date-modal.svelte deleted file mode 100644 index f5ecbfabf0..0000000000 --- a/web/src/lib/components/faces-page/set-birth-date-modal.svelte +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - {$t('birthdate_set_description')} - - - - onSubmit(e)} autocomplete="off" id="set-birth-date-form"> - - - - - - {#snippet stickyBottom()} - {$t('cancel')} - {$t('set')} - {/snippet} - diff --git a/web/src/lib/constants.ts b/web/src/lib/constants.ts index 3a1f8cf3de..bec3b0ceaa 100644 --- a/web/src/lib/constants.ts +++ b/web/src/lib/constants.ts @@ -384,7 +384,6 @@ export enum PersonPageViewMode { SELECT_PERSON = 'select-person', MERGE_PEOPLE = 'merge-people', SUGGEST_MERGE = 'suggest-merge', - BIRTH_DATE = 'birth-date', UNASSIGN_ASSETS = 'unassign-faces', } diff --git a/web/src/lib/modals/PersonEditBirthDateModal.svelte b/web/src/lib/modals/PersonEditBirthDateModal.svelte new file mode 100644 index 0000000000..2891d261ce --- /dev/null +++ b/web/src/lib/modals/PersonEditBirthDateModal.svelte @@ -0,0 +1,67 @@ + + + + + + + {$t('birthdate_set_description')} + + + + handleUpdateBirthDate()} autocomplete="off" id="set-birth-date-form"> + + + + + + + + + onClose()}>{$t('cancel')} + {$t('set')} + + + diff --git a/web/src/routes/(user)/people/+page.svelte b/web/src/routes/(user)/people/+page.svelte index 0cadd4b672..f53d364611 100644 --- a/web/src/routes/(user)/people/+page.svelte +++ b/web/src/routes/(user)/people/+page.svelte @@ -9,13 +9,14 @@ import PeopleCard from '$lib/components/faces-page/people-card.svelte'; import PeopleInfiniteScroll from '$lib/components/faces-page/people-infinite-scroll.svelte'; import SearchPeople from '$lib/components/faces-page/people-search.svelte'; - import SetBirthDateModal from '$lib/components/faces-page/set-birth-date-modal.svelte'; import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte'; import { notificationController, NotificationType, } from '$lib/components/shared-components/notification/notification'; import { ActionQueryParameterValue, AppRoute, QueryParameter, SessionStorageKey } from '$lib/constants'; + import { modalManager } from '$lib/managers/modal-manager.svelte'; + import PersonEditBirthDateModal from '$lib/modals/PersonEditBirthDateModal.svelte'; import { locale } from '$lib/stores/preferences.store'; import { websocketEvents } from '$lib/stores/websocket'; import { handlePromiseError } from '$lib/utils'; @@ -45,7 +46,6 @@ let selectHidden = $state(false); let searchName = $state(''); - let showSetBirthDateModal = $state(false); let showMergeModal = $state(false); let newName = $state(''); let currentPage = $state(1); @@ -53,7 +53,7 @@ let personMerge1 = $state(); let personMerge2 = $state(); let potentialMergePeople: PersonResponseDto[] = $state([]); - let edittingPerson: PersonResponseDto | null = $state(null); + let editingPerson: PersonResponseDto | null = $state(null); let searchedPeopleLocal: PersonResponseDto[] = $state([]); let innerHeight = $state(0); let searchPeopleElement = $state>(); @@ -135,7 +135,7 @@ const [personToMerge, personToBeMergedIn] = response; showMergeModal = false; - if (!edittingPerson) { + if (!editingPerson) { return; } try { @@ -155,7 +155,7 @@ } catch (error) { handleError(error, $t('errors.unable_to_save_name')); } - if (personToBeMergedIn.name !== newName && edittingPerson.id === personToBeMergedIn.id) { + if (personToBeMergedIn.name !== newName && editingPerson.id === personToBeMergedIn.id) { /* * * If the user merges one of the suggested people into the person he's editing it, it's merging the suggested person AND renames @@ -181,11 +181,6 @@ } }; - const handleSetBirthDate = (detail: PersonResponseDto) => { - showSetBirthDateModal = true; - edittingPerson = detail; - }; - const handleHidePerson = async (detail: PersonResponseDto) => { try { const updatedPerson = await updatePerson({ @@ -234,31 +229,19 @@ ); }; - const submitBirthDateChange = async (value: string) => { - showSetBirthDateModal = false; - if (!edittingPerson || value === edittingPerson.birthDate) { + const handleChangeBirthDate = async (person: PersonResponseDto) => { + const updatedPerson = await modalManager.show(PersonEditBirthDateModal, { person }); + + if (!updatedPerson) { return; } - try { - const updatedPerson = await updatePerson({ - id: edittingPerson.id, - personUpdateDto: { birthDate: value.length > 0 ? value : null }, - }); - - people = people.map((person: PersonResponseDto) => { - if (person.id === updatedPerson.id) { - return updatedPerson; - } - return person; - }); - notificationController.show({ - message: $t('birthdate_saved'), - type: NotificationType.Info, - }); - } catch (error) { - handleError(error, $t('errors.unable_to_save_name')); - } + people = people.map((person: PersonResponseDto) => { + if (person.id === updatedPerson.id) { + return updatedPerson; + } + return person; + }); }; const onResetSearchBar = async () => { @@ -274,7 +257,7 @@ let showPeople = $derived(searchName ? searchedPeopleLocal : visiblePeople); const onNameChangeInputFocus = (person: PersonResponseDto) => { - edittingPerson = person; + editingPerson = person; newName = person.name; }; @@ -414,7 +397,7 @@ > handleSetBirthDate(person)} + onSetBirthDate={() => handleChangeBirthDate(person)} onMergePeople={() => handleMergePeople(person)} onHidePerson={() => handleHidePerson(person)} onToggleFavorite={() => handleToggleFavorite(person)} @@ -444,14 +427,6 @@ {/if} - - {#if showSetBirthDateModal} - (showSetBirthDateModal = false)} - onUpdate={submitBirthDateChange} - /> - {/if} {#if selectHidden} diff --git a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index bfc7a9eb85..70500ca755 100644 --- a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -8,7 +8,6 @@ import EditNameInput from '$lib/components/faces-page/edit-name-input.svelte'; import MergeFaceSelector from '$lib/components/faces-page/merge-face-selector.svelte'; import MergeSuggestionModal from '$lib/components/faces-page/merge-suggestion-modal.svelte'; - import SetBirthDateModal from '$lib/components/faces-page/set-birth-date-modal.svelte'; import UnMergeFaceSelector from '$lib/components/faces-page/unmerge-face-selector.svelte'; import AddToAlbum from '$lib/components/photos-page/actions/add-to-album.svelte'; import ArchiveAction from '$lib/components/photos-page/actions/archive-action.svelte'; @@ -31,6 +30,8 @@ notificationController, } from '$lib/components/shared-components/notification/notification'; import { AppRoute, PersonPageViewMode, QueryParameter, SessionStorageKey } from '$lib/constants'; + import { modalManager } from '$lib/managers/modal-manager.svelte'; + import PersonEditBirthDateModal from '$lib/modals/PersonEditBirthDateModal.svelte'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { AssetStore } from '$lib/stores/assets-store.svelte'; @@ -322,27 +323,19 @@ await changeName(); }; - const handleSetBirthDate = async (birthDate: string) => { - try { - viewMode = PersonPageViewMode.VIEW_ASSETS; - person.birthDate = birthDate; + const handleSetBirthDate = async () => { + const updatedPerson = await modalManager.show(PersonEditBirthDateModal, { person }); - const updatedPerson = await updatePerson({ - id: person.id, - personUpdateDto: { birthDate: birthDate.length > 0 ? birthDate : null }, - }); - - people = people.map((person: PersonResponseDto) => { - if (person.id === updatedPerson.id) { - return updatedPerson; - } - return person; - }); - - notificationController.show({ message: $t('date_of_birth_saved'), type: NotificationType.Info }); - } catch (error) { - handleError(error, $t('errors.unable_to_save_date_of_birth')); + if (!updatedPerson) { + return; } + + people = people.map((person: PersonResponseDto) => { + if (person.id === updatedPerson.id) { + return updatedPerson; + } + return person; + }); }; const handleGoBack = async () => { @@ -389,7 +382,7 @@ onSelect={handleSelectFeaturePhoto} onEscape={handleEscape} > - {#if viewMode === PersonPageViewMode.VIEW_ASSETS || viewMode === PersonPageViewMode.SUGGEST_MERGE || viewMode === PersonPageViewMode.BIRTH_DATE} + {#if viewMode === PersonPageViewMode.VIEW_ASSETS || viewMode === PersonPageViewMode.SUGGEST_MERGE} {/if} -{#if viewMode === PersonPageViewMode.BIRTH_DATE} - (viewMode = PersonPageViewMode.VIEW_ASSETS)} - onUpdate={handleSetBirthDate} - /> -{/if} - {#if viewMode === PersonPageViewMode.MERGE_PEOPLE} {/if} @@ -568,7 +553,7 @@ {:else} - {#if viewMode === PersonPageViewMode.VIEW_ASSETS || viewMode === PersonPageViewMode.SUGGEST_MERGE || viewMode === PersonPageViewMode.BIRTH_DATE} + {#if viewMode === PersonPageViewMode.VIEW_ASSETS || viewMode === PersonPageViewMode.SUGGEST_MERGE} goto(previousRoute)}> {#snippet trailing()} @@ -582,11 +567,7 @@ icon={person.isHidden ? mdiEyeOutline : mdiEyeOffOutline} onClick={() => toggleHidePerson()} /> - (viewMode = PersonPageViewMode.BIRTH_DATE)} - /> +
- {$t('birthdate_set_description')} -
+ {$t('birthdate_set_description')} +