@saasquatch/mint-components 2.1.8-2 → 2.1.8-3

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.
Files changed (59) hide show
  1. package/dist/cjs/{ShadowViewAddon-a26deae6.js → ShadowViewAddon-3384ddc4.js} +376 -10
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/mint-components.cjs.js +1 -1
  4. package/dist/cjs/sqm-banking-info-form_10.cjs.entry.js +4 -4
  5. package/dist/cjs/sqm-big-stat_45.cjs.entry.js +175 -31
  6. package/dist/cjs/sqm-stencilbook.cjs.entry.js +168 -19
  7. package/dist/collection/components/sqm-referral-iframe/ReferralIframe.stories.js +0 -1
  8. package/dist/collection/components/sqm-referral-iframe/sqm-referral-iframe-view.js +1 -1
  9. package/dist/collection/components/sqm-referral-iframe/sqm-referral-iframe.js +1 -27
  10. package/dist/collection/components/sqm-share-code/sqm-share-code.js +0 -1
  11. package/dist/collection/components/sqm-share-link/ShareLink.stories.js +142 -11
  12. package/dist/collection/components/sqm-share-link/UseShareLink.stories.js +14 -5
  13. package/dist/collection/components/sqm-share-link/sqm-share-link-view.js +173 -0
  14. package/dist/collection/components/sqm-share-link/sqm-share-link.js +536 -26
  15. package/dist/collection/components/sqm-share-link/useShareLink.js +200 -5
  16. package/dist/collection/components/tax-and-cash/sqm-indirect-tax-form/sqm-indirect-tax-form.js +4 -4
  17. package/dist/collection/components/tax-and-cash/sqm-payout-details-card/sqm-payout-details-card.js +2 -2
  18. package/dist/collection/components/tax-and-cash/sqm-tax-and-cash/sqm-tax-and-cash.js +6 -6
  19. package/dist/collection/components/tax-and-cash/sqm-tax-and-cash-dashboard/sqm-tax-and-cash-dashboard.js +2 -2
  20. package/dist/esm/{ShadowViewAddon-47f1e579.js → ShadowViewAddon-c2f026c0.js} +377 -12
  21. package/dist/esm/loader.js +1 -1
  22. package/dist/esm/mint-components.js +1 -1
  23. package/dist/esm/sqm-banking-info-form_10.entry.js +4 -4
  24. package/dist/esm/sqm-big-stat_45.entry.js +175 -31
  25. package/dist/esm/sqm-stencilbook.entry.js +168 -19
  26. package/dist/esm-es5/ShadowViewAddon-c2f026c0.js +1 -0
  27. package/dist/esm-es5/loader.js +1 -1
  28. package/dist/esm-es5/mint-components.js +1 -1
  29. package/dist/esm-es5/sqm-banking-info-form_10.entry.js +1 -1
  30. package/dist/esm-es5/sqm-big-stat_45.entry.js +1 -1
  31. package/dist/esm-es5/sqm-stencilbook.entry.js +1 -1
  32. package/dist/mint-components/mint-components.esm.js +1 -1
  33. package/dist/mint-components/p-1ebdb2b3.js +500 -0
  34. package/dist/mint-components/p-87fb29a9.system.js +1 -0
  35. package/dist/mint-components/p-a01baeea.entry.js +9 -0
  36. package/dist/mint-components/p-ca098be1.system.js +1 -1
  37. package/dist/mint-components/{p-5492dd51.system.entry.js → p-cacb897d.system.entry.js} +1 -1
  38. package/dist/mint-components/{p-7ee8f2ed.entry.js → p-debc2b08.entry.js} +20 -20
  39. package/dist/mint-components/p-ea4cd12c.system.entry.js +1 -0
  40. package/dist/mint-components/p-f865d476.system.entry.js +1 -0
  41. package/dist/mint-components/{p-d4f332a7.entry.js → p-ff378015.entry.js} +7 -7
  42. package/dist/types/components/sqm-referral-iframe/sqm-referral-iframe-view.d.ts +0 -1
  43. package/dist/types/components/sqm-referral-iframe/sqm-referral-iframe.d.ts +0 -5
  44. package/dist/types/components/sqm-share-link/ShareLink.stories.d.ts +10 -0
  45. package/dist/types/components/sqm-share-link/UseShareLink.stories.d.ts +6 -0
  46. package/dist/types/components/sqm-share-link/sqm-share-link-view.d.ts +37 -0
  47. package/dist/types/components/sqm-share-link/sqm-share-link.d.ts +107 -2
  48. package/dist/types/components/sqm-share-link/useShareLink.d.ts +27 -4
  49. package/dist/types/components.d.ts +183 -12
  50. package/docs/docs.docx +0 -0
  51. package/docs/raisins.json +1 -1
  52. package/grapesjs/grapesjs.js +1 -1
  53. package/package.json +1 -1
  54. package/dist/esm-es5/ShadowViewAddon-47f1e579.js +0 -1
  55. package/dist/mint-components/p-0614dcbc.entry.js +0 -9
  56. package/dist/mint-components/p-217dedde.js +0 -463
  57. package/dist/mint-components/p-bf545082.system.entry.js +0 -1
  58. package/dist/mint-components/p-ce050888.system.js +0 -1
  59. package/dist/mint-components/p-de343dd0.system.entry.js +0 -1
