diff --git a/.vscode/launch.json b/.vscode/launch.json index 0ae10e8fa..b4e33cecb 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -28,13 +28,7 @@ "request": "launch", "type": "dart", "program": "lib/main_production.dart", - "args": [ - "--flavor", - "production", - "--target", - "lib/main_production.dart", - "--release" - ] + "args": ["--flavor", "production", "--target", "lib/main_production.dart"] } ] } diff --git a/lib/app/shared/enum/type/blockchain_type.dart b/lib/app/shared/enum/type/blockchain_type.dart index 2aac62d41..05ab76c78 100644 --- a/lib/app/shared/enum/type/blockchain_type.dart +++ b/lib/app/shared/enum/type/blockchain_type.dart @@ -150,19 +150,19 @@ extension BlockchainTypeX on BlockchainType { Filter get filter { switch (this) { case BlockchainType.tezos: - return Filter('String', 'TezosAssociatedAddress'); + return Filter(type: 'String', pattern: 'TezosAssociatedAddress'); case BlockchainType.ethereum: - return Filter('String', 'EthereumAssociatedAddress'); + return Filter(type: 'String', pattern: 'EthereumAssociatedAddress'); case BlockchainType.fantom: - return Filter('String', 'FantomAssociatedAddress'); + return Filter(type: 'String', pattern: 'FantomAssociatedAddress'); case BlockchainType.polygon: - return Filter('String', 'PolygonAssociatedAddress'); + return Filter(type: 'String', pattern: 'PolygonAssociatedAddress'); case BlockchainType.binance: - return Filter('String', 'BinanceAssociatedAddress'); + return Filter(type: 'String', pattern: 'BinanceAssociatedAddress'); } } diff --git a/lib/credentials/cubit/credentials_cubit.dart b/lib/credentials/cubit/credentials_cubit.dart index a7642c371..bb088aeb2 100644 --- a/lib/credentials/cubit/credentials_cubit.dart +++ b/lib/credentials/cubit/credentials_cubit.dart @@ -417,7 +417,10 @@ class CredentialsCubit extends Cubit { Field(path: [r'$..type'], filter: blockchainType.filter), Field( path: [r'$..associatedAddress'], - filter: Filter('String', cryptoAccountData.walletAddress), + filter: Filter( + type: 'String', + pattern: cryptoAccountData.walletAddress, + ), ), ], credentialList: oldCredentialList, diff --git a/lib/dashboard/home/tab_bar/credentials/present/pick/credential_manifest/helpers/get_credentials_from_filter_list.dart b/lib/dashboard/home/tab_bar/credentials/present/pick/credential_manifest/helpers/get_credentials_from_filter_list.dart index e06ec4e18..de02b3c5c 100644 --- a/lib/dashboard/home/tab_bar/credentials/present/pick/credential_manifest/helpers/get_credentials_from_filter_list.dart +++ b/lib/dashboard/home/tab_bar/credentials/present/pick/credential_manifest/helpers/get_credentials_from_filter_list.dart @@ -19,10 +19,14 @@ List getCredentialsFromFilterList({ /// remove unmatched credential searchList.removeWhere( (element) { - if (element == field.filter?.pattern || - field.filter?.pattern == null) { + if (field.filter?.pattern != null && + element == field.filter?.pattern) { + return false; + } else if (field.filter?.contains != null && + element == field.filter?.contains?.containsConst) { return false; } + return true; }, ); diff --git a/lib/dashboard/missing_creentials/cubit/missing_credentials_cubit.dart b/lib/dashboard/missing_creentials/cubit/missing_credentials_cubit.dart index f28e069f1..5264e020f 100644 --- a/lib/dashboard/missing_creentials/cubit/missing_credentials_cubit.dart +++ b/lib/dashboard/missing_creentials/cubit/missing_credentials_cubit.dart @@ -50,7 +50,11 @@ class MissingCredentialsCubit extends Cubit { continue; } - final credentialName = credentialField['filter']['pattern'] as String; + final Filter filter = Filter.fromJson( + credentialField['filter'] as Map); + + final credentialName = + filter.pattern ?? filter.contains!.containsConst; final isPresentable = await isCredentialPresentable(credentialName); diff --git a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart index 81468af71..91a672a9f 100644 --- a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart +++ b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart @@ -659,7 +659,10 @@ class QRCodeScanCubit extends Cubit { continue; } - final credentialName = credentialField['filter']['pattern'] as String; + final Filter filter = + Filter.fromJson(credentialField['filter'] as Map); + + final credentialName = filter.pattern ?? filter.contains!.containsConst; final isPresentable = await isCredentialPresentable(credentialName); if (!isPresentable) { diff --git a/packages/credential_manifest/lib/credential_manifest.dart b/packages/credential_manifest/lib/credential_manifest.dart index a55675fe7..2ffd64656 100644 --- a/packages/credential_manifest/lib/credential_manifest.dart +++ b/packages/credential_manifest/lib/credential_manifest.dart @@ -7,6 +7,7 @@ export 'src/helpers/get_credential_manifest.dart'; export 'src/helpers/get_text_from_credential.dart'; export 'src/models/color_object.dart'; export 'src/models/constraints.dart'; +export 'src/models/contains.dart'; export 'src/models/display_mapping.dart'; export 'src/models/display_mapping_path.dart'; export 'src/models/display_mapping_text.dart'; diff --git a/packages/credential_manifest/lib/src/models/contains.dart b/packages/credential_manifest/lib/src/models/contains.dart new file mode 100644 index 000000000..80a952f35 --- /dev/null +++ b/packages/credential_manifest/lib/src/models/contains.dart @@ -0,0 +1,18 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'contains.g.dart'; + +@JsonSerializable(explicitToJson: true) +class Contains { + Contains({ + required this.containsConst, + }); + + factory Contains.fromJson(Map json) => + _$ContainsFromJson(json); + + @JsonKey(name: 'const') + String containsConst; + + Map toJson() => _$ContainsToJson(this); +} diff --git a/packages/credential_manifest/lib/src/models/filter.dart b/packages/credential_manifest/lib/src/models/filter.dart index 56bd7f903..2ab8fbae9 100644 --- a/packages/credential_manifest/lib/src/models/filter.dart +++ b/packages/credential_manifest/lib/src/models/filter.dart @@ -1,14 +1,20 @@ +import 'package:credential_manifest/src/models/contains.dart'; import 'package:json_annotation/json_annotation.dart'; part 'filter.g.dart'; @JsonSerializable(explicitToJson: true) class Filter { - Filter(this.type, this.pattern); + Filter({ + required this.type, + this.pattern, + this.contains, + }); factory Filter.fromJson(Map json) => _$FilterFromJson(json); final String type; - final String pattern; + final String? pattern; + final Contains? contains; Map toJson() => _$FilterToJson(this); }