Skip to content

Commit 6271b4e

Browse files
authored
Merge pull request #25 from CoderJava/feature/buat-fitur-pengaturan-override-member-blur-screenshot
Feature - Buat fitur pengaturan override member blur screenshot
2 parents 9ccd8e6 + bedc6e4 commit 6271b4e

File tree

14 files changed

+231
-118
lines changed

14 files changed

+231
-118
lines changed

assets/translations/en-US.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,8 @@
269269
"title_new_update_available": "New update available",
270270
"description_new_update_available": "Click here to download latest version",
271271
"screenshot_blur": "Screenshot Blur",
272-
"description_screenshot_blur_user": "Set blurred screenshots. Only super admin can change this configuration.",
272+
"description_screenshot_blur_user": "Set your screenshot to blurred.",
273+
"this_setting_is_override_by_super_admin": "This setting is overrided by super admin.",
273274
"refresh": "Refresh",
274275
"invalid_id_or_user_id": "Invalid ID or user ID",
275276
"subtitle_screenshot_blur": "Control members blur screenshot for security and privacy.",
@@ -281,5 +282,7 @@
281282
"many": "Members ({})",
282283
"other": "Members ({})"
283284
},
284-
"user_setting_updated_successfully": "User setting updated successfully"
285+
"user_setting_updated_successfully": "User setting updated successfully",
286+
"override": "Override",
287+
"description_override_member_blur_screenshot": "It will override the individual setting and member cannot change this configuration."
285288
}

