feat: implement admin product management panel with bulk categorization and premium user toggle
This commit is contained in:
@@ -61,6 +61,26 @@ class _AdminUsersPanelState extends ConsumerState<AdminUsersPanel> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _togglePremium(UserAdmin user) async {
|
||||
final newValue = !user.isPremium;
|
||||
final confirmed = await _confirm(
|
||||
context,
|
||||
newValue ? 'Ge Premium' : 'Ta bort Premium',
|
||||
'${newValue ? 'Ge' : 'Ta bort'} Premium för ${user.username}?',
|
||||
);
|
||||
if (!confirmed || !mounted) return;
|
||||
try {
|
||||
await ref
|
||||
.read(adminRepositoryProvider)
|
||||
.setPremium(user.id, isPremium: newValue);
|
||||
if (!mounted) return;
|
||||
_load();
|
||||
} catch (e) {
|
||||
if (!mounted) return;
|
||||
_showError(e);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _resetPassword(UserAdmin user) async {
|
||||
final confirmed = await _confirm(
|
||||
context,
|
||||
@@ -252,6 +272,7 @@ class _AdminUsersPanelState extends ConsumerState<AdminUsersPanel> {
|
||||
itemBuilder: (ctx, i) => _UserTile(
|
||||
user: _users[i],
|
||||
onChangeRole: () => _changeRole(_users[i]),
|
||||
onTogglePremium: () => _togglePremium(_users[i]),
|
||||
onResetPassword: () => _resetPassword(_users[i]),
|
||||
onDelete: () => _deleteUser(_users[i]),
|
||||
),
|
||||
@@ -295,12 +316,14 @@ class _AdminUsersPanelState extends ConsumerState<AdminUsersPanel> {
|
||||
class _UserTile extends StatelessWidget {
|
||||
final UserAdmin user;
|
||||
final VoidCallback onChangeRole;
|
||||
final VoidCallback onTogglePremium;
|
||||
final VoidCallback onResetPassword;
|
||||
final VoidCallback onDelete;
|
||||
|
||||
const _UserTile({
|
||||
required this.user,
|
||||
required this.onChangeRole,
|
||||
required this.onTogglePremium,
|
||||
required this.onResetPassword,
|
||||
required this.onDelete,
|
||||
});
|
||||
@@ -356,10 +379,16 @@ class _UserTile extends StatelessWidget {
|
||||
switch (action) {
|
||||
case 'role':
|
||||
onChangeRole();
|
||||
break;
|
||||
case 'premium':
|
||||
onTogglePremium();
|
||||
break;
|
||||
case 'reset':
|
||||
onResetPassword();
|
||||
break;
|
||||
case 'delete':
|
||||
onDelete();
|
||||
break;
|
||||
}
|
||||
},
|
||||
itemBuilder: (_) => [
|
||||
@@ -369,6 +398,10 @@ class _UserTile extends StatelessWidget {
|
||||
user.isAdmin ? 'Nedgradera till user' : 'Uppgradera till admin',
|
||||
),
|
||||
),
|
||||
PopupMenuItem(
|
||||
value: 'premium',
|
||||
child: Text(user.isPremium ? 'Ta bort Premium' : 'Ge Premium'),
|
||||
),
|
||||
const PopupMenuItem(
|
||||
value: 'reset',
|
||||
child: Text('Återställ lösenord'),
|
||||
|
||||
Reference in New Issue
Block a user