Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 6 additions & 11 deletions lib/features/extensions/extension_driver_recovery_banner.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart' as material;
import 'package:querya_desktop/shared/widgets/widgets.dart';
import 'package:querya_desktop/core/ui/querya_control_tokens.dart';

/// Banner displayed when an extension driver process crashes, deadlocks,
/// or disconnects unexpectedly, allowing the user to restart the driver process
Expand Down Expand Up @@ -61,18 +62,12 @@ class ExtensionDriverRecoveryBanner extends material.StatelessWidget {
),
),
const Gap(12),
OutlineButton(
size: ButtonSize.small,
QueryaButton.secondary(
label: isRestarting ? 'Restarting...' : 'Restart Driver',
icon: material.Icons.restart_alt_rounded,
loading: isRestarting,
onPressed: isRestarting ? null : onRestart,
leading: isRestarting
? const QueryaSpinner(
size: QueryaSpinnerSize.sm,
)
: const material.Icon(
material.Icons.restart_alt_rounded,
size: 16,
),
child: Text(isRestarting ? 'Restarting...' : 'Restart Driver'),
size: QueryaControlSize.sm,
),
],
),
Expand Down
94 changes: 35 additions & 59 deletions lib/features/extensions/extension_table_toolbar.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart' as material;
import 'package:querya_desktop/shared/services/data_export_service.dart';
import 'package:querya_desktop/shared/widgets/widgets.dart';
import 'package:querya_desktop/core/ui/querya_control_tokens.dart';

