From 095ace8687a9ceaf53150f09be01238bc40a1e3c Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Jun 2025 12:32:18 -0500 Subject: [PATCH] feat: shared link action (#19610) --- .../share_link_action_button.widget.dart | 38 ++++++++++++++++++- .../home_bottom_app_bar.widget.dart | 2 +- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/mobile/lib/presentation/widgets/action_buttons/share_link_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/share_link_action_button.widget.dart index c227df1b33..8b82b1c54e 100644 --- a/mobile/lib/presentation/widgets/action_buttons/share_link_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/share_link_action_button.widget.dart @@ -1,16 +1,52 @@ +import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:immich_mobile/constants/enums.dart'; +import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/base_action_button.widget.dart'; +import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; +import 'package:immich_mobile/routing/router.dart'; class ShareLinkActionButton extends ConsumerWidget { - const ShareLinkActionButton({super.key}); + final ActionSource source; + + const ShareLinkActionButton({super.key, required this.source}); + + onAction(BuildContext context, WidgetRef ref) { + switch (source) { + case ActionSource.timeline: + timelineAction(context, ref); + case ActionSource.viewer: + viewerAction(ref); + } + } + + void timelineAction(BuildContext context, WidgetRef ref) { + final ids = ref + .read(multiSelectProvider.select((value) => value.selectedAssets)) + .whereType() + .toList() + .map((asset) => asset.id) + .toList(); + + context.pushRoute( + SharedLinkEditRoute( + assetsList: ids, + ), + ); + } + + void viewerAction(WidgetRef _) { + UnimplementedError("Viewer action for favorite is not implemented yet."); + } @override Widget build(BuildContext context, WidgetRef ref) { return BaseActionButton( iconData: Icons.link_rounded, label: "share_link".t(context: context), + onPressed: () => onAction(context, ref), ); } } diff --git a/mobile/lib/presentation/widgets/bottom_app_bar/home_bottom_app_bar.widget.dart b/mobile/lib/presentation/widgets/bottom_app_bar/home_bottom_app_bar.widget.dart index d7677b77e8..e2c2c2898f 100644 --- a/mobile/lib/presentation/widgets/bottom_app_bar/home_bottom_app_bar.widget.dart +++ b/mobile/lib/presentation/widgets/bottom_app_bar/home_bottom_app_bar.widget.dart @@ -34,7 +34,7 @@ class HomeBottomAppBar extends ConsumerWidget { actions: [ const ShareActionButton(), if (multiselect.hasRemote) ...[ - const ShareLinkActionButton(), + const ShareLinkActionButton(source: ActionSource.timeline), const ArchiveActionButton(), const FavoriteActionButton(source: ActionSource.timeline), const DownloadActionButton(),