- {#each places as item (item.data.id)}
-
+ {#each places as item (item.id)}
+ {@const city = item.exifInfo.city}
+
-
+
- {item.value}
+ {city}
{/each}
diff --git a/web/src/routes/(user)/places/+page.ts b/web/src/routes/(user)/places/+page.ts
index 5627111ce..1f3a15fb6 100644
--- a/web/src/routes/(user)/places/+page.ts
+++ b/web/src/routes/(user)/places/+page.ts
@@ -1,10 +1,10 @@
import { authenticate } from '$lib/utils/auth';
-import { getExploreData } from '@immich/sdk';
+import { getAssetsByCity } from '@immich/sdk';
import type { PageLoad } from './$types';
export const load = (async () => {
await authenticate();
- const items = await getExploreData();
+ const items = await getAssetsByCity();
return {
items,
diff --git a/web/src/test-data/factories/asset-factory.ts b/web/src/test-data/factories/asset-factory.ts
new file mode 100644
index 000000000..32cb723c0
--- /dev/null
+++ b/web/src/test-data/factories/asset-factory.ts
@@ -0,0 +1,30 @@
+import { faker } from '@faker-js/faker';
+import { AssetTypeEnum, type AssetResponseDto } from '@immich/sdk';
+import { Sync } from 'factory.ts';
+
+export const assetFactory = Sync.makeFactory
({
+ id: Sync.each(() => faker.string.uuid()),
+ deviceAssetId: Sync.each(() => faker.string.uuid()),
+ ownerId: Sync.each(() => faker.string.uuid()),
+ deviceId: '',
+ libraryId: Sync.each(() => faker.string.uuid()),
+ type: Sync.each(() => faker.helpers.enumValue(AssetTypeEnum)),
+ originalPath: Sync.each(() => faker.system.filePath()),
+ originalFileName: Sync.each(() => faker.system.fileName()),
+ resized: true,
+ thumbhash: Sync.each(() => faker.string.alphanumeric(28)),
+ fileCreatedAt: Sync.each(() => faker.date.past().toISOString()),
+ fileModifiedAt: Sync.each(() => faker.date.past().toISOString()),
+ localDateTime: Sync.each(() => faker.date.past().toISOString()),
+ updatedAt: Sync.each(() => faker.date.past().toISOString()),
+ isFavorite: Sync.each(() => faker.datatype.boolean()),
+ isArchived: Sync.each(() => faker.datatype.boolean()),
+ isTrashed: Sync.each(() => faker.datatype.boolean()),
+ duration: '0:00:00.00000',
+ checksum: Sync.each(() => faker.string.alphanumeric(28)),
+ isExternal: Sync.each(() => faker.datatype.boolean()),
+ isOffline: Sync.each(() => faker.datatype.boolean()),
+ isReadOnly: Sync.each(() => faker.datatype.boolean()),
+ hasMetadata: Sync.each(() => faker.datatype.boolean()),
+ stackCount: null,
+});