/// Standard toolbar for [ExtensionTableView] with title, pagination chip, DDL inspection, custom filter toggle, export/save actions, and navigation.
class ExtensionTableToolbar extends material.StatelessWidget {
Expand Down Expand Up @@ -71,14 +72,11 @@ class ExtensionTableToolbar extends material.StatelessWidget {
if (onNavigateHome != null) ...[
material.Tooltip(
message: 'Return to driver overview',
child: OutlineButton(
size: ButtonSize.small,
child: QueryaButton.secondary(
label: 'Driver',
icon: material.Icons.dns_outlined,
onPressed: onNavigateHome,
leading: const material.Icon(
material.Icons.dns_outlined,
size: 14,
),
child: const Text('Driver'),
size: QueryaControlSize.sm,
),
),
const Gap(10),
Expand Down Expand Up @@ -133,26 +131,20 @@ class ExtensionTableToolbar extends material.StatelessWidget {
editAction!,
const Gap(4),
],
OutlineButton(
size: ButtonSize.small,
QueryaButton.secondary(
label: 'DDL',
icon: material.Icons.code_rounded,
onPressed: onOpenDdl,
leading: const material.Icon(
material.Icons.code_rounded,
size: 16,
),
child: const Text('DDL'),
size: QueryaControlSize.sm,
),
const Gap(4),
OutlineButton(
size: ButtonSize.small,
onPressed: onToggleFilter,
leading: material.Icon(
isFiltered
QueryaButton.secondary(
label: isFiltered ? 'Filter (active)' : 'Filter',
icon: isFiltered
? material.Icons.filter_alt_rounded
: material.Icons.filter_alt_outlined,
size: 15,
),
child: Text(isFiltered ? 'Filter (active)' : 'Filter'),
onPressed: onToggleFilter,
size: QueryaControlSize.sm,
),
if (onCopyFormat != null) ...[
const Gap(4),
Expand All @@ -174,59 +166,43 @@ class ExtensionTableToolbar extends material.StatelessWidget {
],
if (loading && onCancelQuery != null) ...[
const Gap(4),
OutlineButton(
size: ButtonSize.small,
QueryaButton.ghost(
label: 'Cancel',
icon: material.Icons.cancel_outlined,
onPressed: onCancelQuery,
leading: const material.Icon(
material.Icons.cancel_outlined,
size: 15,
),
child: const Text('Cancel'),
size: QueryaControlSize.sm,
),
],
const Gap(4),
OutlineButton(
size: ButtonSize.small,
QueryaButton.secondary(
label: 'Prev',
icon: material.Icons.chevron_left_rounded,
onPressed: canGoPrevious ? onGoPrevious : null,
leading: const material.Icon(
material.Icons.chevron_left_rounded,
size: 16,
),
child: const Text('Prev'),
size: QueryaControlSize.sm,
),
const Gap(4),
OutlineButton(
size: ButtonSize.small,
QueryaButton.secondary(
label: 'Next',
icon: material.Icons.chevron_right_rounded,
onPressed: canGoNext ? onGoNext : null,
leading: const material.Icon(
material.Icons.chevron_right_rounded,
size: 16,
),
child: const Text('Next'),
size: QueryaControlSize.sm,
),
const Gap(8),
if (onRestartDriver != null) ...[
OutlineButton(
size: ButtonSize.small,
QueryaButton.secondary(
label: isRestarting ? 'Restarting...' : 'Restart Driver',
icon: material.Icons.restart_alt_rounded,
loading: isRestarting,
onPressed: loading || isRestarting ? null : onRestartDriver,
leading: isRestarting
? const QueryaSpinner(size: QueryaSpinnerSize.sm)
: const material.Icon(
material.Icons.restart_alt_rounded,
size: 15,
),
child: Text(isRestarting ? 'Restarting...' : 'Restart Driver'),
size: QueryaControlSize.sm,
),
const Gap(4),
],
OutlineButton(
size: ButtonSize.small,
QueryaButton.secondary(
label: 'Refresh',
icon: material.Icons.refresh_rounded,
onPressed: loading ? null : onRefresh,
leading: const material.Icon(
material.Icons.refresh_rounded,
size: 14,
),
child: const Text('Refresh'),
size: QueryaControlSize.sm,
),
],
),
Expand Down
23 changes: 13 additions & 10 deletions lib/features/extensions/extension_table_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import 'package:querya_desktop/features/extensions/extension_table_toolbar.dart'
import 'package:querya_desktop/features/workspace/workspace.dart';
import 'package:querya_desktop/shared/services/data_export_service.dart';
import 'package:querya_desktop/shared/widgets/widgets.dart';
import 'package:querya_desktop/core/ui/querya_control_tokens.dart';

const _defaultPageSize = 200;

Expand Down Expand Up @@ -419,9 +420,10 @@ class _ExtensionTableViewState extends material.State<ExtensionTableView> {
const Gap(16),
material.Align(
alignment: material.Alignment.centerRight,
child: OutlineButton(
child: QueryaButton.ghost(
label: 'Close',
onPressed: () => material.Navigator.of(ctx).pop(),
child: const Text('Close'),
size: QueryaControlSize.md,
),
),
],
Expand Down Expand Up @@ -511,23 +513,23 @@ class _ExtensionTableViewState extends material.State<ExtensionTableView> {
),
),
const Gap(8),
OutlineButton(
size: ButtonSize.small,
QueryaButton.secondary(
label: 'Apply',
onPressed: () {
final st = _genericKey.currentState;
if (st != null) _applyFilter(st);
},
child: const Text('Apply'),
size: QueryaControlSize.sm,
),
if (_filterController.text.isNotEmpty) ...[
const Gap(6),
GhostButton(
size: ButtonSize.small,
QueryaButton.ghost(
label: 'Clear',
onPressed: () {
final st = _genericKey.currentState;
if (st != null) _clearFilter(st);
},
child: const Text('Clear'),
size: QueryaControlSize.sm,
),
],
],
Expand Down Expand Up @@ -608,9 +610,10 @@ Future<void> _showSaveFileErrorDialog(material.BuildContext context) {
const Gap(20),
material.Align(
alignment: material.Alignment.centerRight,
child: PrimaryButton(
child: QueryaButton.primary(
label: 'OK',
onPressed: () => material.Navigator.of(ctx).pop(),
child: const Text('OK'),
size: QueryaControlSize.md,
),
),
],
Expand Down
21 changes: 13 additions & 8 deletions lib/features/extensions/presentation/widgets/extension_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:querya_desktop/core/extensions/extension_support.dart';
import 'package:querya_desktop/core/extensions/models/extension_manifest.dart';
import 'package:querya_desktop/core/extensions/models/extension_type.dart';
import 'package:querya_desktop/shared/widgets/widgets.dart';
import 'package:querya_desktop/core/ui/querya_control_tokens.dart';

class ExtensionCard extends material.StatelessWidget {
const ExtensionCard({
Expand Down Expand Up @@ -104,9 +105,10 @@ class ExtensionCard extends material.StatelessWidget {
if (isInstalled && hasUpdate && !isInstalling)
material.Padding(
padding: const material.EdgeInsets.only(bottom: 8.0),
child: PrimaryButton(
child: QueryaButton.primary(
label: 'Update',
onPressed: onUpdate,
child: const Text('Update'),
size: QueryaControlSize.md,
),
),
if (isInstalling)
Expand All @@ -132,22 +134,25 @@ class ExtensionCard extends material.StatelessWidget {
],
)
else if (isInstalled)
SecondaryButton(
QueryaButton.secondary(
label: 'Uninstall',
onPressed: onUninstall,
child: const Text('Uninstall'),
size: QueryaControlSize.md,
)
else if (isPreview)
const material.Tooltip(
message: ExtensionSupport.databaseDriverPreviewNotice,
child: OutlineButton(
child: QueryaButton.secondary(
label: 'Preview',
onPressed: null,
child: Text('Preview'),
size: QueryaControlSize.md,
),
)
else
PrimaryButton(
QueryaButton.primary(
label: 'Install',
onPressed: onInstall,
child: const Text('Install'),
size: QueryaControlSize.md,
),
],
),
Expand Down
41 changes: 17 additions & 24 deletions lib/features/main_screen/workspace_empty_hero.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:querya_desktop/core/storage/local_db.dart';
import 'package:querya_desktop/core/ui/querya_icons.dart';
import 'package:querya_desktop/features/connections/driver_icon.dart';
import 'package:querya_desktop/shared/widgets/widgets.dart';
import 'package:querya_desktop/core/ui/querya_control_tokens.dart';

/// Task-oriented empty workspace shown before a connection is selected.
class WorkspaceEmptyHero extends StatefulWidget {
Expand Down Expand Up @@ -149,44 +150,36 @@ class _WorkspaceEmptyHeroState extends State<WorkspaceEmptyHero> {
spacing: 10,
runSpacing: 10,
children: [
PrimaryButton(
QueryaButton.primary(
key: const Key('empty_new_connection'),
label: 'New connection',
icon: material.Icons.add_link_rounded,
onPressed: widget.onNewConnection,
leading: const material.Icon(
material.Icons.add_link_rounded,
size: 18,
),
child: const Text('New connection'),
size: QueryaControlSize.md,
),
if (widget.onLaunchDemo != null)
OutlineButton(
QueryaButton.secondary(
key: const Key('empty_try_demo_playground'),
label: 'Demo Playground',
icon: material.Icons.play_circle_outline_rounded,
onPressed: widget.onLaunchDemo,
leading: const material.Icon(
material.Icons.play_circle_outline_rounded,
size: 18,
),
child: const Text('Demo Playground'),
size: QueryaControlSize.md,
),
if (widget.onNewConnectionFromUrl != null)
OutlineButton(
QueryaButton.secondary(
key: const Key('empty_new_from_url'),
label: 'New from URL',
icon: material.Icons.link_rounded,
onPressed: widget.onNewConnectionFromUrl,
leading: const material.Icon(
material.Icons.link_rounded,
size: 18,
),
child: const Text('New from URL'),
size: QueryaControlSize.md,
),
if (widget.onOpenSqlite != null)
OutlineButton(
QueryaButton.secondary(
key: const Key('empty_open_sqlite'),
label: 'Open SQLite file',
icon: material.Icons.folder_open_rounded,
onPressed: widget.onOpenSqlite,
leading: const material.Icon(
material.Icons.folder_open_rounded,
size: 18,
),
child: const Text('Open SQLite file'),
size: QueryaControlSize.md,
),
],
),
Expand Down
Loading
Loading