Rename and relocate timeline-related components

• Move asset-grid-asset-viewer to timeline-asset-viewer in timeline-viewer/
• Move asset-date-group-selection-aware to selectable-timeline-day in timeline-viewer/timeline-day/
• Move asset-date-group-comp to timeline-day in timeline-viewer/timeline-day/
• Update all imports in timeline-viewer.svelte
This commit is contained in:
midzelis 2025-08-14 21:26:22 +00:00
parent 6b564cd63c
commit 8465ce5a22
8 changed files with 32 additions and 24 deletions

View file

@ -129,9 +129,9 @@
} }
}; };
let isTrashEnabled = $derived($featureFlags.loaded && $featureFlags.trash); const isTrashEnabled = $derived($featureFlags.loaded && $featureFlags.trash);
let isEmpty = $derived(timelineManager.isInitialized && timelineManager.months.length === 0); const isEmpty = $derived(timelineManager.isInitialized && timelineManager.months.length === 0);
let idsSelectedAssets = $derived(assetInteraction.selectedAssets.map(({ id }) => id)); const idsSelectedAssets = $derived(assetInteraction.selectedAssets.map(({ id }) => id));
let isShortcutModalOpen = false; let isShortcutModalOpen = false;
const handleOpenShortcutModal = async () => { const handleOpenShortcutModal = async () => {

View file

@ -7,10 +7,11 @@
import { uploadAssetsStore } from '$lib/stores/upload'; import { uploadAssetsStore } from '$lib/stores/upload';
import { navigate } from '$lib/utils/navigation'; import { navigate } from '$lib/utils/navigation';
import AssetDateGroupComp from '$lib/components/photos-page/asset-date-group-comp.svelte'; import TimelineDay from '$lib/components/timeline-viewer/timeline-day/timeline-day.svelte';
import { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte'; import { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte';
import { assetsSnapshot, type Snippet } from '$lib/managers/timeline-manager/utils.svelte'; import { assetsSnapshot } from '$lib/managers/timeline-manager/utils.svelte';
import { searchStore } from '$lib/stores/search.svelte'; import { searchStore } from '$lib/stores/search.svelte';
import type { Snippet } from 'svelte';
let { isUploading } = uploadAssetsStore; let { isUploading } = uploadAssetsStore;
@ -22,11 +23,13 @@
monthGroup: MonthGroup; monthGroup: MonthGroup;
timelineManager: TimelineManager; timelineManager: TimelineManager;
assetInteraction: AssetInteraction; assetInteraction: AssetInteraction;
customLayout?: Snippet<[TimelineAsset]>; customLayout?: Snippet<[TimelineAsset]>;
onAssetOpen?: (dayGroup: DayGroup, asset: TimelineAsset, defaultAssetOpen: () => void) => void;
onSelect: (asset: TimelineAsset) => void; onSelect: (asset: TimelineAsset) => void;
onScrollCompensation: (compensation: { heightDelta?: number; scrollTop?: number }) => void; onScrollCompensation: (compensation: { heightDelta?: number; scrollTop?: number }) => void;
onScrollToTop: () => void; onScrollToTop: () => void;
onAssetOpen?: (dayGroup: DayGroup, asset: TimelineAsset, defaultAssetOpen: () => void) => void;
} }
let { let {
@ -36,12 +39,12 @@
showArchiveIcon, showArchiveIcon,
monthGroup = $bindable(), monthGroup = $bindable(),
assetInteraction, assetInteraction,
timelineManager,
customLayout, customLayout,
timelineManager,
onAssetOpen,
onSelect, onSelect,
onScrollCompensation, onScrollCompensation,
onScrollToTop, onScrollToTop,
onAssetOpen,
}: Props = $props(); }: Props = $props();
let lastAssetMouseEvent: TimelineAsset | null = $state(null); let lastAssetMouseEvent: TimelineAsset | null = $state(null);
@ -259,7 +262,7 @@
<svelte:document onkeydown={onKeyDown} onkeyup={onKeyUp} /> <svelte:document onkeydown={onKeyDown} onkeyup={onKeyUp} />
<AssetDateGroupComp <TimelineDay
{customLayout} {customLayout}
{isSelectionMode} {isSelectionMode}
{singleSelect} {singleSelect}
@ -267,7 +270,6 @@
{showArchiveIcon} {showArchiveIcon}
{monthGroup} {monthGroup}
{timelineManager} {timelineManager}
{onThumbnailClick}
{onScrollCompensation} {onScrollCompensation}
onHover={handleOnHover} onHover={handleOnHover}
onAssetOpen={handleOnAssetOpen} onAssetOpen={handleOnAssetOpen}
@ -277,4 +279,4 @@
isAssetSelected={(asset) => assetInteraction.hasSelectedAsset(asset.id) || timelineManager.albumAssets.has(asset.id)} isAssetSelected={(asset) => assetInteraction.hasSelectedAsset(asset.id) || timelineManager.albumAssets.has(asset.id)}
isAssetSelectionCandidate={(asset) => assetInteraction.hasSelectionCandidate(asset.id)} isAssetSelectionCandidate={(asset) => assetInteraction.hasSelectionCandidate(asset.id)}
isAssetDisabled={(asset) => timelineManager.albumAssets.has(asset.id)} isAssetDisabled={(asset) => timelineManager.albumAssets.has(asset.id)}
></AssetDateGroupComp> />

View file

@ -24,6 +24,7 @@
showArchiveIcon: boolean; showArchiveIcon: boolean;
monthGroup: MonthGroup; monthGroup: MonthGroup;
timelineManager: TimelineManager; timelineManager: TimelineManager;
customLayout?: Snippet<[TimelineAsset]>; customLayout?: Snippet<[TimelineAsset]>;
onScrollCompensation: (compensation: { heightDelta?: number; scrollTop?: number }) => void; onScrollCompensation: (compensation: { heightDelta?: number; scrollTop?: number }) => void;
@ -46,6 +47,7 @@
showArchiveIcon, showArchiveIcon,
monthGroup, monthGroup,
timelineManager, timelineManager,
customLayout, customLayout,
onScrollCompensation, onScrollCompensation,

View file

@ -2,10 +2,10 @@
import { afterNavigate, beforeNavigate } from '$app/navigation'; import { afterNavigate, beforeNavigate } from '$app/navigation';
import { page } from '$app/stores'; import { page } from '$app/stores';
import { resizeObserver, type OnResizeCallback } from '$lib/actions/resize-observer'; import { resizeObserver, type OnResizeCallback } from '$lib/actions/resize-observer';
import AssetDateGroupSelectionAware from '$lib/components/photos-page/asset-date-group-selection-aware.svelte';
import AssetGridActions from '$lib/components/photos-page/asset-grid-actions.svelte'; import AssetGridActions from '$lib/components/photos-page/asset-grid-actions.svelte';
import AssetGridAssetViewer from '$lib/components/photos-page/asset-grid-asset-viewer.svelte';
import Skeleton from '$lib/components/timeline-viewer/skeleton.svelte'; import Skeleton from '$lib/components/timeline-viewer/skeleton.svelte';
import TimelineAssetViewer from '$lib/components/timeline-viewer/timeline-asset-viewer.svelte';
import SelectableTimelineDay from '$lib/components/timeline-viewer/timeline-day/selectable-timeline-day.svelte';
import { AssetAction } from '$lib/constants'; import { AssetAction } from '$lib/constants';
import type { MonthGroup } from '$lib/managers/timeline-manager/month-group.svelte'; import type { MonthGroup } from '$lib/managers/timeline-manager/month-group.svelte';
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
@ -316,7 +316,7 @@
style:transform={`translate3d(0,${absoluteHeight}px,0)`} style:transform={`translate3d(0,${absoluteHeight}px,0)`}
style:width="100%" style:width="100%"
> >
<AssetDateGroupSelectionAware <SelectableTimelineDay
{withStacked} {withStacked}
{showArchiveIcon} {showArchiveIcon}
{assetInteraction} {assetInteraction}
@ -344,15 +344,7 @@
<Portal target="body"> <Portal target="body">
{#if $showAssetViewer} {#if $showAssetViewer}
<AssetGridAssetViewer <TimelineAssetViewer bind:showSkeleton {timelineManager} {removeAction} {withStacked} {isShared} {album} {person} />
bind:showSkeleton
{timelineManager}
{removeAction}
{withStacked}
{isShared}
{album}
{person}
/>
{/if} {/if}
</Portal> </Portal>

View file

@ -13,6 +13,7 @@ export class DayGroup {
readonly monthGroup: MonthGroup; readonly monthGroup: MonthGroup;
readonly index: number; readonly index: number;
readonly groupTitle: string; readonly groupTitle: string;
readonly groupTitleFull: string;
readonly day: number; readonly day: number;
viewerAssets: ViewerAsset[] = $state([]); viewerAssets: ViewerAsset[] = $state([]);
@ -31,6 +32,7 @@ export class DayGroup {
this.monthGroup = monthGroup; this.monthGroup = monthGroup;
this.day = day; this.day = day;
this.groupTitle = groupTitle; this.groupTitle = groupTitle;
this.groupTitleFull = groupTitle;
} }
get top() { get top() {

View file

@ -4,6 +4,7 @@ import { CancellableTask } from '$lib/utils/cancellable-task';
import { handleError } from '$lib/utils/handle-error'; import { handleError } from '$lib/utils/handle-error';
import { import {
formatGroupTitle, formatGroupTitle,
formatGroupTitleFull,
formatMonthGroupTitle, formatMonthGroupTitle,
fromTimelinePlainDate, fromTimelinePlainDate,
fromTimelinePlainDateTime, fromTimelinePlainDateTime,
@ -222,7 +223,8 @@ export class MonthGroup {
addContext.setDayGroup(dayGroup, localDateTime); addContext.setDayGroup(dayGroup, localDateTime);
} else { } else {
const groupTitle = formatGroupTitle(fromTimelinePlainDate(localDateTime)); const groupTitle = formatGroupTitle(fromTimelinePlainDate(localDateTime));
dayGroup = new DayGroup(this, this.dayGroups.length, localDateTime.day, groupTitle); const groupTitleFull = formatGroupTitleFull(fromTimelinePlainDate(localDateTime));
dayGroup = new DayGroup(this, this.dayGroups.length, localDateTime.day, groupTitle, groupTitleFull);
this.dayGroups.push(dayGroup); this.dayGroups.push(dayGroup);
addContext.setDayGroup(dayGroup, localDateTime); addContext.setDayGroup(dayGroup, localDateTime);
addContext.newDayGroups.add(dayGroup); addContext.newDayGroups.add(dayGroup);

View file

@ -152,6 +152,14 @@ export function formatGroupTitle(_date: DateTime): string {
return getDateLocaleString(date, { locale: get(locale) }); return getDateLocaleString(date, { locale: get(locale) });
} }
export const formatGroupTitleFull = (_date: DateTime): string => {
if (!_date.isValid) {
return _date.toString();
}
const date = _date as DateTime<true>;
return getDateLocaleString(date);
};
export const getDateLocaleString = (date: DateTime, opts?: LocaleOptions): string => export const getDateLocaleString = (date: DateTime, opts?: LocaleOptions): string =>
date.toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY, opts); date.toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY, opts);