Skip to content
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Implemented Event2 duplication API, make satellite classes immutable [#5013](https://github.com/rokwire/illinois-app/issues/5013).
- Events2.loadGroupEvents updated to get time filter parameter, cleaned up sort type setting [#5022](https://github.com/rokwire/illinois-app/issues/5022).
- Make Auth2UserProfile.fromFieldsVisibility a factory constructor [#5026](https://github.com/rokwire/illinois-app/issues/5026).
- Update directory accounts loading [#590](https://github.com/rokwire/app-flutter-plugin/issues/590).

## [1.8.3] - 2025-03-12
### Added
Expand Down
34 changes: 34 additions & 0 deletions lib/model/auth2.directory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,40 @@ import 'package:collection/collection.dart';
import 'package:rokwire_plugin/model/auth2.dart';
import 'package:rokwire_plugin/utils/utils.dart';

//////////////////////////////////////////
// Auth2PublicAccountsResult

class Auth2PublicAccountsResult {
final List<Auth2PublicAccount>? accounts;
final Map<String, int>? indexCounts;
final int? totalCount;

Auth2PublicAccountsResult({this.accounts, this.indexCounts, this.totalCount});

static Auth2PublicAccountsResult? fromJson(Map<String, dynamic>? json) {
if (json != null) {
Map<String, int> indexCounts = {};
Map<String, dynamic>? indexCountsJson = JsonUtils.mapValue(json['counts']);
for (MapEntry<String, dynamic> count in indexCountsJson?.entries ?? []) {
indexCounts[count.key] = (count.value is int) ? count.value : 0;
}

return Auth2PublicAccountsResult(
accounts: Auth2PublicAccount.listFromJson(JsonUtils.listValue(json['accounts'])),
indexCounts: indexCounts,
totalCount: JsonUtils.intValue(json['total']),
);
}
return null;
}

Map<String, dynamic> toJson() => {
'accounts': Auth2PublicAccount.listToJson(accounts),
'counts': indexCounts,
'total': totalCount,
};
}

//////////////////////////////////////////
// Auth2PublicAccount

Expand Down
21 changes: 12 additions & 9 deletions lib/service/auth2.directory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,17 @@ List<Auth2PublicAccount>? _sampleDirectoryAccounts;
extension Auh2Directory on Auth2 {

static const String attributesScope = 'app-directory';
static const String loadDirectoryAccountsAscending = 'asc';
static const String loadDirectoryAccountsDescending = 'desc';

ContentAttributes? get directoryAttributes =>
Content().contentAttributes(attributesScope);

Future<List<Auth2PublicAccount>?> loadDirectoryAccounts({String? search,
Future<Auth2PublicAccountsResult?> loadDirectoryAccounts({String? search,
String? userName, String? firstName, String? lastName,
Iterable<String>? ids, String? followingId, String? followerId,
Map<String, dynamic>? attriutes,
int? offset, int? limit}) async {
Map<String, dynamic>? attributes,
String? offset, int? limit, bool reverse = false}) async {

//TMP:
//return _sampleAccounts;
Expand All @@ -33,7 +35,7 @@ extension Auh2Directory on Auth2 {

// ignore: dead_code
if (Config().coreUrl != null) {
String url = UrlUtils.addQueryParameters("${Config().coreUrl}/services/accounts/public", <String, String>{
String url = UrlUtils.addQueryParameters("${Config().coreUrl}/services/v2/accounts/public", <String, String>{
if (search != null)
'search': search,

Expand All @@ -53,16 +55,17 @@ extension Auh2Directory on Auth2 {
'follower-id': followerId,

if (offset != null)
'offset': offset.toString(),
'offset': offset,
if (limit != null)
'limit': limit.toString(),

if (attriutes != null)
...attriutes.map((k, v) => MapEntry(k, (v is List) ? v.join(',') : v.toString()))
'order': reverse ? loadDirectoryAccountsDescending : loadDirectoryAccountsAscending,

if (attributes != null)
...attributes.map((k, v) => MapEntry(k, (v is List) ? v.join(',') : v.toString()))
});

Response? response = await Network().get(url, auth: Auth2());
return (response?.statusCode == 200) ? Auth2PublicAccount.listFromJson(JsonUtils.decodeList(response?.body)) : null;
return (response?.statusCode == 200) ? Auth2PublicAccountsResult.fromJson(JsonUtils.decodeMap(response?.body)) : null;
}
return null;
}
Expand Down