@sency/react-native-smkit-ui 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/smkituilibrary/SmkitUiLibraryModule.kt +22 -3
- package/android/src/main/java/com/smkituilibrary/mapper/SMMapper.kt +3 -1
- package/android/src/main/java/com/smkituilibrary/model/SMUserData.kt +17 -0
- package/ios/SMKitUIManager.mm +2 -2
- package/ios/SMKitUIManager.swift +63 -7
- package/lib/commonjs/SMWorkout.js +143 -1
- package/lib/commonjs/SMWorkout.js.map +1 -1
- package/lib/commonjs/index.js +44 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/SMWorkout.js +147 -0
- package/lib/module/SMWorkout.js.map +1 -1
- package/lib/module/index.js +44 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/example/src/App.d.ts +4 -0
- package/lib/typescript/example/src/App.d.ts.map +1 -0
- package/lib/typescript/src/SMWorkout.d.ts +117 -0
- package/lib/typescript/src/SMWorkout.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +37 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/react-native-smkit-ui.podspec +1 -1
- package/src/SMWorkout.tsx +163 -0
- package/src/index.tsx +63 -6
package/android/build.gradle
CHANGED
|
@@ -93,7 +93,7 @@ dependencies {
|
|
|
93
93
|
implementation "com.facebook.react:react-native:+"
|
|
94
94
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
95
95
|
|
|
96
|
-
implementation("com.sency.smkitui:smkitui:0.
|
|
96
|
+
implementation("com.sency.smkitui:smkitui:0.2.0") {
|
|
97
97
|
exclude group: 'com.facebook.fbjni', module: 'fbjni-java-only'
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -9,7 +9,6 @@ import com.sency.smkitui.SMKitUI
|
|
|
9
9
|
import com.sency.smkitui.listener.SMKitUIConfigurationListener
|
|
10
10
|
import com.sency.smkitui.listener.SMKitUIWorkoutListener
|
|
11
11
|
import com.sency.smkitui.model.ExerciseData
|
|
12
|
-
import com.sency.smkitui.model.SMWorkout
|
|
13
12
|
import com.sency.smkitui.model.WorkoutSummaryData
|
|
14
13
|
import com.sency.smkitui.model.smkitui.Body360
|
|
15
14
|
import com.sency.smkitui.model.smkitui.Custom
|
|
@@ -18,6 +17,8 @@ import com.smkituilibrary.mapper.toSMWorkout
|
|
|
18
17
|
import com.smkituilibrary.mapper.toWorkoutConfig
|
|
19
18
|
import com.smkituilibrary.model.SMKitWorkout
|
|
20
19
|
import com.smkituilibrary.model.SMKitWorkoutConfig
|
|
20
|
+
import com.smkituilibrary.model.SMUserData
|
|
21
|
+
import com.smkituilibrary.model.toUserData
|
|
21
22
|
import com.squareup.moshi.Moshi
|
|
22
23
|
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
|
23
24
|
|
|
@@ -66,15 +67,30 @@ class SmkitUiLibraryModule(reactContext: ReactApplicationContext) :
|
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
@ReactMethod
|
|
69
|
-
fun startAssessment(
|
|
70
|
+
fun startAssessment(
|
|
71
|
+
type: String,
|
|
72
|
+
showSummary: Boolean,
|
|
73
|
+
userData: String,
|
|
74
|
+
forceShowUserDataScreen: Boolean,
|
|
75
|
+
customAssessmentId: String,
|
|
76
|
+
promise: Promise) {
|
|
70
77
|
this.resultPromise = promise
|
|
78
|
+
|
|
71
79
|
try {
|
|
72
80
|
val assessmentType = when (type) {
|
|
73
81
|
"fitness" -> Fitness
|
|
74
82
|
"body360" -> Body360
|
|
75
83
|
else -> Custom(customAssessmentId)
|
|
76
84
|
}
|
|
77
|
-
|
|
85
|
+
|
|
86
|
+
val user = if(forceShowUserDataScreen) null else {
|
|
87
|
+
serializeUserData(userData)
|
|
88
|
+
}
|
|
89
|
+
smKitUI?.startAssessment(
|
|
90
|
+
listener = listener,
|
|
91
|
+
assessmentType = assessmentType,
|
|
92
|
+
userData = user
|
|
93
|
+
)
|
|
78
94
|
} catch (e: Exception) {
|
|
79
95
|
promise.reject("Starting Assessment Failed", e)
|
|
80
96
|
}
|
|
@@ -105,6 +121,9 @@ class SmkitUiLibraryModule(reactContext: ReactApplicationContext) :
|
|
|
105
121
|
private fun serializeWorkout(jsonArguments: String) =
|
|
106
122
|
moshi.adapter(SMKitWorkout::class.java).fromJson(jsonArguments)?.toSMWorkout()
|
|
107
123
|
|
|
124
|
+
private fun serializeUserData(jsonArguments: String) =
|
|
125
|
+
moshi.adapter(SMUserData::class.java).fromJson(jsonArguments)?.toUserData()
|
|
126
|
+
|
|
108
127
|
|
|
109
128
|
@ReactMethod
|
|
110
129
|
fun startWorkoutProgram(jsonArguments: String, promise: Promise) {
|
|
@@ -46,7 +46,9 @@ private fun SMKitExercise.toSMExercise(): SMExercise = SMExercise(
|
|
|
46
46
|
scoringParams = scoringParams?.toParams(),
|
|
47
47
|
summaryTitle = "",
|
|
48
48
|
summarySubTitle = "",
|
|
49
|
-
summaryTitleMainMetric = ""
|
|
49
|
+
summaryTitleMainMetric = "",
|
|
50
|
+
summarySubTitleMainMetric = "",
|
|
51
|
+
side = null
|
|
50
52
|
)
|
|
51
53
|
|
|
52
54
|
private fun SMKitScoringParams.toParams(): ScoringParams {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package com.smkituilibrary.model
|
|
2
|
+
|
|
3
|
+
import com.sency.smkitui.model.Gender
|
|
4
|
+
import com.sency.smkitui.model.UserData
|
|
5
|
+
|
|
6
|
+
data class SMUserData(
|
|
7
|
+
val gender: String,
|
|
8
|
+
val age: Int,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
fun SMUserData.toUserData() : UserData {
|
|
12
|
+
val g = when(gender) {
|
|
13
|
+
"Female" -> Gender.Female
|
|
14
|
+
else -> Gender.Male
|
|
15
|
+
}
|
|
16
|
+
return UserData(age, g)
|
|
17
|
+
}
|
package/ios/SMKitUIManager.mm
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
@interface RCT_EXTERN_MODULE(SMKitUIManager, RCTViewManager)
|
|
5
5
|
RCT_EXTERN_METHOD(configure:(NSString*)key onSuccess:(RCTPromiseResolveBlock)onSuccess onFailure:(RCTPromiseRejectBlock)onFailure)
|
|
6
|
-
RCT_EXTERN_METHOD(startAssessment:(NSString*)type showSummary:(BOOL)showSummary customAssessmentID:(NSString*)customAssessmentID onWorkoutDidFinish:(RCTPromiseResolveBlock)onWorkoutDidFinish onWorkoutFailed:(RCTPromiseRejectBlock)onWorkoutFailed)
|
|
6
|
+
RCT_EXTERN_METHOD(startAssessment:(NSString*)type showSummary:(BOOL)showSummary userData:(NSString*)userData forceShowUserDataScreen:(BOOL)forceShowUserDataScreen customAssessmentID:(NSString*)customAssessmentID onWorkoutDidFinish:(RCTPromiseResolveBlock)onWorkoutDidFinish onWorkoutFailed:(RCTPromiseRejectBlock)onWorkoutFailed)
|
|
7
7
|
RCT_EXTERN_METHOD(startCustomWorkout:(NSString*)rawJson onWorkoutDidFinish:(RCTPromiseResolveBlock)onWorkoutDidFinish onWorkoutFailed:(RCTPromiseRejectBlock)onWorkoutFailed)
|
|
8
|
-
RCT_EXTERN_METHOD(startCustomAssessment:(NSString*)rawJson onWorkoutDidFinish:(RCTPromiseResolveBlock)onWorkoutDidFinish onWorkoutFailed:(RCTPromiseRejectBlock)onWorkoutFailed)
|
|
8
|
+
RCT_EXTERN_METHOD(startCustomAssessment:(NSString*)rawJson userData:(NSString*)userData forceShowUserDataScreen:(BOOL)forceShowUserDataScreen showSummary:(BOOL)showSummary onWorkoutDidFinish:(RCTPromiseResolveBlock)onWorkoutDidFinish onWorkoutFailed:(RCTPromiseRejectBlock)onWorkoutFailed)
|
|
9
9
|
RCT_EXTERN_METHOD(startWorkoutProgram:(NSString*)dic onWorkoutDidFinish:(RCTPromiseResolveBlock)onWorkoutDidFinish onWorkoutFailed:(RCTPromiseRejectBlock)onWorkoutFailed)
|
|
10
10
|
@end
|
package/ios/SMKitUIManager.swift
CHANGED
|
@@ -36,8 +36,8 @@ class SMKitUIManager: RCTViewManager {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
@objc(startAssessment:showSummary:customAssessmentID:onWorkoutDidFinish:onWorkoutFailed:)
|
|
40
|
-
func startAssessment(type:NSString, showSummary:Bool, customAssessmentID:String?, onWorkoutDidFinish: @escaping RCTPromiseResolveBlock, onWorkoutFailed:@escaping RCTPromiseRejectBlock){
|
|
39
|
+
@objc(startAssessment:showSummary:userData:forceShowUserDataScreen:customAssessmentID:onWorkoutDidFinish:onWorkoutFailed:)
|
|
40
|
+
func startAssessment(type:NSString, showSummary:Bool, userData:NSString?, forceShowUserDataScreen:Bool, customAssessmentID:String?, onWorkoutDidFinish: @escaping RCTPromiseResolveBlock, onWorkoutFailed:@escaping RCTPromiseRejectBlock){
|
|
41
41
|
DispatchQueue.main.async {[weak self] in
|
|
42
42
|
|
|
43
43
|
guard let self = self,
|
|
@@ -48,9 +48,18 @@ class SMKitUIManager: RCTViewManager {
|
|
|
48
48
|
|
|
49
49
|
self.onWorkoutDidFinish = onWorkoutDidFinish
|
|
50
50
|
self.onWorkoutFailed = onWorkoutFailed
|
|
51
|
+
|
|
51
52
|
do{
|
|
53
|
+
let userData = try self.getUserData(rawJson: userData)
|
|
52
54
|
if let type = AssessmentTypes(rawValue: "\(type)"){
|
|
53
|
-
try SMKitUIModel.startAssessmet(
|
|
55
|
+
try SMKitUIModel.startAssessmet(
|
|
56
|
+
viewController: smkitUIViewController,
|
|
57
|
+
type: type,
|
|
58
|
+
customAssessmentID:customAssessmentID == "" ? nil : customAssessmentID,
|
|
59
|
+
userData: userData,
|
|
60
|
+
forceShowUserDataScreen: forceShowUserDataScreen,
|
|
61
|
+
showSummary: showSummary,
|
|
62
|
+
delegate: self){error in
|
|
54
63
|
onWorkoutFailed("StartAssessment Failed", error.localizedDescription, error)
|
|
55
64
|
}
|
|
56
65
|
}else{
|
|
@@ -83,8 +92,8 @@ class SMKitUIManager: RCTViewManager {
|
|
|
83
92
|
}
|
|
84
93
|
}
|
|
85
94
|
|
|
86
|
-
@objc(startCustomAssessment:onWorkoutDidFinish:onWorkoutFailed:)
|
|
87
|
-
func startCustomAssessment(rawJson:String, onWorkoutDidFinish: @escaping RCTPromiseResolveBlock, onWorkoutFailed:@escaping RCTPromiseRejectBlock){
|
|
95
|
+
@objc(startCustomAssessment:userData:forceShowUserDataScreen:showSummary:onWorkoutDidFinish:onWorkoutFailed:)
|
|
96
|
+
func startCustomAssessment(rawJson:String, userData:NSString?, forceShowUserDataScreen:Bool, showSummary:Bool, onWorkoutDidFinish: @escaping RCTPromiseResolveBlock, onWorkoutFailed:@escaping RCTPromiseRejectBlock){
|
|
88
97
|
DispatchQueue.main.async { [weak self] in
|
|
89
98
|
guard let self = self,
|
|
90
99
|
let smkitUIViewController = smkitUIViewController else {
|
|
@@ -93,10 +102,12 @@ class SMKitUIManager: RCTViewManager {
|
|
|
93
102
|
}
|
|
94
103
|
self.onWorkoutDidFinish = onWorkoutDidFinish
|
|
95
104
|
self.onWorkoutFailed = onWorkoutFailed
|
|
105
|
+
|
|
96
106
|
do{
|
|
107
|
+
let userData = try self.getUserData(rawJson: userData)
|
|
97
108
|
let json = try stringJsonToDic(stringJSON: rawJson)
|
|
98
|
-
let assessment = try
|
|
99
|
-
try SMKitUIModel.startCustomAssessment(viewController: smkitUIViewController, assessment: assessment, delegate: self) { error in
|
|
109
|
+
let assessment = try SMWorkoutAssessmet.initFromJSON(json)
|
|
110
|
+
try SMKitUIModel.startCustomAssessment(viewController: smkitUIViewController, assessment: assessment, userData:userData, forceShowUserDataScreen: forceShowUserDataScreen, showSummary: showSummary, delegate: self) { error in
|
|
100
111
|
onWorkoutFailed("startCustomAssessment Failed", error.localizedDescription, error)
|
|
101
112
|
}
|
|
102
113
|
}catch{
|
|
@@ -154,6 +165,28 @@ class SMKitUIManager: RCTViewManager {
|
|
|
154
165
|
override class func requiresMainQueueSetup() -> Bool {
|
|
155
166
|
true
|
|
156
167
|
}
|
|
168
|
+
|
|
169
|
+
func getUserData(rawJson:NSString?) throws -> UserData?{
|
|
170
|
+
guard let rawJson = rawJson as? String else { return nil }
|
|
171
|
+
let json = try stringJsonToDic(stringJSON: rawJson)
|
|
172
|
+
return UserData(
|
|
173
|
+
gender: Gender(rawValue: json["gender"] as? String ?? "") ?? .Female,
|
|
174
|
+
birthday: getBirthdayDate(from: json["age"] as? Int ?? 0) ?? Date()
|
|
175
|
+
)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
func getBirthdayDate(from age: Int) -> Date? {
|
|
179
|
+
// Create a date components instance to subtract years
|
|
180
|
+
var dateComponents = DateComponents()
|
|
181
|
+
dateComponents.year = -age
|
|
182
|
+
|
|
183
|
+
// Use the current calendar and current date to calculate the birth date
|
|
184
|
+
let calendar = Calendar.current
|
|
185
|
+
if let birthDate = calendar.date(byAdding: dateComponents, to: Date()) {
|
|
186
|
+
return birthDate
|
|
187
|
+
}
|
|
188
|
+
return nil
|
|
189
|
+
}
|
|
157
190
|
}
|
|
158
191
|
|
|
159
192
|
extension SMKitUIManager:SMKitUIWorkoutDelegate{
|
|
@@ -199,3 +232,26 @@ extension WorkoutSummaryData{
|
|
|
199
232
|
return String(data: jsonData, encoding: String.Encoding.utf8) ?? ""
|
|
200
233
|
}
|
|
201
234
|
}
|
|
235
|
+
|
|
236
|
+
extension SMWorkoutAssessmet{
|
|
237
|
+
static func initFromJSON(_ json: [String:Any]) throws -> SMWorkoutAssessmet{
|
|
238
|
+
var assessmentsExercises:[SMAssessmentExercise] = []
|
|
239
|
+
|
|
240
|
+
if let exercise = json["exercises"] as? [[String:Any]] {
|
|
241
|
+
try exercise.forEach({
|
|
242
|
+
try assessmentsExercises.append(SMAssessmentExercise(FromJson: $0))
|
|
243
|
+
})
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return SMWorkoutAssessmet(
|
|
247
|
+
id: json["id"] as? String,
|
|
248
|
+
name: json["name"] as? String,
|
|
249
|
+
workoutIntro: json["workoutIntro"] as? String,
|
|
250
|
+
soundtrack: json["soundtrack"] as? String,
|
|
251
|
+
assessmentsExercises: assessmentsExercises,
|
|
252
|
+
getInFrame: json["getInFrame"] as? String,
|
|
253
|
+
bodycalFinished: json["bodycalFinished"] as? String,
|
|
254
|
+
workoutClosure: json["workoutClosure"] as? String
|
|
255
|
+
)
|
|
256
|
+
}
|
|
257
|
+
}
|
|
@@ -3,43 +3,91 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WorkoutDuration = exports.WorkoutDifficulty = exports.WorkoutConfig = exports.UIElement = exports.ScoringType = exports.SMWorkout = exports.SMScoringParams = exports.SMExercise = exports.BodyZone = exports.AssessmentTypes = void 0;
|
|
6
|
+
exports.WorkoutDuration = exports.WorkoutDifficulty = exports.WorkoutConfig = exports.UserData = exports.UIElement = exports.ScoringType = exports.SMWorkout = exports.SMScoringParams = exports.SMExercise = exports.SMAssessmentExercise = exports.Gender = exports.BodyZone = exports.AssessmentTypes = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Enum representing assessment types.
|
|
9
|
+
* @enum {string}
|
|
10
|
+
*/
|
|
7
11
|
let AssessmentTypes = exports.AssessmentTypes = /*#__PURE__*/function (AssessmentTypes) {
|
|
8
12
|
AssessmentTypes["Fitness"] = "fitness";
|
|
9
13
|
AssessmentTypes["Custom"] = "custom";
|
|
10
14
|
AssessmentTypes["Body360"] = "body360";
|
|
11
15
|
return AssessmentTypes;
|
|
12
16
|
}({});
|
|
17
|
+
/**
|
|
18
|
+
* Enum representing UI elements that can be displayed during workouts.
|
|
19
|
+
* @enum {string}
|
|
20
|
+
*/
|
|
13
21
|
let UIElement = exports.UIElement = /*#__PURE__*/function (UIElement) {
|
|
14
22
|
UIElement["RepsCounter"] = "repsCounter";
|
|
15
23
|
UIElement["Timer"] = "timer";
|
|
16
24
|
UIElement["GaugeOfMotion"] = "gaugeOfMotion";
|
|
17
25
|
return UIElement;
|
|
18
26
|
}({});
|
|
27
|
+
/**
|
|
28
|
+
* Enum representing body zones targeted in workouts.
|
|
29
|
+
* @enum {string}
|
|
30
|
+
*/
|
|
19
31
|
let BodyZone = exports.BodyZone = /*#__PURE__*/function (BodyZone) {
|
|
20
32
|
BodyZone["UpperBody"] = "UpperBody";
|
|
21
33
|
BodyZone["LowerBody"] = "LowerBody";
|
|
22
34
|
BodyZone["FullBody"] = "FullBody";
|
|
23
35
|
return BodyZone;
|
|
24
36
|
}({});
|
|
37
|
+
/**
|
|
38
|
+
* Enum representing workout difficulty levels.
|
|
39
|
+
* @enum {string}
|
|
40
|
+
*/
|
|
25
41
|
let WorkoutDifficulty = exports.WorkoutDifficulty = /*#__PURE__*/function (WorkoutDifficulty) {
|
|
26
42
|
WorkoutDifficulty["LowDifficulty"] = "LowDifficulty";
|
|
27
43
|
WorkoutDifficulty["MidDifficulty"] = "MidDifficulty";
|
|
28
44
|
WorkoutDifficulty["HighDifficulty"] = "HighDifficulty";
|
|
29
45
|
return WorkoutDifficulty;
|
|
30
46
|
}({});
|
|
47
|
+
/**
|
|
48
|
+
* Enum representing workout durations.
|
|
49
|
+
* @enum {string}
|
|
50
|
+
*/
|
|
31
51
|
let WorkoutDuration = exports.WorkoutDuration = /*#__PURE__*/function (WorkoutDuration) {
|
|
32
52
|
WorkoutDuration["Short"] = "Short";
|
|
33
53
|
WorkoutDuration["Long"] = "Long";
|
|
34
54
|
return WorkoutDuration;
|
|
35
55
|
}({});
|
|
56
|
+
/**
|
|
57
|
+
* Enum representing different types of scoring methods.
|
|
58
|
+
* @enum {string}
|
|
59
|
+
*/
|
|
36
60
|
let ScoringType = exports.ScoringType = /*#__PURE__*/function (ScoringType) {
|
|
37
61
|
ScoringType["Rom"] = "rom";
|
|
38
62
|
ScoringType["Time"] = "time";
|
|
39
63
|
ScoringType["Reps"] = "reps";
|
|
40
64
|
return ScoringType;
|
|
41
65
|
}({});
|
|
66
|
+
/**
|
|
67
|
+
* Enum representing gender options for user data.
|
|
68
|
+
* @enum {string}
|
|
69
|
+
*/
|
|
70
|
+
let Gender = exports.Gender = /*#__PURE__*/function (Gender) {
|
|
71
|
+
Gender["Female"] = "Female";
|
|
72
|
+
Gender["Male"] = "Male";
|
|
73
|
+
Gender["Other"] = "Rather not say";
|
|
74
|
+
return Gender;
|
|
75
|
+
}({});
|
|
76
|
+
/**
|
|
77
|
+
* Class representing a workout.
|
|
78
|
+
*/
|
|
42
79
|
class SMWorkout {
|
|
80
|
+
/**
|
|
81
|
+
* @param {string | null} id - Unique identifier for the workout.
|
|
82
|
+
* @param {string | null} name - Name of the workout.
|
|
83
|
+
* @param {string | null} workoutIntro - URL for workout intro sound.
|
|
84
|
+
* @param {string | null} soundtrack - URL for soundtrack.
|
|
85
|
+
* @param {SMExercise[]} exercises - List of exercises included in the workout.
|
|
86
|
+
* @param {string | null} getInFrame - URL for body cal get in frame sound.
|
|
87
|
+
* @param {string | null} bodycalFinished - URL for body cal finished sound.
|
|
88
|
+
* @param {string | null} workoutClosure - URL for workout closure sound.
|
|
89
|
+
*/
|
|
90
|
+
|
|
43
91
|
constructor(id, name, workoutIntro, soundtrack, exercises, getInFrame, bodycalFinished, workoutClosure) {
|
|
44
92
|
this.id = id || null;
|
|
45
93
|
this.name = name || null;
|
|
@@ -63,8 +111,23 @@ class SMWorkout {
|
|
|
63
111
|
});
|
|
64
112
|
}
|
|
65
113
|
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Class representing an exercise in a workout.
|
|
117
|
+
*/
|
|
66
118
|
exports.SMWorkout = SMWorkout;
|
|
67
119
|
class SMExercise {
|
|
120
|
+
/**
|
|
121
|
+
* @param {string | null} prettyName - Name of the exercise.
|
|
122
|
+
* @param {number | null} totalSeconds - Duration of the exercise in seconds.
|
|
123
|
+
* @param {string | null} videoInstruction - Video instruction URL.
|
|
124
|
+
* @param {string | null} exerciseIntro - URL for exercise intro sound.
|
|
125
|
+
* @param {UIElement[] | null} uiElements - List of UI elements for this exercise.
|
|
126
|
+
* @param {string} detector - Name of the detector for tracking exercise movement.
|
|
127
|
+
* @param {string | null} exerciseClosure - URL for exercise closer sound.
|
|
128
|
+
* @param {SMScoringParams | null} scoringParams - Parameters for exercise scoring.
|
|
129
|
+
*/
|
|
130
|
+
|
|
68
131
|
constructor(prettyName, totalSeconds, videoInstruction, exerciseIntro, uiElements, detector, exerciseClosure, scoringParams) {
|
|
69
132
|
this.prettyName = prettyName || null;
|
|
70
133
|
this.totalSeconds = totalSeconds || null;
|
|
@@ -76,8 +139,53 @@ class SMExercise {
|
|
|
76
139
|
this.scoringParams = scoringParams || null;
|
|
77
140
|
}
|
|
78
141
|
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Class representing an exercise in an assessment.
|
|
145
|
+
*/
|
|
79
146
|
exports.SMExercise = SMExercise;
|
|
147
|
+
class SMAssessmentExercise extends SMExercise {
|
|
148
|
+
/**
|
|
149
|
+
* @param {string | null} prettyName - Name of the exercise.
|
|
150
|
+
* @param {number | null} totalSeconds - Duration of the exercise in seconds.
|
|
151
|
+
* @param {string | null} videoInstruction - Video instruction URL.
|
|
152
|
+
* @param {string | null} exerciseIntro - URL for exercise intro sound.
|
|
153
|
+
* @param {UIElement[] | null} uiElements - List of UI elements for this exercise.
|
|
154
|
+
* @param {string} detector - Name of the detector for tracking exercise movement.
|
|
155
|
+
* @param {string | null} exerciseClosure - URL for exercise closer sound.
|
|
156
|
+
* @param {SMScoringParams | null} scoringParams - Parameters for exercise scoring.
|
|
157
|
+
* @param {string | null} summaryTitle - Title for the exercise summary.
|
|
158
|
+
* @param {string | null} summarySubTitle - Subtitle for the exercise summary.
|
|
159
|
+
* @param {string | null} summaryMainMetricTitle - Main metric title in the summary.
|
|
160
|
+
* @param {string | null} summaryMainMetricSubTitle - Main metric subtitle in the summary.
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
constructor(prettyName, totalSeconds, videoInstruction, exerciseIntro, uiElements, detector, exerciseClosure, scoringParams, summaryTitle, summarySubTitle, summaryMainMetricTitle, summaryMainMetricSubTitle) {
|
|
164
|
+
// Call the constructor of the parent class (SMExercise)
|
|
165
|
+
super(prettyName, totalSeconds, videoInstruction, exerciseIntro, uiElements, detector, exerciseClosure, scoringParams);
|
|
166
|
+
|
|
167
|
+
// Set additional properties specific to SMAssessmentExercise
|
|
168
|
+
this.summaryTitle = summaryTitle || null;
|
|
169
|
+
this.summarySubTitle = summarySubTitle || null;
|
|
170
|
+
this.summaryMainMetricTitle = summaryMainMetricTitle || null;
|
|
171
|
+
this.summaryMainMetricSubTitle = summaryMainMetricSubTitle || null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Class representing scoring parameters for an exercise.
|
|
177
|
+
*/
|
|
178
|
+
exports.SMAssessmentExercise = SMAssessmentExercise;
|
|
80
179
|
class SMScoringParams {
|
|
180
|
+
/**
|
|
181
|
+
* @param {ScoringType | null} type - Type of scoring (e.g., ROM, time, reps).
|
|
182
|
+
* @param {number | null} scoreFactor - Factor to adjust the score.
|
|
183
|
+
* @param {number | null} targetTime - Target time for time-based scoring.
|
|
184
|
+
* @param {number | null} targetReps - Target reps for rep-based scoring.
|
|
185
|
+
* @param {string | null} targetRom - Range of motion target for ROM-based scoring.
|
|
186
|
+
* @param {string[] | null} passCriteria - List of criteria required to pass.
|
|
187
|
+
*/
|
|
188
|
+
|
|
81
189
|
constructor(type, scoreFactor, targetTime, targetReps, targetRom, passCriteria) {
|
|
82
190
|
this.type = type || null;
|
|
83
191
|
this.scoreFactor = scoreFactor || null;
|
|
@@ -87,8 +195,20 @@ class SMScoringParams {
|
|
|
87
195
|
this.passCriteria = passCriteria || null;
|
|
88
196
|
}
|
|
89
197
|
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Class representing the configuration for a workout program.
|
|
201
|
+
*/
|
|
90
202
|
exports.SMScoringParams = SMScoringParams;
|
|
91
203
|
class WorkoutConfig {
|
|
204
|
+
/**
|
|
205
|
+
* @param {number} week - Week number in the program.
|
|
206
|
+
* @param {BodyZone} bodyZone - Targeted body zone for the workout.
|
|
207
|
+
* @param {WorkoutDifficulty} difficultyLevel - Difficulty level of the workout.
|
|
208
|
+
* @param {WorkoutDuration} workoutDuration - Duration of the workout.
|
|
209
|
+
* @param {string} programID - Unique identifier for the workout program.
|
|
210
|
+
*/
|
|
211
|
+
|
|
92
212
|
constructor(week, bodyZone, difficultyLevel, workoutDuration, programID) {
|
|
93
213
|
this.week = week;
|
|
94
214
|
this.bodyZone = bodyZone;
|
|
@@ -106,5 +226,27 @@ class WorkoutConfig {
|
|
|
106
226
|
});
|
|
107
227
|
}
|
|
108
228
|
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Class representing user data.
|
|
232
|
+
*/
|
|
109
233
|
exports.WorkoutConfig = WorkoutConfig;
|
|
234
|
+
class UserData {
|
|
235
|
+
/**
|
|
236
|
+
* @param {Gender} gender - User's gender.
|
|
237
|
+
* @param {number} age - User's age.
|
|
238
|
+
*/
|
|
239
|
+
|
|
240
|
+
constructor(gender, age) {
|
|
241
|
+
this.gender = gender;
|
|
242
|
+
this.age = age;
|
|
243
|
+
}
|
|
244
|
+
toJson() {
|
|
245
|
+
return JSON.stringify({
|
|
246
|
+
gender: this.gender,
|
|
247
|
+
age: this.age
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
exports.UserData = UserData;
|
|
110
252
|
//# sourceMappingURL=SMWorkout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AssessmentTypes","exports","UIElement","BodyZone","WorkoutDifficulty","WorkoutDuration","ScoringType","SMWorkout","constructor","id","name","workoutIntro","soundtrack","exercises","getInFrame","bodycalFinished","workoutClosure","toJson","JSON","stringify","SMExercise","prettyName","totalSeconds","videoInstruction","exerciseIntro","uiElements","detector","exerciseClosure","scoringParams","SMScoringParams","type","scoreFactor","targetTime","targetReps","targetRom","passCriteria","WorkoutConfig","week","bodyZone","difficultyLevel","workoutDuration","programID"],"sourceRoot":"../../src","sources":["SMWorkout.tsx"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["AssessmentTypes","exports","UIElement","BodyZone","WorkoutDifficulty","WorkoutDuration","ScoringType","Gender","SMWorkout","constructor","id","name","workoutIntro","soundtrack","exercises","getInFrame","bodycalFinished","workoutClosure","toJson","JSON","stringify","SMExercise","prettyName","totalSeconds","videoInstruction","exerciseIntro","uiElements","detector","exerciseClosure","scoringParams","SMAssessmentExercise","summaryTitle","summarySubTitle","summaryMainMetricTitle","summaryMainMetricSubTitle","SMScoringParams","type","scoreFactor","targetTime","targetReps","targetRom","passCriteria","WorkoutConfig","week","bodyZone","difficultyLevel","workoutDuration","programID","UserData","gender","age"],"sourceRoot":"../../src","sources":["SMWorkout.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -18,18 +18,58 @@ const SMKitUIManager = _reactNative.NativeModules.SMKitUIManager ? _reactNative.
|
|
|
18
18
|
throw new Error(LINKING_ERROR);
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* This function will configure the sdk
|
|
24
|
+
* @param {string} key - your auth key
|
|
25
|
+
*/
|
|
21
26
|
function configure(key) {
|
|
22
27
|
return SMKitUIManager.configure(key);
|
|
23
28
|
}
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* start an assessment session.
|
|
32
|
+
*
|
|
33
|
+
* @param {SMWorkoutLibrary.AssessmentTypes} type - The type of assessment to start.
|
|
34
|
+
* @param {boolean} [showSummary=true] - Determines if the summary should be shown after assessment completion.
|
|
35
|
+
* @param {SMWorkoutLibrary.UserData | null} userData - User data for the assessment session, or `null` if no user data is provided.
|
|
36
|
+
* @param {boolean} [forceShowUserDataScreen=false] - Forces the display of the user data screen even if user data is provided.
|
|
37
|
+
* @param {string} customAssessmentID - A unique identifier for a custom assessment session.
|
|
38
|
+
* @returns {Promise<{ summary: string; didFinish: boolean }>} - A promise that resolves with an object containing the summary and a flag indicating whether the assessment finished.
|
|
39
|
+
*/
|
|
40
|
+
function startAssessment(type, showSummary = true, userData, forceShowUserDataScreen = false, customAssessmentID) {
|
|
41
|
+
return SMKitUIManager.startAssessment(type, showSummary, userData?.toJson(), forceShowUserDataScreen, customAssessmentID);
|
|
26
42
|
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Starts a custom workout session.
|
|
46
|
+
*
|
|
47
|
+
* @param {SMWorkoutLibrary.SMWorkout} workout - The custom workout configuration.
|
|
48
|
+
* @returns {Promise<{ summary: string; didFinish: boolean }>} - A promise that resolves with an object containing the summary and a flag indicating if the workout session finished.
|
|
49
|
+
*/
|
|
27
50
|
function startCustomWorkout(workout) {
|
|
28
51
|
return SMKitUIManager.startCustomWorkout(workout.toJson());
|
|
29
52
|
}
|
|
30
|
-
|
|
31
|
-
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Initiates a custom assessment session.
|
|
56
|
+
*
|
|
57
|
+
* @param {SMWorkoutLibrary.SMWorkout} assessment - The assessment configuration for the session.
|
|
58
|
+
* @param {SMWorkoutLibrary.UserData | null} userData - User data for the assessment, or `null` if no user data is provided.
|
|
59
|
+
* @param {boolean} [forceShowUserDataScreen=false] - Forces the display of the user data screen even if user data is provided.
|
|
60
|
+
* @param {boolean} [showSummary=true] - Determines if the summary should be shown after assessment completion.
|
|
61
|
+
* @returns {Promise<{ summary: string; didFinish: boolean }>} - A promise that resolves with an object containing the summary and a flag indicating if the assessment finished.
|
|
62
|
+
*/
|
|
63
|
+
function startCustomAssessment(assessment, userData, forceShowUserDataScreen = false, showSummary = true) {
|
|
64
|
+
return SMKitUIManager.startCustomAssessment(assessment.toJson(), userData?.toJson(), forceShowUserDataScreen, showSummary);
|
|
32
65
|
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Starts a workout program using the provided workout configuration.
|
|
69
|
+
*
|
|
70
|
+
* @param {SMWorkoutLibrary.WorkoutConfig} workoutConfig - The configuration for the workout program.
|
|
71
|
+
* @returns {Promise<{ summary: string; didFinish: boolean }>} - A promise that resolves with an object containing the summary and a flag indicating if the workout program finished.
|
|
72
|
+
*/
|
|
33
73
|
function startWorkoutProgram(workoutConfig) {
|
|
34
74
|
return SMKitUIManager.startWorkoutProgram(workoutConfig.toJson());
|
|
35
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","SMKitUIManager","NativeModules","Proxy","get","Error","configure","key","startAssessment","type","showSummary","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","SMKitUIManager","NativeModules","Proxy","get","Error","configure","key","startAssessment","type","showSummary","userData","forceShowUserDataScreen","customAssessmentID","toJson","startCustomWorkout","workout","startCustomAssessment","assessment","startWorkoutProgram","workoutConfig"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAGA,MAAMC,aAAa,GACjB,gFAAgF,GAChFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,cAAc,GAAGC,0BAAa,CAACD,cAAc,GAC/CC,0BAAa,CAACD,cAAc,GAC5B,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CACF,CAAC;;AAEL;AACA;AACA;AACA;AACO,SAASU,SAASA,CAACC,GAAW,EAAmB;EACtD,OAAON,cAAc,CAACK,SAAS,CAACC,GAAG,CAAC;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAC7BC,IAAsC,EACtCC,WAAoB,GAAG,IAAI,EAC3BC,QAA0C,EAC1CC,uBAAgC,GAAG,KAAK,EACxCC,kBAA0B,EACwB;EAClD,OAAOZ,cAAc,CAACO,eAAe,CACnCC,IAAI,EACJC,WAAW,EACXC,QAAQ,EAAEG,MAAM,CAAC,CAAC,EAClBF,uBAAuB,EACvBC,kBACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,kBAAkBA,CAChCC,OAAmC,EACe;EAClD,OAAOf,cAAc,CAACc,kBAAkB,CAACC,OAAO,CAACF,MAAM,CAAC,CAAC,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,qBAAqBA,CACnCC,UAAsC,EACtCP,QAA0C,EAC1CC,uBAAgC,GAAG,KAAK,EACxCF,WAAoB,GAAG,IAAI,EACuB;EAClD,OAAOT,cAAc,CAACgB,qBAAqB,CACzCC,UAAU,CAACJ,MAAM,CAAC,CAAC,EACnBH,QAAQ,EAAEG,MAAM,CAAC,CAAC,EAClBF,uBAAuB,EACvBF,WACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASS,mBAAmBA,CACjCC,aAA6C,EACK;EAClD,OAAOnB,cAAc,CAACkB,mBAAmB,CAACC,aAAa,CAACN,MAAM,CAAC,CAAC,CAAC;AACnE","ignoreList":[]}
|