@@ -1,7 +1,9 @@
1
1
  import { useEngagementMedium, useMutation, useParentValue, useProgramId, useQuery, useUserIdentity, } from "@saasquatch/component-boilerplate";
2
- import { useState } from "@saasquatch/universal-hooks";
2
+ import { useRef, useState } from "@saasquatch/universal-hooks";
3
3
  import { gql } from "graphql-request";
4
4
  import { REFERRAL_CODES_NAMESPACE, SET_CODE_COPIED, } from "../sqm-referral-codes/useReferralCodes";
5
+ const MAX_EDITS = 5;
6
+ const CHARACTER_LIMIT = 15;
5
7
  const MessageLinkQuery = gql `
6
8
  query ($programId: ID, $engagementMedium: UserEngagementMedium!) {
7
9
  user: viewer {
@@ -20,19 +22,119 @@ const WIDGET_ENGAGEMENT_EVENT = gql `
20
22
  createUserAnalyticsEvent(eventMeta: $eventMeta)
21
23
  }
22
24
  `;
25
+ const ADD_SHARE_LINK_CODE = gql `
26
+ mutation ($addShareLinkCodeInput: AddShareLinkCodeInput!) {
27
+ addShareLinkCode(addShareLinkCodeInput: $addShareLinkCodeInput) {
28
+ linkCode {
29
+ linkCode
30
+ shortUrl
31
+ referralCode {
32
+ code
33
+ }
34
+ }
35
+ }
36
+ }
37
+ `;
38
+ // TODO: Replace with actual validation query when backend is ready
39
+ const VALIDATE_LINK_CODE = gql `
40
+ query validateLinkCode($linkCode: String!, $programId: ID) {
41
+ validateShareLinkCode(linkCode: $linkCode, programId: $programId) {
42
+ valid
43
+ message
44
+ }
45
+ }
46
+ `;
47
+ const GET_LINK_DOMAIN = gql `
48
+ query getLinkDomain {
49
+ tenantSettings {
50
+ primaryLinkDomain {
51
+ host
52
+ }
53
+ }
54
+ }
55
+ `;
56
+ // TODO: Replace with actual edit count query when backend is ready
57
+ const SHARE_LINK_EDIT_COUNT = gql `
58
+ query shareLinkEditCount($programId: ID) {
59
+ viewer {
60
+ ... on User {
61
+ shareLinkCodes(programId: $programId) {
62
+ totalCount
63
+ }
64
+ }
65
+ }
66
+ }
67
+ `;
68
+ function parseDomainPrefix(url) {
69
+ try {
70
+ const parsed = new URL(url);
71
+ return parsed.origin + "/";
72
+ }
73
+ catch {
74
+ return url;
75
+ }
76
+ }
77
+ function parsePathSuffix(url) {
78
+ try {
79
+ const parsed = new URL(url);
80
+ // Remove leading slash
81
+ return parsed.pathname.slice(1) + parsed.search + parsed.hash;
82
+ }
83
+ catch {
84
+ return "";
85
+ }
86
+ }
23
87
  export function useShareLink(props) {
24
- var _a, _b;
88
+ var _a, _b, _c, _d, _e, _f;
25
89
  const { programId = useProgramId() } = props;
26
90
  const user = useUserIdentity();
27
91
  const engagementMedium = useEngagementMedium();
28
92
  const contextData = useParentValue(REFERRAL_CODES_NAMESPACE);
29
- const { data } = useQuery(MessageLinkQuery, { programId, engagementMedium }, !(user === null || user === void 0 ? void 0 : user.jwt) || !!props.linkOverride || (contextData === null || contextData === void 0 ? void 0 : contextData.shareLink) !== undefined);
93
+ const { data, refetch } = useQuery(MessageLinkQuery, { programId, engagementMedium }, !(user === null || user === void 0 ? void 0 : user.jwt) || !!props.linkOverride || (contextData === null || contextData === void 0 ? void 0 : contextData.shareLink) !== undefined);
30
94
  const [sendLoadEvent] = useMutation(WIDGET_ENGAGEMENT_EVENT);
31
- const [setCopied, copiedRes] = useMutation(SET_CODE_COPIED);
95
+ const [setCopied] = useMutation(SET_CODE_COPIED);
96
+ const [addShareLinkCode, { loading: isSaving }] = useMutation(ADD_SHARE_LINK_CODE);
97
+ const { data: linkDomainData } = useQuery(GET_LINK_DOMAIN, {}, !(user === null || user === void 0 ? void 0 : user.jwt) || !props.customizeUrl);
98
+ // TODO: Wire up when backend query is ready
99
+ const { data: editCountData } = useQuery(SHARE_LINK_EDIT_COUNT, { programId }, !(user === null || user === void 0 ? void 0 : user.jwt) || !props.customizeUrl);
32
100
  const copyString = (_b = ((contextData === null || contextData === void 0 ? void 0 : contextData.shareLink) || ((_a = data === null || data === void 0 ? void 0 : data.user) === null || _a === void 0 ? void 0 : _a.shareLink))) !== null && _b !== void 0 ? _b :
33
101
  // Shown during loading
34
102
  "...";
35
103
  const [open, setOpen] = useState(false);
104
+ const [isEditing, setIsEditing] = useState(false);
105
+ const [editValue, setEditValue] = useState("");
106
+ const [validationError, setValidationError] = useState(null);
107
+ const [isValidating, setIsValidating] = useState(false);
108
+ const [showSuccess, setShowSuccess] = useState(false);
109
+ const debounceTimerRef = useRef(undefined);
110
+ const domainPrefix = parseDomainPrefix(copyString);
111
+ const hasPrimaryLinkDomain = ((_c = linkDomainData === null || linkDomainData === void 0 ? void 0 : linkDomainData.tenantSettings) === null || _c === void 0 ? void 0 : _c.primaryLinkDomain) != null;
112
+ const customizeDisabled = !hasPrimaryLinkDomain;
113
+ const editCount = (_f = (_e = (_d = editCountData === null || editCountData === void 0 ? void 0 : editCountData.viewer) === null || _d === void 0 ? void 0 : _d.shareLinkCodes) === null || _e === void 0 ? void 0 : _e.totalCount) !== null && _f !== void 0 ? _f : 0;
114
+ const editsRemaining = Math.max(0, MAX_EDITS - editCount);
115
+ const limitReached = editsRemaining <= 0;
116
+ function mapErrorCodeToInfo(errorCode) {
117
+ if (!errorCode)
118
+ return null;
119
+ const errorMap = {
120
+ LINK_TAKEN: {
121
+ code: "LINK_TAKEN",
122
+ title: props.linkTakenErrorTitle,
123
+ description: props.linkTakenErrorDescription,
124
+ },
125
+ INVALID_SYMBOLS: {
126
+ code: "INVALID_SYMBOLS",
127
+ title: props.invalidSymbolsErrorTitle,
128
+ description: props.invalidSymbolsErrorDescription,
129
+ },
130
+ RESTRICTED_WORD: {
131
+ code: "RESTRICTED_WORD",
132
+ title: props.restrictedWordErrorTitle,
133
+ description: props.restrictedWordErrorDescription,
134
+ },
135
+ };
136
+ return errorMap[errorCode];
137
+ }
36
138
  async function onClick() {
37
139
  if (contextData) {
38
140
  await setCopied({ referralCode: contextData.referralCode });
@@ -56,5 +158,98 @@ export function useShareLink(props) {
56
158
  },
57
159
  });
58
160
  }
59
- return { ...props, onClick, open, copyString: copyString };
161
+ function onCustomizeClick() {
162
+ if (limitReached || customizeDisabled)
163
+ return;
164
+ setIsEditing(true);
165
+ setEditValue(parsePathSuffix(copyString));
166
+ setValidationError(null);
167
+ }
168
+ function onEditValueChange(value) {
169
+ const trimmed = value.slice(0, CHARACTER_LIMIT);
170
+ setEditValue(trimmed);
171
+ setValidationError(null);
172
+ if (debounceTimerRef.current)
173
+ clearTimeout(debounceTimerRef.current);
174
+ if (!trimmed) {
175
+ setIsValidating(false);
176
+ return;
177
+ }
178
+ setIsValidating(true);
179
+ debounceTimerRef.current = setTimeout(async () => {
180
+ // TODO: Call actual validation query when backend is ready
181
+ // Example: const result = await validateLinkCode({ linkCode: trimmed, programId });
182
+ // if (!result?.validateShareLinkCode?.valid) {
183
+ // setValidationError(mapErrorCodeToInfo(result.validateShareLinkCode.errorCode));
184
+ // }
185
+ setIsValidating(false);
186
+ }, 2000);
187
+ }
188
+ async function onSave() {
189
+ var _a, _b;
190
+ if (!editValue || validationError || isValidating)
191
+ return;
192
+ try {
193
+ await addShareLinkCode({
194
+ addShareLinkCodeInput: {
195
+ userId: user === null || user === void 0 ? void 0 : user.id,
196
+ accountId: user === null || user === void 0 ? void 0 : user.accountId,
197
+ programId,
198
+ linkCode: editValue,
199
+ },
200
+ });
201
+ setIsEditing(false);
202
+ setShowSuccess(true);
203
+ await refetch();
204
+ setTimeout(() => setShowSuccess(false), 3000);
205
+ }
206
+ catch (e) {
207
+ const errorCode = (_a = e === null || e === void 0 ? void 0 : e.extensions) === null || _a === void 0 ? void 0 : _a.code;
208
+ setValidationError((_b = mapErrorCodeToInfo(errorCode)) !== null && _b !== void 0 ? _b : {
209
+ code: null,
210
+ title: "Error",
211
+ description: (e === null || e === void 0 ? void 0 : e.message) || "Failed to save custom link. Please try again.",
212
+ });
213
+ }
214
+ }
215
+ function onCancel() {
216
+ setIsEditing(false);
217
+ setEditValue("");
218
+ setValidationError(null);
219
+ setIsValidating(false);
220
+ }
221
+ return {
222
+ copyTextViewProps: {
223
+ ...props,
224
+ onClick,
225
+ open,
226
+ copyString,
227
+ },
228
+ customizeUrl: props.customizeUrl,
229
+ customizeLinkLabel: props.customizeLinkLabel,
230
+ saveLabelText: props.saveLabelText,
231
+ cancelLabelText: props.cancelLabelText,
232
+ successMessage: props.successMessage,
233
+ isEditing,
234
+ editValue,
235
+ domainPrefix,
236
+ editsRemaining,
237
+ maxEdits: MAX_EDITS,
238
+ limitReached,
239
+ validationError,
240
+ isValidating,
241
+ isSaving,
242
+ showSuccess,
243
+ characterLimit: CHARACTER_LIMIT,
244
+ charactersRemaining: CHARACTER_LIMIT - editValue.length,
245
+ editLimitText: props.editLimitText,
246
+ editLimitReachedText: props.editLimitReachedText,
247
+ supportLinkText: props.supportLinkText,
248
+ customizeDisabled,
249
+ customizeDisabledTooltip: props.customizeDisabledTooltip,
250
+ onCustomizeClick,
251
+ onEditValueChange,
252
+ onSave,
253
+ onCancel,
254
+ };
60
255
  }
@@ -65,7 +65,7 @@ export class IndirectTaxForm {
65
65
  /**
66
66
  * @uiName Indirect tax number field label
67
67
  */
68
- this.indirectTaxNumber = "{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number} other {Tax number}}";
68
+ this.indirectTaxNumber = "{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}}";
69
69
  /**
70
70
  * Displayed to participants registered for QST.
71
71
  * @uiName QST number field label
@@ -104,7 +104,7 @@ export class IndirectTaxForm {
104
104
  /**
105
105
  * @uiName Missing indirect tax number error message
106
106
  */
107
- this.indirectTaxNumberError = "{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number} other {Tax number}} is required";
107
+ this.indirectTaxNumberError = "{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}} is required";
108
108
  /**
109
109
  * Placeholder text displayed in the country search dropdown
110
110
  * @uiName Country field placeholder text
@@ -457,7 +457,7 @@ export class IndirectTaxForm {
457
457
  },
458
458
  "attribute": "indirect-tax-number",
459
459
  "reflect": false,
460
- "defaultValue": "\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number} other {Tax number}}\""
460
+ "defaultValue": "\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}}\""
461
461
  },
462
462
  "qstNumber": {
463
463
  "type": "string",
@@ -631,7 +631,7 @@ export class IndirectTaxForm {
631
631
  },
632
632
  "attribute": "indirect-tax-number-error",
633
633
  "reflect": false,
634
- "defaultValue": "\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number} other {Tax number}} is required\""
634
+ "defaultValue": "\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}} is required\""
635
635
  },
636
636
  "searchForCountryText": {
637
637
  "type": "string",
@@ -15,7 +15,7 @@ export class PayoutDetailsCard {
15
15
  * Badge text indicating payout status
16
16
  * @uiName Payout badge status text
17
17
  */
18
- this.statusBadgeText = "{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} other {Failed}}";
18
+ this.statusBadgeText = "{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} }";
19
19
  /**
20
20
  * Display participants' payout preference on the payout information card, indicating the balance at which they want to get paid.
21
21
  * @uiName Payout schedule by threshold text
@@ -73,7 +73,7 @@ export class PayoutDetailsCard {
73
73
  },
74
74
  "attribute": "status-badge-text",
75
75
  "reflect": false,
76
- "defaultValue": "\"{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} other {Failed}}\""
76
+ "defaultValue": "\"{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} }\""
77
77
  },
78
78
  "thresholdPayoutText": {
79
79
  "type": "string",
@@ -176,7 +176,7 @@ export class TaxAndCashMonolith {
176
176
  * @uiName Indirect tax number field label
177
177
  * @uiGroup Step 2 Properties
178
178
  */
179
- this.step2_indirectTaxNumber = "{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number} other {Tax number}}";
179
+ this.step2_indirectTaxNumber = "{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}}";
180
180
  /**
181
181
  * @uiName Province field label
182
182
  * @uiGroup Step 2 Properties
@@ -186,7 +186,7 @@ export class TaxAndCashMonolith {
186
186
  * @uiName Missing indirect tax number error message
187
187
  * @uiGroup Step 2 Properties
188
188
  */
189
- this.step2_indirectTaxNumberError = "{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number} other {Tax number}} is required";
189
+ this.step2_indirectTaxNumberError = "{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}} is required";
190
190
  /**
191
191
  * Displayed to participants registered for QST.
192
192
  * @uiName QST number field label
@@ -754,7 +754,7 @@ export class TaxAndCashMonolith {
754
754
  * @uiName Payout status badge
755
755
  * @uiGroup Dashboard Properties
756
756
  */
757
- this.dashboard_statusBadgeText = "{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} other {Failed} }";
757
+ this.dashboard_statusBadgeText = "{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} }";
758
758
  /**
759
759
  * Display participants' payout preference on the payout information card, indicating the balance at which they want to get paid.
760
760
  * @uiName Payout schedule by threshold text
@@ -1844,7 +1844,7 @@ export class TaxAndCashMonolith {
1844
1844
  },
1845
1845
  "attribute": "step-2_indirect-tax-number",
1846
1846
  "reflect": false,
1847
- "defaultValue": "\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number} other {Tax number}}\""
1847
+ "defaultValue": "\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}}\""
1848
1848
  },
1849
1849
  "step2_province": {
1850
1850
  "type": "string",
@@ -1892,7 +1892,7 @@ export class TaxAndCashMonolith {
1892
1892
  },
1893
1893
  "attribute": "step-2_indirect-tax-number-error",
1894
1894
  "reflect": false,
1895
- "defaultValue": "\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number} other {Tax number}} is required\""
1895
+ "defaultValue": "\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}} is required\""
1896
1896
  },
1897
1897
  "step2_qstNumber": {
1898
1898
  "type": "string",
@@ -4259,7 +4259,7 @@ export class TaxAndCashMonolith {
4259
4259
  },
4260
4260
  "attribute": "dashboard_status-badge-text",
4261
4261
  "reflect": false,
4262
- "defaultValue": "\"{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} other {Failed} }\""
4262
+ "defaultValue": "\"{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} }\""
4263
4263
  },
4264
4264
  "dashboard_thresholdPayoutText": {
4265
4265
  "type": "string",
@@ -168,7 +168,7 @@ export class TaxAndCashDashboard {
168
168
  /**
169
169
  * @uiName Payout status badge
170
170
  */
171
- this.statusBadgeText = "{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} other {Failed} }";
171
+ this.statusBadgeText = "{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} }";
172
172
  /**
173
173
  * Display participants' payout preference on the payout information card, indicating the balance at which they want to get paid.
174
174
  * @uiName Payout schedule by threshold text
@@ -1049,7 +1049,7 @@ export class TaxAndCashDashboard {
1049
1049
  },
1050
1050
  "attribute": "status-badge-text",
1051
1051
  "reflect": false,
1052
- "defaultValue": "\"{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} other {Failed} }\""
1052
+ "defaultValue": "\"{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} }\""
1053
1053
  },
1054
1054
  "thresholdPayoutText": {
1055
1055
  "type": "string",