diff --git a/README.md b/README.md
index 11614a51..380fd554 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
Live Demo: View
Documentation: Read
- coverage: 0%
+
Trial License: View Terms
diff --git a/lib/content_management/view/draft_headlines_page.dart b/lib/content_management/view/draft_headlines_page.dart
index 32caef21..08ca2880 100644
--- a/lib/content_management/view/draft_headlines_page.dart
+++ b/lib/content_management/view/draft_headlines_page.dart
@@ -122,7 +122,6 @@ class DraftHeadlinesPage extends StatelessWidget {
DataColumn2(
label: Text(l10n.actions),
size: ColumnSize.S,
- fixedWidth: 120,
),
],
source: _DraftHeadlinesDataSource(
@@ -211,6 +210,7 @@ class _DraftHeadlinesDataSource extends DataTableSource {
DataCell(
Row(
children: [
+ // Primary action: Publish button
IconButton(
icon: const Icon(Icons.publish),
tooltip: l10n.publish,
@@ -220,24 +220,44 @@ class _DraftHeadlinesDataSource extends DataTableSource {
);
},
),
- IconButton(
- icon: const Icon(Icons.edit),
- tooltip: l10n.editHeadline,
- onPressed: () {
- context.goNamed(
- Routes.editHeadlineName,
- pathParameters: {'id': headline.id},
- );
- },
- ),
- IconButton(
- icon: const Icon(Icons.delete_forever),
- tooltip: l10n.deleteForever,
- onPressed: () {
- context.read().add(
- DeleteDraftHeadlineForeverRequested(headline.id),
- );
+ // Secondary actions: Edit and Delete via PopupMenuButton
+ PopupMenuButton(
+ icon: const Icon(Icons.more_vert),
+ tooltip: l10n.moreActions,
+ onSelected: (value) {
+ if (value == 'edit') {
+ context.goNamed(
+ Routes.editHeadlineName,
+ pathParameters: {'id': headline.id},
+ );
+ } else if (value == 'delete') {
+ context.read().add(
+ DeleteDraftHeadlineForeverRequested(headline.id),
+ );
+ }
},
+ itemBuilder: (BuildContext context) => >[
+ PopupMenuItem(
+ value: 'edit',
+ child: Row(
+ children: [
+ const Icon(Icons.edit),
+ const SizedBox(width: AppSpacing.sm),
+ Text(l10n.editHeadline),
+ ],
+ ),
+ ),
+ PopupMenuItem(
+ value: 'delete',
+ child: Row(
+ children: [
+ const Icon(Icons.delete_forever),
+ const SizedBox(width: AppSpacing.sm),
+ Text(l10n.deleteForever),
+ ],
+ ),
+ ),
+ ],
),
],
),
diff --git a/lib/content_management/view/draft_sources_page.dart b/lib/content_management/view/draft_sources_page.dart
index f6688d6e..119fc2a0 100644
--- a/lib/content_management/view/draft_sources_page.dart
+++ b/lib/content_management/view/draft_sources_page.dart
@@ -118,7 +118,6 @@ class DraftSourcesPage extends StatelessWidget {
DataColumn2(
label: Text(l10n.actions),
size: ColumnSize.S,
- fixedWidth: 120,
),
],
source: _DraftSourcesDataSource(
@@ -206,6 +205,7 @@ class _DraftSourcesDataSource extends DataTableSource {
DataCell(
Row(
children: [
+ // Primary action: Publish button
IconButton(
icon: const Icon(Icons.publish),
tooltip: l10n.publish,
@@ -215,24 +215,44 @@ class _DraftSourcesDataSource extends DataTableSource {
);
},
),
- IconButton(
- icon: const Icon(Icons.edit),
- tooltip: l10n.editSource,
- onPressed: () {
- context.goNamed(
- Routes.editSourceName,
- pathParameters: {'id': source.id},
- );
- },
- ),
- IconButton(
- icon: const Icon(Icons.delete_forever),
- tooltip: l10n.deleteForever,
- onPressed: () {
- context.read().add(
- DeleteDraftSourceForeverRequested(source.id),
- );
+ // Secondary actions: Edit and Delete via PopupMenuButton
+ PopupMenuButton(
+ icon: const Icon(Icons.more_vert),
+ tooltip: l10n.moreActions,
+ onSelected: (value) {
+ if (value == 'edit') {
+ context.goNamed(
+ Routes.editSourceName,
+ pathParameters: {'id': source.id},
+ );
+ } else if (value == 'delete') {
+ context.read().add(
+ DeleteDraftSourceForeverRequested(source.id),
+ );
+ }
},
+ itemBuilder: (BuildContext context) => >[
+ PopupMenuItem(
+ value: 'edit',
+ child: Row(
+ children: [
+ const Icon(Icons.edit),
+ const SizedBox(width: AppSpacing.sm),
+ Text(l10n.editSource),
+ ],
+ ),
+ ),
+ PopupMenuItem(
+ value: 'delete',
+ child: Row(
+ children: [
+ const Icon(Icons.delete_forever),
+ const SizedBox(width: AppSpacing.sm),
+ Text(l10n.deleteForever),
+ ],
+ ),
+ ),
+ ],
),
],
),
diff --git a/lib/content_management/view/draft_topics_page.dart b/lib/content_management/view/draft_topics_page.dart
index f624f028..6a4bb77e 100644
--- a/lib/content_management/view/draft_topics_page.dart
+++ b/lib/content_management/view/draft_topics_page.dart
@@ -118,7 +118,6 @@ class DraftTopicsPage extends StatelessWidget {
DataColumn2(
label: Text(l10n.actions),
size: ColumnSize.S,
- fixedWidth: 120,
),
],
source: _DraftTopicsDataSource(
@@ -206,6 +205,7 @@ class _DraftTopicsDataSource extends DataTableSource {
DataCell(
Row(
children: [
+ // Primary action: Publish button
IconButton(
icon: const Icon(Icons.publish),
tooltip: l10n.publish,
@@ -215,24 +215,44 @@ class _DraftTopicsDataSource extends DataTableSource {
);
},
),
- IconButton(
- icon: const Icon(Icons.edit),
- tooltip: l10n.editTopic,
- onPressed: () {
- context.goNamed(
- Routes.editTopicName,
- pathParameters: {'id': topic.id},
- );
- },
- ),
- IconButton(
- icon: const Icon(Icons.delete_forever),
- tooltip: l10n.deleteForever,
- onPressed: () {
- context.read().add(
- DeleteDraftTopicForeverRequested(topic.id),
- );
+ // Secondary actions: Edit and Delete via PopupMenuButton
+ PopupMenuButton(
+ icon: const Icon(Icons.more_vert),
+ tooltip: l10n.moreActions,
+ onSelected: (value) {
+ if (value == 'edit') {
+ context.goNamed(
+ Routes.editTopicName,
+ pathParameters: {'id': topic.id},
+ );
+ } else if (value == 'delete') {
+ context.read().add(
+ DeleteDraftTopicForeverRequested(topic.id),
+ );
+ }
},
+ itemBuilder: (BuildContext context) => >[
+ PopupMenuItem(
+ value: 'edit',
+ child: Row(
+ children: [
+ const Icon(Icons.edit),
+ const SizedBox(width: AppSpacing.sm),
+ Text(l10n.editTopic),
+ ],
+ ),
+ ),
+ PopupMenuItem(
+ value: 'delete',
+ child: Row(
+ children: [
+ const Icon(Icons.delete_forever),
+ const SizedBox(width: AppSpacing.sm),
+ Text(l10n.deleteForever),
+ ],
+ ),
+ ),
+ ],
),
],
),
diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart
index 84a348ba..22260fd1 100644
--- a/lib/l10n/app_localizations.dart
+++ b/lib/l10n/app_localizations.dart
@@ -2593,6 +2593,12 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Enable In-Article Ads for {role}'**
String enableInArticleAdsForRoleLabel(String role);
+
+ /// Tooltip for the button that opens a menu with more actions for a table row.
+ ///
+ /// In en, this message translates to:
+ /// **'More Actions'**
+ String get moreActions;
}
class _AppLocalizationsDelegate
diff --git a/lib/l10n/app_localizations_ar.dart b/lib/l10n/app_localizations_ar.dart
index b49f7465..77daf864 100644
--- a/lib/l10n/app_localizations_ar.dart
+++ b/lib/l10n/app_localizations_ar.dart
@@ -1387,4 +1387,7 @@ class AppLocalizationsAr extends AppLocalizations {
String enableInArticleAdsForRoleLabel(String role) {
return 'تمكين الإعلانات داخل المقال لـ $role';
}
+
+ @override
+ String get moreActions => 'المزيد من الإجراءات';
}
diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart
index 5d6cfeea..98ab1f3b 100644
--- a/lib/l10n/app_localizations_en.dart
+++ b/lib/l10n/app_localizations_en.dart
@@ -1392,4 +1392,7 @@ class AppLocalizationsEn extends AppLocalizations {
String enableInArticleAdsForRoleLabel(String role) {
return 'Enable In-Article Ads for $role';
}
+
+ @override
+ String get moreActions => 'More Actions';
}
diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb
index ec5d8ae0..8bc5135d 100644
--- a/lib/l10n/arb/app_ar.arb
+++ b/lib/l10n/arb/app_ar.arb
@@ -1755,5 +1755,9 @@
"example": "مستخدم ضيف"
}
}
+ },
+ "moreActions": "المزيد من الإجراءات",
+ "@moreActions": {
+ "description": "تلميح الزر الذي يفتح قائمة تحتوي على المزيد من الإجراءات لصف في الجدول."
}
}
\ No newline at end of file
diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb
index aed3f985..544aaa72 100644
--- a/lib/l10n/arb/app_en.arb
+++ b/lib/l10n/arb/app_en.arb
@@ -1751,5 +1751,9 @@
"example": "Guest User"
}
}
+ },
+ "moreActions": "More Actions",
+ "@moreActions": {
+ "description": "Tooltip for the button that opens a menu with more actions for a table row."
}
}
\ No newline at end of file