@internetarchive/donation-monthly-portal 5.0.0 → 7.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/dist/src/edit-plan-form.d.ts +12 -1
- package/dist/src/edit-plan-form.js +50 -5
- package/dist/src/edit-plan-form.js.map +1 -1
- package/dist/src/form-sections/amount.d.ts +29 -0
- package/dist/src/form-sections/amount.js +318 -0
- package/dist/src/form-sections/amount.js.map +1 -0
- package/dist/src/form-sections/cancel.js +6 -2
- package/dist/src/form-sections/cancel.js.map +1 -1
- package/dist/src/form-sections/date.d.ts +38 -0
- package/dist/src/form-sections/date.js +370 -0
- package/dist/src/form-sections/date.js.map +1 -0
- package/dist/src/models/plan.d.ts +10 -1
- package/dist/src/models/plan.js +21 -3
- package/dist/src/models/plan.js.map +1 -1
- package/dist/src/monthly-giving-circle.d.ts +8 -6
- package/dist/src/monthly-giving-circle.js +114 -30
- package/dist/src/monthly-giving-circle.js.map +1 -1
- package/dist/src/plans.d.ts +4 -1
- package/dist/src/plans.js +33 -10
- package/dist/src/plans.js.map +1 -1
- package/dist/src/presentational/ia-button.js +1 -0
- package/dist/src/presentational/ia-button.js.map +1 -1
- package/dist/src/presentational/mgc-title.d.ts +1 -1
- package/dist/src/presentational/mgc-title.js +10 -7
- package/dist/src/presentational/mgc-title.js.map +1 -1
- package/dist/src/presentational/mgc-update-status.d.ts +7 -0
- package/dist/src/presentational/mgc-update-status.js +53 -0
- package/dist/src/presentational/mgc-update-status.js.map +1 -0
- package/dist/src/receipts.js +6 -22
- package/dist/src/receipts.js.map +1 -1
- package/dist/src/welcome-message.js +1 -0
- package/dist/src/welcome-message.js.map +1 -1
- package/dist/test/edit-plan-form.test.js +39 -29
- package/dist/test/edit-plan-form.test.js.map +1 -1
- package/dist/test/form-sections/amount.test.d.ts +1 -0
- package/dist/test/form-sections/amount.test.js +49 -0
- package/dist/test/form-sections/amount.test.js.map +1 -0
- package/dist/test/form-sections/date.test.d.ts +1 -0
- package/dist/test/form-sections/date.test.js +136 -0
- package/dist/test/form-sections/date.test.js.map +1 -0
- package/dist/test/monthly-giving-circle.test.js +23 -1
- package/dist/test/monthly-giving-circle.test.js.map +1 -1
- package/package.json +2 -1
- package/src/edit-plan-form.ts +67 -4
- package/src/form-sections/amount.ts +349 -0
- package/src/form-sections/cancel.ts +7 -3
- package/src/form-sections/date.ts +401 -0
- package/src/models/plan.ts +34 -3
- package/src/monthly-giving-circle.ts +140 -40
- package/src/plans.ts +37 -10
- package/src/presentational/ia-button.ts +1 -0
- package/src/presentational/mgc-title.ts +5 -2
- package/src/presentational/mgc-update-status.ts +47 -0
- package/src/receipts.ts +8 -22
- package/src/welcome-message.ts +1 -0
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
import type { MonthlyPlan } from './models/plan';
|
|
3
|
+
import './form-sections/amount';
|
|
4
|
+
import './form-sections/date';
|
|
3
5
|
import './form-sections/cancel';
|
|
4
6
|
export declare class IauxEditPlanForm extends LitElement {
|
|
5
7
|
plan?: MonthlyPlan;
|
|
6
|
-
|
|
8
|
+
updateAmountHandler?: (plan: MonthlyPlan, amountUpdates: {
|
|
9
|
+
amount: number;
|
|
10
|
+
baseAmount: number;
|
|
11
|
+
coverFees: boolean;
|
|
12
|
+
feeCovered: number;
|
|
13
|
+
}) => void;
|
|
14
|
+
createRenderRoot(): this;
|
|
15
|
+
amountUpdates(status: 'success' | 'fail'): void;
|
|
16
|
+
dateUpdates(status: 'success' | 'fail'): void;
|
|
7
17
|
render(): import("lit").TemplateResult<1>;
|
|
18
|
+
mailToText(): string;
|
|
8
19
|
}
|
|
@@ -1,31 +1,76 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { LitElement, html } from 'lit';
|
|
3
3
|
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
+
import './form-sections/amount';
|
|
5
|
+
import './form-sections/date';
|
|
4
6
|
import './form-sections/cancel';
|
|
5
7
|
let IauxEditPlanForm = class IauxEditPlanForm extends LitElement {
|
|
8
|
+
createRenderRoot() {
|
|
9
|
+
return this;
|
|
10
|
+
}
|
|
11
|
+
amountUpdates(status) {
|
|
12
|
+
const amountForm = this.querySelector('ia-mgc-edit-plan-amount');
|
|
13
|
+
amountForm.amountUpdated(status);
|
|
14
|
+
}
|
|
15
|
+
dateUpdates(status) {
|
|
16
|
+
const dateForm = this.querySelector('ia-mgc-edit-date');
|
|
17
|
+
dateForm.dateUpdated(status);
|
|
18
|
+
}
|
|
6
19
|
render() {
|
|
7
20
|
return html `
|
|
8
21
|
<section class="mgc-edit-plan">
|
|
9
|
-
<
|
|
10
|
-
<ia-mgc-cancel-plan
|
|
22
|
+
<ia-mgc-edit-plan-amount
|
|
11
23
|
.plan=${this.plan}
|
|
12
|
-
@
|
|
24
|
+
@updateAmount=${(e) => {
|
|
13
25
|
var _a;
|
|
26
|
+
const { amount, baseAmount, coverFees, feeCovered } = e.detail;
|
|
27
|
+
if (this.plan) {
|
|
28
|
+
(_a = this.updateAmountHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.plan, {
|
|
29
|
+
amount,
|
|
30
|
+
baseAmount,
|
|
31
|
+
coverFees,
|
|
32
|
+
feeCovered,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}}
|
|
36
|
+
></ia-mgc-edit-plan-amount>
|
|
37
|
+
<hr />
|
|
38
|
+
<ia-mgc-edit-date
|
|
39
|
+
@updateDate=${(e) => {
|
|
40
|
+
const { newDate } = e.detail;
|
|
14
41
|
if (this.plan) {
|
|
15
|
-
|
|
42
|
+
this.dispatchEvent(new CustomEvent('updateDate', {
|
|
43
|
+
detail: { plan: this.plan, newDate },
|
|
44
|
+
}));
|
|
16
45
|
}
|
|
46
|
+
}}
|
|
47
|
+
.plan=${this.plan}
|
|
48
|
+
></ia-mgc-edit-date>
|
|
49
|
+
<hr />
|
|
50
|
+
<ia-mgc-cancel-plan
|
|
51
|
+
.plan=${this.plan}
|
|
52
|
+
@cancelPlan=${() => {
|
|
53
|
+
this.dispatchEvent(new Event('cancelPlan'));
|
|
17
54
|
}}
|
|
18
55
|
></ia-mgc-cancel-plan>
|
|
56
|
+
<hr />
|
|
57
|
+
<p class="email-edit-plan">
|
|
58
|
+
Need to update your plan further? Please email us at
|
|
59
|
+
<a href=${this.mailToText}>donations@archive.org</a>.
|
|
60
|
+
</p>
|
|
19
61
|
</section>
|
|
20
62
|
`;
|
|
21
63
|
}
|
|
64
|
+
mailToText() {
|
|
65
|
+
return `mailto:donations@archive.org?subject=I'd like to update my monthly donation`;
|
|
66
|
+
}
|
|
22
67
|
};
|
|
23
68
|
__decorate([
|
|
24
69
|
property({ type: Object })
|
|
25
70
|
], IauxEditPlanForm.prototype, "plan", void 0);
|
|
26
71
|
__decorate([
|
|
27
72
|
property({ type: Object })
|
|
28
|
-
], IauxEditPlanForm.prototype, "
|
|
73
|
+
], IauxEditPlanForm.prototype, "updateAmountHandler", void 0);
|
|
29
74
|
IauxEditPlanForm = __decorate([
|
|
30
75
|
customElement('ia-mgc-edit-plan')
|
|
31
76
|
], IauxEditPlanForm);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-plan-form.js","sourceRoot":"","sources":["../../src/edit-plan-form.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"edit-plan-form.js","sourceRoot":"","sources":["../../src/edit-plan-form.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,wBAAwB,CAAC;AAChC,OAAO,sBAAsB,CAAC;AAC9B,OAAO,wBAAwB,CAAC;AAKhC,IAAa,gBAAgB,GAA7B,MAAa,gBAAiB,SAAQ,UAAU;IAa9C,gBAAgB;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAA0B;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CACnC,yBAAyB,CACL,CAAC;QACvB,UAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,WAAW,CAAC,MAA0B;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAoB,CAAC;QAC3E,QAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;kBAGG,IAAI,CAAC,IAAI;0BACD,CAAC,CAAc,EAAE,EAAE;;YACjC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;YAC/D,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,MAAA,IAAI,CAAC,mBAAmB,qDAAG,IAAI,CAAC,IAAI,EAAE;oBACpC,MAAM;oBACN,UAAU;oBACV,SAAS;oBACT,UAAU;iBACX,CAAC,CAAC;aACJ;QACH,CAAC;;;;wBAIa,CAAC,CAAc,EAAE,EAAE;YAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;YAC7B,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,YAAY,EAAE;oBAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;iBACrC,CAAC,CACH,CAAC;aACH;QACH,CAAC;kBACO,IAAI,CAAC,IAAI;;;;kBAIT,IAAI,CAAC,IAAI;wBACH,GAAG,EAAE;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9C,CAAC;;;;;oBAKS,IAAI,CAAC,UAAU;;;KAG9B,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,6EAA6E,CAAC;IACvF,CAAC;CACF,CAAA;AA9E6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8CAAoB;AAEnB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6DAQjB;AAXC,gBAAgB;IAD5B,aAAa,CAAC,kBAAkB,CAAC;GACrB,gBAAgB,CA+E5B;SA/EY,gBAAgB","sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport type { MonthlyPlan } from './models/plan';\nimport './form-sections/amount';\nimport './form-sections/date';\nimport './form-sections/cancel';\nimport type { MGCEditPlanAmount } from './form-sections/amount';\nimport type { MGCEditPlanDate } from './form-sections/date';\n\n@customElement('ia-mgc-edit-plan')\nexport class IauxEditPlanForm extends LitElement {\n @property({ type: Object }) plan?: MonthlyPlan;\n\n @property({ type: Object }) updateAmountHandler?: (\n plan: MonthlyPlan,\n amountUpdates: {\n amount: number;\n baseAmount: number;\n coverFees: boolean;\n feeCovered: number;\n }\n ) => void;\n\n createRenderRoot() {\n return this;\n }\n\n amountUpdates(status: 'success' | 'fail') {\n const amountForm = this.querySelector(\n 'ia-mgc-edit-plan-amount'\n ) as MGCEditPlanAmount;\n amountForm!.amountUpdated(status);\n }\n\n dateUpdates(status: 'success' | 'fail') {\n const dateForm = this.querySelector('ia-mgc-edit-date') as MGCEditPlanDate;\n dateForm!.dateUpdated(status);\n }\n\n render() {\n return html`\n <section class=\"mgc-edit-plan\">\n <ia-mgc-edit-plan-amount\n .plan=${this.plan}\n @updateAmount=${(e: CustomEvent) => {\n const { amount, baseAmount, coverFees, feeCovered } = e.detail;\n if (this.plan) {\n this.updateAmountHandler?.(this.plan, {\n amount,\n baseAmount,\n coverFees,\n feeCovered,\n });\n }\n }}\n ></ia-mgc-edit-plan-amount>\n <hr />\n <ia-mgc-edit-date\n @updateDate=${(e: CustomEvent) => {\n const { newDate } = e.detail;\n if (this.plan) {\n this.dispatchEvent(\n new CustomEvent('updateDate', {\n detail: { plan: this.plan, newDate },\n })\n );\n }\n }}\n .plan=${this.plan}\n ></ia-mgc-edit-date>\n <hr />\n <ia-mgc-cancel-plan\n .plan=${this.plan}\n @cancelPlan=${() => {\n this.dispatchEvent(new Event('cancelPlan'));\n }}\n ></ia-mgc-cancel-plan>\n <hr />\n <p class=\"email-edit-plan\">\n Need to update your plan further? Please email us at\n <a href=${this.mailToText}>donations@archive.org</a>.\n </p>\n </section>\n `;\n }\n\n mailToText(): string {\n return `mailto:donations@archive.org?subject=I'd like to update my monthly donation`;\n }\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LitElement, PropertyValues, TemplateResult } from 'lit';
|
|
2
|
+
import '@internetarchive/donation-form-section';
|
|
3
|
+
import { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';
|
|
4
|
+
import type { MonthlyPlan } from '../models/plan';
|
|
5
|
+
import '../presentational/ia-button';
|
|
6
|
+
import '../presentational/mgc-update-status';
|
|
7
|
+
export declare class MGCEditPlanAmount extends LitElement {
|
|
8
|
+
plan?: MonthlyPlan;
|
|
9
|
+
donationPaymentInfo?: DonationPaymentInfo;
|
|
10
|
+
newAmount: number;
|
|
11
|
+
currentlyEditing: boolean;
|
|
12
|
+
coverFees: boolean;
|
|
13
|
+
updateMessage: string;
|
|
14
|
+
errorMessage: string;
|
|
15
|
+
updateStatus: 'success' | 'fail' | '';
|
|
16
|
+
form: HTMLFormElement;
|
|
17
|
+
updated(changed: PropertyValues): void;
|
|
18
|
+
protected render(): TemplateResult<1>;
|
|
19
|
+
amountUpdated(status: 'success' | 'fail'): Promise<void>;
|
|
20
|
+
requestAmountUpdate(e: Event): void;
|
|
21
|
+
captureAmountChanges(newAmount?: number): void;
|
|
22
|
+
closeForm(): void;
|
|
23
|
+
clearInputField(): void;
|
|
24
|
+
clearStatusMessaging(): Promise<void>;
|
|
25
|
+
totalAmountWithFees(): number;
|
|
26
|
+
get coveredFeesText(): string;
|
|
27
|
+
get editAmountForm(): TemplateResult;
|
|
28
|
+
static styles: import("lit").CSSResult;
|
|
29
|
+
}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { LitElement, html, nothing, css, } from 'lit';
|
|
3
|
+
import { customElement, property, query } from 'lit/decorators.js';
|
|
4
|
+
import '@internetarchive/donation-form-section';
|
|
5
|
+
import { DonationPaymentInfo, DonationType, } from '@internetarchive/donation-form-data-models';
|
|
6
|
+
import '../presentational/ia-button';
|
|
7
|
+
import '../presentational/mgc-update-status';
|
|
8
|
+
let MGCEditPlanAmount = class MGCEditPlanAmount extends LitElement {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.newAmount = 0;
|
|
12
|
+
this.currentlyEditing = false;
|
|
13
|
+
this.coverFees = false;
|
|
14
|
+
this.updateMessage = '';
|
|
15
|
+
this.errorMessage = '';
|
|
16
|
+
this.updateStatus = '';
|
|
17
|
+
}
|
|
18
|
+
updated(changed) {
|
|
19
|
+
if (changed.has('plan') && this.plan) {
|
|
20
|
+
this.captureAmountChanges();
|
|
21
|
+
}
|
|
22
|
+
if (changed.has('coverFees')) {
|
|
23
|
+
this.captureAmountChanges();
|
|
24
|
+
}
|
|
25
|
+
if (changed.has('currentlyEditing') && this.currentlyEditing) {
|
|
26
|
+
this.form.focus();
|
|
27
|
+
}
|
|
28
|
+
if (changed.has('donationPaymentInfo') && !this.donationPaymentInfo) {
|
|
29
|
+
this.captureAmountChanges();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
render() {
|
|
33
|
+
var _a;
|
|
34
|
+
return html `
|
|
35
|
+
<section>
|
|
36
|
+
<donation-form-section badgemode="hidebadge" headline="Amount">
|
|
37
|
+
${!this.currentlyEditing
|
|
38
|
+
? html ` <p class="current-amount">
|
|
39
|
+
USD $${(_a = this.plan) === null || _a === void 0 ? void 0 : _a.amount}
|
|
40
|
+
<ia-mgc-update-status .status=${this.updateStatus}
|
|
41
|
+
>${this.updateMessage}</ia-mgc-update-status
|
|
42
|
+
>
|
|
43
|
+
</p>
|
|
44
|
+
<ia-button
|
|
45
|
+
id="edit-amount"
|
|
46
|
+
class="ia-button link"
|
|
47
|
+
.clickHandler=${() => {
|
|
48
|
+
this.currentlyEditing = true;
|
|
49
|
+
this.clearStatusMessaging();
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
Edit...
|
|
53
|
+
</ia-button>`
|
|
54
|
+
: nothing}
|
|
55
|
+
${this.currentlyEditing ? this.editAmountForm : nothing}
|
|
56
|
+
</donation-form-section>
|
|
57
|
+
</section>
|
|
58
|
+
`;
|
|
59
|
+
}
|
|
60
|
+
/* External Function that is called by consumer to tell the form there has been data update */
|
|
61
|
+
async amountUpdated(status) {
|
|
62
|
+
this.clearInputField();
|
|
63
|
+
this.updateStatus = status;
|
|
64
|
+
this.updateMessage =
|
|
65
|
+
status === 'success' ? 'Amount updated' : 'Failed. Try again.';
|
|
66
|
+
if (status === 'success') {
|
|
67
|
+
this.closeForm();
|
|
68
|
+
await this.updateComplete;
|
|
69
|
+
this.updateStatus = status;
|
|
70
|
+
this.updateMessage = 'Amount updated';
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.form.querySelector('ia-button#update-amount').isDisabled = false;
|
|
74
|
+
this.captureAmountChanges();
|
|
75
|
+
await this.updateComplete;
|
|
76
|
+
}
|
|
77
|
+
/* Dispatches amount change request */
|
|
78
|
+
requestAmountUpdate(e) {
|
|
79
|
+
var _a, _b, _c, _d, _e;
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
const input = this.form.querySelector('input[name="amount"]');
|
|
82
|
+
this.newAmount = Number(input.value);
|
|
83
|
+
this.captureAmountChanges(this.newAmount);
|
|
84
|
+
console.log('<plan-amount> - update amount', {
|
|
85
|
+
newValue: this.newAmount,
|
|
86
|
+
oldValue: (_a = this.plan) === null || _a === void 0 ? void 0 : _a.plan.amount,
|
|
87
|
+
display: (_b = this.donationPaymentInfo) === null || _b === void 0 ? void 0 : _b.amount,
|
|
88
|
+
});
|
|
89
|
+
const newAmount = Number(DonationPaymentInfo.calculateTotal(Number((_c = this.donationPaymentInfo) === null || _c === void 0 ? void 0 : _c.amount), this.coverFees));
|
|
90
|
+
this.dispatchEvent(new CustomEvent('updateAmount', {
|
|
91
|
+
detail: {
|
|
92
|
+
plan: this.plan,
|
|
93
|
+
amount: newAmount,
|
|
94
|
+
baseAmount: (_d = this.donationPaymentInfo) === null || _d === void 0 ? void 0 : _d.amount,
|
|
95
|
+
coverFees: this.coverFees,
|
|
96
|
+
feeCovered: (_e = this.donationPaymentInfo) === null || _e === void 0 ? void 0 : _e.feeAmountCovered,
|
|
97
|
+
},
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
/* captures form changes */
|
|
101
|
+
captureAmountChanges(newAmount) {
|
|
102
|
+
if (!this.donationPaymentInfo && this.plan) {
|
|
103
|
+
this.donationPaymentInfo = new DonationPaymentInfo({
|
|
104
|
+
donationType: DonationType.Monthly,
|
|
105
|
+
amount: 0,
|
|
106
|
+
coverFees: true,
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
let newPlan;
|
|
111
|
+
if (newAmount) {
|
|
112
|
+
newPlan = new DonationPaymentInfo({
|
|
113
|
+
donationType: DonationType.Monthly,
|
|
114
|
+
amount: newAmount,
|
|
115
|
+
coverFees: true,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
const amount = this.donationPaymentInfo
|
|
120
|
+
? this.donationPaymentInfo.amount
|
|
121
|
+
: this.plan.amount;
|
|
122
|
+
newPlan = new DonationPaymentInfo({
|
|
123
|
+
donationType: DonationType.Monthly,
|
|
124
|
+
amount,
|
|
125
|
+
coverFees: true,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
this.donationPaymentInfo = newPlan;
|
|
129
|
+
}
|
|
130
|
+
closeForm() {
|
|
131
|
+
this.clearInputField();
|
|
132
|
+
this.clearStatusMessaging();
|
|
133
|
+
this.currentlyEditing = false;
|
|
134
|
+
this.coverFees = false;
|
|
135
|
+
this.errorMessage = '';
|
|
136
|
+
}
|
|
137
|
+
clearInputField() {
|
|
138
|
+
const input = this.form.querySelector('input[name="amount"]');
|
|
139
|
+
input.value = '';
|
|
140
|
+
this.newAmount = 0;
|
|
141
|
+
this.donationPaymentInfo = undefined;
|
|
142
|
+
}
|
|
143
|
+
async clearStatusMessaging() {
|
|
144
|
+
this.errorMessage = '';
|
|
145
|
+
this.updateMessage = '';
|
|
146
|
+
this.updateStatus = '';
|
|
147
|
+
await this.updateComplete;
|
|
148
|
+
}
|
|
149
|
+
/* DISPLAY */
|
|
150
|
+
totalAmountWithFees() {
|
|
151
|
+
if (this.newAmount === 0) {
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
return DonationPaymentInfo.calculateTotal(this.newAmount, this.coverFees);
|
|
155
|
+
}
|
|
156
|
+
get coveredFeesText() {
|
|
157
|
+
var _a;
|
|
158
|
+
return `I'll generously add $${(_a = this.donationPaymentInfo) === null || _a === void 0 ? void 0 : _a.feeAmountCovered} to cover fees.`;
|
|
159
|
+
}
|
|
160
|
+
get editAmountForm() {
|
|
161
|
+
var _a;
|
|
162
|
+
return html `
|
|
163
|
+
<section>
|
|
164
|
+
<form id="edit-plan-amount">
|
|
165
|
+
<p>Current donation amount: $${(_a = this.plan) === null || _a === void 0 ? void 0 : _a.amount}</p>
|
|
166
|
+
<div>
|
|
167
|
+
$
|
|
168
|
+
<input
|
|
169
|
+
min="1"
|
|
170
|
+
max="9999"
|
|
171
|
+
type="number"
|
|
172
|
+
id="amount"
|
|
173
|
+
name="amount"
|
|
174
|
+
required="true"
|
|
175
|
+
@focus=${() => this.clearStatusMessaging()}
|
|
176
|
+
@input=${(e) => {
|
|
177
|
+
const newAmount = Number(e.target.value);
|
|
178
|
+
this.captureAmountChanges(newAmount);
|
|
179
|
+
this.newAmount = newAmount;
|
|
180
|
+
}}
|
|
181
|
+
/>
|
|
182
|
+
/ month
|
|
183
|
+
</div>
|
|
184
|
+
<div>
|
|
185
|
+
<div class="checkbox-option-container">
|
|
186
|
+
<input
|
|
187
|
+
type="checkbox"
|
|
188
|
+
id="cover-fees"
|
|
189
|
+
tabindex="0"
|
|
190
|
+
@change=${(e) => {
|
|
191
|
+
const input = e.target;
|
|
192
|
+
const coverFees = input.checked;
|
|
193
|
+
this.coverFees = coverFees;
|
|
194
|
+
this.captureAmountChanges();
|
|
195
|
+
}}
|
|
196
|
+
/>
|
|
197
|
+
<label for="cover-fees">${this.coveredFeesText}</label>
|
|
198
|
+
</div>
|
|
199
|
+
<p>Total: USD $${this.totalAmountWithFees()}</p>
|
|
200
|
+
<div class="cta-container">
|
|
201
|
+
<ia-button
|
|
202
|
+
class="ia-button secondary"
|
|
203
|
+
.clickHandler=${(e) => {
|
|
204
|
+
e.preventDefault();
|
|
205
|
+
this.closeForm();
|
|
206
|
+
}}
|
|
207
|
+
>
|
|
208
|
+
Cancel
|
|
209
|
+
</ia-button>
|
|
210
|
+
<ia-button
|
|
211
|
+
id="update-amount"
|
|
212
|
+
class="ia-button primary"
|
|
213
|
+
type="submit"
|
|
214
|
+
.clickHandler=${async (e, iaButton) => {
|
|
215
|
+
var _a;
|
|
216
|
+
this.clearStatusMessaging();
|
|
217
|
+
if (!this.newAmount) {
|
|
218
|
+
this.errorMessage = 'Please enter a new amount';
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// eslint-disable-next-line no-param-reassign
|
|
222
|
+
iaButton.isDisabled = true;
|
|
223
|
+
await iaButton.updateComplete;
|
|
224
|
+
// check if request is in range
|
|
225
|
+
const input = this.form.querySelector('input[name="amount"]');
|
|
226
|
+
const requestedAmount = (_a = Number(input.value)) !== null && _a !== void 0 ? _a : 0;
|
|
227
|
+
const amountTooLow = requestedAmount < 1;
|
|
228
|
+
const amountTooHigh = requestedAmount >= 9999;
|
|
229
|
+
if (amountTooLow) {
|
|
230
|
+
this.errorMessage = 'Please enter a valid amount';
|
|
231
|
+
}
|
|
232
|
+
if (amountTooHigh) {
|
|
233
|
+
this.errorMessage =
|
|
234
|
+
'Amount must be less than $9,999. Would you like to donate more? Please contact us at donations@archive.org';
|
|
235
|
+
}
|
|
236
|
+
if (amountTooHigh || amountTooLow) {
|
|
237
|
+
// eslint-disable-next-line no-param-reassign
|
|
238
|
+
iaButton.isDisabled = false;
|
|
239
|
+
await iaButton.updateComplete;
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
this.requestAmountUpdate(e);
|
|
243
|
+
}}
|
|
244
|
+
>
|
|
245
|
+
Update
|
|
246
|
+
</ia-button>
|
|
247
|
+
<ia-mgc-update-status .status=${this.updateStatus}
|
|
248
|
+
>${this.updateMessage}</ia-mgc-update-status
|
|
249
|
+
>
|
|
250
|
+
</div>
|
|
251
|
+
</div>
|
|
252
|
+
<p class="error">${this.errorMessage}</p>
|
|
253
|
+
</form>
|
|
254
|
+
</section>
|
|
255
|
+
`;
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
MGCEditPlanAmount.styles = css `
|
|
259
|
+
input#amount {
|
|
260
|
+
width: 50px;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.cta-container {
|
|
264
|
+
display: flex;
|
|
265
|
+
flex-direction: row;
|
|
266
|
+
flex-wrap: wrap;
|
|
267
|
+
align-content: center;
|
|
268
|
+
justify-content: flex-start;
|
|
269
|
+
align-items: center;
|
|
270
|
+
gap: 10px;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
p.error {
|
|
274
|
+
color: var(--mgc-warning-color-dark, #bb0505);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
ia-mgc-update-status {
|
|
278
|
+
display: inline-block;
|
|
279
|
+
margin-left: 1rem;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.checkbox-option-container {
|
|
283
|
+
margin: 10px 0;
|
|
284
|
+
display: flex;
|
|
285
|
+
}
|
|
286
|
+
`;
|
|
287
|
+
__decorate([
|
|
288
|
+
property({ type: Object })
|
|
289
|
+
], MGCEditPlanAmount.prototype, "plan", void 0);
|
|
290
|
+
__decorate([
|
|
291
|
+
property({ type: Object })
|
|
292
|
+
], MGCEditPlanAmount.prototype, "donationPaymentInfo", void 0);
|
|
293
|
+
__decorate([
|
|
294
|
+
property({ type: Number })
|
|
295
|
+
], MGCEditPlanAmount.prototype, "newAmount", void 0);
|
|
296
|
+
__decorate([
|
|
297
|
+
property({ type: Boolean, reflect: true })
|
|
298
|
+
], MGCEditPlanAmount.prototype, "currentlyEditing", void 0);
|
|
299
|
+
__decorate([
|
|
300
|
+
property({ type: Boolean })
|
|
301
|
+
], MGCEditPlanAmount.prototype, "coverFees", void 0);
|
|
302
|
+
__decorate([
|
|
303
|
+
property({ type: String })
|
|
304
|
+
], MGCEditPlanAmount.prototype, "updateMessage", void 0);
|
|
305
|
+
__decorate([
|
|
306
|
+
property({ type: String })
|
|
307
|
+
], MGCEditPlanAmount.prototype, "errorMessage", void 0);
|
|
308
|
+
__decorate([
|
|
309
|
+
property({ type: String })
|
|
310
|
+
], MGCEditPlanAmount.prototype, "updateStatus", void 0);
|
|
311
|
+
__decorate([
|
|
312
|
+
query('form')
|
|
313
|
+
], MGCEditPlanAmount.prototype, "form", void 0);
|
|
314
|
+
MGCEditPlanAmount = __decorate([
|
|
315
|
+
customElement('ia-mgc-edit-plan-amount')
|
|
316
|
+
], MGCEditPlanAmount);
|
|
317
|
+
export { MGCEditPlanAmount };
|
|
318
|
+
//# sourceMappingURL=amount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amount.js","sourceRoot":"","sources":["../../../src/form-sections/amount.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n LitElement,\n html,\n PropertyValues,\n nothing,\n css,\n TemplateResult,\n} from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport '@internetarchive/donation-form-section';\nimport {\n DonationPaymentInfo,\n DonationType,\n} from '@internetarchive/donation-form-data-models';\n\nimport type { MonthlyPlan } from '../models/plan';\nimport '../presentational/ia-button';\nimport type { IauxButton } from '../presentational/ia-button';\nimport '../presentational/mgc-update-status';\n\n@customElement('ia-mgc-edit-plan-amount')\nexport class MGCEditPlanAmount extends LitElement {\n @property({ type: Object }) plan?: MonthlyPlan;\n\n // captures the changes made to the amount && calculates the total amount with fees\n @property({ type: Object }) donationPaymentInfo?: DonationPaymentInfo;\n\n @property({ type: Number }) newAmount: number = 0;\n\n @property({ type: Boolean, reflect: true }) currentlyEditing: boolean = false;\n\n @property({ type: Boolean }) coverFees: boolean = false;\n\n @property({ type: String }) updateMessage: string = '';\n\n @property({ type: String }) errorMessage: string = '';\n\n @property({ type: String }) updateStatus: 'success' | 'fail' | '' = '';\n\n @query('form') form!: HTMLFormElement;\n\n updated(changed: PropertyValues) {\n if (changed.has('plan') && this.plan) {\n this.captureAmountChanges();\n }\n if (changed.has('coverFees')) {\n this.captureAmountChanges();\n }\n if (changed.has('currentlyEditing') && this.currentlyEditing) {\n this.form.focus();\n }\n\n if (changed.has('donationPaymentInfo') && !this.donationPaymentInfo) {\n this.captureAmountChanges();\n }\n }\n\n protected render() {\n return html`\n <section>\n <donation-form-section badgemode=\"hidebadge\" headline=\"Amount\">\n ${!this.currentlyEditing\n ? html` <p class=\"current-amount\">\n USD $${this.plan?.amount}\n <ia-mgc-update-status .status=${this.updateStatus}\n >${this.updateMessage}</ia-mgc-update-status\n >\n </p>\n <ia-button\n id=\"edit-amount\"\n class=\"ia-button link\"\n .clickHandler=${() => {\n this.currentlyEditing = true;\n this.clearStatusMessaging();\n }}\n >\n Edit...\n </ia-button>`\n : nothing}\n ${this.currentlyEditing ? this.editAmountForm : nothing}\n </donation-form-section>\n </section>\n `;\n }\n\n /* External Function that is called by consumer to tell the form there has been data update */\n async amountUpdated(status: 'success' | 'fail') {\n this.clearInputField();\n\n this.updateStatus = status;\n this.updateMessage =\n status === 'success' ? 'Amount updated' : 'Failed. Try again.';\n\n if (status === 'success') {\n this.closeForm();\n await this.updateComplete;\n\n this.updateStatus = status;\n this.updateMessage = 'Amount updated';\n\n return;\n }\n\n (\n this.form.querySelector('ia-button#update-amount') as IauxButton\n ).isDisabled = false;\n\n this.captureAmountChanges();\n\n await this.updateComplete;\n }\n\n /* Dispatches amount change request */\n requestAmountUpdate(e: Event): void {\n e.preventDefault();\n\n const input = this.form.querySelector(\n 'input[name=\"amount\"]'\n ) as HTMLInputElement;\n this.newAmount = Number(input.value);\n\n this.captureAmountChanges(this.newAmount);\n\n console.log('<plan-amount> - update amount', {\n newValue: this.newAmount,\n oldValue: this.plan?.plan.amount,\n display: this.donationPaymentInfo?.amount,\n });\n const newAmount = Number(\n DonationPaymentInfo.calculateTotal(\n Number(this.donationPaymentInfo?.amount),\n this.coverFees\n )\n );\n this.dispatchEvent(\n new CustomEvent('updateAmount', {\n detail: {\n plan: this.plan,\n amount: newAmount,\n baseAmount: this.donationPaymentInfo?.amount,\n coverFees: this.coverFees,\n feeCovered: this.donationPaymentInfo?.feeAmountCovered,\n },\n })\n );\n }\n\n /* captures form changes */\n captureAmountChanges(newAmount?: number) {\n if (!this.donationPaymentInfo && this.plan) {\n this.donationPaymentInfo = new DonationPaymentInfo({\n donationType: DonationType.Monthly,\n amount: 0,\n coverFees: true,\n });\n return;\n }\n\n let newPlan;\n if (newAmount) {\n newPlan = new DonationPaymentInfo({\n donationType: DonationType.Monthly,\n amount: newAmount,\n coverFees: true,\n });\n } else {\n const amount = this.donationPaymentInfo\n ? this.donationPaymentInfo.amount\n : this.plan!.amount;\n\n newPlan = new DonationPaymentInfo({\n donationType: DonationType.Monthly,\n amount,\n coverFees: true,\n });\n }\n\n this.donationPaymentInfo = newPlan;\n }\n\n closeForm() {\n this.clearInputField();\n this.clearStatusMessaging();\n this.currentlyEditing = false;\n this.coverFees = false;\n this.errorMessage = '';\n }\n\n clearInputField() {\n const input = this.form.querySelector(\n 'input[name=\"amount\"]'\n ) as HTMLInputElement;\n input.value = '';\n this.newAmount = 0;\n this.donationPaymentInfo = undefined;\n }\n\n async clearStatusMessaging() {\n this.errorMessage = '';\n this.updateMessage = '';\n this.updateStatus = '';\n await this.updateComplete;\n }\n\n /* DISPLAY */\n totalAmountWithFees(): number {\n if (this.newAmount === 0) {\n return 0;\n }\n\n return DonationPaymentInfo.calculateTotal(this.newAmount, this.coverFees);\n }\n\n get coveredFeesText() {\n return `I'll generously add $${this.donationPaymentInfo?.feeAmountCovered} to cover fees.`;\n }\n\n get editAmountForm(): TemplateResult {\n return html`\n <section>\n <form id=\"edit-plan-amount\">\n <p>Current donation amount: $${this.plan?.amount}</p>\n <div>\n $\n <input\n min=\"1\"\n max=\"9999\"\n type=\"number\"\n id=\"amount\"\n name=\"amount\"\n required=\"true\"\n @focus=${() => this.clearStatusMessaging()}\n @input=${(e: Event) => {\n const newAmount = Number((e.target as HTMLInputElement).value);\n this.captureAmountChanges(newAmount);\n this.newAmount = newAmount;\n }}\n />\n / month\n </div>\n <div>\n <div class=\"checkbox-option-container\">\n <input\n type=\"checkbox\"\n id=\"cover-fees\"\n tabindex=\"0\"\n @change=${(e: Event) => {\n const input = e.target as HTMLInputElement;\n const coverFees = input.checked;\n this.coverFees = coverFees;\n this.captureAmountChanges();\n }}\n />\n <label for=\"cover-fees\">${this.coveredFeesText}</label>\n </div>\n <p>Total: USD $${this.totalAmountWithFees()}</p>\n <div class=\"cta-container\">\n <ia-button\n class=\"ia-button secondary\"\n .clickHandler=${(e: Event) => {\n e.preventDefault();\n this.closeForm();\n }}\n >\n Cancel\n </ia-button>\n <ia-button\n id=\"update-amount\"\n class=\"ia-button primary\"\n type=\"submit\"\n .clickHandler=${async (e: Event, iaButton: IauxButton) => {\n this.clearStatusMessaging();\n\n if (!this.newAmount) {\n this.errorMessage = 'Please enter a new amount';\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n (iaButton as IauxButton).isDisabled = true;\n await iaButton.updateComplete;\n\n // check if request is in range\n const input = this.form.querySelector(\n 'input[name=\"amount\"]'\n ) as HTMLInputElement;\n const requestedAmount = Number(input.value) ?? 0;\n const amountTooLow = requestedAmount < 1;\n const amountTooHigh = requestedAmount >= 9999;\n if (amountTooLow) {\n this.errorMessage = 'Please enter a valid amount';\n }\n if (amountTooHigh) {\n this.errorMessage =\n 'Amount must be less than $9,999. Would you like to donate more? Please contact us at donations@archive.org';\n }\n if (amountTooHigh || amountTooLow) {\n // eslint-disable-next-line no-param-reassign\n (iaButton as IauxButton).isDisabled = false;\n await iaButton.updateComplete;\n return;\n }\n\n this.requestAmountUpdate(e);\n }}\n >\n Update\n </ia-button>\n <ia-mgc-update-status .status=${this.updateStatus}\n >${this.updateMessage}</ia-mgc-update-status\n >\n </div>\n </div>\n <p class=\"error\">${this.errorMessage}</p>\n </form>\n </section>\n `;\n }\n\n static styles = css`\n input#amount {\n width: 50px;\n }\n\n .cta-container {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-content: center;\n justify-content: flex-start;\n align-items: center;\n gap: 10px;\n }\n\n p.error {\n color: var(--mgc-warning-color-dark, #bb0505);\n }\n\n ia-mgc-update-status {\n display: inline-block;\n margin-left: 1rem;\n }\n\n .checkbox-option-container {\n margin: 10px 0;\n display: flex;\n }\n `;\n}\n"]}
|
|
@@ -29,7 +29,7 @@ let IauxMgcCancelPlan = class IauxMgcCancelPlan extends LitElement {
|
|
|
29
29
|
}
|
|
30
30
|
return html `
|
|
31
31
|
<ia-button
|
|
32
|
-
class="clear-container"
|
|
32
|
+
class="clear-container slim"
|
|
33
33
|
.clickHandler=${(e, iaButton) => {
|
|
34
34
|
// eslint-disable-next-line no-param-reassign
|
|
35
35
|
iaButton.isDisabled = true;
|
|
@@ -104,6 +104,9 @@ let IauxMgcCancelPlan = class IauxMgcCancelPlan extends LitElement {
|
|
|
104
104
|
}
|
|
105
105
|
};
|
|
106
106
|
IauxMgcCancelPlan.styles = css `
|
|
107
|
+
:host {
|
|
108
|
+
--formSectionTitleFontSize: 1.4rem;
|
|
109
|
+
}
|
|
107
110
|
.warning > * {
|
|
108
111
|
margin: 5px 0;
|
|
109
112
|
}
|
|
@@ -141,7 +144,8 @@ IauxMgcCancelPlan.styles = css `
|
|
|
141
144
|
}
|
|
142
145
|
|
|
143
146
|
.checkbox-option-container {
|
|
144
|
-
|
|
147
|
+
display: flex;
|
|
148
|
+
margin: 10px 0;
|
|
145
149
|
}
|
|
146
150
|
`;
|
|
147
151
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../src/form-sections/cancel.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,UAAU,EACV,IAAI,EAGJ,OAAO,EACP,GAAG,GACJ,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAInE,OAAO,oFAAoF,CAAC;AAE5F,OAAO,wCAAwC,CAAC;AAGhD,IAAa,iBAAiB,GAA9B,MAAa,iBAAkB,SAAQ,UAAU;IAAjD;;QAG8C,0BAAqB,GAAG,IAAI,CAAC;QAE7B,yBAAoB,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../src/form-sections/cancel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n LitElement,\n html,\n TemplateResult,\n PropertyValues,\n nothing,\n css,\n} from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport type { MonthlyPlan } from '../models/plan';\n\nimport type { IauxButton } from '../presentational/ia-button';\nimport '@internetarchive/donation-form/dist/src/form-elements/contact-form/contact-form.js';\n\nimport '@internetarchive/donation-form-section';\n\n@customElement('ia-mgc-cancel-plan')\nexport class IauxMgcCancelPlan extends LitElement {\n @property({ type: Object }) plan?: MonthlyPlan;\n\n @property({ type: Boolean, reflect: true }) patronWantsToKeepPlan = true;\n\n @property({ type: Boolean, reflect: true }) initialCancelRequest = false;\n\n @query('form') form!: HTMLFormElement;\n\n updated(changed: PropertyValues) {\n if (changed.has('plan')) {\n console.log('plan updated', this.plan);\n }\n }\n\n async cancelThisPlan(e: Event) {\n e.preventDefault();\n this.patronWantsToKeepPlan = false;\n this.dispatchEvent(new Event('cancelPlan'));\n }\n\n get formId(): string {\n return `cancel-donation-form-${this.plan?.id}`;\n }\n\n protected render() {\n if (this.initialCancelRequest) {\n return this.confirmCancelation;\n }\n\n return html`\n <ia-button\n class=\"clear-container slim\"\n .clickHandler=${(e: Event, iaButton: IauxButton) => {\n // eslint-disable-next-line no-param-reassign\n iaButton.isDisabled = true;\n if (this.initialCancelRequest) {\n this.initialCancelRequest = false;\n this.patronWantsToKeepPlan = true;\n return;\n }\n this.initialCancelRequest = true;\n }}\n >\n <donation-form-section\n badgemode=\"hidebadge\"\n headline=\"Cancel recurring donation (requires confirmation)\"\n >\n <div class=\"warning\">\n <p>\n You can also pause your recurring donation by setting the next\n donation date up to 12 months in the future.\n </p>\n <p>Let's cancel my donation</p>\n </div>\n </donation-form-section>\n </ia-button>\n\n ${this.initialCancelRequest ? this.confirmCancelation : nothing}\n `;\n }\n\n get confirmCancelation(): TemplateResult | typeof nothing {\n return html`\n <section class=\"cancel-donation\">\n <donation-form-section badgemode=\"hidebadge\" headline=\"Cancel recurring donation\">\n\n <ia-button class='text exit-cancel' @click=${() => {\n this.initialCancelRequest = false;\n this.patronWantsToKeepPlan = true;\n }}>X</ia-button>\n\n <p>Canceling ends your monthly recurring donation to the Internet Archive, effective immediately. You will not be charged moving forward.</p>\n <p>Canceling does not affect your account or access to the Internet Archive, although you will no longer have access to any of the Monthly Giving Circle perks.</p>\n <p>If you have any questions regarding donations, contact us at <a href=\"mailto:donations@archive.org\">donations@archive.org</a></p>\n\n <form id=${this.formId} @submit=${(e: Event) => this.cancelThisPlan(e)}>\n <div class=\"checkbox-option-container\">\n <input\n id=${`confirm-${this.formId}`}\n type=\"checkbox\"\n required\n @change=${async (e: Event) => {\n e.preventDefault();\n this.patronWantsToKeepPlan = !(e.target as HTMLInputElement)\n .checked;\n await this.updateComplete;\n }}>\n <label for=${`confirm-${this.formId}`}><b>I'm sure I want to cancel my subscription</b></label>\n </div>\n\n <ia-button\n class=\"cancel\"\n .isDisabled=${this.patronWantsToKeepPlan}\n id=${`submit-${this.formId}`}\n type=\"submit\"\n .clickHandler=${(e: Event, iaButton: IauxButton) => {\n // eslint-disable-next-line no-param-reassign\n iaButton.isDisabled = true;\n this.cancelThisPlan(e);\n }}\n >I'm sure I want to cancel my recurring donation.</ia-button>\n </form>\n </section>\n `;\n }\n\n static styles = css`\n :host {\n --formSectionTitleFontSize: 1.4rem;\n }\n .warning > * {\n margin: 5px 0;\n }\n\n .cancel-donation {\n display: block;\n border: 2px solid #d9534f;\n background-color: #ffeeee;\n }\n\n .cancel-donation > * {\n padding: 5px;\n position: relative;\n }\n\n ia-button.exit-cancel {\n --button-border: 1px solid;\n --button-border-radius: 50%;\n position: absolute;\n top: -5px;\n right: -10px;\n }\n\n ia-button {\n --button-height: auto;\n }\n\n ia-button > * {\n text-align: left;\n text-wrap: wrap;\n }\n\n h3 {\n position: relative;\n }\n\n .checkbox-option-container {\n display: flex;\n margin: 10px 0;\n }\n `;\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { LitElement, PropertyValues, TemplateResult } from 'lit';
|
|
2
|
+
import '@internetarchive/donation-form-section';
|
|
3
|
+
import type { MonthlyPlan } from '../models/plan';
|
|
4
|
+
import '../presentational/ia-button';
|
|
5
|
+
import type { IauxButton } from '../presentational/ia-button';
|
|
6
|
+
import '../presentational/mgc-update-status';
|
|
7
|
+
declare type InvalidDateErrorCode = 'invalid_date' | 'date_too_early' | 'second_donation_this_month' | 'date_out_of_range' | 'same_next_billing_date' | '';
|
|
8
|
+
export declare class MGCEditPlanDate extends LitElement {
|
|
9
|
+
plan?: MonthlyPlan;
|
|
10
|
+
newDate?: string;
|
|
11
|
+
currentlyEditing: boolean;
|
|
12
|
+
allowEditing: boolean;
|
|
13
|
+
updateMessage: string;
|
|
14
|
+
errorMessage: string;
|
|
15
|
+
warningMessage: string;
|
|
16
|
+
updateStatus: 'success' | 'fail' | '';
|
|
17
|
+
form: HTMLFormElement;
|
|
18
|
+
formSubmitButton: IauxButton;
|
|
19
|
+
dateInput: HTMLInputElement;
|
|
20
|
+
willUpdate(changed: PropertyValues): void;
|
|
21
|
+
updated(changed: PropertyValues): void;
|
|
22
|
+
protected render(): TemplateResult<1>;
|
|
23
|
+
dateUpdated(status: 'success' | 'fail'): Promise<void>;
|
|
24
|
+
requestDateUpdate(e: Event): void;
|
|
25
|
+
closeForm(): void;
|
|
26
|
+
clearInputField(): void;
|
|
27
|
+
formatDateToYYYYMMDD(date: Date): string;
|
|
28
|
+
clearStatusMessaging(): Promise<void>;
|
|
29
|
+
validateChosenDate(dateString: string): {
|
|
30
|
+
valid: boolean;
|
|
31
|
+
errorCode: InvalidDateErrorCode | '';
|
|
32
|
+
};
|
|
33
|
+
get minDate(): string;
|
|
34
|
+
get maxDate(): string;
|
|
35
|
+
get editDateForm(): TemplateResult;
|
|
36
|
+
static styles: import("lit").CSSResult;
|
|
37
|
+
}
|
|
38
|
+
export {};
|