Skip to content

Commit

Permalink
refactor(web): folders store (immich-app#14305)
Browse files Browse the repository at this point in the history
* refactor(web): folders store

* use typescript private
  • Loading branch information
michelheusschen authored Nov 23, 2024
1 parent 454836b commit c33b918
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 81 deletions.
69 changes: 0 additions & 69 deletions web/src/lib/stores/folders.store.ts

This file was deleted.

45 changes: 45 additions & 0 deletions web/src/lib/stores/folders.svelte.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import {
getAssetsByOriginalPath,
getUniqueOriginalPaths,
/**
* TODO: Incorrect type
*/
type AssetResponseDto,
} from '@immich/sdk';

type AssetCache = {
[path: string]: AssetResponseDto[];
};

class FoldersStore {
private initialized = false;
uniquePaths = $state<string[]>([]);
assets = $state<AssetCache>({});

async fetchUniquePaths() {
if (this.initialized) {
return;
}
this.initialized = true;

const uniquePaths = await getUniqueOriginalPaths();
this.uniquePaths.push(...uniquePaths);
this.uniquePaths.sort();
}

async fetchAssetsByPath(path: string) {
if (this.assets[path]) {
return;
}

this.assets[path] = await getAssetsByOriginalPath({ path });
}

clearCache() {
this.initialized = false;
this.uniquePaths = [];
this.assets = {};
}
}

export const foldersStore = new FoldersStore();
2 changes: 1 addition & 1 deletion web/src/lib/utils/auth.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { browser } from '$app/environment';
import { goto } from '$app/navigation';
import { foldersStore } from '$lib/stores/folders.store';
import { foldersStore } from '$lib/stores/folders.svelte';
import { purchaseStore } from '$lib/stores/purchase.store';
import { serverInfo } from '$lib/stores/server-info.store';
import { preferences as preferences$, resetSavedUser, user as user$ } from '$lib/stores/user.store';
Expand Down
2 changes: 0 additions & 2 deletions web/src/lib/utils/tree-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ export const normalizeTreePath = (path: string) => path.replace(/^\//, '').repla
export function buildTree(paths: string[]) {
const root: RecursiveObject = {};

paths.sort();

for (const path of paths) {
const parts = path.split('/');
let current = root;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import TreeItems from '$lib/components/shared-components/tree/tree-items.svelte';
import { AppRoute, QueryParameter } from '$lib/constants';
import type { Viewport } from '$lib/stores/assets.store';
import { foldersStore } from '$lib/stores/folders.store';
import { foldersStore } from '$lib/stores/folders.svelte';
import { buildTree, normalizeTreePath } from '$lib/utils/tree-utils';
import { mdiFolder, mdiFolderHome, mdiFolderOutline } from '@mdi/js';
import { onMount } from 'svelte';
Expand All @@ -27,7 +27,7 @@
const viewport: Viewport = $state({ width: 0, height: 0 });
let pathSegments = $derived(data.path ? data.path.split('/') : []);
let tree = $derived(buildTree($foldersStore?.uniquePaths || []));
let tree = $derived(buildTree(foldersStore.uniquePaths));
let currentPath = $derived($page.url.searchParams.get(QueryParameter.PATH) || '');
let currentTreeItems = $derived(currentPath ? data.currentFolders : Object.keys(tree));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { QueryParameter } from '$lib/constants';
import { foldersStore } from '$lib/stores/folders.store';
import { foldersStore } from '$lib/stores/folders.svelte';
import { authenticate } from '$lib/utils/auth';
import { getFormatter } from '$lib/utils/i18n';
import { getAssetInfoFromParam } from '$lib/utils/navigation';
import { buildTree, normalizeTreePath } from '$lib/utils/tree-utils';
import { get } from 'svelte/store';
import type { PageLoad } from './$types';

export const load = (async ({ params, url }) => {
Expand All @@ -13,18 +12,16 @@ export const load = (async ({ params, url }) => {
const $t = await getFormatter();

await foldersStore.fetchUniquePaths();
const { uniquePaths } = get(foldersStore);

let pathAssets = null;

const path = url.searchParams.get(QueryParameter.PATH);
if (path) {
await foldersStore.fetchAssetsByPath(path);
const { assets } = get(foldersStore);
pathAssets = assets[path] || null;
pathAssets = foldersStore.assets[path] || null;
}

let tree = buildTree(uniquePaths || []);
let tree = buildTree(foldersStore.uniquePaths);
const parts = normalizeTreePath(path || '').split('/');
for (const part of parts) {
tree = tree?.[part];
Expand Down
2 changes: 1 addition & 1 deletion web/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"target": "es2020",
"target": "es2022",
"types": ["vitest/globals"]
},
"extends": "./.svelte-kit/tsconfig.json"
Expand Down

0 comments on commit c33b918

Please sign in to comment.