lib/feature/data/datasource/setting/setting_remote_data_source.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,17 @@ class SettingRemoteDataSourceImpl implements SettingRemoteDataSource {
145145
@override
146146
Future<bool> updateUserSetting(UserSettingBody body) async {
147147
pathUpdateUserSetting = '$baseUrl/user';
148+
Map<String, dynamic>? data;
149+
if (body.isOverrideBlurScreenshot == null) {
150+
data = {
151+
'data': body.data,
152+
};
153+
} else {
154+
data = body.toJson();
155+
}
148156
final response = await dio.post(
149157
pathUpdateUserSetting,
150-
data: body.toJson(),
158+
data: data,
151159
options: Options(
152160
headers: {
153161
baseUrlConfig.requiredToken: true,

lib/feature/data/model/all_user_setting/all_user_setting_response.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@ part 'all_user_setting_response.g.dart';
88
class AllUserSettingResponse extends Equatable {
99
@JsonKey(name: 'data')
1010
final List<UserSettingResponse>? data;
11+
@JsonKey(name: 'is_override_blur_screenshot')
12+
final bool? isOverrideBlurScreenshot;
1113

12-
AllUserSettingResponse({required this.data});
14+
AllUserSettingResponse({
15+
required this.data,
16+
required this.isOverrideBlurScreenshot,
17+
});
1318

1419
factory AllUserSettingResponse.fromJson(Map<String, dynamic> json) => _$AllUserSettingResponseFromJson(json);
1520

@@ -18,12 +23,11 @@ class AllUserSettingResponse extends Equatable {
1823
@override
1924
List<Object?> get props => [
2025
data,
26+
isOverrideBlurScreenshot,
2127
];
2228

2329
@override
2430
String toString() {
25-
return 'AllUserSettingResponse{data: $data}';
31+
return 'AllUserSettingResponse{data: $data, isOverrideBlurScreenshot: $isOverrideBlurScreenshot}';
2632
}
2733
}
28-
29-

lib/feature/data/model/user_setting/user_setting_body.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ part 'user_setting_body.g.dart';
77
class UserSettingBody extends Equatable {
88
@JsonKey(name: 'data')
99
final List<ItemUserSettingBody> data;
10+
@JsonKey(name: 'is_override_blur_screenshot')
11+
final bool? isOverrideBlurScreenshot;
1012

1113
UserSettingBody({
1214
required this.data,
15+
required this.isOverrideBlurScreenshot,
1316
});
1417

1518
factory UserSettingBody.fromJson(Map<String, dynamic> json) => _$UserSettingBodyFromJson(json);
@@ -19,11 +22,12 @@ class UserSettingBody extends Equatable {
1922
@override
2023
List<Object?> get props => [
2124
data,
25+
isOverrideBlurScreenshot,
2226
];
2327

2428
@override
2529
String toString() {
26-
return 'UserSettingBody{data: $data}';
30+
return 'UserSettingBody{data: $data, isOverrideBlurScreenshot: $isOverrideBlurScreenshot}';
2731
}
2832
}
2933

lib/feature/data/model/user_setting/user_setting_response.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,15 @@ class UserSettingResponse extends Equatable {
1313
final int? userId;
1414
@JsonKey(name: 'name')
1515
final String? name;
16+
@JsonKey(name: 'is_override_blur_screenshot')
17+
final bool? isOverrideBlurScreenshot;
1618

1719
UserSettingResponse({
1820
required this.id,
1921
required this.isEnableBlurScreenshot,
2022
required this.userId,
2123
required this.name,
24+
required this.isOverrideBlurScreenshot,
2225
});
2326

2427
factory UserSettingResponse.fromJson(Map<String, dynamic> json) => _$UserSettingResponseFromJson(json);
@@ -31,10 +34,12 @@ class UserSettingResponse extends Equatable {
3134
isEnableBlurScreenshot,
3235
userId,
3336
name,
37+
isOverrideBlurScreenshot,
3438
];
3539

3640
@override
3741
String toString() {
38-
return 'UserSettingResponse{id: $id, isEnableBlurScreenshot: $isEnableBlurScreenshot, userId: $userId, name: $name}';
42+
return 'UserSettingResponse{id: $id, isEnableBlurScreenshot: $isEnableBlurScreenshot, userId: $userId, name: $name, '
43+
'isOverrideBlurScreenshot: $isOverrideBlurScreenshot}';
3944
}
4045
}

lib/feature/presentation/page/setting/setting_page.dart

Lines changed: 62 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,14 @@ class _SettingPageState extends State<SettingPage> {
100100
listener: (context, state) {
101101
if (state is SuccessLoadUserSettingState) {
102102
userSetting = state.response;
103+
setState(() {});
103104
} else if (state is SuccessUpdateUserSettingState) {
104105
final newUserSetting = UserSettingResponse(
105106
id: userSetting!.id!,
106107
isEnableBlurScreenshot: !(userSetting!.isEnableBlurScreenshot!),
107108
userId: userSetting!.userId,
108109
name: userSetting!.name,
110+
isOverrideBlurScreenshot: userSetting?.isOverrideBlurScreenshot ?? false,
109111
);
110112
userSetting = newUserSetting;
111113
} else if (state is FailureSettingState) {
@@ -1461,6 +1463,11 @@ class _SettingPageState extends State<SettingPage> {
14611463
}
14621464

14631465
Widget buildWidgetUserSetting() {
1466+
final isOverrideBlurScreenshot = userSetting?.isOverrideBlurScreenshot ?? false;
1467+
var description = 'description_screenshot_blur_user'.tr();
1468+
if (isOverrideBlurScreenshot && (userRole == UserRole.admin || userRole == UserRole.employee)) {
1469+
description += ' ${'this_setting_is_override_by_super_admin'.tr()}';
1470+
}
14641471
return Row(
14651472
crossAxisAlignment: CrossAxisAlignment.start,
14661473
children: [
@@ -1473,7 +1480,7 @@ class _SettingPageState extends State<SettingPage> {
14731480
style: Theme.of(context).textTheme.bodyLarge,
14741481
),
14751482
Text(
1476-
'description_screenshot_blur_user'.tr(),
1483+
description,
14771484
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
14781485
color: Colors.grey,
14791486
),
@@ -1482,54 +1489,63 @@ class _SettingPageState extends State<SettingPage> {
14821489
),
14831490
),
14841491
const SizedBox(width: 16),
1485-
BlocBuilder<SettingBloc, SettingState>(
1486-
builder: (context, state) {
1487-
if (state is LoadingCenterSettingState || state is LoadingButtonSettingState) {
1488-
return const Padding(
1489-
padding: EdgeInsets.all(8.0),
1490-
child: WidgetCustomCircularProgressIndicator(),
1491-
);
1492-
} else if ((state is FailureSettingState || state is FailureSnackBarSettingState) && userSetting == null) {
1493-
return TextButton(
1494-
onPressed: doLoadUserSetting,
1495-
child: Text('refresh'.tr()),
1496-
);
1497-
}
1492+
SizedBox(
1493+
width: 76,
1494+
child: Align(
1495+
alignment: Alignment.centerRight,
1496+
child: BlocBuilder<SettingBloc, SettingState>(
1497+
builder: (context, state) {
1498+
if (state is LoadingCenterSettingState || state is LoadingButtonSettingState) {
1499+
return const SizedBox(
1500+
width: 32,
1501+
height: 32,
1502+
child: WidgetCustomCircularProgressIndicator(),
1503+
);
1504+
} else if ((state is FailureSettingState || state is FailureSnackBarSettingState) &&
1505+
userSetting == null) {
1506+
return TextButton(
1507+
onPressed: doLoadUserSetting,
1508+
child: Text('refresh'.tr()),
1509+
);
1510+
}
14981511

1499-
if (userSetting == null) {
1500-
return Container();
1501-
}
1512+
if (userSetting == null) {
1513+
return Container();
1514+
}
15021515

1503-
return Switch.adaptive(
1504-
value: userSetting?.isEnableBlurScreenshot ?? false,
1505-
activeColor: Theme.of(context).colorScheme.primary,
1506-
onChanged: userRole == UserRole.superAdmin
1507-
? (value) {
1508-
final id = userSetting?.id;
1509-
final userId = userSetting?.userId;
1510-
if (id == null || userId == null) {
1511-
widgetHelper.showSnackBar(context, 'invalid_id_or_user_id'.tr());
1512-
return;
1513-
}
1516+
return Switch.adaptive(
1517+
value: userSetting?.isEnableBlurScreenshot ?? false,
1518+
activeColor: Theme.of(context).colorScheme.primary,
1519+
onChanged: isOverrideBlurScreenshot && (userRole == UserRole.admin || userRole == UserRole.employee)
1520+
? null
1521+
: (value) {
1522+
final id = userSetting?.id;
1523+
final userId = userSetting?.userId;
1524+
if (id == null || userId == null) {
1525+
widgetHelper.showSnackBar(context, 'invalid_id_or_user_id'.tr());
1526+
return;
1527+
}
15141528

1515-
final body = UserSettingBody(
1516-
data: [
1517-
ItemUserSettingBody(
1518-
id: userSetting!.id!,
1519-
isEnableBlurScreenshot: value,
1520-
userId: userSetting!.userId!,
1521-
),
1522-
],
1523-
);
1524-
settingBloc.add(
1525-
UpdateUserSettingEvent(
1526-
body: body,
1527-
),
1528-
);
1529-
}
1530-
: null,
1531-
);
1532-
},
1529+
final body = UserSettingBody(
1530+
data: [
1531+
ItemUserSettingBody(
1532+
id: userSetting!.id!,
1533+
isEnableBlurScreenshot: value,
1534+
userId: userSetting!.userId!,
1535+
),
1536+
],
1537+
isOverrideBlurScreenshot: null,
1538+
);
1539+
settingBloc.add(
1540+
UpdateUserSettingEvent(
1541+
body: body,
1542+
),
1543+
);
1544+
},
1545+
);
1546+
},
1547+
),
1548+
),
15331549
),
15341550
],
15351551
);

0 commit comments

Comments
 (0)