diff --git a/lib/pangea/controllers/message_analytics_controller.dart b/lib/pangea/controllers/message_analytics_controller.dart index 87367fbfe..ec7c9dcf0 100644 --- a/lib/pangea/controllers/message_analytics_controller.dart +++ b/lib/pangea/controllers/message_analytics_controller.dart @@ -38,7 +38,15 @@ class TargetTokensAndActivityType { .where(activityType.constructFilter) .toList(); - return listEquals(activity.tgtConstructs, relevantConstructs); + final List? otherRelevantConstructs = activity + .targetTokens + ?.map((t) => t.constructs) + .expand((e) => e) + .map((c) => c.id) + .where(activityType.constructFilter) + .toList(); + + return listEquals(otherRelevantConstructs, relevantConstructs); } @override diff --git a/lib/pangea/controllers/put_analytics_controller.dart b/lib/pangea/controllers/put_analytics_controller.dart index 8ced8b76b..6e90b4a86 100644 --- a/lib/pangea/controllers/put_analytics_controller.dart +++ b/lib/pangea/controllers/put_analytics_controller.dart @@ -184,6 +184,16 @@ class PutAnalyticsController extends BaseController { // get all our grammar constructs for (final token in tokensToSave) { + uses.add( + OneConstructUse( + useType: useType, + lemma: token.pos, + form: token.text.content, + category: "POS", + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); for (final entry in token.morph.entries) { uses.add( OneConstructUse( diff --git a/lib/pangea/models/analytics/constructs_model.dart b/lib/pangea/models/analytics/constructs_model.dart index d71ff69f9..914fa3c0c 100644 --- a/lib/pangea/models/analytics/constructs_model.dart +++ b/lib/pangea/models/analytics/constructs_model.dart @@ -79,7 +79,7 @@ class OneConstructUse { required this.lemma, required this.constructType, required this.metadata, - category, + required category, required this.form, this.id, }) : _category = category ?? "other"; diff --git a/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart b/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart index d60ee3575..6f33f87c2 100644 --- a/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart +++ b/lib/pangea/models/practice_activities.dart/practice_activity_record_model.dart @@ -5,6 +5,7 @@ import 'dart:developer'; import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; +import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; import 'package:fluffychat/pangea/enum/construct_use_type_enum.dart'; import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; @@ -153,20 +154,53 @@ class ActivityRecordResponse { List toUses( PracticeActivityModel practiceActivity, ConstructUseMetaData metadata, - ) => - practiceActivity.tgtConstructs - .map( - (construct) => OneConstructUse( - lemma: construct.lemma, - // TODO - add form to practiceActivity target_construct data somehow - form: null, - constructType: construct.type, - useType: useType(practiceActivity.activityType), - metadata: metadata, - category: construct.category, - ), - ) - .toList(); + ) { + if (practiceActivity.targetTokens == null) { + return []; + } + final uses = practiceActivity.targetTokens! + .map( + (token) => OneConstructUse( + lemma: token.lemma.text, + form: token.text.content, + constructType: ConstructTypeEnum.vocab, + useType: useType(practiceActivity.activityType), + metadata: metadata, + category: token.pos, + ), + ) + .toList(); + + uses.addAll( + practiceActivity.targetTokens!.map((token) { + return OneConstructUse( + lemma: token.pos, + form: token.text.content, + constructType: ConstructTypeEnum.morph, + useType: useType(practiceActivity.activityType), + metadata: metadata, + category: "POS", + ); + }), + ); + + for (final token in practiceActivity.targetTokens!) { + for (final entry in token.morph.entries) { + uses.add( + OneConstructUse( + useType: useType(practiceActivity.activityType), + lemma: entry.value, + form: token.text.content, + category: entry.key, + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); + } + } + + return uses; + } factory ActivityRecordResponse.fromJson(Map json) { return ActivityRecordResponse( diff --git a/lib/pangea/models/representation_content_model.dart b/lib/pangea/models/representation_content_model.dart index 3d21d7ff6..93d915ab8 100644 --- a/lib/pangea/models/representation_content_model.dart +++ b/lib/pangea/models/representation_content_model.dart @@ -154,6 +154,18 @@ class PangeaRepresentation { MatrixState.pangeaController.languageController.activeL2Code(); final useType = inUserL2 ? ConstructUseTypeEnum.wa : ConstructUseTypeEnum.unk; + + uses.add( + OneConstructUse( + useType: useType, + lemma: token.pos, + form: token.text.content, + category: "POS", + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); + for (final entry in token.morph.entries) { uses.add( OneConstructUse( @@ -206,6 +218,18 @@ class PangeaRepresentation { metadata, ), ); + + uses.add( + OneConstructUse( + useType: ConstructUseTypeEnum.ga, + lemma: token.pos, + form: token.text.content, + category: "POS", + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); + for (final entry in token.morph.entries) { uses.add( OneConstructUse( @@ -223,6 +247,17 @@ class PangeaRepresentation { } } + uses.add( + OneConstructUse( + useType: ConstructUseTypeEnum.wa, + lemma: token.pos, + form: token.text.content, + category: "POS", + constructType: ConstructTypeEnum.morph, + metadata: metadata, + ), + ); + // the token wasn't found in any IT or IGC step, so it was wa for (final entry in token.morph.entries) { uses.add(