fix tree view issues and improve providers

This commit is contained in:
Fabian Freund
2025-11-09 07:23:23 +01:00
parent 0bc49b155f
commit da232bf8aa
12 changed files with 203 additions and 127 deletions
@@ -85,7 +85,9 @@ EquatableValue<List<String>> availableTabIds(
ContainerFilter containerFilter,
) {
final containerTabs = ref.watch(
containerTabIdsProvider(containerFilter).select((value) => value.value),
watchContainerTabIdsProvider(
containerFilter,
).select((value) => value.value),
);
final tabList = ref.watch(tabListProvider);
@@ -125,7 +127,7 @@ EquatableValue<List<TabEntity>> suggestedTabEntities(
}
final excludedTabIds = ref.watch(
containerTabIdsProvider(
watchContainerTabIdsProvider(
// ignore: provider_parameters
ContainerFilterById(containerId: containerId),
).select((value) => EquatableValue(value.value)),
@@ -187,7 +189,7 @@ EquatableValue<List<TabEntity>> seamlessFilteredTabEntities(
if (tabSearchResults == null) {
if (groupTrees) {
final trees = ref.watch(
tabTreesProvider.select(
watchTabTreesProvider.select(
(value) => EquatableValue(
value.value
?.map(
@@ -269,7 +269,7 @@ final class AvailableTabIdsProvider
}
}
String _$availableTabIdsHash() => r'6926ca03f97b12ebf9a46a48ed3da1b2cd559a74';
String _$availableTabIdsHash() => r'aa166b471d45913df5166a3126abeb7c0d791412';
final class AvailableTabIdsFamily extends $Family
with
@@ -448,7 +448,7 @@ final class SuggestedTabEntitiesProvider
}
String _$suggestedTabEntitiesHash() =>
r'534e78a9d1ddc5bace24dc0d9e5efee1292107c5';
r'6fb58bf4b7377f826377c88110c8e4aca9f6d6f9';
final class SuggestedTabEntitiesFamily extends $Family
with $FunctionalFamilyOverride<EquatableValue<List<TabEntity>>, String?> {
@@ -552,7 +552,7 @@ final class SeamlessFilteredTabEntitiesProvider
}
String _$seamlessFilteredTabEntitiesHash() =>
r'18b8ec876116eaa6e60fa321faba18a3bd7dd004';
r'eb6573514f55b598fbc1a91370079b4b8372c55e';
final class SeamlessFilteredTabEntitiesFamily extends $Family
with
@@ -48,13 +48,13 @@ class TabTreeDialog extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final selectedTabId = ref.watch(selectedTabProvider);
final tabs = ref.watch(tabDescendantsProvider(tabId));
final tabs = ref.watch(watchTabDescendantsProvider(tabId));
final graph = useMemoized(() {
final graph = Graph()..isTree = true;
if (tabs.hasValue) {
for (final MapEntry(:key, :value) in tabs.value!.entries) {
for (final MapEntry(:key, :value) in tabs.requireValue.entries) {
if (value != null) {
final current = Node.Id(key);
final parent = Node.Id(value);
@@ -84,12 +84,7 @@ class TabTreeDialog extends HookConsumerWidget {
appBar: AppBar(
backgroundColor: const Color(0x44000000),
elevation: 0,
leading: IconButton(
onPressed: () {
context.pop();
},
icon: const Icon(Icons.close),
),
leading: const CloseButton(),
),
floatingActionButton: FloatingActionButton(
child: const Icon(MdiIcons.target),
@@ -145,6 +140,11 @@ class TabTreeDialog extends HookConsumerWidget {
BrowserRoute().go(context);
},
onBeforeDelete: () {
if (graph.nodes.length <= 2) {
context.pop();
}
},
sourceSearchQuery: null,
),
);
@@ -32,7 +32,6 @@ import 'package:weblibre/features/geckoview/features/browser/presentation/widget
import 'package:weblibre/features/geckoview/features/find_in_page/domain/entities/find_in_page_state.dart';
import 'package:weblibre/features/geckoview/features/find_in_page/presentation/controllers/find_in_page.dart';
import 'package:weblibre/features/geckoview/features/tabs/data/entities/tab_entity.dart';
import 'package:weblibre/features/geckoview/features/tabs/domain/providers.dart';
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/tab.dart';
import 'package:weblibre/presentation/hooks/menu_controller.dart';
import 'package:weblibre/utils/ui_helper.dart' as ui_helper;
@@ -266,6 +265,7 @@ class SingleTabPreview extends HookConsumerWidget {
final double deleteThreshold;
final void Function() onClose;
final void Function()? onBeforeDelete;
const SingleTabPreview({
required this.tabId,
@@ -273,6 +273,7 @@ class SingleTabPreview extends HookConsumerWidget {
required this.onClose,
required this.sourceSearchQuery,
this.deleteThreshold = 100,
this.onBeforeDelete,
super.key,
});
@@ -364,6 +365,8 @@ class SingleTabPreview extends HookConsumerWidget {
// );
// },
onDelete: () async {
onBeforeDelete?.call();
await ref.read(tabRepositoryProvider.notifier).closeTab(tabId);
if (context.mounted) {
@@ -495,6 +498,8 @@ class TabTreePreview extends HookConsumerWidget {
await ref
.read(tabRepositoryProvider.notifier)
.selectTab(entity.tabId);
} else {
onClose();
}
},
// onDeleteAll: (host) async {
@@ -516,9 +521,9 @@ class TabTreePreview extends HookConsumerWidget {
// );
// },
onDelete: () async {
final tabs = await ref.read(
tabDescendantsProvider(entity.rootId).future,
);
final tabs = await ref
.read(tabDataRepositoryProvider.notifier)
.getTabDescendants(entity.rootId);
await ref
.read(tabRepositoryProvider.notifier)
@@ -29,7 +29,7 @@ import 'package:weblibre/features/search/util/tokenized_filter.dart';
part 'providers.g.dart';
@Riverpod(keepAlive: true)
Stream<List<ContainerDataWithCount>> containersWithCount(Ref ref) {
Stream<List<ContainerDataWithCount>> watchContainersWithCount(Ref ref) {
final db = ref.watch(tabDatabaseProvider);
return db.definitionsDrift.containersWithCount().watch();
}
@@ -40,7 +40,7 @@ AsyncValue<List<ContainerDataWithCount>> matchSortedContainersWithCount(
String? searchText,
) {
return ref.watch(
containersWithCountProvider.select((value) {
watchContainersWithCountProvider.select((value) {
if (searchText.isEmpty) {
return value;
}
@@ -57,7 +57,10 @@ AsyncValue<List<ContainerDataWithCount>> matchSortedContainersWithCount(
}
@Riverpod()
Stream<List<String>> containerTabIds(Ref ref, ContainerFilter containerFilter) {
Stream<List<String>> watchContainerTabIds(
Ref ref,
ContainerFilter containerFilter,
) {
final db = ref.watch(tabDatabaseProvider);
switch (containerFilter) {
@@ -71,18 +74,20 @@ Stream<List<String>> containerTabIds(Ref ref, ContainerFilter containerFilter) {
@Riverpod()
Future<int> containerTabCount(Ref ref, ContainerFilter containerFilter) {
return ref.watch(
containerTabIdsProvider(containerFilter).selectAsync((tabs) => tabs.length),
watchContainerTabIdsProvider(
containerFilter,
).selectAsync((tabs) => tabs.length),
);
}
@Riverpod()
Stream<List<TabTreesResult>> tabTrees(Ref ref) {
Stream<List<TabTreesResult>> watchTabTrees(Ref ref) {
final db = ref.watch(tabDatabaseProvider);
return db.definitionsDrift.tabTrees().watch();
}
@Riverpod()
Stream<Map<String, String?>> tabDescendants(Ref ref, String tabId) {
Stream<Map<String, String?>> watchTabDescendants(Ref ref, String tabId) {
final db = ref.watch(tabDatabaseProvider);
return db.definitionsDrift.unorderedTabDescendants(tabId: tabId).watch().map((
results,
@@ -94,13 +99,13 @@ Stream<Map<String, String?>> tabDescendants(Ref ref, String tabId) {
}
@Riverpod()
Stream<List<TabData>> containerTabsData(Ref ref, String? containerId) {
Stream<List<TabData>> watchContainerTabsData(Ref ref, String? containerId) {
final db = ref.watch(tabDatabaseProvider);
return db.containerDao.getContainerTabsData(containerId).watch();
}
@Riverpod()
Stream<ContainerData?> containerData(Ref ref, String containerId) {
Stream<ContainerData?> watchContainerData(Ref ref, String containerId) {
final db = ref.watch(tabDatabaseProvider);
return db.containerDao.getContainerData(containerId).watchSingleOrNull();
}
@@ -9,10 +9,10 @@ part of 'providers.dart';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(containersWithCount)
const containersWithCountProvider = ContainersWithCountProvider._();
@ProviderFor(watchContainersWithCount)
const watchContainersWithCountProvider = WatchContainersWithCountProvider._();
final class ContainersWithCountProvider
final class WatchContainersWithCountProvider
extends
$FunctionalProvider<
AsyncValue<List<ContainerDataWithCount>>,
@@ -22,19 +22,19 @@ final class ContainersWithCountProvider
with
$FutureModifier<List<ContainerDataWithCount>>,
$StreamProvider<List<ContainerDataWithCount>> {
const ContainersWithCountProvider._()
const WatchContainersWithCountProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'containersWithCountProvider',
name: r'watchContainersWithCountProvider',
isAutoDispose: false,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$containersWithCountHash();
String debugGetCreateSourceHash() => _$watchContainersWithCountHash();
@$internal
@override
@@ -44,12 +44,12 @@ final class ContainersWithCountProvider
@override
Stream<List<ContainerDataWithCount>> create(Ref ref) {
return containersWithCount(ref);
return watchContainersWithCount(ref);
}
}
String _$containersWithCountHash() =>
r'757bb0102afedc07ef0f80a420b4c87cbdbed3e1';
String _$watchContainersWithCountHash() =>
r'50d8e9b39cb589b0b5f50d79cbe20b8d10d7a504';
@ProviderFor(matchSortedContainersWithCount)
const matchSortedContainersWithCountProvider =
@@ -118,7 +118,7 @@ final class MatchSortedContainersWithCountProvider
}
String _$matchSortedContainersWithCountHash() =>
r'bc2077602c3c1d86c5b916e4ad920053310993e4';
r'e66ca1d96a735155f582975ae05a90503e615882';
final class MatchSortedContainersWithCountFamily extends $Family
with
@@ -145,10 +145,10 @@ final class MatchSortedContainersWithCountFamily extends $Family
String toString() => r'matchSortedContainersWithCountProvider';
}
@ProviderFor(containerTabIds)
const containerTabIdsProvider = ContainerTabIdsFamily._();
@ProviderFor(watchContainerTabIds)
const watchContainerTabIdsProvider = WatchContainerTabIdsFamily._();
final class ContainerTabIdsProvider
final class WatchContainerTabIdsProvider
extends
$FunctionalProvider<
AsyncValue<List<String>>,
@@ -156,23 +156,23 @@ final class ContainerTabIdsProvider
Stream<List<String>>
>
with $FutureModifier<List<String>>, $StreamProvider<List<String>> {
const ContainerTabIdsProvider._({
required ContainerTabIdsFamily super.from,
const WatchContainerTabIdsProvider._({
required WatchContainerTabIdsFamily super.from,
required ContainerFilter super.argument,
}) : super(
retry: null,
name: r'containerTabIdsProvider',
name: r'watchContainerTabIdsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$containerTabIdsHash();
String debugGetCreateSourceHash() => _$watchContainerTabIdsHash();
@override
String toString() {
return r'containerTabIdsProvider'
return r'watchContainerTabIdsProvider'
''
'($argument)';
}
@@ -186,12 +186,12 @@ final class ContainerTabIdsProvider
@override
Stream<List<String>> create(Ref ref) {
final argument = this.argument as ContainerFilter;
return containerTabIds(ref, argument);
return watchContainerTabIds(ref, argument);
}
@override
bool operator ==(Object other) {
return other is ContainerTabIdsProvider && other.argument == argument;
return other is WatchContainerTabIdsProvider && other.argument == argument;
}
@override
@@ -200,24 +200,25 @@ final class ContainerTabIdsProvider
}
}
String _$containerTabIdsHash() => r'61716a2ae74ffa590c1498d259382e69e24ad7f1';
String _$watchContainerTabIdsHash() =>
r'25f73fe16fad7ec0121b2bee99ecbd8b6bf47791';
final class ContainerTabIdsFamily extends $Family
final class WatchContainerTabIdsFamily extends $Family
with $FunctionalFamilyOverride<Stream<List<String>>, ContainerFilter> {
const ContainerTabIdsFamily._()
const WatchContainerTabIdsFamily._()
: super(
retry: null,
name: r'containerTabIdsProvider',
name: r'watchContainerTabIdsProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ContainerTabIdsProvider call(ContainerFilter containerFilter) =>
ContainerTabIdsProvider._(argument: containerFilter, from: this);
WatchContainerTabIdsProvider call(ContainerFilter containerFilter) =>
WatchContainerTabIdsProvider._(argument: containerFilter, from: this);
@override
String toString() => r'containerTabIdsProvider';
String toString() => r'watchContainerTabIdsProvider';
}
@ProviderFor(containerTabCount)
@@ -269,7 +270,7 @@ final class ContainerTabCountProvider
}
}
String _$containerTabCountHash() => r'586e83429b527b546d43232a58453635ab860d69';
String _$containerTabCountHash() => r'df4008a9c589936c8a0699b082ab23087ae9b85f';
final class ContainerTabCountFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<int>, ContainerFilter> {
@@ -289,10 +290,10 @@ final class ContainerTabCountFamily extends $Family
String toString() => r'containerTabCountProvider';
}
@ProviderFor(tabTrees)
const tabTreesProvider = TabTreesProvider._();
@ProviderFor(watchTabTrees)
const watchTabTreesProvider = WatchTabTreesProvider._();
final class TabTreesProvider
final class WatchTabTreesProvider
extends
$FunctionalProvider<
AsyncValue<List<TabTreesResult>>,
@@ -302,19 +303,19 @@ final class TabTreesProvider
with
$FutureModifier<List<TabTreesResult>>,
$StreamProvider<List<TabTreesResult>> {
const TabTreesProvider._()
const WatchTabTreesProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'tabTreesProvider',
name: r'watchTabTreesProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$tabTreesHash();
String debugGetCreateSourceHash() => _$watchTabTreesHash();
@$internal
@override
@@ -324,16 +325,16 @@ final class TabTreesProvider
@override
Stream<List<TabTreesResult>> create(Ref ref) {
return tabTrees(ref);
return watchTabTrees(ref);
}
}
String _$tabTreesHash() => r'd9256293a97d5451c2ab881a30ae99c9e2178999';
String _$watchTabTreesHash() => r'a2be591acb6818ea8675a12d90e6c4684a0448a8';
@ProviderFor(tabDescendants)
const tabDescendantsProvider = TabDescendantsFamily._();
@ProviderFor(watchTabDescendants)
const watchTabDescendantsProvider = WatchTabDescendantsFamily._();
final class TabDescendantsProvider
final class WatchTabDescendantsProvider
extends
$FunctionalProvider<
AsyncValue<Map<String, String?>>,
@@ -343,23 +344,23 @@ final class TabDescendantsProvider
with
$FutureModifier<Map<String, String?>>,
$StreamProvider<Map<String, String?>> {
const TabDescendantsProvider._({
required TabDescendantsFamily super.from,
const WatchTabDescendantsProvider._({
required WatchTabDescendantsFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'tabDescendantsProvider',
name: r'watchTabDescendantsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$tabDescendantsHash();
String debugGetCreateSourceHash() => _$watchTabDescendantsHash();
@override
String toString() {
return r'tabDescendantsProvider'
return r'watchTabDescendantsProvider'
''
'($argument)';
}
@@ -373,12 +374,12 @@ final class TabDescendantsProvider
@override
Stream<Map<String, String?>> create(Ref ref) {
final argument = this.argument as String;
return tabDescendants(ref, argument);
return watchTabDescendants(ref, argument);
}
@override
bool operator ==(Object other) {
return other is TabDescendantsProvider && other.argument == argument;
return other is WatchTabDescendantsProvider && other.argument == argument;
}
@override
@@ -387,30 +388,31 @@ final class TabDescendantsProvider
}
}
String _$tabDescendantsHash() => r'c2c3fe18e9b47c64df9ae6c1cfde683f3231d53c';
String _$watchTabDescendantsHash() =>
r'8b20353888a851191d835784e24d7d4a6e898b72';
final class TabDescendantsFamily extends $Family
final class WatchTabDescendantsFamily extends $Family
with $FunctionalFamilyOverride<Stream<Map<String, String?>>, String> {
const TabDescendantsFamily._()
const WatchTabDescendantsFamily._()
: super(
retry: null,
name: r'tabDescendantsProvider',
name: r'watchTabDescendantsProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
TabDescendantsProvider call(String tabId) =>
TabDescendantsProvider._(argument: tabId, from: this);
WatchTabDescendantsProvider call(String tabId) =>
WatchTabDescendantsProvider._(argument: tabId, from: this);
@override
String toString() => r'tabDescendantsProvider';
String toString() => r'watchTabDescendantsProvider';
}
@ProviderFor(containerTabsData)
const containerTabsDataProvider = ContainerTabsDataFamily._();
@ProviderFor(watchContainerTabsData)
const watchContainerTabsDataProvider = WatchContainerTabsDataFamily._();
final class ContainerTabsDataProvider
final class WatchContainerTabsDataProvider
extends
$FunctionalProvider<
AsyncValue<List<TabData>>,
@@ -418,23 +420,23 @@ final class ContainerTabsDataProvider
Stream<List<TabData>>
>
with $FutureModifier<List<TabData>>, $StreamProvider<List<TabData>> {
const ContainerTabsDataProvider._({
required ContainerTabsDataFamily super.from,
const WatchContainerTabsDataProvider._({
required WatchContainerTabsDataFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'containerTabsDataProvider',
name: r'watchContainerTabsDataProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$containerTabsDataHash();
String debugGetCreateSourceHash() => _$watchContainerTabsDataHash();
@override
String toString() {
return r'containerTabsDataProvider'
return r'watchContainerTabsDataProvider'
''
'($argument)';
}
@@ -448,12 +450,13 @@ final class ContainerTabsDataProvider
@override
Stream<List<TabData>> create(Ref ref) {
final argument = this.argument as String?;
return containerTabsData(ref, argument);
return watchContainerTabsData(ref, argument);
}
@override
bool operator ==(Object other) {
return other is ContainerTabsDataProvider && other.argument == argument;
return other is WatchContainerTabsDataProvider &&
other.argument == argument;
}
@override
@@ -462,30 +465,31 @@ final class ContainerTabsDataProvider
}
}
String _$containerTabsDataHash() => r'2961c89fc9e16c8e6005342356ecf677fb2ff63c';
String _$watchContainerTabsDataHash() =>
r'4edbb3029f4ffb6181396d81d8076e0395ec2481';
final class ContainerTabsDataFamily extends $Family
final class WatchContainerTabsDataFamily extends $Family
with $FunctionalFamilyOverride<Stream<List<TabData>>, String?> {
const ContainerTabsDataFamily._()
const WatchContainerTabsDataFamily._()
: super(
retry: null,
name: r'containerTabsDataProvider',
name: r'watchContainerTabsDataProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ContainerTabsDataProvider call(String? containerId) =>
ContainerTabsDataProvider._(argument: containerId, from: this);
WatchContainerTabsDataProvider call(String? containerId) =>
WatchContainerTabsDataProvider._(argument: containerId, from: this);
@override
String toString() => r'containerTabsDataProvider';
String toString() => r'watchContainerTabsDataProvider';
}
@ProviderFor(containerData)
const containerDataProvider = ContainerDataFamily._();
@ProviderFor(watchContainerData)
const watchContainerDataProvider = WatchContainerDataFamily._();
final class ContainerDataProvider
final class WatchContainerDataProvider
extends
$FunctionalProvider<
AsyncValue<ContainerData?>,
@@ -493,23 +497,23 @@ final class ContainerDataProvider
Stream<ContainerData?>
>
with $FutureModifier<ContainerData?>, $StreamProvider<ContainerData?> {
const ContainerDataProvider._({
required ContainerDataFamily super.from,
const WatchContainerDataProvider._({
required WatchContainerDataFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'containerDataProvider',
name: r'watchContainerDataProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$containerDataHash();
String debugGetCreateSourceHash() => _$watchContainerDataHash();
@override
String toString() {
return r'containerDataProvider'
return r'watchContainerDataProvider'
''
'($argument)';
}
@@ -523,12 +527,12 @@ final class ContainerDataProvider
@override
Stream<ContainerData?> create(Ref ref) {
final argument = this.argument as String;
return containerData(ref, argument);
return watchContainerData(ref, argument);
}
@override
bool operator ==(Object other) {
return other is ContainerDataProvider && other.argument == argument;
return other is WatchContainerDataProvider && other.argument == argument;
}
@override
@@ -537,24 +541,25 @@ final class ContainerDataProvider
}
}
String _$containerDataHash() => r'6adbec128876069189954832af35109b0779148c';
String _$watchContainerDataHash() =>
r'abd0e964a6444ed9be5da649a0f6a77bbbb54042';
final class ContainerDataFamily extends $Family
final class WatchContainerDataFamily extends $Family
with $FunctionalFamilyOverride<Stream<ContainerData?>, String> {
const ContainerDataFamily._()
const WatchContainerDataFamily._()
: super(
retry: null,
name: r'containerDataProvider',
name: r'watchContainerDataProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ContainerDataProvider call(String containerId) =>
ContainerDataProvider._(argument: containerId, from: this);
WatchContainerDataProvider call(String containerId) =>
WatchContainerDataProvider._(argument: containerId, from: this);
@override
String toString() => r'containerDataProvider';
String toString() => r'watchContainerDataProvider';
}
@ProviderFor(watchContainerTabId)
@@ -626,3 +631,45 @@ final class WatchContainerTabIdFamily extends $Family
@override
String toString() => r'watchContainerTabIdProvider';
}
@ProviderFor(watchAllAssignedSites)
const watchAllAssignedSitesProvider = WatchAllAssignedSitesProvider._();
final class WatchAllAssignedSitesProvider
extends
$FunctionalProvider<
AsyncValue<List<SiteAssignment>>,
List<SiteAssignment>,
Stream<List<SiteAssignment>>
>
with
$FutureModifier<List<SiteAssignment>>,
$StreamProvider<List<SiteAssignment>> {
const WatchAllAssignedSitesProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'watchAllAssignedSitesProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$watchAllAssignedSitesHash();
@$internal
@override
$StreamProviderElement<List<SiteAssignment>> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Stream<List<SiteAssignment>> create(Ref ref) {
return watchAllAssignedSites(ref);
}
}
String _$watchAllAssignedSitesHash() =>
r'd755451be0ad7e03db36ba39c64f6f0b5c1d9ba3';
@@ -101,7 +101,7 @@ class SelectedContainer extends _$SelectedContainer {
String? build() {
ref.listen(
fireImmediately: true,
containersWithCountProvider,
watchContainersWithCountProvider,
(previous, next) {
if (stateOrNull != null && next.value != null) {
if (!next.value!.any((container) => container.id == state)) {
@@ -41,7 +41,7 @@ final class SelectedContainerProvider
}
}
String _$selectedContainerHash() => r'4754aa8ad9b43b022821a41771eb5af5e33b1cb6';
String _$selectedContainerHash() => r'fd41c7d7ff0cfaff2829fd93e2afd41d883b8317';
abstract class _$SelectedContainer extends $Notifier<String?> {
String? build();
@@ -299,7 +299,7 @@ class GeckoInferenceRepository extends _$GeckoInferenceRepository {
@Riverpod()
Future<String?> containerTopic(Ref ref, String containerId) async {
final titles = await ref.watch(
containerTabsDataProvider(containerId).selectAsync(
watchContainerTabsDataProvider(containerId).selectAsync(
(tabData) =>
EquatableValue(tabData.map((tab) => tab.title).nonNulls.toSet()),
),
@@ -360,7 +360,7 @@ Future<String?> topicSuggestion(
@Riverpod()
Future<List<SuggestedContainer>?> suggestClusters(Ref ref) async {
final unassignedTitles = await ref.watch(
containerTabsDataProvider(null).selectAsync(
watchContainerTabsDataProvider(null).selectAsync(
(tabData) => EquatableValue(
Map.fromEntries(
tabData
@@ -389,12 +389,14 @@ Future<List<String>?> containerTabSuggestions(
return null;
}
final container = await ref.watch(containerDataProvider(containerId).future);
final container = await ref.watch(
watchContainerDataProvider(containerId).future,
);
if (!ref.mounted) return null;
final assignedTitles = await ref.watch(
containerTabsDataProvider(containerId).selectAsync(
watchContainerTabsDataProvider(containerId).selectAsync(
(tabData) => EquatableValue(
tabData
.where((tab) => tab.title.isNotEmpty)
@@ -407,7 +409,7 @@ Future<List<String>?> containerTabSuggestions(
if (!ref.mounted) return null;
final unassignedTitles = await ref.watch(
containerTabsDataProvider(null).selectAsync(
watchContainerTabsDataProvider(null).selectAsync(
(tabData) => EquatableValue(
tabData
.where((tab) => tab.title.isNotEmpty)
@@ -112,7 +112,7 @@ final class ContainerTopicProvider
}
}
String _$containerTopicHash() => r'c6e4cc316d3f05d0316909ec0bb58a95ad2fd57c';
String _$containerTopicHash() => r'2d04d50890c4ab0ddb70f3c1a2f45fd9ca56412d';
final class ContainerTopicFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<String?>, String> {
@@ -331,7 +331,7 @@ final class SuggestClustersProvider
}
}
String _$suggestClustersHash() => r'694b401ddd6ce68084f79883e67fda4b44607ef0';
String _$suggestClustersHash() => r'3fa169a2696954589078c7567b6245c708303232';
@ProviderFor(containerTabSuggestions)
const containerTabSuggestionsProvider = ContainerTabSuggestionsFamily._();
@@ -390,7 +390,7 @@ final class ContainerTabSuggestionsProvider
}
String _$containerTabSuggestionsHash() =>
r'1b681736215826886241aea834f99ebfb9761197';
r'958c7432aa5c2a2828fcccd0127e0110d0a008cf';
final class ContainerTabSuggestionsFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<List<String>?>, String?> {
@@ -30,8 +30,9 @@ part 'tab.g.dart';
class TabDataRepository extends _$TabDataRepository {
Future<void> assignContainer(
String tabId,
ContainerData targetContainer,
) async {
ContainerData targetContainer, {
bool closeOldTab = true,
}) async {
final currentContainerId = await getContainerTabId(tabId);
final currentContainerData = await currentContainerId.mapNotNull(
@@ -51,7 +52,9 @@ class TabDataRepository extends _$TabDataRepository {
.read(tabRepositoryProvider.notifier)
.duplicateTab(selectTabId: tabId, containerId: targetContainer.id);
await ref.read(tabRepositoryProvider.notifier).closeTab(tabId);
if (closeOldTab) {
await ref.read(tabRepositoryProvider.notifier).closeTab(tabId);
}
}
}
@@ -110,6 +113,18 @@ class TabDataRepository extends _$TabDataRepository {
.getSingleOrNull();
}
Future<Map<String, String?>> getTabDescendants(String tabId) async {
final results = await ref
.read(tabDatabaseProvider)
.definitionsDrift
.unorderedTabDescendants(tabId: tabId)
.get();
return Map.fromEntries(
results.map((pair) => MapEntry(pair.id, pair.parentId)),
);
}
@override
void build() {}
}
@@ -41,7 +41,7 @@ final class TabDataRepositoryProvider
}
}
String _$tabDataRepositoryHash() => r'cc25e0e23a0c0cff5670e59bb0f20496e21a2824';
String _$tabDataRepositoryHash() => r'8f8a1dff5e5be5cbe59562c86b2e57c229b97f8a';
abstract class _$TabDataRepository extends $Notifier<void> {
void build();