fix tree view issues and improve providers
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user