parseSelection function

Future<void> parseSelection(
  1. BuildContext context,
  2. UserModel user,
  3. String value,
  4. WidgetRef ref
)

Implementation

Future<void> parseSelection(
  BuildContext context,
  UserModel user,
  String value,
  WidgetRef ref,
) async {
  final isConnected = ref.read(isConnectedProvider);
  if (!isConnected) return context.notConnectedDialog();

  switch (value) {
    case 'Rename user':
      showDialog(
        context: context,
        builder: (context) => RenameUserDialog(user: user),
      );
    case 'Make Admin':
      ref
          .read(cloudFunctionServiceProvider)
          .addAdmin(user.email)
          .then((result) {
        final success = context.processHttpsCallableResult(result);
        if (!success) return;
        ref.read(userDataProvider.notifier).updateClaims(
              user.uid!,
              (claims) => claims.copyWith(admin: true),
            );
      });
    case 'Remove Admin':
      ref
          .read(cloudFunctionServiceProvider)
          .removeAdmin(user.email!)
          .then((result) {
        final success = context.processHttpsCallableResult(result);
        if (!success) return;
        ref.read(userDataProvider.notifier).updateClaims(
              user.uid!,
              (claims) => claims.copyWith(admin: false),
            );
      });
    case 'Remove User':
      yesAbortDialog(
        context: context,
        title: t.generics.areYouSure,
        body: "${t.admin.deleteUserMessage}: ${user.displayName}",
      ).then((result) async {
        if (result == DialogAction.yes) {
          ref
              .read(cloudFunctionServiceProvider)
              .deleteUser(user.email!)
              .then((result) async {
            final success = context.processHttpsCallableResult(result);
            if (!success) return;
            ref.read(userDataProvider.notifier).deleteUser(user.uid!);
            context.pop();
          });
        }
      });
  }
}