Files
sendico/frontend/pweb/lib/pages/invitations/widgets/card/view.dart
2026-01-12 21:28:18 +03:00

73 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:pshared/models/invitation/invitation.dart';
import 'package:pshared/models/resources.dart';
import 'package:pshared/provider/accounts/employees.dart';
import 'package:pshared/provider/permissions.dart';
import 'package:pweb/pages/invitations/widgets/card/actions.dart';
import 'package:pweb/pages/invitations/widgets/card/details.dart';
import 'package:pweb/pages/invitations/widgets/card/header.dart';
import 'package:pweb/pages/invitations/widgets/card/helpers.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
class InvitationCardView extends StatelessWidget {
final Invitation invitation;
const InvitationCardView({super.key, required this.invitation});
@override
Widget build(BuildContext context) {
final loc = AppLocalizations.of(context)!;
final theme = Theme.of(context);
final permissions = context.watch<PermissionsProvider>();
final employees = context.watch<EmployeesProvider>();
final dateFormat = DateFormat.yMMMd().add_Hm();
final statusLabel = invitationStatusLabel(invitation, loc);
final statusColor = invitationStatusColor(theme, invitation);
final roleLabel = invitationRoleLabel(permissions.roleDescriptions, invitation, loc);
final inviterName = employees.getEmployee(invitation.inviterRef)?.fullName ?? loc.unknown;
final canUpdate = permissions.canUpdate(ResourceType.invitations);
return Card(
elevation: 0,
shape: RoundedRectangleBorder(
side: BorderSide(color: theme.dividerColor.withAlpha(20)),
borderRadius: BorderRadius.circular(12),
),
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
InvitationCardHeader(
invitation: invitation,
statusLabel: statusLabel,
statusColor: statusColor,
),
const SizedBox(height: 12),
InvitationCardDetails(
invitation: invitation,
roleLabel: roleLabel,
inviterName: inviterName,
dateFormat: dateFormat,
loc: loc,
),
if (canUpdate) ...[
const SizedBox(height: 10),
InvitationCardActions(invitation: invitation),
],
],
),
),
);
}
}