Skip to content

Commit 0b02fda

Browse files
authored
fix(web): only show the timezone when it is known (#12779)
1 parent 96516ae commit 0b02fda

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

Diff for: web/src/lib/components/asset-viewer/detail-panel.svelte

+22-25
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<script lang="ts">
2+
import { goto } from '$app/navigation';
3+
import DetailPanelDescription from '$lib/components/asset-viewer/detail-panel-description.svelte';
24
import DetailPanelLocation from '$lib/components/asset-viewer/detail-panel-location.svelte';
5+
import DetailPanelRating from '$lib/components/asset-viewer/detail-panel-star-rating.svelte';
6+
import DetailPanelTags from '$lib/components/asset-viewer/detail-panel-tags.svelte';
37
import Icon from '$lib/components/elements/icon.svelte';
48
import ChangeDate from '$lib/components/shared-components/change-date.svelte';
59
import { AppRoute, QueryParameter, timeToLoadTheMap } from '$lib/constants';
@@ -9,6 +13,9 @@
913
import { preferences, user } from '$lib/stores/user.store';
1014
import { getAssetThumbnailUrl, getPeopleThumbnailUrl, handlePromiseError, isSharedLink } from '$lib/utils';
1115
import { delay, isFlipped } from '$lib/utils/asset-utils';
16+
import { getByteUnitString } from '$lib/utils/byte-units';
17+
import { handleError } from '$lib/utils/handle-error';
18+
import { fromDateTimeOriginal, fromLocalDateTime } from '$lib/utils/timeline-util';
1219
import {
1320
AssetMediaSize,
1421
getAssetInfo,
@@ -18,6 +25,7 @@
1825
type ExifResponseDto,
1926
} from '@immich/sdk';
2027
import {
28+
mdiAccountOff,
2129
mdiCalendar,
2230
mdiCameraIris,
2331
mdiClose,
@@ -26,24 +34,17 @@
2634
mdiImageOutline,
2735
mdiInformationOutline,
2836
mdiPencil,
29-
mdiAccountOff,
3037
} from '@mdi/js';
3138
import { DateTime } from 'luxon';
3239
import { createEventDispatcher } from 'svelte';
40+
import { t } from 'svelte-i18n';
3341
import { slide } from 'svelte/transition';
34-
import { getByteUnitString } from '$lib/utils/byte-units';
35-
import { handleError } from '$lib/utils/handle-error';
3642
import ImageThumbnail from '../assets/thumbnail/image-thumbnail.svelte';
3743
import CircleIconButton from '../elements/buttons/circle-icon-button.svelte';
3844
import PersonSidePanel from '../faces-page/person-side-panel.svelte';
39-
import UserAvatar from '../shared-components/user-avatar.svelte';
4045
import LoadingSpinner from '../shared-components/loading-spinner.svelte';
46+
import UserAvatar from '../shared-components/user-avatar.svelte';
4147
import AlbumListItemDetails from './album-list-item-details.svelte';
42-
import DetailPanelDescription from '$lib/components/asset-viewer/detail-panel-description.svelte';
43-
import DetailPanelRating from '$lib/components/asset-viewer/detail-panel-star-rating.svelte';
44-
import { t } from 'svelte-i18n';
45-
import { goto } from '$app/navigation';
46-
import DetailPanelTags from '$lib/components/asset-viewer/detail-panel-tags.svelte';
4748
4849
export let asset: AssetResponseDto;
4950
export let albums: AlbumResponseDto[] = [];
@@ -99,6 +100,12 @@
99100
100101
$: unassignedFaces = asset.unassignedFaces || [];
101102
103+
$: timeZone = asset.exifInfo?.timeZone;
104+
$: dateTime =
105+
timeZone && asset.exifInfo?.dateTimeOriginal
106+
? fromDateTimeOriginal(asset.exifInfo.dateTimeOriginal, timeZone)
107+
: fromLocalDateTime(asset.localDateTime);
108+
102109
const dispatch = createEventDispatcher<{
103110
close: void;
104111
}>();
@@ -261,10 +268,7 @@
261268
<p class="text-sm">{$t('no_exif_info_available').toUpperCase()}</p>
262269
{/if}
263270

264-
{#if asset.exifInfo?.dateTimeOriginal}
265-
{@const assetDateTimeOriginal = DateTime.fromISO(asset.exifInfo.dateTimeOriginal, {
266-
zone: asset.exifInfo.timeZone ?? undefined,
267-
})}
271+
{#if dateTime}
268272
<button
269273
type="button"
270274
class="flex w-full text-left justify-between place-items-start gap-4 py-4"
@@ -280,7 +284,7 @@
280284

281285
<div>
282286
<p>
283-
{assetDateTimeOriginal.toLocaleString(
287+
{dateTime.toLocaleString(
284288
{
285289
month: 'short',
286290
day: 'numeric',
@@ -291,12 +295,12 @@
291295
</p>
292296
<div class="flex gap-2 text-sm">
293297
<p>
294-
{assetDateTimeOriginal.toLocaleString(
298+
{dateTime.toLocaleString(
295299
{
296300
weekday: 'short',
297301
hour: 'numeric',
298302
minute: '2-digit',
299-
timeZoneName: 'longOffset',
303+
timeZoneName: timeZone ? 'longOffset' : undefined,
300304
},
301305
{ locale: $locale },
302306
)}
@@ -325,16 +329,9 @@
325329
{/if}
326330

327331
{#if isShowChangeDate}
328-
{@const assetDateTimeOriginal = asset.exifInfo?.dateTimeOriginal
329-
? DateTime.fromISO(asset.exifInfo.dateTimeOriginal, {
330-
zone: asset.exifInfo.timeZone ?? undefined,
331-
locale: $locale,
332-
})
333-
: DateTime.now()}
334-
{@const assetTimeZoneOriginal = asset.exifInfo?.timeZone ?? ''}
335332
<ChangeDate
336-
initialDate={assetDateTimeOriginal}
337-
initialTimeZone={assetTimeZoneOriginal}
333+
initialDate={dateTime}
334+
initialTimeZone={timeZone ?? ''}
338335
on:confirm={({ detail: date }) => handleConfirmChangeDate(date)}
339336
on:cancel={() => (isShowChangeDate = false)}
340337
/>

Diff for: web/src/lib/utils/timeline-util.ts

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ export type ScrollTargetListener = ({
3636
export const fromLocalDateTime = (localDateTime: string) =>
3737
DateTime.fromISO(localDateTime, { zone: 'UTC', locale: get(locale) });
3838

39+
export const fromDateTimeOriginal = (dateTimeOriginal: string, timeZone: string) =>
40+
DateTime.fromISO(dateTimeOriginal, { zone: timeZone });
41+
3942
export const groupDateFormat: Intl.DateTimeFormatOptions = {
4043
weekday: 'short',
4144
month: 'short',

0 commit comments

Comments
 (0)