Added placeholder for lastName and role addition functionality

Try to rebase
This commit is contained in:
Arseni
2026-01-14 17:06:33 +03:00
parent 6bc5130883
commit 9319108b26
17 changed files with 348 additions and 64 deletions

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:collection/collection.dart';
import 'package:provider/provider.dart';
import 'package:pshared/models/resources.dart';
@@ -13,6 +14,7 @@ import 'package:pweb/pages/invitations/widgets/form/form.dart';
import 'package:pweb/pages/invitations/widgets/list/list.dart';
import 'package:pweb/pages/loader.dart';
import 'package:pweb/widgets/error/snackbar.dart';
import 'package:pweb/widgets/roles/create_role_dialog.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
@@ -27,12 +29,34 @@ class InvitationsPage extends StatefulWidget {
class _InvitationsPageState extends State<InvitationsPage> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final TextEditingController _emailController = TextEditingController();
final TextEditingController _nameController = TextEditingController();
final TextEditingController _firstNameController = TextEditingController();
final TextEditingController _lastNameController = TextEditingController();
final TextEditingController _messageController = TextEditingController();
String? _selectedRoleRef;
int _expiryDays = 7;
Future<void> _createRole() async {
final loc = AppLocalizations.of(context)!;
final draft = await showCreateRoleDialog(context);
if (draft == null) return;
final permissions = context.read<PermissionsProvider>();
final createdRole = await executeActionWithNotification(
context: context,
action: () => permissions.createRoleDescription(
name: draft.name,
description: draft.description.isEmpty ? null : draft.description,
),
successMessage: loc.invitationRoleCreated,
errorMessage: loc.invitationRoleCreateFailed,
);
if (createdRole != null && mounted) {
setState(() => _selectedRoleRef = createdRole.id);
}
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
@@ -41,15 +65,20 @@ class _InvitationsPageState extends State<InvitationsPage> {
void _bootstrapRoleSelection() {
final roles = context.read<PermissionsProvider>().roleDescriptions;
if (_selectedRoleRef == null && roles.isNotEmpty) {
_selectedRoleRef = roles.first.storable.id;
}
if (roles.isEmpty) return;
final firstRoleRef = roles.first.storable.id;
final isSelectedAvailable = _selectedRoleRef != null
&& roles.any((role) => role.storable.id == _selectedRoleRef);
if (isSelectedAvailable) return;
if (!mounted) return;
setState(() => _selectedRoleRef = firstRoleRef);
}
@override
void dispose() {
_emailController.dispose();
_nameController.dispose();
_firstNameController.dispose();
_lastNameController.dispose();
_messageController.dispose();
super.dispose();
}
@@ -71,7 +100,8 @@ class _InvitationsPageState extends State<InvitationsPage> {
context: context,
action: () => invitations.sendInvitation(
email: _emailController.text.trim(),
name: _nameController.text.trim(),
name: _firstNameController.text.trim(),
lastName: _lastNameController.text.trim(),
comment: _messageController.text.trim(),
roleRef: roleRef,
inviterRef: account.id,
@@ -82,7 +112,8 @@ class _InvitationsPageState extends State<InvitationsPage> {
);
_emailController.clear();
_nameController.clear();
_firstNameController.clear();
_lastNameController.clear();
_messageController.clear();
}
@@ -90,6 +121,7 @@ class _InvitationsPageState extends State<InvitationsPage> {
Widget build(BuildContext context) {
final loc = AppLocalizations.of(context)!;
final permissions = context.watch<PermissionsProvider>();
final canCreateRoles = permissions.canCreate(ResourceType.roles);
if (!permissions.canRead(ResourceType.invitations)) {
return PageViewLoader(
@@ -109,8 +141,11 @@ class _InvitationsPageState extends State<InvitationsPage> {
InvitationsForm(
formKey: _formKey,
emailController: _emailController,
nameController: _nameController,
firstNameController: _firstNameController,
lastNameController: _lastNameController,
messageController: _messageController,
canCreateRoles: canCreateRoles,
onCreateRole: _createRole,
expiryDays: _expiryDays,
onExpiryChanged: (value) => setState(() => _expiryDays = value),
selectedRoleRef: _selectedRoleRef,