Fixed unable to edit Team
This commit is contained in:
@@ -6,7 +6,8 @@ import '../../models/team.dart';
|
||||
import '../../providers/teams_provider.dart';
|
||||
import '../../providers/profile_provider.dart';
|
||||
import '../../providers/tickets_provider.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import '../../providers/supabase_provider.dart';
|
||||
import '../../utils/supabase_response.dart';
|
||||
import 'package:tasq/widgets/multi_select_picker.dart';
|
||||
import '../../theme/app_surfaces.dart';
|
||||
import '../../widgets/tasq_adaptive_list.dart';
|
||||
@@ -395,7 +396,7 @@ class _TeamsScreenState extends ConsumerState<TeamsScreen> {
|
||||
selectedMembers = [leaderId!, ...selectedMembers];
|
||||
}
|
||||
|
||||
final client = Supabase.instance.client;
|
||||
final client = ref.read(supabaseClientProvider);
|
||||
try {
|
||||
if (isEdit) {
|
||||
// update team row
|
||||
@@ -407,38 +408,24 @@ class _TeamsScreenState extends ConsumerState<TeamsScreen> {
|
||||
'office_ids': selectedOffices,
|
||||
})
|
||||
.eq('id', team.id);
|
||||
if (upRes['error'] != null) {
|
||||
final err = upRes['error'];
|
||||
throw Exception(
|
||||
err is Map ? (err['message'] ?? err.toString()) : err.toString(),
|
||||
);
|
||||
}
|
||||
final upErr = extractSupabaseError(upRes);
|
||||
if (upErr != null) throw Exception(upErr);
|
||||
|
||||
// replace members for the team
|
||||
final delRes = await client
|
||||
.from('team_members')
|
||||
.delete()
|
||||
.eq('team_id', team.id);
|
||||
if (delRes['error'] != null) {
|
||||
final err = delRes['error'];
|
||||
throw Exception(
|
||||
err is Map ? (err['message'] ?? err.toString()) : err.toString(),
|
||||
);
|
||||
}
|
||||
final delErr = extractSupabaseError(delRes);
|
||||
if (delErr != null) throw Exception(delErr);
|
||||
|
||||
if (selectedMembers.isNotEmpty) {
|
||||
final rows = selectedMembers
|
||||
.map((u) => {'team_id': team.id, 'user_id': u})
|
||||
.toList();
|
||||
final memRes = await client.from('team_members').insert(rows);
|
||||
if (memRes is Map && memRes['error'] != null) {
|
||||
final err = memRes['error'];
|
||||
throw Exception(
|
||||
err is Map
|
||||
? (err['message'] ?? err.toString())
|
||||
: err.toString(),
|
||||
);
|
||||
}
|
||||
final memErr = extractSupabaseError(memRes);
|
||||
if (memErr != null) throw Exception(memErr);
|
||||
|
||||
// verify members persisted (handle Map or List response)
|
||||
final dynamic checkRes = await client
|
||||
@@ -471,18 +458,12 @@ class _TeamsScreenState extends ConsumerState<TeamsScreen> {
|
||||
|
||||
// normalize inserted row to extract id reliably across client response shapes
|
||||
dynamic insertedRow;
|
||||
final insertResValue = insertRes;
|
||||
final dynamic insertResValue = insertRes;
|
||||
if (insertResValue is List && insertResValue.isNotEmpty) {
|
||||
insertedRow = (insertResValue as List).first;
|
||||
insertedRow = insertResValue.first;
|
||||
} else {
|
||||
if (insertResValue['error'] != null) {
|
||||
final err = insertResValue['error'];
|
||||
throw Exception(
|
||||
err is Map
|
||||
? (err['message'] ?? err.toString())
|
||||
: err.toString(),
|
||||
);
|
||||
}
|
||||
final insertErr = extractSupabaseError(insertResValue);
|
||||
if (insertErr != null) throw Exception(insertErr);
|
||||
final dataField = insertResValue['data'];
|
||||
if (dataField is List && dataField.isNotEmpty) {
|
||||
insertedRow = dataField.first;
|
||||
@@ -503,14 +484,8 @@ class _TeamsScreenState extends ConsumerState<TeamsScreen> {
|
||||
.map((u) => {'team_id': teamId, 'user_id': u})
|
||||
.toList();
|
||||
final memRes = await client.from('team_members').insert(rows);
|
||||
if (memRes is Map && memRes['error'] != null) {
|
||||
final err = memRes['error'];
|
||||
throw Exception(
|
||||
err is Map
|
||||
? (err['message'] ?? err.toString())
|
||||
: err.toString(),
|
||||
);
|
||||
}
|
||||
final memErr2 = extractSupabaseError(memRes);
|
||||
if (memErr2 != null) throw Exception(memErr2);
|
||||
|
||||
// verify members persisted (handle Map or List response)
|
||||
final dynamic checkRes = await client
|
||||
@@ -656,27 +631,21 @@ class _TeamsScreenState extends ConsumerState<TeamsScreen> {
|
||||
if (confirmed != true) return;
|
||||
|
||||
try {
|
||||
final delMembersRes = await Supabase.instance.client
|
||||
final delMembersRes = await ref
|
||||
.read(supabaseClientProvider)
|
||||
.from('team_members')
|
||||
.delete()
|
||||
.eq('team_id', teamId);
|
||||
if (delMembersRes is Map && delMembersRes['error'] != null) {
|
||||
final err = delMembersRes['error'];
|
||||
throw Exception(
|
||||
err is Map ? (err['message'] ?? err.toString()) : err.toString(),
|
||||
);
|
||||
}
|
||||
final delMembersErr = extractSupabaseError(delMembersRes);
|
||||
if (delMembersErr != null) throw Exception(delMembersErr);
|
||||
|
||||
final delTeamRes = await Supabase.instance.client
|
||||
final delTeamRes = await ref
|
||||
.read(supabaseClientProvider)
|
||||
.from('teams')
|
||||
.delete()
|
||||
.eq('id', teamId);
|
||||
if (delTeamRes is Map && delTeamRes['error'] != null) {
|
||||
final err = delTeamRes['error'];
|
||||
throw Exception(
|
||||
err is Map ? (err['message'] ?? err.toString()) : err.toString(),
|
||||
);
|
||||
}
|
||||
final delTeamErr = extractSupabaseError(delTeamRes);
|
||||
if (delTeamErr != null) throw Exception(delTeamErr);
|
||||
|
||||
ref.invalidate(teamsProvider);
|
||||
ref.invalidate(teamMembersProvider);
|
||||
|
||||
Reference in New Issue
Block a user