@saasquatch/mint-components 1.5.4-0 → 1.5.4
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/CHANGELOG.md +3 -1
- package/dist/cjs/{ShadowViewAddon-a94a1ff9.js → ShadowViewAddon-19f45acf.js} +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mint-components.cjs.js +1 -1
- package/dist/cjs/sqm-big-stat_35.cjs.entry.js +41 -22
- package/dist/cjs/sqm-leaderboard-rank.cjs.entry.js +1 -0
- package/dist/cjs/sqm-stencilbook.cjs.entry.js +38 -30
- package/dist/collection/components/sqm-leaderboard/Leaderboard.stories.js +34 -26
- package/dist/collection/components/sqm-leaderboard/UseLeaderboard.stories.js +1 -1
- package/dist/collection/components/sqm-leaderboard/sqm-leaderboard-view.js +2 -2
- package/dist/collection/components/sqm-leaderboard/sqm-leaderboard.js +29 -27
- package/dist/collection/components/sqm-leaderboard/useLeaderboard.js +26 -9
- package/dist/collection/components/sqm-leaderboard-rank/useLeaderboardRank.js +1 -0
- package/dist/collection/components/sqm-reward-exchange-list/sqm-reward-exchange-list.js +2 -2
- package/dist/esm/{ShadowViewAddon-87c6e4d6.js → ShadowViewAddon-2ebdb75f.js} +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mint-components.js +1 -1
- package/dist/esm/sqm-big-stat_35.entry.js +42 -23
- package/dist/esm/sqm-leaderboard-rank.entry.js +1 -0
- package/dist/esm/sqm-stencilbook.entry.js +38 -30
- package/dist/esm-es5/ShadowViewAddon-2ebdb75f.js +1 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/mint-components.js +1 -1
- package/dist/esm-es5/sqm-big-stat_35.entry.js +1 -1
- package/dist/esm-es5/sqm-leaderboard-rank.entry.js +1 -1
- package/dist/esm-es5/sqm-stencilbook.entry.js +1 -1
- package/dist/mint-components/mint-components.esm.js +1 -1
- package/dist/mint-components/{p-7fbf40d1.entry.js → p-11dc0927.entry.js} +1 -1
- package/dist/mint-components/p-1e72d54f.system.entry.js +1 -0
- package/dist/mint-components/p-1efb0bff.system.entry.js +1 -0
- package/dist/mint-components/{p-0141c56b.system.entry.js → p-2debe4c7.system.entry.js} +1 -1
- package/dist/mint-components/p-3cfe1db7.system.js +1 -0
- package/dist/mint-components/p-436da6b8.system.js +1 -1
- package/dist/mint-components/{p-3ad83621.entry.js → p-6528f752.entry.js} +1 -1
- package/dist/mint-components/{p-c195994f.js → p-6da6a80f.js} +1 -1
- package/dist/mint-components/p-e0cb936a.entry.js +159 -0
- package/dist/types/components/sqm-leaderboard/sqm-leaderboard-view.d.ts +2 -2
- package/dist/types/components/sqm-leaderboard/sqm-leaderboard.d.ts +15 -11
- package/dist/types/components/sqm-leaderboard/useLeaderboard.d.ts +2 -2
- package/dist/types/components.d.ts +30 -26
- package/grapesjs/grapesjs.js +1 -1
- package/package.json +1 -1
- package/dist/esm-es5/ShadowViewAddon-87c6e4d6.js +0 -1
- package/dist/mint-components/p-02b6ea85.system.js +0 -1
- package/dist/mint-components/p-798486ae.entry.js +0 -150
- package/dist/mint-components/p-a3686572.system.entry.js +0 -1
- package/dist/mint-components/p-adac1440.system.entry.js +0 -1
|
@@ -2,7 +2,7 @@ import { r as registerInstance, h as h$1, c as Host } from './index-17b4da69.js'
|
|
|
2
2
|
import { m as h, e as useEffect, k as useState, y, o as d, f as useRef, b as browser, u as useReducer } from './stencil-hooks.module-acc8a613.js';
|
|
3
3
|
import { i as intl } from './global-15cdf41a.js';
|
|
4
4
|
import { u as useCallback } from './use-callback-7e0bfd3b.js';
|
|
5
|
-
import { j as jn, P, d as dist, i as ie, b as sn, q as qe, M, r as rn, c as dn, g as $e, E as Ee, D as De, H as He, l as ln, R as Rn
|
|
5
|
+
import { j as jn, P, d as dist, i as ie, b as sn, q as qe, M, A as An, r as rn, c as dn, g as $e, E as Ee, D as De, H as He, l as ln, R as Rn } from './index.module-f5e17a4e.js';
|
|
6
6
|
import './extends-c31f1eff.js';
|
|
7
7
|
import { j as jsonpointer } from './jsonpointer-388a7082.js';
|
|
8
8
|
import { c as cjs } from './cjs-bdfb4486.js';
|
|
@@ -14,7 +14,7 @@ import './luxon-f44215d9.js';
|
|
|
14
14
|
import { g as getProps, a as getMissingProps, s as sanitizeUrlPath } from './utils-d7bbb0e2.js';
|
|
15
15
|
import './sqm-text-span-view-020db63f.js';
|
|
16
16
|
import './sqm-portal-container-view-34f26e2a.js';
|
|
17
|
-
import { c as useDemoBigStat, K as useBigStat, B as BigStatView, H as autoColorScaleCss, G as CardFeedView, C as CheckboxFieldView, D as DropdownFieldView, E as EditProfileView, I as InputFieldView, M as withShadowView, L as LeaderboardView, N as NameFieldsView, e as PortalChangePasswordView, P as PortalFrameView, f as PortalLoginView, g as PortalRegisterView, R as ReferralIframeView, O as demoRewardExchange, i as RewardExchangeView, Q as pathToRegexp, b as useShareButton, S as ShareButtonView, a as ShareLinkView, u as useShareLink, d as StatContainerView, T as TaskCardView } from './ShadowViewAddon-
|
|
17
|
+
import { c as useDemoBigStat, K as useBigStat, B as BigStatView, H as autoColorScaleCss, G as CardFeedView, C as CheckboxFieldView, D as DropdownFieldView, E as EditProfileView, I as InputFieldView, M as withShadowView, L as LeaderboardView, N as NameFieldsView, e as PortalChangePasswordView, P as PortalFrameView, f as PortalLoginView, g as PortalRegisterView, R as ReferralIframeView, O as demoRewardExchange, i as RewardExchangeView, Q as pathToRegexp, b as useShareButton, S as ShareButtonView, a as ShareLinkView, u as useShareLink, d as StatContainerView, T as TaskCardView } from './ShadowViewAddon-2ebdb75f.js';
|
|
18
18
|
import './sqm-portal-section-view-c8d1c727.js';
|
|
19
19
|
|
|
20
20
|
const BigStat = class {
|
|
@@ -864,11 +864,16 @@ function useInputFieldDemo(props) {
|
|
|
864
864
|
}
|
|
865
865
|
|
|
866
866
|
const GET_LEADERBOARD = dist.gql `
|
|
867
|
-
query (
|
|
867
|
+
query (
|
|
868
|
+
$type: String!
|
|
869
|
+
$filter: UserLeaderboardFilterInput
|
|
870
|
+
$locale: RSLocale
|
|
871
|
+
$limit: Int!
|
|
872
|
+
) {
|
|
868
873
|
userLeaderboard(type: $type, filter: $filter) {
|
|
869
874
|
dateModified
|
|
870
|
-
rows {
|
|
871
|
-
|
|
875
|
+
rows(limit: $limit) {
|
|
876
|
+
textValue(locale: $locale)
|
|
872
877
|
firstName
|
|
873
878
|
lastInitial
|
|
874
879
|
rank {
|
|
@@ -881,13 +886,17 @@ const GET_LEADERBOARD = dist.gql `
|
|
|
881
886
|
}
|
|
882
887
|
`;
|
|
883
888
|
const GET_RANK = dist.gql `
|
|
884
|
-
query (
|
|
889
|
+
query (
|
|
890
|
+
$type: String!
|
|
891
|
+
$filter: UserLeaderboardFilterInput
|
|
892
|
+
$locale: RSLocale
|
|
893
|
+
) {
|
|
885
894
|
viewer {
|
|
886
895
|
... on User {
|
|
887
896
|
firstName
|
|
888
897
|
lastInitial
|
|
889
898
|
leaderboardRank(type: $type, filter: $filter) {
|
|
890
|
-
|
|
899
|
+
textValue(locale: $locale)
|
|
891
900
|
rank
|
|
892
901
|
denseRank
|
|
893
902
|
rowNumber
|
|
@@ -902,6 +911,7 @@ function useLeaderboard(props) {
|
|
|
902
911
|
// Default to context, overriden by props
|
|
903
912
|
const programId = (_a = props.programId) !== null && _a !== void 0 ? _a : programIdContext;
|
|
904
913
|
const user = ie();
|
|
914
|
+
const locale = An();
|
|
905
915
|
const variables = programId
|
|
906
916
|
? {
|
|
907
917
|
type: props.leaderboardType,
|
|
@@ -909,10 +919,17 @@ function useLeaderboard(props) {
|
|
|
909
919
|
}
|
|
910
920
|
: {
|
|
911
921
|
type: props.leaderboardType,
|
|
922
|
+
filter: {},
|
|
912
923
|
};
|
|
913
924
|
if (props.interval) {
|
|
914
925
|
variables.filter["interval"] = props.interval;
|
|
915
926
|
}
|
|
927
|
+
if (locale) {
|
|
928
|
+
variables["locale"] = locale;
|
|
929
|
+
}
|
|
930
|
+
if (props.maxRows > 0) {
|
|
931
|
+
variables["limit"] = props.maxRows;
|
|
932
|
+
}
|
|
916
933
|
const { data: leaderboardData, loading: loadingLeaderboard } = sn(GET_LEADERBOARD, variables, !(user === null || user === void 0 ? void 0 : user.jwt));
|
|
917
934
|
const { data: rankData } = sn(GET_RANK, variables, !(user === null || user === void 0 ? void 0 : user.jwt));
|
|
918
935
|
const leaderboardRows = (_b = leaderboardData === null || leaderboardData === void 0 ? void 0 : leaderboardData.userLeaderboard) === null || _b === void 0 ? void 0 : _b.rows;
|
|
@@ -924,7 +941,7 @@ function useLeaderboard(props) {
|
|
|
924
941
|
return leaderboardRows === null || leaderboardRows === void 0 ? void 0 : leaderboardRows.flatMap((user) => {
|
|
925
942
|
var _a, _b;
|
|
926
943
|
return ({
|
|
927
|
-
|
|
944
|
+
textValue: user.textValue,
|
|
928
945
|
firstName: user.firstName,
|
|
929
946
|
lastInitial: user.lastInitial,
|
|
930
947
|
rank: (_a = user.rank) === null || _a === void 0 ? void 0 : _a[props.rankType],
|
|
@@ -933,7 +950,7 @@ function useLeaderboard(props) {
|
|
|
933
950
|
});
|
|
934
951
|
}
|
|
935
952
|
const viewingUser = {
|
|
936
|
-
|
|
953
|
+
textValue: (_d = (_c = rankData === null || rankData === void 0 ? void 0 : rankData.viewer) === null || _c === void 0 ? void 0 : _c.leaderboardRank) === null || _d === void 0 ? void 0 : _d.textValue,
|
|
937
954
|
firstName: (_e = rankData === null || rankData === void 0 ? void 0 : rankData.viewer) === null || _e === void 0 ? void 0 : _e.firstName,
|
|
938
955
|
lastInitial: (_f = rankData === null || rankData === void 0 ? void 0 : rankData.viewer) === null || _f === void 0 ? void 0 : _f.lastInitial,
|
|
939
956
|
rank: (_h = (_g = rankData === null || rankData === void 0 ? void 0 : rankData.viewer) === null || _g === void 0 ? void 0 : _g.leaderboardRank) === null || _h === void 0 ? void 0 : _h[props.rankType],
|
|
@@ -946,7 +963,7 @@ function useLeaderboard(props) {
|
|
|
946
963
|
styles: props,
|
|
947
964
|
},
|
|
948
965
|
data: {
|
|
949
|
-
leaderboard: sortedLeaderboard
|
|
966
|
+
leaderboard: sortedLeaderboard,
|
|
950
967
|
rankType: props.rankType,
|
|
951
968
|
viewerRank: viewingUser,
|
|
952
969
|
},
|
|
@@ -961,21 +978,23 @@ const Leaderboard = class {
|
|
|
961
978
|
constructor(hostRef) {
|
|
962
979
|
registerInstance(this, hostRef);
|
|
963
980
|
/**
|
|
964
|
-
* Hide the
|
|
981
|
+
* Hide the viewer's leaderboard row if not in the top 10.
|
|
965
982
|
*
|
|
966
|
-
* @uiName Hide
|
|
983
|
+
* @uiName Hide Viewing User
|
|
967
984
|
*/
|
|
968
985
|
this.hideViewer = false;
|
|
969
986
|
/**
|
|
970
|
-
*
|
|
987
|
+
* Text displayed for users without names in the leaderboard
|
|
988
|
+
*
|
|
989
|
+
* @uiName Anonymous User Name
|
|
971
990
|
*/
|
|
972
991
|
this.anonymousUser = "Anonymous User";
|
|
973
992
|
/**
|
|
974
|
-
*
|
|
993
|
+
* Control the maximum amount of rows displayed on the leaderboard.
|
|
975
994
|
*
|
|
976
|
-
* @uiName
|
|
995
|
+
* @uiName Maximum Rows Number
|
|
977
996
|
*/
|
|
978
|
-
this.
|
|
997
|
+
this.maxRows = 10;
|
|
979
998
|
this.ignored = true;
|
|
980
999
|
h(this);
|
|
981
1000
|
withShadowView(this);
|
|
@@ -990,7 +1009,7 @@ const Leaderboard = class {
|
|
|
990
1009
|
rankheading: this.rankheading,
|
|
991
1010
|
rankType: this.rankType,
|
|
992
1011
|
leaderboardType: this.leaderboardType,
|
|
993
|
-
|
|
1012
|
+
maxRows: this.maxRows,
|
|
994
1013
|
programId: this.programId,
|
|
995
1014
|
anonymousUser: this.anonymousUser,
|
|
996
1015
|
interval: this.interval,
|
|
@@ -1018,33 +1037,33 @@ function useLeaderboardDemo(props) {
|
|
|
1018
1037
|
{
|
|
1019
1038
|
firstName: "Viktor",
|
|
1020
1039
|
lastInitial: "V",
|
|
1021
|
-
|
|
1040
|
+
textValue: "82",
|
|
1022
1041
|
rank: 1,
|
|
1023
1042
|
rowNumber: 1,
|
|
1024
1043
|
},
|
|
1025
1044
|
{
|
|
1026
1045
|
firstName: "MF",
|
|
1027
1046
|
lastInitial: "D",
|
|
1028
|
-
|
|
1047
|
+
textValue: "73",
|
|
1029
1048
|
rank: 2,
|
|
1030
1049
|
rowNumber: 2,
|
|
1031
1050
|
},
|
|
1032
1051
|
{
|
|
1033
1052
|
firstName: "Freddie",
|
|
1034
1053
|
lastInitial: "G",
|
|
1035
|
-
|
|
1054
|
+
textValue: "64",
|
|
1036
1055
|
rank: 3,
|
|
1037
1056
|
rowNumber: 3,
|
|
1038
1057
|
},
|
|
1039
1058
|
{
|
|
1040
1059
|
firstName: "Benny",
|
|
1041
1060
|
lastInitial: "B",
|
|
1042
|
-
|
|
1061
|
+
textValue: "55",
|
|
1043
1062
|
rank: 4,
|
|
1044
1063
|
rowNumber: 4,
|
|
1045
1064
|
},
|
|
1046
1065
|
{
|
|
1047
|
-
|
|
1066
|
+
textValue: "46",
|
|
1048
1067
|
rank: 5,
|
|
1049
1068
|
rowNumber: 5,
|
|
1050
1069
|
},
|
|
@@ -6689,7 +6708,7 @@ const SqmRewardExchangeList = class {
|
|
|
6689
6708
|
/**
|
|
6690
6709
|
* @uiName Exchange button text
|
|
6691
6710
|
*/
|
|
6692
|
-
this.notAvailableError = "{unavailableReasonCode, select, US_TAX {US Tax limit} INSUFFICIENT_REDEEMABLE_CREDIT {{sourceValue} required} AVAILABILITY_PREDICATE {Not available} other {unavailableReasonCode} }";
|
|
6711
|
+
this.notAvailableError = "{unavailableReasonCode, select, US_TAX {US Tax limit} INSUFFICIENT_REDEEMABLE_CREDIT {{sourceValue} required} AVAILABILITY_PREDICATE {Not available} other {{unavailableReasonCode}} }";
|
|
6693
6712
|
/**
|
|
6694
6713
|
* @uiName Choose Reward Progress Title
|
|
6695
6714
|
*/
|
|
@@ -23,7 +23,7 @@ import { P as PortalContainerView } from './sqm-portal-container-view-34f26e2a.j
|
|
|
23
23
|
import { P as PortalProfileView } from './sqm-portal-profile-view-28c39970.js';
|
|
24
24
|
import { P as PortalResetPasswordView } from './sqm-portal-reset-password-view-e0436989.js';
|
|
25
25
|
import { P as PortalVerifyEmailView } from './sqm-portal-verify-email-view-c489166b.js';
|
|
26
|
-
import { S as ShareButtonView, L as LeaderboardView, a as ShareLinkView, B as BigStatView, P as PortalFrameView, E as EditProfileView, u as useShareLink, b as useShareButton, c as useDemoBigStat, d as StatContainerView, e as PortalChangePasswordView, f as PortalLoginView, g as PortalRegisterView, T as TaskCardView, h as ProgressBarView, R as ReferralIframeView, N as NameFieldsView, C as CheckboxFieldView, D as DropdownFieldView, I as InputFieldView, i as RewardExchangeView, r as rewardExchangeCustomErrorMsg, j as rewardExchangeLongText, k as rewardExchangeSelected, l as chooseAmountFixed, m as chooseAmountFixedNoDescription, n as chooseAmountVariable, o as chooseAmountVariableNoDescription, p as chooseAmountVariableDisabled, q as chooseAmountVariableUnavailable, s as confirmFixed, t as confirmVariable, v as redemptionError, w as queryError, x as success, y as successVariable, z as loading, A as empty$1, F as rewardExchange, G as CardFeedView, H as autoColorScaleCss, J as ShadowViewAddon } from './ShadowViewAddon-
|
|
26
|
+
import { S as ShareButtonView, L as LeaderboardView, a as ShareLinkView, B as BigStatView, P as PortalFrameView, E as EditProfileView, u as useShareLink, b as useShareButton, c as useDemoBigStat, d as StatContainerView, e as PortalChangePasswordView, f as PortalLoginView, g as PortalRegisterView, T as TaskCardView, h as ProgressBarView, R as ReferralIframeView, N as NameFieldsView, C as CheckboxFieldView, D as DropdownFieldView, I as InputFieldView, i as RewardExchangeView, r as rewardExchangeCustomErrorMsg, j as rewardExchangeLongText, k as rewardExchangeSelected, l as chooseAmountFixed, m as chooseAmountFixedNoDescription, n as chooseAmountVariable, o as chooseAmountVariableNoDescription, p as chooseAmountVariableDisabled, q as chooseAmountVariableUnavailable, s as confirmFixed, t as confirmVariable, v as redemptionError, w as queryError, x as success, y as successVariable, z as loading, A as empty$1, F as rewardExchange, G as CardFeedView, H as autoColorScaleCss, J as ShadowViewAddon } from './ShadowViewAddon-2ebdb75f.js';
|
|
27
27
|
import { P as PortalSectionView } from './sqm-portal-section-view-c8d1c727.js';
|
|
28
28
|
|
|
29
29
|
/**
|
|
@@ -1768,7 +1768,7 @@ const BigStat = /*#__PURE__*/Object.freeze({
|
|
|
1768
1768
|
MultipleStats: MultipleStats
|
|
1769
1769
|
});
|
|
1770
1770
|
|
|
1771
|
-
const scenario$4 = "@owner:noah\r\n@author:noah\r\nFeature: Leaderboard\r\n\r\n\tThe leaderboard supports three main cases\r\n\t- Top Started Referrers\r\n\t- Top Converted Referrers\r\n\t- Top Point Earners\r\n\tTo display these different types of leaderboards it uses the backends pre-canned options.\r\n\tThe backend supports filtering on programId and interval, programId is sourced from program context.\r\n\r\n\tBackground: A user exists\r\n\t\tGiven a user\r\n\t\tAnd they are viewing the leaderboard\r\n\r\n\t@motivating\r\n\tScenario
|
|
1771
|
+
const scenario$4 = "@owner:noah\r\n@author:noah\r\nFeature: Leaderboard\r\n\r\n\tThe leaderboard supports three main cases\r\n\t- Top Started Referrers\r\n\t- Top Converted Referrers\r\n\t- Top Point Earners\r\n\tTo display these different types of leaderboards it uses the backends pre-canned options.\r\n\tThe backend supports filtering on programId and interval, programId is sourced from program context.\r\n\r\n\tBackground: A user exists\r\n\t\tGiven a user\r\n\t\tAnd they are viewing the leaderboard\r\n\r\n\t@motivating\r\n\tScenario Outline: Two types of referrals leaderboards can be displayed\r\n\t\tGiven a leaderboard has prop \"leaderboard-type\" with <value>\r\n\t\tAnd there are started referrals on the tenant\r\n\t\tAnd there are started converted on the tenant\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they see the referral <referralType> leaderboard\r\n\t\tExamples:\r\n\t\t\t| value | referralType |\r\n\t\t\t| topStartedReferrers | started |\r\n\t\t\t| topConvertedReferrers | converted |\r\n\r\n\t@motivating\r\n\tScenario: The top point earners leaderboard can be displayed\r\n\t\tGiven a leaderboard has prop \"leaderboard-type\" with value \"topPointEarners\"\r\n\t\tAnd there are users with points\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they see the top point earners leaderboard\r\n\t\tAnd text values are displayed for point counts\r\n\r\n\t@minutia\r\n\tScenario Outline: Reward pretty value is used on the top point earners leaderboard\r\n\t\tGiven top point earners leaderboard\r\n\t\tAnd the \"POINT\" reward unit has a pretty value for the following locales\r\n\t\t\t| locale |\r\n\t\t\t| en |\r\n\t\t\t| fr |\r\n\t\t\t| tr |\r\n\t\tWhen the user views the leaderboard\r\n\t\tAnd they have <locale>\r\n\t\tThen they see the translated pretty value in the stat value column\r\n\r\n\t@motivating\r\n\tScenario Outline: Program Context is used by default to filter leaderboard results\r\n\t\tGiven a <leaderboardType> leaderboard loaded with program context for \"my-program\"\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they only see <results> from \"my-program\"\r\n\t\tExamples:\r\n\t\t\t| leaderboardType | results |\r\n\t\t\t| topStartedReferrers | started referrals |\r\n\t\t\t| topConvertedReferrers | converted referrals |\r\n\t\t\t| topPointEarners | points earned |\r\n\r\n\t@motivating\r\n\tScenario Outline: Program Id context can be overwritten with a prop\r\n\t\tGiven a <leaderboardType> leaderboard has prop \"program-Id\" with value \"my-test-program\"\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they only see <results> from \"my-test-program\"\r\n\t\tExamples:\r\n\t\t\t| leaderboardType | results |\r\n\t\t\t| topStartedReferrers | started referrals |\r\n\t\t\t| topConvertedReferrers | converted referrals |\r\n\t\t\t| topPointEarners | points earned |\r\n\r\n\t@motivating\r\n\tScenario Outline: Global leaderboards can be displayed by clearing program context\r\n\t\t#This is important for clients with use cases like StaffTracks global points leaderboard\r\n\t\t#This can also be done with a program section in a similar manner\r\n\t\tGiven a <leaderboardType> leaderboard has prop \"program-Id\" with value \"\"\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they see global <results>\r\n\t\tExamples:\r\n\t\t\t| leaderboardType | results |\r\n\t\t\t| topStartedReferrers | started referrals |\r\n\t\t\t| topConvertedReferrers | converted referrals |\r\n\t\t\t| topPointEarners | points earned |\r\n\r\n\t@motivating\r\n\tScenario: Leaderboard results are shown in descending order\r\n\t\tGiven there are leaderboard results\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they see up to the 10 top leaderboard results\r\n\t\tAnd leaderboard is in descending order\r\n\r\n\t@motivating\r\n\tScenario Outline: Leaderboard results can be filtered with a time interval\r\n\t\tGiven a <leaderboardType> leaderboard\r\n\t\tAnd it has prop \"interval\" with value \"2021-11-02T07:00:00.000Z/2021-11-07T07:00:00.000Z\"\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they only see <results> from within \"2021-11-02T07:00:00.000Z/2021-11-07T07:00:00.000Z\"\r\n\t\tExamples:\r\n\t\t\t| leaderboardType | results |\r\n\t\t\t| topStartedReferrers | started referrals |\r\n\t\t\t| topConvertedReferrers | converted referrals |\r\n\t\t\t| topPointEarners | points earned |\r\n\r\n\t@motivating\r\n\tScenario Outline: Leaderboard rank type can be configured\r\n\t\tGiven a leaderboard has prop \"rank-type\" with <value>\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen their leaderboard rank is their <rank>\r\n\t\tExamples:\r\n\t\t\t| value | rank |\r\n\t\t\t| rowNumber | row number |\r\n\t\t\t| denseRank | dense rank |\r\n\t\t\t| rank | rank |\r\n\r\n\t@minutia\r\n\tScenario Outline: The max number of leaderboard rows displayed can be configured but defaults to 10\r\n\t\tGiven a leaderboard has prop \"max-rows\" with <value>\r\n\t\tAnd the leaderboard has <resultCount>\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they see <number> rows\r\n\t\tExamples:\r\n\t\t\t| value | resultCount | number |\r\n\t\t\t| | 10 | 10 |\r\n\t\t\t| 5 | 10 | 5 |\r\n\t\t\t| 3 | 1 | 1 |\r\n\t\t\t| 25 | 15 | 15 |\r\n\r\n\t@minutiae\r\n\t@ui\r\n\tScenario: Leaderboards with no results show an empty state\r\n\t\tGiven a leaderboard has no results\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen an empty state is dislayed\r\n\t\tAnd they see an image of a leaderboard\r\n\t\tAnd below they see \"View your rank in the leaderboard\"\r\n\t\tAnd below they see \"Be the first to refer a friend and reach the top of the leaderboard\"\r\n\t\tAnd the text is center aligned\r\n\r\n\t@minutiae\r\n\t@ui\r\n\tScenario: A custom empty state can be provided\r\n\t\tGiven a leaderboard has no results\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen the contents of the \"empty\" slot are displayed\r\n\r\n\t@minutiae\r\n\t@ui\r\n\tScenario: Leaderboard headings can be customized\r\n\t\tGiven a leaderboard\r\n\t\tAnd it has the following props\r\n\t\t\t| prop | value |\r\n\t\t\t| rankheading | Place |\r\n\t\t\t| usersheading | Customer |\r\n\t\t\t| statsheading | Referral Count |\r\n\t\t\t| show-rank | true |\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they see the following columns with headings\r\n\t\t\t| column | heading |\r\n\t\t\t| rank | Place |\r\n\t\t\t| user | Customer |\r\n\t\t\t| stat | Referral Count |\r\n\r\n\t@motivating\r\n\t@ui\r\n\tScenario Outline: Leaderboard rank can be hidden or shown\r\n\t\tGiven a leaderboard\r\n\t\tAnd it has prop \"show-rank\" with <propValue>\r\n\t\tWhen the user views the leaderboard\r\n\t\tThen they <maySee> the rank column\r\n\t\tExamples:\r\n\t\t\t| propValue | maySee |\r\n\t\t\t| true | see |\r\n\t\t\t| false | don't see |\r\n\t\t\t| | don't see |\r\n\r\n\t@motivating\r\n\t@ui\r\n\tScenario: Users in the top 10 of the leaderboard results see their leaderboard row highlighted\r\n\t\tGiven a user in the top 10 of the leaderboard results\r\n\t\tWhen they view the leaderboard\r\n\t\tThen they see the row with their name highlighted with brand colour\r\n\r\n\t@motivating\r\n\t@ui\r\n\tScenario Outline: Users not in the top 10 leaderboard results can see their progress at the bottom of the leaderboard\r\n\t\tGiven a user <mayHave> completed actions counted by the leaderboard\r\n\t\tAnd they are not in the top 10 leaderboard results\r\n\t\tAnd the leaderboard has prop \"show-user\" with <value>\r\n\t\tWhen they view the leaderboard\r\n\t\tThen they <maySee> \"...\" under the top 10 leaderboard results\r\n\t\tAnd under \"...\" they <maySee> a row highlighted with brand colour\r\n\t\tAnd they <maySee> their name\r\n\t\tAnd they <maySee> their leaderboard value\r\n\t\tAnd they <maySeeRank>\r\n\t\tExamples:\r\n\t\t\t| mayHave | value | maySee | maySeeRank |\r\n\t\t\t| has | true | see | see their rank |\r\n\t\t\t| hasn't | true | see | don't see their rank |\r\n\t\t\t| N/A | false | don't see | don't see their rank |\r\n\t\t\t| hasn't | | see | don't see their rank |\r\n\r\n\t@minutiae\r\n\tScenario: Users without names are displayed as an \"Anonymous User\"\r\n\t\tGiven a user\r\n\t\tAnd they do not have a first name\r\n\t\tAnd they do not have a last initial\r\n\t\tWhen they view the leaderboard\r\n\t\tThen they see the user displayed as \"Anonymous User\"\r\n\r\n\t@minutiae\r\n\tScenario Outline: If a user only has a first or last name, then only that is displayed\r\n\t\tGiven a user\r\n\t\tAnd they only have a <name>\r\n\t\tWhen they view the leaderboard\r\n\t\tThen they only see their <name>\r\n\t\tExamples:\r\n\t\t\t| name |\r\n\t\t\t| firstName |\r\n\t\t\t| lastName |";
|
|
1772
1772
|
|
|
1773
1773
|
const Leaderboard_stories = {
|
|
1774
1774
|
title: "Components/Leaderboard",
|
|
@@ -1778,72 +1778,72 @@ const Leaderboard_stories = {
|
|
|
1778
1778
|
};
|
|
1779
1779
|
const users = [
|
|
1780
1780
|
{
|
|
1781
|
-
firstName: "
|
|
1782
|
-
lastInitial: "
|
|
1783
|
-
|
|
1781
|
+
firstName: "",
|
|
1782
|
+
lastInitial: "",
|
|
1783
|
+
textValue: "82",
|
|
1784
1784
|
rank: 1,
|
|
1785
1785
|
rowNumber: 1,
|
|
1786
1786
|
},
|
|
1787
1787
|
{
|
|
1788
1788
|
firstName: "MF",
|
|
1789
1789
|
lastInitial: "D",
|
|
1790
|
-
|
|
1790
|
+
textValue: "73",
|
|
1791
1791
|
rank: 2,
|
|
1792
1792
|
rowNumber: 2,
|
|
1793
1793
|
},
|
|
1794
1794
|
{
|
|
1795
1795
|
firstName: "Freddie",
|
|
1796
1796
|
lastInitial: "G",
|
|
1797
|
-
|
|
1797
|
+
textValue: "64",
|
|
1798
1798
|
rank: 3,
|
|
1799
1799
|
rowNumber: 3,
|
|
1800
1800
|
},
|
|
1801
1801
|
{
|
|
1802
1802
|
firstName: "Benny",
|
|
1803
1803
|
lastInitial: "B",
|
|
1804
|
-
|
|
1804
|
+
textValue: "55",
|
|
1805
1805
|
rank: 4,
|
|
1806
1806
|
rowNumber: 4,
|
|
1807
1807
|
},
|
|
1808
1808
|
{
|
|
1809
1809
|
firstName: "Mos",
|
|
1810
1810
|
lastInitial: "D",
|
|
1811
|
-
|
|
1811
|
+
textValue: "46",
|
|
1812
1812
|
rank: 5,
|
|
1813
1813
|
rowNumber: 5,
|
|
1814
1814
|
},
|
|
1815
1815
|
{
|
|
1816
1816
|
firstName: "Joe",
|
|
1817
1817
|
lastInitial: "S",
|
|
1818
|
-
|
|
1818
|
+
textValue: "42",
|
|
1819
1819
|
rank: 6,
|
|
1820
1820
|
rowNumber: 6,
|
|
1821
1821
|
},
|
|
1822
1822
|
{
|
|
1823
1823
|
firstName: "Zach",
|
|
1824
1824
|
lastInitial: "H",
|
|
1825
|
-
|
|
1825
|
+
textValue: "41",
|
|
1826
1826
|
rank: 7,
|
|
1827
1827
|
rowNumber: 7,
|
|
1828
1828
|
},
|
|
1829
1829
|
{
|
|
1830
1830
|
firstName: "Sarah",
|
|
1831
1831
|
lastInitial: "S",
|
|
1832
|
-
|
|
1832
|
+
textValue: "39",
|
|
1833
1833
|
rank: 8,
|
|
1834
1834
|
rowNumber: 8,
|
|
1835
1835
|
},
|
|
1836
1836
|
{
|
|
1837
1837
|
firstName: "James",
|
|
1838
1838
|
lastInitial: "",
|
|
1839
|
-
|
|
1839
|
+
textValue: "33",
|
|
1840
1840
|
rank: 9,
|
|
1841
1841
|
rowNumber: 9,
|
|
1842
1842
|
},
|
|
1843
1843
|
{
|
|
1844
1844
|
firstName: "",
|
|
1845
1845
|
lastInitial: "J",
|
|
1846
|
-
|
|
1846
|
+
textValue: "29",
|
|
1847
1847
|
rank: 10,
|
|
1848
1848
|
rowNumber: 10,
|
|
1849
1849
|
},
|
|
@@ -1879,7 +1879,7 @@ const Empty$1 = () => {
|
|
|
1879
1879
|
viewerRank: {
|
|
1880
1880
|
firstName: "Kutay",
|
|
1881
1881
|
lastInitial: "C",
|
|
1882
|
-
|
|
1882
|
+
textValue: "8",
|
|
1883
1883
|
rowNumber: 11,
|
|
1884
1884
|
rank: 23,
|
|
1885
1885
|
},
|
|
@@ -1926,7 +1926,7 @@ const One = () => {
|
|
|
1926
1926
|
{
|
|
1927
1927
|
firstName: "Viktor",
|
|
1928
1928
|
lastInitial: "V",
|
|
1929
|
-
|
|
1929
|
+
textValue: "82",
|
|
1930
1930
|
rank: 1,
|
|
1931
1931
|
rowNumber: 1,
|
|
1932
1932
|
},
|
|
@@ -1934,7 +1934,7 @@ const One = () => {
|
|
|
1934
1934
|
viewerRank: {
|
|
1935
1935
|
firstName: "Viktor",
|
|
1936
1936
|
lastInitial: "V",
|
|
1937
|
-
|
|
1937
|
+
textValue: "82",
|
|
1938
1938
|
rank: 1,
|
|
1939
1939
|
rowNumber: 1,
|
|
1940
1940
|
},
|
|
@@ -1961,29 +1961,35 @@ const Five = () => {
|
|
|
1961
1961
|
{
|
|
1962
1962
|
firstName: "Viktor",
|
|
1963
1963
|
lastInitial: "V",
|
|
1964
|
-
|
|
1964
|
+
textValue: "82",
|
|
1965
1965
|
rank: 1,
|
|
1966
1966
|
rowNumber: 1,
|
|
1967
1967
|
},
|
|
1968
|
-
{
|
|
1968
|
+
{
|
|
1969
|
+
firstName: "MF",
|
|
1970
|
+
lastInitial: "D",
|
|
1971
|
+
textValue: "73",
|
|
1972
|
+
rank: 2,
|
|
1973
|
+
rowNumber: 2,
|
|
1974
|
+
},
|
|
1969
1975
|
{
|
|
1970
1976
|
firstName: "Freddie",
|
|
1971
1977
|
lastInitial: "G",
|
|
1972
|
-
|
|
1978
|
+
textValue: "64",
|
|
1973
1979
|
rank: 3,
|
|
1974
1980
|
rowNumber: 3,
|
|
1975
1981
|
},
|
|
1976
1982
|
{
|
|
1977
1983
|
firstName: "Benny",
|
|
1978
1984
|
lastInitial: "B",
|
|
1979
|
-
|
|
1985
|
+
textValue: "55",
|
|
1980
1986
|
rank: 4,
|
|
1981
1987
|
rowNumber: 4,
|
|
1982
1988
|
},
|
|
1983
1989
|
{
|
|
1984
1990
|
firstName: "Mos",
|
|
1985
1991
|
lastInitial: "D",
|
|
1986
|
-
|
|
1992
|
+
textValue: "46",
|
|
1987
1993
|
rank: 5,
|
|
1988
1994
|
rowNumber: 5,
|
|
1989
1995
|
},
|
|
@@ -1991,7 +1997,7 @@ const Five = () => {
|
|
|
1991
1997
|
viewerRank: {
|
|
1992
1998
|
firstName: "Viktor",
|
|
1993
1999
|
lastInitial: "V",
|
|
1994
|
-
|
|
2000
|
+
textValue: "82",
|
|
1995
2001
|
rank: 1,
|
|
1996
2002
|
rowNumber: 1,
|
|
1997
2003
|
},
|
|
@@ -2008,6 +2014,7 @@ const ReferralLeaderboard = () => {
|
|
|
2008
2014
|
loading: false,
|
|
2009
2015
|
hasLeaders: true,
|
|
2010
2016
|
styles: {
|
|
2017
|
+
...defaultStyles$1,
|
|
2011
2018
|
rankheading: "Rank",
|
|
2012
2019
|
usersheading: "User",
|
|
2013
2020
|
statsheading: "Referrals",
|
|
@@ -2021,7 +2028,7 @@ const ReferralLeaderboard = () => {
|
|
|
2021
2028
|
viewerRank: {
|
|
2022
2029
|
firstName: "Viktor",
|
|
2023
2030
|
lastInitial: "V",
|
|
2024
|
-
|
|
2031
|
+
textValue: "82",
|
|
2025
2032
|
rank: 1,
|
|
2026
2033
|
rowNumber: 1,
|
|
2027
2034
|
},
|
|
@@ -2038,6 +2045,7 @@ const PointsLeaderboard = () => {
|
|
|
2038
2045
|
loading: false,
|
|
2039
2046
|
hasLeaders: true,
|
|
2040
2047
|
styles: {
|
|
2048
|
+
...defaultStyles$1,
|
|
2041
2049
|
rankheading: "Rank",
|
|
2042
2050
|
usersheading: "User",
|
|
2043
2051
|
statsheading: "Points",
|
|
@@ -2051,7 +2059,7 @@ const PointsLeaderboard = () => {
|
|
|
2051
2059
|
viewerRank: {
|
|
2052
2060
|
firstName: "Viktor",
|
|
2053
2061
|
lastInitial: "V",
|
|
2054
|
-
|
|
2062
|
+
textValue: "82",
|
|
2055
2063
|
rank: 1,
|
|
2056
2064
|
rowNumber: 1,
|
|
2057
2065
|
},
|
|
@@ -2079,7 +2087,7 @@ const TenWithRank = () => {
|
|
|
2079
2087
|
viewerRank: {
|
|
2080
2088
|
firstName: "Viktor",
|
|
2081
2089
|
lastInitial: "V",
|
|
2082
|
-
|
|
2090
|
+
textValue: "82",
|
|
2083
2091
|
rank: 1,
|
|
2084
2092
|
rowNumber: 1,
|
|
2085
2093
|
},
|
|
@@ -2107,7 +2115,7 @@ const ViewerOutside = () => {
|
|
|
2107
2115
|
viewerRank: {
|
|
2108
2116
|
firstName: "Kutay",
|
|
2109
2117
|
lastInitial: "C",
|
|
2110
|
-
|
|
2118
|
+
textValue: "8",
|
|
2111
2119
|
rowNumber: 11,
|
|
2112
2120
|
rank: 23,
|
|
2113
2121
|
},
|
|
@@ -2159,7 +2167,7 @@ const HideViewer = () => {
|
|
|
2159
2167
|
viewerRank: {
|
|
2160
2168
|
firstName: "Viktor",
|
|
2161
2169
|
lastInitial: "V",
|
|
2162
|
-
|
|
2170
|
+
textValue: "82",
|
|
2163
2171
|
rowNumber: 1,
|
|
2164
2172
|
rank: 1,
|
|
2165
2173
|
},
|
|
@@ -2355,7 +2363,7 @@ const Router = /*#__PURE__*/Object.freeze({
|
|
|
2355
2363
|
RouterPlayground: RouterPlayground
|
|
2356
2364
|
});
|
|
2357
2365
|
|
|
2358
|
-
const scenario$5 = "@owner:noah\r\n@author:noah\r\nFeature: Leaderboard Rank\r\n\r\n The leaderboard rank components displays the current users rank on the leaderboard.\r\n\r\n @minutiae\r\n Scenario: Users without a rank are shown a generic message\r\n Given a user has no rank\r\n Then the component displays a generic message\r\n And the message is the string from the prop \"unrankedText\"\r\n\r\n @motivating\r\n Scenario: Users with a rank are shown a message containing their rank\r\n Given a user has a valid rank\r\n And the prop \"rankText\" is an ICU message\r\n Then the ICU message is parsed to include the user's rank\r\n And the parsed message is displayed to the users\r\n\r\n @motivating\r\n Scenario Outline: Ranks from any of the three standard leaderboards can be displayed\r\n Given a leaderboard rank component with <leaderboardType>\r\n And a user has a valid rank\r\n When they view the leaderboard rank component\r\n Then they see their rank for <leaderboardType>\r\n Examples:\r\n | leaderboardType |\r\n | topStartedReferrers |\r\n | topConvertedReferrers |\r\n | topPointEarners |\r\n\r\n @motivating\r\n Scenario Outline: Program Context is used by default to filter leaderboard rank\r\n Given a <leaderboardType> leaderboard rank component loaded with program context for \"my-program\"\r\n When they view the leaderboard rank component\r\n Then they see their rank for <leaderboardType> from \"my-program\"\r\n Examples:\r\n | leaderboardType |\r\n | topStartedReferrers |\r\n | topConvertedReferrers |\r\n | topPointEarners |\r\n\r\n @motivating\r\n Scenario Outline: Program Id context can be overwritten with a prop\r\n Given a <leaderboardType> leaderboard has prop \"program-Id\" with value \"my-test-program\"\r\n When they view the leaderboard rank component\r\n Then they see their rank for <leaderboardType> from \"my-test-program\"\r\n Examples:\r\n | leaderboardType | results |\r\n | topStartedReferrers | started referrals |\r\n | topConvertedReferrers | converted referrals |\r\n | topPointEarners | points earned |\r\n\r\n @motivating\r\n Scenario: Rank calculation is controlled by the \"rankType\" prop\r\n Given the current user is User C\r\n And User C has <points>\r\n And User A has <points>\r\n And User B has <points>\r\n And the value of the \"rankType\" prop is <rankType>\r\n Then the rank of the current user is <rank>\r\n Examples:\r\n | user | points | rankType | rank |\r\n | User A | 5 | rowNumber | 3 |\r\n | User B | 10 | rowNumber | 1 |\r\n | User C | 10 | rowNumber | 2 |\r\n\r\n | user | points | rankType | rank |\r\n | User A | 10 | rank | 1 |\r\n | User B | 10 | rank | 1 |\r\n | User C | 5 | rank | 3 |\r\n\r\n | user | points | rankType | rank |\r\n | User A | 10 | denseRank | 1 |\r\n | User B | 10 | denseRank | 1 |\r\n | User C | 5 | denseRank | 2 |";
|
|
2366
|
+
const scenario$5 = "@owner:noah\r\n@author:noah\r\nFeature: Leaderboard Rank\r\n\r\n The leaderboard rank components displays the current users rank on the leaderboard.\r\n\r\n @minutiae\r\n Scenario: Users without a rank are shown a generic message\r\n Given a user has no rank\r\n Then the component displays a generic message\r\n And the message is the string from the prop \"unrankedText\"\r\n\r\n @motivating\r\n Scenario: Users with a rank are shown a message containing their rank\r\n Given a user has a valid rank\r\n And the prop \"rankText\" is an ICU message\r\n Then the ICU message is parsed to include the user's rank\r\n And the parsed message is displayed to the users\r\n\r\n @motivating\r\n Scenario Outline: Ranks from any of the three standard leaderboards can be displayed\r\n Given a leaderboard rank component with <leaderboardType>\r\n And a user has a valid rank\r\n When they view the leaderboard rank component\r\n Then they see their rank for <leaderboardType>\r\n Examples:\r\n | leaderboardType |\r\n | topStartedReferrers |\r\n | topConvertedReferrers |\r\n | topPointEarners |\r\n\r\n @motivating\r\n Scenario Outline: Leaderboard rank can be filtered with a time interval\r\n Given a leaderboard rank component with <leaderboardType>\r\n And it has prop \"interval\" with value \"2021-11-02T07:00:00.000Z/2021-11-07T07:00:00.000Z\"\r\n When they view the leaderboard rank component\r\n Then they see their rank for <results> from within \"2021-11-02T07:00:00.000Z/2021-11-07T07:00:00.000Z\"\r\n Examples:\r\n | leaderboardType | results |\r\n | topStartedReferrers | started referrals |\r\n | topConvertedReferrers | converted referrals |\r\n | topPointEarners | points earned |\r\n\r\n @motivating\r\n Scenario Outline: Program Context is used by default to filter leaderboard rank\r\n Given a <leaderboardType> leaderboard rank component loaded with program context for \"my-program\"\r\n When they view the leaderboard rank component\r\n Then they see their rank for <leaderboardType> from \"my-program\"\r\n Examples:\r\n | leaderboardType |\r\n | topStartedReferrers |\r\n | topConvertedReferrers |\r\n | topPointEarners |\r\n\r\n @motivating\r\n Scenario Outline: Program Id context can be overwritten with a prop\r\n Given a <leaderboardType> leaderboard rank component has prop \"program-Id\" with value \"my-test-program\"\r\n When they view the leaderboard rank component\r\n Then they see their rank for <leaderboardType> from \"my-test-program\"\r\n Examples:\r\n | leaderboardType | results |\r\n | topStartedReferrers | started referrals |\r\n | topConvertedReferrers | converted referrals |\r\n | topPointEarners | points earned |\r\n\r\n @motivating\r\n Scenario Outline: Global leaderboards ranks can be displayed by clearing program context\r\n #This can also be done with a program section in a similar manner\r\n Given a <leaderboardType> leaderboard rank component has prop \"program-Id\" with value \"\"\r\n When they view the leaderboard rank component\r\n Then they see global <results> rank\r\n Examples:\r\n | leaderboardType | results |\r\n | topStartedReferrers | started referrals |\r\n | topConvertedReferrers | converted referrals |\r\n | topPointEarners | points earned |\r\n\r\n @motivating\r\n Scenario: Rank calculation is controlled by the \"rankType\" prop\r\n Given the current user is User C\r\n And User C has <points>\r\n And User A has <points>\r\n And User B has <points>\r\n And the value of the \"rankType\" prop is <rankType>\r\n Then the rank of the current user is <rank>\r\n Examples:\r\n | user | points | rankType | rank |\r\n | User A | 5 | rowNumber | 3 |\r\n | User B | 10 | rowNumber | 1 |\r\n | User C | 10 | rowNumber | 2 |\r\n\r\n | user | points | rankType | rank |\r\n | User A | 10 | rank | 1 |\r\n | User B | 10 | rank | 1 |\r\n | User C | 5 | rank | 3 |\r\n\r\n | user | points | rankType | rank |\r\n | User A | 10 | denseRank | 1 |\r\n | User B | 10 | denseRank | 1 |\r\n | User C | 5 | denseRank | 2 |";
|
|
2359
2367
|
|
|
2360
2368
|
const LeaderboardRank_stories = {
|
|
2361
2369
|
title: "Components/Leaderboard Rank",
|
|
@@ -3051,7 +3059,7 @@ const FiveResults = createHookStory(() => {
|
|
|
3051
3059
|
return [
|
|
3052
3060
|
View$1({
|
|
3053
3061
|
leaderboardType: "topStartedReferrers",
|
|
3054
|
-
|
|
3062
|
+
maxRows: 5,
|
|
3055
3063
|
statsheading: "Referrals",
|
|
3056
3064
|
}),
|
|
3057
3065
|
];
|