refactor(mobile): render list (#16303)

* refactor(mobile): render list 2

* wip

* wip: asset selection page

* remove render_list provider

* remove dead code

* yaml format

* remove unused file

* woop woop more clean up

* woop woop more clean up 2

* fix: album selection doesn't load instantly
This commit is contained in:
Alex
2025-02-25 11:33:48 -06:00
committed by GitHub
parent 7c851893b4
commit d0381fddec
26 changed files with 134 additions and 140 deletions
@@ -6,11 +6,10 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/models/albums/asset_selection_page_result.model.dart';
import 'package:immich_mobile/providers/asset_viewer/render_list.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:isar/isar.dart';
@RoutePage()
class AlbumAssetSelectionPage extends HookConsumerWidget {
@@ -18,16 +17,14 @@ class AlbumAssetSelectionPage extends HookConsumerWidget {
super.key,
required this.existingAssets,
this.canDeselect = false,
required this.query,
});
final Set<Asset> existingAssets;
final QueryBuilder<Asset, Asset, QAfterSortBy>? query;
final bool canDeselect;
@override
Widget build(BuildContext context, WidgetRef ref) {
final renderList = ref.watch(renderListQueryProvider(query));
final assetSelectionRenderList = ref.watch(assetSelectionTimelineProvider);
final selected = useState<Set<Asset>>(existingAssets);
final selectionEnabledHook = useState(true);
@@ -83,7 +80,7 @@ class AlbumAssetSelectionPage extends HookConsumerWidget {
),
],
),
body: renderList.widgetWhen(
body: assetSelectionRenderList.widgetWhen(
onData: (data) => buildBody(data),
),
);
-2
View File
@@ -21,7 +21,6 @@ import 'package:immich_mobile/providers/auth.provider.dart';
import 'package:immich_mobile/widgets/album/album_viewer_appbar.dart';
import 'package:immich_mobile/routing/router.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/providers/asset.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
@@ -63,7 +62,6 @@ class AlbumViewer extends HookConsumerWidget {
AlbumAssetSelectionRoute(
existingAssets: album.assets,
canDeselect: false,
query: getRemoteAssetQuery(ref),
),
);
@@ -4,6 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/pages/album/album_viewer.dart';
import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:immich_mobile/providers/album/current_album.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
@RoutePage()
class AlbumViewerPage extends HookConsumerWidget {
@@ -16,6 +17,9 @@ class AlbumViewerPage extends HookConsumerWidget {
// Listen provider to prevent autoDispose when navigating to other routes from within the viewer page
ref.listen(currentAlbumProvider, (_, __) {});
// This call helps rendering the asset selection instantly
ref.listen(assetSelectionTimelineProvider, (_, __) {});
ref.listen(albumWatcher(albumId), (_, albumFuture) {
albumFuture.whenData(
(value) => ref.read(currentAlbumProvider.notifier).set(value),
@@ -8,7 +8,6 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/models/albums/asset_selection_page_result.model.dart';
import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:immich_mobile/providers/album/album_title.provider.dart';
import 'package:immich_mobile/providers/asset.provider.dart';
import 'package:immich_mobile/routing/router.dart';
import 'package:immich_mobile/widgets/album/album_action_filled_button.dart';
import 'package:immich_mobile/widgets/album/album_title_text_field.dart';
@@ -54,7 +53,6 @@ class CreateAlbumPage extends HookConsumerWidget {
AlbumAssetSelectionRoute(
existingAssets: selectedAssets.value,
canDeselect: true,
query: getRemoteAssetQuery(ref),
),
);
if (selectedAsset == null) {