@convep_mobilogy/react-native-qms-plugin 0.13.6 → 1.0.0
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/ios/QmsPlugin/QmsDashboardViewManager.mm +30 -2
- package/ios/QmsPlugin/UIViewController+QmsAnalytics.m +42 -2
- package/ios/QmsPluginFramework.xcframework/Info.plist +5 -5
- package/ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/Assets.car +0 -0
- package/ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/QmsPluginFramework +0 -0
- package/ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/_CodeSignature/CodeResources +8 -8
- package/ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/bm.json +3 -3
- package/ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/cn.json +1 -1
- package/ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/en.json +8 -8
- package/ios/QmsPluginFramework.xcframework/ios-arm64_x86_64-simulator/QmsPluginFramework.framework/Assets.car +0 -0
- package/ios/QmsPluginFramework.xcframework/ios-arm64_x86_64-simulator/QmsPluginFramework.framework/QmsPluginFramework +0 -0
- package/ios/QmsPluginFramework.xcframework/ios-arm64_x86_64-simulator/QmsPluginFramework.framework/_CodeSignature/CodeResources +8 -8
- package/ios/QmsPluginFramework.xcframework/ios-arm64_x86_64-simulator/QmsPluginFramework.framework/bm.json +3 -3
- package/ios/QmsPluginFramework.xcframework/ios-arm64_x86_64-simulator/QmsPluginFramework.framework/cn.json +1 -1
- package/ios/QmsPluginFramework.xcframework/ios-arm64_x86_64-simulator/QmsPluginFramework.framework/en.json +8 -8
- package/lib/module/QmsDashboardView.android.js +6 -1
- package/lib/module/QmsDashboardView.android.js.map +1 -1
- package/lib/module/QmsDashboardView.ios.js +2 -0
- package/lib/module/QmsDashboardView.ios.js.map +1 -1
- package/lib/module/analyticsUtils.js +21 -0
- package/lib/module/analyticsUtils.js.map +1 -0
- package/lib/typescript/src/QmsDashboardView.android.d.ts.map +1 -1
- package/lib/typescript/src/QmsDashboardView.ios.d.ts.map +1 -1
- package/lib/typescript/src/QmsDashboardView.types.d.ts +1 -0
- package/lib/typescript/src/QmsDashboardView.types.d.ts.map +1 -1
- package/lib/typescript/src/analyticsUtils.d.ts +14 -0
- package/lib/typescript/src/analyticsUtils.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/QmsDashboardView.android.tsx +10 -1
- package/src/QmsDashboardView.ios.tsx +2 -0
- package/src/QmsDashboardView.types.ts +3 -0
- package/src/analyticsUtils.ts +22 -0
package/android/build.gradle
CHANGED
|
@@ -75,7 +75,7 @@ dependencies {
|
|
|
75
75
|
implementation "com.facebook.react:react-android"
|
|
76
76
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
77
77
|
implementation 'com.facebook.react:react-native:+'
|
|
78
|
-
implementation "com.convep.qms:qms-plugin:1.
|
|
78
|
+
implementation "com.convep.qms:qms-plugin:1.18.0"
|
|
79
79
|
|
|
80
80
|
implementation 'androidx.appcompat:appcompat:1.6.1'
|
|
81
81
|
|
|
@@ -540,12 +540,40 @@ static NSString * const kQmsRoutePayloadNotification = @"QmsRoutePayloadNotifica
|
|
|
540
540
|
return base;
|
|
541
541
|
}
|
|
542
542
|
|
|
543
|
+
- (NSAttributedString *)attributedStringByApplyingFontFamily:(NSString *)fontFamily
|
|
544
|
+
toAttributedString:(NSAttributedString *)attributedText
|
|
545
|
+
fallbackFont:(UIFont *)fallbackFont {
|
|
546
|
+
if (fontFamily.length == 0 || attributedText.length == 0) return attributedText;
|
|
547
|
+
|
|
548
|
+
NSMutableAttributedString *updatedAttributedText = [attributedText mutableCopy];
|
|
549
|
+
NSRange fullRange = NSMakeRange(0, attributedText.length);
|
|
550
|
+
|
|
551
|
+
[updatedAttributedText enumerateAttribute:NSFontAttributeName
|
|
552
|
+
inRange:fullRange
|
|
553
|
+
options:0
|
|
554
|
+
usingBlock:^(id value, NSRange range, BOOL *stop) {
|
|
555
|
+
UIFont *sourceFont = [value isKindOfClass:[UIFont class]] ? value : fallbackFont;
|
|
556
|
+
UIFont *updatedFont = [self fontByPreservingStyleFromFont:sourceFont];
|
|
557
|
+
if (updatedFont) {
|
|
558
|
+
[updatedAttributedText addAttribute:NSFontAttributeName value:updatedFont range:range];
|
|
559
|
+
}
|
|
560
|
+
}];
|
|
561
|
+
|
|
562
|
+
return updatedAttributedText;
|
|
563
|
+
}
|
|
564
|
+
|
|
543
565
|
- (void)applyFontFamilyRecursivelyOnView:(UIView *)view {
|
|
544
566
|
if (!view) return;
|
|
545
567
|
|
|
546
568
|
if ([view isKindOfClass:[UILabel class]]) {
|
|
547
569
|
UILabel *label = (UILabel *)view;
|
|
548
|
-
label.
|
|
570
|
+
if (label.attributedText.length > 0) {
|
|
571
|
+
label.attributedText = [self attributedStringByApplyingFontFamily:_fontFamily
|
|
572
|
+
toAttributedString:label.attributedText
|
|
573
|
+
fallbackFont:label.font];
|
|
574
|
+
} else {
|
|
575
|
+
label.font = [self fontByPreservingStyleFromFont:label.font];
|
|
576
|
+
}
|
|
549
577
|
} else if ([view isKindOfClass:[UIButton class]]) {
|
|
550
578
|
UIButton *button = (UIButton *)view;
|
|
551
579
|
if (button.titleLabel) {
|
|
@@ -680,4 +708,4 @@ RCT_EXPORT_MODULE();
|
|
|
680
708
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
|
681
709
|
}
|
|
682
710
|
|
|
683
|
-
@end
|
|
711
|
+
@end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
//UIViewController+QmsAnalytics.m
|
|
2
|
+
|
|
1
3
|
#import <Foundation/Foundation.h>
|
|
2
4
|
#import <UIKit/UIKit.h>
|
|
3
5
|
#import <objc/runtime.h>
|
|
@@ -373,12 +375,42 @@ static void qms_swizzleInstanceMethod(Class cls, SEL originalSelector, SEL swizz
|
|
|
373
375
|
return result ?: [UIFont systemFontOfSize:sourceFont.pointSize];
|
|
374
376
|
}
|
|
375
377
|
|
|
378
|
+
- (NSAttributedString *)qms_attributedStringByTransformingFontsInAttributedString:(NSAttributedString *)attributedText
|
|
379
|
+
fallbackFont:(UIFont *)fallbackFont
|
|
380
|
+
resolver:(UIFont *(^)(UIFont *sourceFont))resolver {
|
|
381
|
+
if (attributedText.length == 0 || resolver == nil) return attributedText;
|
|
382
|
+
|
|
383
|
+
NSMutableAttributedString *mutable = [attributedText mutableCopy];
|
|
384
|
+
NSRange fullRange = NSMakeRange(0, attributedText.length);
|
|
385
|
+
|
|
386
|
+
[mutable enumerateAttribute:NSFontAttributeName
|
|
387
|
+
inRange:fullRange
|
|
388
|
+
options:0
|
|
389
|
+
usingBlock:^(id value, NSRange range, BOOL *stop) {
|
|
390
|
+
UIFont *sourceFont = [value isKindOfClass:[UIFont class]] ? value : fallbackFont;
|
|
391
|
+
UIFont *updatedFont = resolver(sourceFont);
|
|
392
|
+
if (updatedFont) {
|
|
393
|
+
[mutable addAttribute:NSFontAttributeName value:updatedFont range:range];
|
|
394
|
+
}
|
|
395
|
+
}];
|
|
396
|
+
|
|
397
|
+
return mutable;
|
|
398
|
+
}
|
|
399
|
+
|
|
376
400
|
- (void)qms_applyFontRecursively:(UIView *)view fontFamily:(NSString *)fontFamily {
|
|
377
401
|
if (!view || fontFamily.length == 0) return;
|
|
378
402
|
|
|
379
403
|
if ([view isKindOfClass:[UILabel class]]) {
|
|
380
404
|
UILabel *label = (UILabel *)view;
|
|
381
|
-
label.
|
|
405
|
+
if (label.attributedText.length > 0) {
|
|
406
|
+
label.attributedText = [self qms_attributedStringByTransformingFontsInAttributedString:label.attributedText
|
|
407
|
+
fallbackFont:label.font
|
|
408
|
+
resolver:^UIFont *(UIFont *sourceFont) {
|
|
409
|
+
return [self qms_fontByPreservingStyleFromFont:sourceFont fontFamily:fontFamily];
|
|
410
|
+
}];
|
|
411
|
+
} else {
|
|
412
|
+
label.font = [self qms_fontByPreservingStyleFromFont:label.font fontFamily:fontFamily];
|
|
413
|
+
}
|
|
382
414
|
} else if ([view isKindOfClass:[UIButton class]]) {
|
|
383
415
|
UIButton *button = (UIButton *)view;
|
|
384
416
|
if (button.titleLabel) {
|
|
@@ -402,7 +434,15 @@ static void qms_swizzleInstanceMethod(Class cls, SEL originalSelector, SEL swizz
|
|
|
402
434
|
|
|
403
435
|
if ([view isKindOfClass:[UILabel class]]) {
|
|
404
436
|
UILabel *label = (UILabel *)view;
|
|
405
|
-
label.
|
|
437
|
+
if (label.attributedText.length > 0) {
|
|
438
|
+
label.attributedText = [self qms_attributedStringByTransformingFontsInAttributedString:label.attributedText
|
|
439
|
+
fallbackFont:label.font
|
|
440
|
+
resolver:^UIFont *(UIFont *sourceFont) {
|
|
441
|
+
return [self qms_systemFontByPreservingStyleFromFont:sourceFont];
|
|
442
|
+
}];
|
|
443
|
+
} else {
|
|
444
|
+
label.font = [self qms_systemFontByPreservingStyleFromFont:label.font];
|
|
445
|
+
}
|
|
406
446
|
} else if ([view isKindOfClass:[UIButton class]]) {
|
|
407
447
|
UIButton *button = (UIButton *)view;
|
|
408
448
|
if (button.titleLabel) {
|
|
@@ -8,32 +8,32 @@
|
|
|
8
8
|
<key>BinaryPath</key>
|
|
9
9
|
<string>QmsPluginFramework.framework/QmsPluginFramework</string>
|
|
10
10
|
<key>LibraryIdentifier</key>
|
|
11
|
-
<string>ios-
|
|
11
|
+
<string>ios-arm64_x86_64-simulator</string>
|
|
12
12
|
<key>LibraryPath</key>
|
|
13
13
|
<string>QmsPluginFramework.framework</string>
|
|
14
14
|
<key>SupportedArchitectures</key>
|
|
15
15
|
<array>
|
|
16
16
|
<string>arm64</string>
|
|
17
|
+
<string>x86_64</string>
|
|
17
18
|
</array>
|
|
18
19
|
<key>SupportedPlatform</key>
|
|
19
20
|
<string>ios</string>
|
|
21
|
+
<key>SupportedPlatformVariant</key>
|
|
22
|
+
<string>simulator</string>
|
|
20
23
|
</dict>
|
|
21
24
|
<dict>
|
|
22
25
|
<key>BinaryPath</key>
|
|
23
26
|
<string>QmsPluginFramework.framework/QmsPluginFramework</string>
|
|
24
27
|
<key>LibraryIdentifier</key>
|
|
25
|
-
<string>ios-
|
|
28
|
+
<string>ios-arm64</string>
|
|
26
29
|
<key>LibraryPath</key>
|
|
27
30
|
<string>QmsPluginFramework.framework</string>
|
|
28
31
|
<key>SupportedArchitectures</key>
|
|
29
32
|
<array>
|
|
30
33
|
<string>arm64</string>
|
|
31
|
-
<string>x86_64</string>
|
|
32
34
|
</array>
|
|
33
35
|
<key>SupportedPlatform</key>
|
|
34
36
|
<string>ios</string>
|
|
35
|
-
<key>SupportedPlatformVariant</key>
|
|
36
|
-
<string>simulator</string>
|
|
37
37
|
</dict>
|
|
38
38
|
</array>
|
|
39
39
|
<key>CFBundlePackageType</key>
|
package/ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/Assets.car
CHANGED
|
Binary file
|
package/ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/QmsPluginFramework
CHANGED
|
Binary file
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<dict>
|
|
7
7
|
<key>Assets.car</key>
|
|
8
8
|
<data>
|
|
9
|
-
|
|
9
|
+
T6eAuLKo8eHQ5cFQW2kHvRI+LZQ=
|
|
10
10
|
</data>
|
|
11
11
|
<key>Headers/QmsPlugin.h</key>
|
|
12
12
|
<data>
|
|
@@ -38,15 +38,15 @@
|
|
|
38
38
|
</data>
|
|
39
39
|
<key>bm.json</key>
|
|
40
40
|
<data>
|
|
41
|
-
|
|
41
|
+
J8m1xUyQbIm7FjEl6dgNTLhSBVU=
|
|
42
42
|
</data>
|
|
43
43
|
<key>cn.json</key>
|
|
44
44
|
<data>
|
|
45
|
-
|
|
45
|
+
6uy8Rq4wc/w3jMt5TwQTjNmTrIw=
|
|
46
46
|
</data>
|
|
47
47
|
<key>en.json</key>
|
|
48
48
|
<data>
|
|
49
|
-
|
|
49
|
+
jJePlr0jVQ0oMyMuz9T0D2I97JU=
|
|
50
50
|
</data>
|
|
51
51
|
</dict>
|
|
52
52
|
<key>files2</key>
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
<dict>
|
|
56
56
|
<key>hash2</key>
|
|
57
57
|
<data>
|
|
58
|
-
|
|
58
|
+
TJCmDXhTLBWwv/j4ARNk/VZD7zBRw8ormYCou4/wAlk=
|
|
59
59
|
</data>
|
|
60
60
|
</dict>
|
|
61
61
|
<key>Headers/QmsPlugin.h</key>
|
|
@@ -104,21 +104,21 @@
|
|
|
104
104
|
<dict>
|
|
105
105
|
<key>hash2</key>
|
|
106
106
|
<data>
|
|
107
|
-
|
|
107
|
+
GHvVL5a8K6Qm7Qfl7mj96elXhpNILq+pe3Z0Id6+x0g=
|
|
108
108
|
</data>
|
|
109
109
|
</dict>
|
|
110
110
|
<key>cn.json</key>
|
|
111
111
|
<dict>
|
|
112
112
|
<key>hash2</key>
|
|
113
113
|
<data>
|
|
114
|
-
|
|
114
|
+
2Pm//bhYsIm3nGwtPMMnVVBq8NjE3D8jcfSyp2imekQ=
|
|
115
115
|
</data>
|
|
116
116
|
</dict>
|
|
117
117
|
<key>en.json</key>
|
|
118
118
|
<dict>
|
|
119
119
|
<key>hash2</key>
|
|
120
120
|
<data>
|
|
121
|
-
|
|
121
|
+
Z4eYf4Co8BLRvV0MN9d9VLOtDoCQTpIqzplRDCXhQPg=
|
|
122
122
|
</data>
|
|
123
123
|
</dict>
|
|
124
124
|
</dict>
|
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
"BY_CATEGORY": "Mengikut Kategori",
|
|
238
238
|
"BY_CONTRACTOR": "Mengikut Kontraktor",
|
|
239
239
|
"DESELECT_ALL": "Nyahpilih Semua",
|
|
240
|
-
"SELECT_ALL": "Pilih Semua",
|
|
240
|
+
"SELECT_ALL": "Pilih Semua Status",
|
|
241
241
|
"SEARCH_LABEL1": "Isu Carian",
|
|
242
242
|
"REJECTED": "Ditolak",
|
|
243
243
|
"TAKE_PHOTO": "Ambil gambar",
|
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
"ADD_ITEM": "Tambah Item",
|
|
281
281
|
"SUBMITTED_BY": "Dihantar Oleh",
|
|
282
282
|
"RECEIVED_BY": "Diterima Oleh",
|
|
283
|
-
"CLICK_HERE": "
|
|
283
|
+
"CLICK_HERE": "Tandatangan di Sini",
|
|
284
284
|
"EMPTY_FIELD": "Sila isi ruangan yang diperlukan sebelum menghantar.",
|
|
285
285
|
"DETAILS": "Butiran",
|
|
286
286
|
"UNIT_NO": "No. Unit",
|
|
@@ -720,7 +720,7 @@
|
|
|
720
720
|
"WITHDRAW_ISSUE_SUMMARY": "Ringkasan Penarikan Isu",
|
|
721
721
|
"WITHDRAW_ISSUE_MESSAGE": "Adakah anda pasti mahu menarik balik isu ini?",
|
|
722
722
|
"WITHDRAW_ISSUE_SUCCESS_LABEL": "Isu berjaya ditarik balik",
|
|
723
|
-
"ISSUES_SELECTED": "Isu
|
|
723
|
+
"ISSUES_SELECTED": "Isu",
|
|
724
724
|
"ENTER_REMARKS_HERE": "Masukkan ulasan di sini...",
|
|
725
725
|
"WITHDRAWING": "Menarik Balik",
|
|
726
726
|
"WITHDRAW_ALERT_MESSAGE": "Sahkan untuk menarik balik isu?",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"REJECT_SUCCESS_LABEL": "Issue rejected successfully",
|
|
92
92
|
"ISSUE_SUCCESS_LABEL": "Issue created successfully",
|
|
93
93
|
"ISSUE_UPDATE_LABEL": "Issue updated successfully",
|
|
94
|
-
"SUBMIT": "
|
|
94
|
+
"SUBMIT": "Submit",
|
|
95
95
|
"CONFIRM": "Confirm",
|
|
96
96
|
"CONTRACTOR": "Contractor",
|
|
97
97
|
"IMAGE_UPLOAD": "Image Upload",
|
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
"BY_CATEGORY": "By Category",
|
|
233
233
|
"BY_CONTRACTOR": "By Contractor",
|
|
234
234
|
"DESELECT_ALL": "Deselect All",
|
|
235
|
-
"SELECT_ALL": "Select All",
|
|
235
|
+
"SELECT_ALL": "Select All Statuses",
|
|
236
236
|
"SEARCH_LABEL1": "Search Issues",
|
|
237
237
|
"REJECTED": "Rejected",
|
|
238
238
|
"TAKE_PHOTO": "Take Photo",
|
|
@@ -265,7 +265,7 @@
|
|
|
265
265
|
"SELECT_UNIT_BADGE": "Please select one unit or more to proceed",
|
|
266
266
|
"ALL_UNITS": "All Units",
|
|
267
267
|
"MAKE_TRANSACTION": "Make Transaction",
|
|
268
|
-
"SUBMITTED_ITEMS": "Submitted
|
|
268
|
+
"SUBMITTED_ITEMS": "Submitted",
|
|
269
269
|
"CODE": "Code",
|
|
270
270
|
"POSSESSOR": "Possessor",
|
|
271
271
|
"TRANSACTION": "Transaction",
|
|
@@ -275,7 +275,7 @@
|
|
|
275
275
|
"ADD_ITEM": "Add Item",
|
|
276
276
|
"SUBMITTED_BY": "Submitted By",
|
|
277
277
|
"RECEIVED_BY": "Received By",
|
|
278
|
-
"CLICK_HERE": "
|
|
278
|
+
"CLICK_HERE": "Sign Here",
|
|
279
279
|
"EMPTY_FIELD": "Please fill up the required fields before submitting.",
|
|
280
280
|
"DETAILS": "Details",
|
|
281
281
|
"UNIT_NO": "Unit No.",
|
|
@@ -623,7 +623,7 @@
|
|
|
623
623
|
"UPLOADED_COUNT": "Uploaded Count",
|
|
624
624
|
"REASON_FAILED_TO_SUBMIT": "Reason Failed to Submit",
|
|
625
625
|
"MAX_UNITS_ALERT_MESSAGE": "You have selected the maximum amount of units. Please remove a unit before adding a new one.",
|
|
626
|
-
"UNITS_SELECTED": "
|
|
626
|
+
"UNITS_SELECTED": "Unit(s) Selected",
|
|
627
627
|
"OFFLINE_UNIT": "Offline Unit",
|
|
628
628
|
"ADD_UNIT": "Add Unit",
|
|
629
629
|
"NO_DATA": "There is no data\nat this moment.",
|
|
@@ -682,7 +682,7 @@
|
|
|
682
682
|
"OFFLINE_MODE": "You are currently in offline mode",
|
|
683
683
|
"UPLOAD_DOCUMENT": "Upload Document",
|
|
684
684
|
"REMOVE_DOCUMENT": "Remove Document",
|
|
685
|
-
"DELETE_ISSUE_SUCCESS_LABEL": "Issue deleted
|
|
685
|
+
"DELETE_ISSUE_SUCCESS_LABEL": "Issue successfully deleted",
|
|
686
686
|
"PA_REMINDER": "Kindly submit your key for rectification works to begin OR contact Customer Service to make alternative arrangement.",
|
|
687
687
|
"SEARCH_UNIT": "Search Unit",
|
|
688
688
|
"SEARCH_PROJECT": "Search Project",
|
|
@@ -721,7 +721,7 @@
|
|
|
721
721
|
"WITHDRAW_ISSUE_SUMMARY": "Withdraw Issue Summary",
|
|
722
722
|
"WITHDRAW_ISSUE_MESSAGE": "Are you sure you want to withdraw this issue?",
|
|
723
723
|
"WITHDRAW_ISSUE_SUCCESS_LABEL": "Issue withdraw successfully",
|
|
724
|
-
"ISSUES_SELECTED": "Issue(s)
|
|
724
|
+
"ISSUES_SELECTED": "Issue(s)",
|
|
725
725
|
"ENTER_REMARKS_HERE": "Enter remarks here...",
|
|
726
726
|
"WITHDRAWING": "Withdrawing",
|
|
727
727
|
"WITHDRAW_ALERT_MESSAGE": "Confirm to withdraw issue?",
|
|
@@ -755,7 +755,7 @@
|
|
|
755
755
|
"COPY_LINK": "Copy Link",
|
|
756
756
|
"SHARE": " Share",
|
|
757
757
|
"LINK_ACCESS": "Link Access",
|
|
758
|
-
"CHANGE_LINK_NAME": "Change
|
|
758
|
+
"CHANGE_LINK_NAME": "Change Link Name",
|
|
759
759
|
"DELETE_LINK": "Delete Link",
|
|
760
760
|
"SHARE_LINKURL": "Share 3rd Party Link URL",
|
|
761
761
|
"SELECT_OPTION_TO_SHARE": "Select an option to share",
|
|
Binary file
|
|
Binary file
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<dict>
|
|
7
7
|
<key>Assets.car</key>
|
|
8
8
|
<data>
|
|
9
|
-
|
|
9
|
+
T6eAuLKo8eHQ5cFQW2kHvRI+LZQ=
|
|
10
10
|
</data>
|
|
11
11
|
<key>Headers/QmsPlugin.h</key>
|
|
12
12
|
<data>
|
|
@@ -38,15 +38,15 @@
|
|
|
38
38
|
</data>
|
|
39
39
|
<key>bm.json</key>
|
|
40
40
|
<data>
|
|
41
|
-
|
|
41
|
+
J8m1xUyQbIm7FjEl6dgNTLhSBVU=
|
|
42
42
|
</data>
|
|
43
43
|
<key>cn.json</key>
|
|
44
44
|
<data>
|
|
45
|
-
|
|
45
|
+
6uy8Rq4wc/w3jMt5TwQTjNmTrIw=
|
|
46
46
|
</data>
|
|
47
47
|
<key>en.json</key>
|
|
48
48
|
<data>
|
|
49
|
-
|
|
49
|
+
jJePlr0jVQ0oMyMuz9T0D2I97JU=
|
|
50
50
|
</data>
|
|
51
51
|
</dict>
|
|
52
52
|
<key>files2</key>
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
<dict>
|
|
56
56
|
<key>hash2</key>
|
|
57
57
|
<data>
|
|
58
|
-
|
|
58
|
+
TJCmDXhTLBWwv/j4ARNk/VZD7zBRw8ormYCou4/wAlk=
|
|
59
59
|
</data>
|
|
60
60
|
</dict>
|
|
61
61
|
<key>Headers/QmsPlugin.h</key>
|
|
@@ -104,21 +104,21 @@
|
|
|
104
104
|
<dict>
|
|
105
105
|
<key>hash2</key>
|
|
106
106
|
<data>
|
|
107
|
-
|
|
107
|
+
GHvVL5a8K6Qm7Qfl7mj96elXhpNILq+pe3Z0Id6+x0g=
|
|
108
108
|
</data>
|
|
109
109
|
</dict>
|
|
110
110
|
<key>cn.json</key>
|
|
111
111
|
<dict>
|
|
112
112
|
<key>hash2</key>
|
|
113
113
|
<data>
|
|
114
|
-
|
|
114
|
+
2Pm//bhYsIm3nGwtPMMnVVBq8NjE3D8jcfSyp2imekQ=
|
|
115
115
|
</data>
|
|
116
116
|
</dict>
|
|
117
117
|
<key>en.json</key>
|
|
118
118
|
<dict>
|
|
119
119
|
<key>hash2</key>
|
|
120
120
|
<data>
|
|
121
|
-
|
|
121
|
+
Z4eYf4Co8BLRvV0MN9d9VLOtDoCQTpIqzplRDCXhQPg=
|
|
122
122
|
</data>
|
|
123
123
|
</dict>
|
|
124
124
|
</dict>
|
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
"BY_CATEGORY": "Mengikut Kategori",
|
|
238
238
|
"BY_CONTRACTOR": "Mengikut Kontraktor",
|
|
239
239
|
"DESELECT_ALL": "Nyahpilih Semua",
|
|
240
|
-
"SELECT_ALL": "Pilih Semua",
|
|
240
|
+
"SELECT_ALL": "Pilih Semua Status",
|
|
241
241
|
"SEARCH_LABEL1": "Isu Carian",
|
|
242
242
|
"REJECTED": "Ditolak",
|
|
243
243
|
"TAKE_PHOTO": "Ambil gambar",
|
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
"ADD_ITEM": "Tambah Item",
|
|
281
281
|
"SUBMITTED_BY": "Dihantar Oleh",
|
|
282
282
|
"RECEIVED_BY": "Diterima Oleh",
|
|
283
|
-
"CLICK_HERE": "
|
|
283
|
+
"CLICK_HERE": "Tandatangan di Sini",
|
|
284
284
|
"EMPTY_FIELD": "Sila isi ruangan yang diperlukan sebelum menghantar.",
|
|
285
285
|
"DETAILS": "Butiran",
|
|
286
286
|
"UNIT_NO": "No. Unit",
|
|
@@ -720,7 +720,7 @@
|
|
|
720
720
|
"WITHDRAW_ISSUE_SUMMARY": "Ringkasan Penarikan Isu",
|
|
721
721
|
"WITHDRAW_ISSUE_MESSAGE": "Adakah anda pasti mahu menarik balik isu ini?",
|
|
722
722
|
"WITHDRAW_ISSUE_SUCCESS_LABEL": "Isu berjaya ditarik balik",
|
|
723
|
-
"ISSUES_SELECTED": "Isu
|
|
723
|
+
"ISSUES_SELECTED": "Isu",
|
|
724
724
|
"ENTER_REMARKS_HERE": "Masukkan ulasan di sini...",
|
|
725
725
|
"WITHDRAWING": "Menarik Balik",
|
|
726
726
|
"WITHDRAW_ALERT_MESSAGE": "Sahkan untuk menarik balik isu?",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"REJECT_SUCCESS_LABEL": "Issue rejected successfully",
|
|
92
92
|
"ISSUE_SUCCESS_LABEL": "Issue created successfully",
|
|
93
93
|
"ISSUE_UPDATE_LABEL": "Issue updated successfully",
|
|
94
|
-
"SUBMIT": "
|
|
94
|
+
"SUBMIT": "Submit",
|
|
95
95
|
"CONFIRM": "Confirm",
|
|
96
96
|
"CONTRACTOR": "Contractor",
|
|
97
97
|
"IMAGE_UPLOAD": "Image Upload",
|
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
"BY_CATEGORY": "By Category",
|
|
233
233
|
"BY_CONTRACTOR": "By Contractor",
|
|
234
234
|
"DESELECT_ALL": "Deselect All",
|
|
235
|
-
"SELECT_ALL": "Select All",
|
|
235
|
+
"SELECT_ALL": "Select All Statuses",
|
|
236
236
|
"SEARCH_LABEL1": "Search Issues",
|
|
237
237
|
"REJECTED": "Rejected",
|
|
238
238
|
"TAKE_PHOTO": "Take Photo",
|
|
@@ -265,7 +265,7 @@
|
|
|
265
265
|
"SELECT_UNIT_BADGE": "Please select one unit or more to proceed",
|
|
266
266
|
"ALL_UNITS": "All Units",
|
|
267
267
|
"MAKE_TRANSACTION": "Make Transaction",
|
|
268
|
-
"SUBMITTED_ITEMS": "Submitted
|
|
268
|
+
"SUBMITTED_ITEMS": "Submitted",
|
|
269
269
|
"CODE": "Code",
|
|
270
270
|
"POSSESSOR": "Possessor",
|
|
271
271
|
"TRANSACTION": "Transaction",
|
|
@@ -275,7 +275,7 @@
|
|
|
275
275
|
"ADD_ITEM": "Add Item",
|
|
276
276
|
"SUBMITTED_BY": "Submitted By",
|
|
277
277
|
"RECEIVED_BY": "Received By",
|
|
278
|
-
"CLICK_HERE": "
|
|
278
|
+
"CLICK_HERE": "Sign Here",
|
|
279
279
|
"EMPTY_FIELD": "Please fill up the required fields before submitting.",
|
|
280
280
|
"DETAILS": "Details",
|
|
281
281
|
"UNIT_NO": "Unit No.",
|
|
@@ -623,7 +623,7 @@
|
|
|
623
623
|
"UPLOADED_COUNT": "Uploaded Count",
|
|
624
624
|
"REASON_FAILED_TO_SUBMIT": "Reason Failed to Submit",
|
|
625
625
|
"MAX_UNITS_ALERT_MESSAGE": "You have selected the maximum amount of units. Please remove a unit before adding a new one.",
|
|
626
|
-
"UNITS_SELECTED": "
|
|
626
|
+
"UNITS_SELECTED": "Unit(s) Selected",
|
|
627
627
|
"OFFLINE_UNIT": "Offline Unit",
|
|
628
628
|
"ADD_UNIT": "Add Unit",
|
|
629
629
|
"NO_DATA": "There is no data\nat this moment.",
|
|
@@ -682,7 +682,7 @@
|
|
|
682
682
|
"OFFLINE_MODE": "You are currently in offline mode",
|
|
683
683
|
"UPLOAD_DOCUMENT": "Upload Document",
|
|
684
684
|
"REMOVE_DOCUMENT": "Remove Document",
|
|
685
|
-
"DELETE_ISSUE_SUCCESS_LABEL": "Issue deleted
|
|
685
|
+
"DELETE_ISSUE_SUCCESS_LABEL": "Issue successfully deleted",
|
|
686
686
|
"PA_REMINDER": "Kindly submit your key for rectification works to begin OR contact Customer Service to make alternative arrangement.",
|
|
687
687
|
"SEARCH_UNIT": "Search Unit",
|
|
688
688
|
"SEARCH_PROJECT": "Search Project",
|
|
@@ -721,7 +721,7 @@
|
|
|
721
721
|
"WITHDRAW_ISSUE_SUMMARY": "Withdraw Issue Summary",
|
|
722
722
|
"WITHDRAW_ISSUE_MESSAGE": "Are you sure you want to withdraw this issue?",
|
|
723
723
|
"WITHDRAW_ISSUE_SUCCESS_LABEL": "Issue withdraw successfully",
|
|
724
|
-
"ISSUES_SELECTED": "Issue(s)
|
|
724
|
+
"ISSUES_SELECTED": "Issue(s)",
|
|
725
725
|
"ENTER_REMARKS_HERE": "Enter remarks here...",
|
|
726
726
|
"WITHDRAWING": "Withdrawing",
|
|
727
727
|
"WITHDRAW_ALERT_MESSAGE": "Confirm to withdraw issue?",
|
|
@@ -755,7 +755,7 @@
|
|
|
755
755
|
"COPY_LINK": "Copy Link",
|
|
756
756
|
"SHARE": " Share",
|
|
757
757
|
"LINK_ACCESS": "Link Access",
|
|
758
|
-
"CHANGE_LINK_NAME": "Change
|
|
758
|
+
"CHANGE_LINK_NAME": "Change Link Name",
|
|
759
759
|
"DELETE_LINK": "Delete Link",
|
|
760
760
|
"SHARE_LINKURL": "Share 3rd Party Link URL",
|
|
761
761
|
"SELECT_OPTION_TO_SHARE": "Select an option to share",
|
|
@@ -12,6 +12,7 @@ export const QmsDashboardView = ({
|
|
|
12
12
|
onLogout,
|
|
13
13
|
onAnalyticsScreen,
|
|
14
14
|
onAnalyticsEvent,
|
|
15
|
+
onLocate,
|
|
15
16
|
clientID,
|
|
16
17
|
clientCode,
|
|
17
18
|
ClientID,
|
|
@@ -99,7 +100,11 @@ export const QmsDashboardView = ({
|
|
|
99
100
|
const subscription = DeviceEventEmitter.addListener('QmsSdkOnAnalyticsEvent', event => onAnalyticsEvent(event?.eventName, event?.params ?? null));
|
|
100
101
|
return () => subscription.remove();
|
|
101
102
|
}, [onAnalyticsEvent]);
|
|
102
|
-
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
if (!onLocate) return;
|
|
105
|
+
const subscription = DeviceEventEmitter.addListener('QmsSdkOnLocate', event => onLocate(event?.lat, event?.lng));
|
|
106
|
+
return () => subscription.remove();
|
|
107
|
+
}, [onLocate]);
|
|
103
108
|
// Android doesn’t need to show native UI as a "view" here,
|
|
104
109
|
// we just render an empty container so JSX stays consistent.
|
|
105
110
|
return /*#__PURE__*/_jsx(View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","DeviceEventEmitter","NativeModules","View","jsx","_jsx","QmsModule","QmsDashboardView","style","onClose","onLogout","onAnalyticsScreen","onAnalyticsEvent","clientID","clientCode","ClientID","ClientCode","user_token","token","userToken","autoShow","themeColor","headerThemeColor","headerTextColor","headerIconColor","accentColor","fontFamily","isOrigin","payload","resolvedClientID","resolvedClientCode","resolvedToken","hasPayload","Object","keys","length","showQms","setPrimaryColor","resolvedHeaderColor","setHeaderTextColor","resolvedHeaderIconColor","setHeaderIconColor","setAccentColor","setFontFamily","showQmsWithPayload","subscription","addListener","remove","event","screenName","screenClass","eventName","params"],"sourceRoot":"../../src","sources":["QmsDashboardView.android.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,kBAAkB,EAAEC,aAAa,EAAEC,IAAI,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGvE,MAAM;EAAEC;AAAU,CAAC,GAAGJ,aAqBrB;AAED,OAAO,MAAMK,gBAAiD,GAAGA,CAAC;EAChEC,KAAK;EACLC,OAAO;EACPC,QAAQ;EACRC,iBAAiB;EACjBC,gBAAgB;EAChBC,QAAQ;EACRC,UAAU;EACVC,QAAQ;EACRC,UAAU;EACVC,UAAU;EACVC,KAAK;EACLC,SAAS;EACTC,QAAQ,GAAG,IAAI;EACfC,UAAU;EACVC,gBAAgB;EAChBC,eAAe;EACfC,eAAe;EACfC,WAAW;EACXC,UAAU;EACVC,QAAQ,GAAG,KAAK;EAChBC;AACF,CAAC,KAAK;
|
|
1
|
+
{"version":3,"names":["React","useEffect","DeviceEventEmitter","NativeModules","View","jsx","_jsx","QmsModule","QmsDashboardView","style","onClose","onLogout","onAnalyticsScreen","onAnalyticsEvent","onLocate","clientID","clientCode","ClientID","ClientCode","user_token","token","userToken","autoShow","themeColor","headerThemeColor","headerTextColor","headerIconColor","accentColor","fontFamily","isOrigin","payload","resolvedClientID","resolvedClientCode","resolvedToken","hasPayload","Object","keys","length","showQms","setPrimaryColor","resolvedHeaderColor","setHeaderTextColor","resolvedHeaderIconColor","setHeaderIconColor","setAccentColor","setFontFamily","showQmsWithPayload","subscription","addListener","remove","event","screenName","screenClass","eventName","params","lat","lng"],"sourceRoot":"../../src","sources":["QmsDashboardView.android.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","DeviceEventEmitter","NativeEventEmitter","NativeModules","requireNativeComponent","jsx","_jsx","NativeQmsDashboardView","QmsDashboardView","props","onClose","onLogout","onAnalyticsScreen","onAnalyticsEvent","clientID","clientCode","ClientID","ClientCode","user_token","userToken","token","isOrigin","themeColor","headerThemeColor","headerTextColor","headerIconColor","accentColor","fontFamily","payload","rest","resolvedClientID","resolvedClientCode","resolvedToken","resolvedHeaderColor","resolvedHeaderIconColor","module","QmsModule","setPrimaryColor","setHeaderTextColor","setHeaderIconColor","setAccentColor","setFontFamily","nativeEmitterModule","QmsDashboardEmitter","emitter","subscriptions","push","addListener","forEach","sub","remove","subscription","screenName","screenClass","eventName","params"],"sourceRoot":"../../src","sources":["QmsDashboardView.ios.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useEffect","DeviceEventEmitter","NativeEventEmitter","NativeModules","requireNativeComponent","jsx","_jsx","NativeQmsDashboardView","QmsDashboardView","props","onClose","onLogout","onAnalyticsScreen","onAnalyticsEvent","clientID","clientCode","ClientID","ClientCode","user_token","userToken","token","isOrigin","themeColor","headerThemeColor","headerTextColor","headerIconColor","accentColor","fontFamily","payload","rest","resolvedClientID","resolvedClientCode","resolvedToken","resolvedHeaderColor","resolvedHeaderIconColor","module","QmsModule","setPrimaryColor","setHeaderTextColor","setHeaderIconColor","setAccentColor","setFontFamily","nativeEmitterModule","QmsDashboardEmitter","emitter","subscriptions","push","addListener","forEach","sub","remove","subscription","screenName","screenClass","eventName","params"],"sourceRoot":"../../src","sources":["QmsDashboardView.ios.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Converts a raw event name from the native SDK into a Firebase-safe event name.
|
|
5
|
+
*
|
|
6
|
+
* Firebase rules:
|
|
7
|
+
* - Only letters, digits, and underscores
|
|
8
|
+
* - Must begin with a letter
|
|
9
|
+
* - Max 40 characters
|
|
10
|
+
*
|
|
11
|
+
* e.g. "POA Sign Off" → "poa_sign_off"
|
|
12
|
+
* "Unit Overview" → "unit_overview"
|
|
13
|
+
* "ScreenAt" → "screenat"
|
|
14
|
+
*/
|
|
15
|
+
export function toFirebaseEventName(raw) {
|
|
16
|
+
if (!raw) return '';
|
|
17
|
+
return raw.trim().toLowerCase().replace(/[^a-z0-9]+/g, '_') // replace any non-alphanumeric run with _
|
|
18
|
+
.replace(/^_+|_+$/g, '') // strip leading/trailing underscores
|
|
19
|
+
.slice(0, 40); // Firebase max 40 chars
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=analyticsUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["toFirebaseEventName","raw","trim","toLowerCase","replace","slice"],"sourceRoot":"../../src","sources":["analyticsUtils.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,mBAAmBA,CAACC,GAA8B,EAAU;EAC1E,IAAI,CAACA,GAAG,EAAE,OAAO,EAAE;EAEnB,OAAOA,GAAG,CACPC,IAAI,CAAC,CAAC,CACNC,WAAW,CAAC,CAAC,CACbC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;EAAA,CAC5BA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAK;EAAA,CAC5BC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAe;AACjC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QmsDashboardView.android.d.ts","sourceRoot":"","sources":["../../../src/QmsDashboardView.android.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAyBtE,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"QmsDashboardView.android.d.ts","sourceRoot":"","sources":["../../../src/QmsDashboardView.android.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAyBtE,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+J5D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QmsDashboardView.ios.d.ts","sourceRoot":"","sources":["../../../src/QmsDashboardView.ios.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QmsDashboardView.ios.d.ts","sourceRoot":"","sources":["../../../src/QmsDashboardView.ios.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAOzC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAMtE,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAyG5D,CAAC"}
|
|
@@ -5,6 +5,7 @@ export type QmsDashboardViewProps = {
|
|
|
5
5
|
onLogout?: (event?: unknown) => void;
|
|
6
6
|
onAnalyticsScreen?: (screenName?: string, screenClass?: string) => void;
|
|
7
7
|
onAnalyticsEvent?: (eventName?: string, params?: Record<string, unknown> | null) => void;
|
|
8
|
+
onLocate?: (lat?: string, lng?: string) => void;
|
|
8
9
|
/**
|
|
9
10
|
* Preferred camelCase props. Uppercase variants are kept for backwards compatibility
|
|
10
11
|
* with the native iOS view manager prop names.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QmsDashboardView.types.d.ts","sourceRoot":"","sources":["../../../src/QmsDashboardView.types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QmsDashboardView.types.d.ts","sourceRoot":"","sources":["../../../src/QmsDashboardView.types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,iBAAiB,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,gBAAgB,CAAC,EAAE,CACjB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,KACpC,IAAI,CAAC;IACV,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a raw event name from the native SDK into a Firebase-safe event name.
|
|
3
|
+
*
|
|
4
|
+
* Firebase rules:
|
|
5
|
+
* - Only letters, digits, and underscores
|
|
6
|
+
* - Must begin with a letter
|
|
7
|
+
* - Max 40 characters
|
|
8
|
+
*
|
|
9
|
+
* e.g. "POA Sign Off" → "poa_sign_off"
|
|
10
|
+
* "Unit Overview" → "unit_overview"
|
|
11
|
+
* "ScreenAt" → "screenat"
|
|
12
|
+
*/
|
|
13
|
+
export declare function toFirebaseEventName(raw: string | undefined | null): string;
|
|
14
|
+
//# sourceMappingURL=analyticsUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticsUtils.d.ts","sourceRoot":"","sources":["../../../src/analyticsUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAS1E"}
|
package/package.json
CHANGED
|
@@ -31,6 +31,7 @@ export const QmsDashboardView: React.FC<QmsDashboardViewProps> = ({
|
|
|
31
31
|
onLogout,
|
|
32
32
|
onAnalyticsScreen,
|
|
33
33
|
onAnalyticsEvent,
|
|
34
|
+
onLocate,
|
|
34
35
|
clientID,
|
|
35
36
|
clientCode,
|
|
36
37
|
ClientID,
|
|
@@ -171,7 +172,15 @@ export const QmsDashboardView: React.FC<QmsDashboardViewProps> = ({
|
|
|
171
172
|
);
|
|
172
173
|
return () => subscription.remove();
|
|
173
174
|
}, [onAnalyticsEvent]);
|
|
174
|
-
|
|
175
|
+
useEffect(() => {
|
|
176
|
+
if (!onLocate) return;
|
|
177
|
+
const subscription = DeviceEventEmitter.addListener(
|
|
178
|
+
'QmsSdkOnLocate',
|
|
179
|
+
(event?: { lat?: string; lng?: string }) =>
|
|
180
|
+
onLocate(event?.lat, event?.lng)
|
|
181
|
+
);
|
|
182
|
+
return () => subscription.remove();
|
|
183
|
+
}, [onLocate]);
|
|
175
184
|
// Android doesn’t need to show native UI as a "view" here,
|
|
176
185
|
// we just render an empty container so JSX stays consistent.
|
|
177
186
|
return <View style={style} />;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// QmsDashboardView.types.ts
|
|
2
|
+
|
|
1
3
|
import type { StyleProp, ViewStyle } from 'react-native';
|
|
2
4
|
|
|
3
5
|
export type QmsDashboardViewProps = {
|
|
@@ -9,6 +11,7 @@ export type QmsDashboardViewProps = {
|
|
|
9
11
|
eventName?: string,
|
|
10
12
|
params?: Record<string, unknown> | null
|
|
11
13
|
) => void;
|
|
14
|
+
onLocate?: (lat?: string, lng?: string) => void;
|
|
12
15
|
/**
|
|
13
16
|
* Preferred camelCase props. Uppercase variants are kept for backwards compatibility
|
|
14
17
|
* with the native iOS view manager prop names.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a raw event name from the native SDK into a Firebase-safe event name.
|
|
3
|
+
*
|
|
4
|
+
* Firebase rules:
|
|
5
|
+
* - Only letters, digits, and underscores
|
|
6
|
+
* - Must begin with a letter
|
|
7
|
+
* - Max 40 characters
|
|
8
|
+
*
|
|
9
|
+
* e.g. "POA Sign Off" → "poa_sign_off"
|
|
10
|
+
* "Unit Overview" → "unit_overview"
|
|
11
|
+
* "ScreenAt" → "screenat"
|
|
12
|
+
*/
|
|
13
|
+
export function toFirebaseEventName(raw: string | undefined | null): string {
|
|
14
|
+
if (!raw) return '';
|
|
15
|
+
|
|
16
|
+
return raw
|
|
17
|
+
.trim()
|
|
18
|
+
.toLowerCase()
|
|
19
|
+
.replace(/[^a-z0-9]+/g, '_') // replace any non-alphanumeric run with _
|
|
20
|
+
.replace(/^_+|_+$/g, '') // strip leading/trailing underscores
|
|
21
|
+
.slice(0, 40); // Firebase max 40 chars
|
|
22
|
+
}
|