bananas-commerce-admin 0.11.1 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Card/CardFieldNumber.js +2 -2
- package/dist/cjs/components/Card/CardFieldNumber.js.map +1 -1
- package/dist/cjs/components/Card/CardFieldSelect.js +1 -1
- package/dist/cjs/components/Card/CardFieldSelect.js.map +1 -1
- package/dist/cjs/extensions/subscription/contrib/ArticleSubscriptionPlan.js +65 -0
- package/dist/cjs/extensions/subscription/contrib/ArticleSubscriptionPlan.js.map +1 -0
- package/dist/cjs/extensions/subscription/index.js +42 -0
- package/dist/cjs/extensions/subscription/index.js.map +1 -0
- package/dist/cjs/extensions/subscription/types/plan.js +3 -0
- package/dist/cjs/extensions/subscription/types/plan.js.map +1 -0
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/Card/CardFieldNumber.js +2 -2
- package/dist/esm/components/Card/CardFieldNumber.js.map +1 -1
- package/dist/esm/components/Card/CardFieldSelect.js +1 -1
- package/dist/esm/components/Card/CardFieldSelect.js.map +1 -1
- package/dist/esm/extensions/subscription/contrib/ArticleSubscriptionPlan.js +60 -0
- package/dist/esm/extensions/subscription/contrib/ArticleSubscriptionPlan.js.map +1 -0
- package/dist/esm/extensions/subscription/index.js +13 -0
- package/dist/esm/extensions/subscription/index.js.map +1 -0
- package/dist/esm/extensions/subscription/types/plan.js +2 -0
- package/dist/esm/extensions/subscription/types/plan.js.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/types/components/Card/CardFieldNumber.d.ts +1 -0
- package/dist/types/extensions/subscription/contrib/ArticleSubscriptionPlan.d.ts +4 -0
- package/dist/types/extensions/subscription/index.d.ts +2 -0
- package/dist/types/extensions/subscription/types/plan.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/Card/CardFieldNumber.tsx +3 -1
- package/src/components/Card/CardFieldSelect.tsx +1 -1
- package/src/extensions/subscription/contrib/ArticleSubscriptionPlan.tsx +107 -0
- package/src/extensions/subscription/index.tsx +16 -0
- package/src/extensions/subscription/types/plan.ts +7 -0
- package/src/index.ts +1 -0
|
@@ -10,9 +10,9 @@ const CardContext_1 = require("../../contexts/CardContext");
|
|
|
10
10
|
const LabeledValue_1 = __importDefault(require("../LabeledValue"));
|
|
11
11
|
const Grid2_1 = __importDefault(require("@mui/material/Grid2"));
|
|
12
12
|
const InputAdornment_1 = __importDefault(require("@mui/material/InputAdornment"));
|
|
13
|
-
const CardFieldNumber = ({ label, formName, value: defaultValue, required = false, isDisabled = false, size = "grow", isReadable = true, adornment, ...props }) => {
|
|
13
|
+
const CardFieldNumber = ({ label, formName, value: defaultValue, required = false, isDisabled = false, size = "grow", isReadable = true, disabled, adornment, ...props }) => {
|
|
14
14
|
const { isEditing } = (0, CardContext_1.useCardContext)();
|
|
15
|
-
return (react_1.default.createElement(Grid2_1.default, { size: size }, isEditing ? (react_1.default.createElement(TextField_1.default, { type: "number", name: formName, defaultValue: defaultValue ?? "", label: label, variant: "outlined", required: required, disabled: isDisabled, inputProps: {
|
|
15
|
+
return (react_1.default.createElement(Grid2_1.default, { size: size }, isEditing ? (react_1.default.createElement(TextField_1.default, { type: "number", name: formName, defaultValue: defaultValue ?? "", label: label, variant: "outlined", required: required, disabled: isDisabled || disabled, inputProps: {
|
|
16
16
|
min: "min" in props ? props.min : undefined,
|
|
17
17
|
max: "max" in props ? props.max : undefined,
|
|
18
18
|
}, fullWidth: true, slotProps: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardFieldNumber.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldNumber.tsx"],"names":[],"mappings":";;;;;;AAAA,wEAAgD;AAChD,kDAA0B;AAC1B,4DAA4D;AAC5D,mEAA2C;AAE3C,gEAAuC;AACvC,kFAA0D;
|
|
1
|
+
{"version":3,"file":"CardFieldNumber.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldNumber.tsx"],"names":[],"mappings":";;;;;;AAAA,wEAAgD;AAChD,kDAA0B;AAC1B,4DAA4D;AAC5D,mEAA2C;AAE3C,gEAAuC;AACvC,kFAA0D;AAWnD,MAAM,eAAe,GAAiD,CAAC,EAC5E,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,YAAY,EACnB,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,MAAM,EACb,UAAU,GAAG,IAAI,EACjB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,4BAAc,GAAE,CAAC;IAEvC,OAAO,CACL,8BAAC,eAAI,IAAC,IAAI,EAAE,IAAI,IACb,SAAS,CAAC,CAAC,CAAC,CACX,8BAAC,mBAAS,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,YAAY,IAAI,EAAE,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAC,UAAU,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,UAAU,IAAI,QAAQ,EAChC,UAAU,EAAE;YACV,GAAG,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YAC3C,GAAG,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAC5C,EACD,SAAS,QACT,SAAS,EAAE;YACT,KAAK,EAAE;gBACL,YAAY,EAAE,8BAAC,wBAAc,IAAC,QAAQ,EAAC,KAAK,IAAE,SAAS,CAAkB;aAC1E;SACF,GACD,CACH,CAAC,CAAC,CAAC,CACF,UAAU,IAAI,8BAAC,sBAAY,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,IAAI,GAAG,EAAE,GAAI,CAC9E,CACI,CACR,CAAC;AACJ,CAAC,CAAC;AAzCW,QAAA,eAAe,mBAyC1B;AAEF,kBAAe,uBAAe,CAAC"}
|
|
@@ -20,7 +20,7 @@ const CardFieldSelect = ({ label, formName, value: defaultValue = undefined, req
|
|
|
20
20
|
};
|
|
21
21
|
return (react_1.default.createElement(Grid2_1.default, { size: size }, isEditing ? (react_1.default.createElement(FormControl_1.default, { fullWidth: true },
|
|
22
22
|
react_1.default.createElement(InputLabel_1.default, null, label),
|
|
23
|
-
react_1.default.createElement(Select_1.default, { name: formName, value: value, label: label, onChange: handleChange, disabled: isDisabled, required: required, ...props }, options?.map((opt) => (react_1.default.createElement(MenuItem_1.default, { key: opt.id, value: opt.label }, opt.label)))))) : (isReadable && react_1.default.createElement(LabeledValue_1.default, { label: label, value: defaultValue?.label ?? "" }))));
|
|
23
|
+
react_1.default.createElement(Select_1.default, { name: formName, value: value, label: label, onChange: handleChange, disabled: isDisabled, required: required, ...props }, options?.map((opt) => (react_1.default.createElement(MenuItem_1.default, { key: opt.id, value: opt.label }, opt.label)))))) : (isReadable && react_1.default.createElement(LabeledValue_1.default, { label: label, value: defaultValue?.label ?? "—" }))));
|
|
24
24
|
};
|
|
25
25
|
exports.CardFieldSelect = CardFieldSelect;
|
|
26
26
|
exports.default = exports.CardFieldSelect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardFieldSelect.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldSelect.tsx"],"names":[],"mappings":";;;;;;AAAA,4EAAoD;AACpD,gEAAuC;AACvC,0EAAkD;AAClD,sEAA8C;AAC9C,kEAAmF;AACnF,kDAA0B;AAC1B,4DAA4D;AAC5D,mEAA2C;AAWpC,MAAM,eAAe,GAAiD,CAAC,EAC5E,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,MAAM,EACb,OAAO,EACP,UAAU,GAAG,IAAI,EACjB,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,4BAAc,GAAE,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,YAAY,GAAG,CAAC,KAAiC,EAAE,EAAE;QACzD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,OAAO,CACL,8BAAC,eAAI,IAAC,IAAI,EAAE,IAAI,IACb,SAAS,CAAC,CAAC,CAAC,CACX,8BAAC,qBAAW,IAAC,SAAS;QACpB,8BAAC,oBAAU,QAAE,KAAK,CAAc;QAChC,8BAAC,gBAAM,IACL,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,QAAQ,KACd,KAAK,IAER,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACrB,8BAAC,kBAAQ,IAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IACpC,GAAG,CAAC,KAAK,CACD,CACZ,CAAC,CACK,CACG,CACf,CAAC,CAAC,CAAC,CACF,UAAU,IAAI,8BAAC,sBAAY,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"CardFieldSelect.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldSelect.tsx"],"names":[],"mappings":";;;;;;AAAA,4EAAoD;AACpD,gEAAuC;AACvC,0EAAkD;AAClD,sEAA8C;AAC9C,kEAAmF;AACnF,kDAA0B;AAC1B,4DAA4D;AAC5D,mEAA2C;AAWpC,MAAM,eAAe,GAAiD,CAAC,EAC5E,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,MAAM,EACb,OAAO,EACP,UAAU,GAAG,IAAI,EACjB,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,4BAAc,GAAE,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,YAAY,GAAG,CAAC,KAAiC,EAAE,EAAE;QACzD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,OAAO,CACL,8BAAC,eAAI,IAAC,IAAI,EAAE,IAAI,IACb,SAAS,CAAC,CAAC,CAAC,CACX,8BAAC,qBAAW,IAAC,SAAS;QACpB,8BAAC,oBAAU,QAAE,KAAK,CAAc;QAChC,8BAAC,gBAAM,IACL,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,QAAQ,KACd,KAAK,IAER,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACrB,8BAAC,kBAAQ,IAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IACpC,GAAG,CAAC,KAAK,CACD,CACZ,CAAC,CACK,CACG,CACf,CAAC,CAAC,CAAC,CACF,UAAU,IAAI,8BAAC,sBAAY,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,GAAG,GAAI,CAChF,CACI,CACR,CAAC;AACJ,CAAC,CAAC;AA5CW,QAAA,eAAe,mBA4C1B;AAEF,kBAAe,uBAAe,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const react_2 = require("react");
|
|
8
|
+
const FormControlLabel_1 = __importDefault(require("@mui/material/FormControlLabel"));
|
|
9
|
+
const Typography_1 = __importDefault(require("@mui/material/Typography"));
|
|
10
|
+
const Switch_1 = __importDefault(require("@mui/material/Switch"));
|
|
11
|
+
const LabeledValue_1 = __importDefault(require("../../../components/LabeledValue"));
|
|
12
|
+
const Card_1 = __importDefault(require("../../../components/Card"));
|
|
13
|
+
const CardActions_1 = __importDefault(require("../../../components/Card/CardActions"));
|
|
14
|
+
const CardContent_1 = __importDefault(require("../../../components/Card/CardContent"));
|
|
15
|
+
const CardFieldNumber_1 = __importDefault(require("../../../components/Card/CardFieldNumber"));
|
|
16
|
+
const CardFieldSelect_1 = __importDefault(require("../../../components/Card/CardFieldSelect"));
|
|
17
|
+
const CardCancelButton_1 = __importDefault(require("../../../components/Card/CardCancelButton"));
|
|
18
|
+
const CardHeader_1 = __importDefault(require("../../../components/Card/CardHeader"));
|
|
19
|
+
const CardRow_1 = __importDefault(require("../../../components/Card/CardRow"));
|
|
20
|
+
const CardSaveButton_1 = __importDefault(require("../../../components/Card/CardSaveButton"));
|
|
21
|
+
const ApiContext_1 = require("../../../contexts/ApiContext");
|
|
22
|
+
const I18nContext_1 = require("../../../contexts/I18nContext");
|
|
23
|
+
const CardContext_1 = require("../../../contexts/CardContext");
|
|
24
|
+
const RecurringSwitch = ({ isRecurring, onToggle }) => {
|
|
25
|
+
const { isEditing } = (0, CardContext_1.useCardContext)();
|
|
26
|
+
const { t } = (0, I18nContext_1.useI18n)();
|
|
27
|
+
return isEditing ? (react_1.default.createElement(FormControlLabel_1.default, { control: react_1.default.createElement(Switch_1.default, { checked: isRecurring, onChange: (_, checked) => onToggle(checked) }), label: react_1.default.createElement(Typography_1.default, { color: "textSecondary", variant: "subtitle2" }, t("Recurring")), labelPlacement: "top" })) : (react_1.default.createElement(LabeledValue_1.default, { label: t("Recurring"), value: isRecurring ? "Yes" : "No" }));
|
|
28
|
+
};
|
|
29
|
+
const SubscriptionPlanCard = ({ data, refresh }) => {
|
|
30
|
+
const [isRecurring, setIsRecurring] = (0, react_2.useState)(Boolean(data.periodicity != null));
|
|
31
|
+
const api = (0, ApiContext_1.useApi)();
|
|
32
|
+
const { t } = (0, I18nContext_1.useI18n)();
|
|
33
|
+
const handleSave = async (formData) => {
|
|
34
|
+
const action = api.operations["subscription.contrib:article-plan-update"];
|
|
35
|
+
const response = await action.call({
|
|
36
|
+
params: { code: data.code },
|
|
37
|
+
body: formData,
|
|
38
|
+
});
|
|
39
|
+
if (response.ok) {
|
|
40
|
+
refresh();
|
|
41
|
+
return t("Plan updated successfully.");
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.error(response);
|
|
45
|
+
throw new Error("updating plan.");
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return (react_1.default.createElement(Card_1.default, { onSubmit: handleSave, isEditable: true },
|
|
49
|
+
react_1.default.createElement(CardHeader_1.default, { title: "Subscription Plan" }),
|
|
50
|
+
react_1.default.createElement(CardContent_1.default, null,
|
|
51
|
+
react_1.default.createElement(CardRow_1.default, null,
|
|
52
|
+
react_1.default.createElement(RecurringSwitch, { isRecurring: isRecurring, onToggle: setIsRecurring }),
|
|
53
|
+
react_1.default.createElement(CardFieldNumber_1.default, { label: t("Frequency"), formName: "nth", value: data.nth, min: 1, disabled: !isRecurring, required: false }),
|
|
54
|
+
react_1.default.createElement(CardFieldSelect_1.default, { label: t("Periodicity"), formName: "periodicity", value: isRecurring
|
|
55
|
+
? { label: data.periodicity ?? "", id: data.periodicity ?? "" }
|
|
56
|
+
: undefined, disabled: !isRecurring, required: false, options: [
|
|
57
|
+
{ label: "MONTH", id: "MONTH" },
|
|
58
|
+
{ label: "DAY", id: "DAY" },
|
|
59
|
+
] }))),
|
|
60
|
+
react_1.default.createElement(CardActions_1.default, null,
|
|
61
|
+
react_1.default.createElement(CardCancelButton_1.default, null),
|
|
62
|
+
react_1.default.createElement(CardSaveButton_1.default, null))));
|
|
63
|
+
};
|
|
64
|
+
exports.default = SubscriptionPlanCard;
|
|
65
|
+
//# sourceMappingURL=ArticleSubscriptionPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleSubscriptionPlan.js","sourceRoot":"","sources":["../../../../../src/extensions/subscription/contrib/ArticleSubscriptionPlan.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.contrib = void 0;
|
|
30
|
+
const SubscriptionsOutlined_1 = __importDefault(require("@mui/icons-material/SubscriptionsOutlined"));
|
|
31
|
+
exports.contrib = {
|
|
32
|
+
catalog: {
|
|
33
|
+
"catalog:article:detail:plan": {
|
|
34
|
+
title: "Subscription Plan",
|
|
35
|
+
icon: SubscriptionsOutlined_1.default,
|
|
36
|
+
component: async () => (await Promise.resolve().then(() => __importStar(require("./contrib/ArticleSubscriptionPlan")))).default,
|
|
37
|
+
predicate: (article) => article.item_type == "PLAN",
|
|
38
|
+
variant: "inline",
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/subscription/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sGAAkF;AAKrE,QAAA,OAAO,GAAwC;IAC1D,OAAO,EAAE;QACP,6BAA6B,EAAE;YAC7B,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,+BAAyB;YAC/B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,mCAAmC,GAAC,CAAC,CAAC,OAAO;YAClF,SAAS,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM;YAClE,OAAO,EAAE,QAAQ;SAClB;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../../../src/extensions/subscription/types/plan.ts"],"names":[],"mappings":""}
|
package/dist/cjs/index.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
26
26
|
return result;
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.member = exports.pricing = exports.catalog = exports.report = exports.fulfillment = exports.pos = exports.bananas = void 0;
|
|
29
|
+
exports.subscription = exports.member = exports.pricing = exports.catalog = exports.report = exports.fulfillment = exports.pos = exports.bananas = void 0;
|
|
30
30
|
__exportStar(require("./components/TitleBar"), exports);
|
|
31
31
|
__exportStar(require("./components/Header"), exports);
|
|
32
32
|
__exportStar(require("./components/ActionBar"), exports);
|
|
@@ -73,4 +73,5 @@ exports.report = __importStar(require("./extensions/report"));
|
|
|
73
73
|
exports.catalog = __importStar(require("./extensions/catalog"));
|
|
74
74
|
exports.pricing = __importStar(require("./extensions/pricing"));
|
|
75
75
|
exports.member = __importStar(require("./extensions/member"));
|
|
76
|
+
exports.subscription = __importStar(require("./extensions/subscription"));
|
|
76
77
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,sDAAoC;AACpC,yDAAuC;AACvC,oDAAkC;AAClC,0DAAwC;AACxC,oDAAkC;AAClC,0DAAwC;AACxC,oDAAkC;AAClC,yDAAuC;AACvC,wDAAsC;AACtC,mDAAiC;AACjC,oDAAkC;AAElC,oDAAkC;AAClC,+DAA6C;AAC7C,gEAA8C;AAC9C,gEAA8C;AAC9C,qEAAmD;AACnD,mEAAiD;AACjD,4DAA0C;AAC1C,6DAA2C;AAC3C,0EAAwD;AACxD,sEAAoD;AACpD,mEAAiD;AACjD,oEAAkD;AAClD,oEAAkD;AAClD,oEAAkD;AAClD,kEAAgD;AAEhD,wDAAsC;AACtC,yDAAuC;AACvC,2DAAyC;AACzC,yDAAuC;AACvC,2DAAyC;AACzC,yDAAuC;AAEvC,uDAAqC;AACrC,+DAA6C;AAC7C,6DAA2C;AAE3C,0CAAwB;AACxB,wCAAsB;AACtB,wCAAsB;AAEtB,gEAAgD;AAChD,wDAAwC;AACxC,wEAAwD;AACxD,8DAA8C;AAC9C,gEAAgD;AAChD,gEAAgD;AAChD,8DAA8C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,sDAAoC;AACpC,yDAAuC;AACvC,oDAAkC;AAClC,0DAAwC;AACxC,oDAAkC;AAClC,0DAAwC;AACxC,oDAAkC;AAClC,yDAAuC;AACvC,wDAAsC;AACtC,mDAAiC;AACjC,oDAAkC;AAElC,oDAAkC;AAClC,+DAA6C;AAC7C,gEAA8C;AAC9C,gEAA8C;AAC9C,qEAAmD;AACnD,mEAAiD;AACjD,4DAA0C;AAC1C,6DAA2C;AAC3C,0EAAwD;AACxD,sEAAoD;AACpD,mEAAiD;AACjD,oEAAkD;AAClD,oEAAkD;AAClD,oEAAkD;AAClD,kEAAgD;AAEhD,wDAAsC;AACtC,yDAAuC;AACvC,2DAAyC;AACzC,yDAAuC;AACvC,2DAAyC;AACzC,yDAAuC;AAEvC,uDAAqC;AACrC,+DAA6C;AAC7C,6DAA2C;AAE3C,0CAAwB;AACxB,wCAAsB;AACtB,wCAAsB;AAEtB,gEAAgD;AAChD,wDAAwC;AACxC,wEAAwD;AACxD,8DAA8C;AAC9C,gEAAgD;AAChD,gEAAgD;AAChD,8DAA8C;AAC9C,0EAA0D"}
|
|
@@ -4,9 +4,9 @@ import { useCardContext } from "../../contexts/CardContext";
|
|
|
4
4
|
import LabeledValue from "../LabeledValue";
|
|
5
5
|
import Grid from "@mui/material/Grid2";
|
|
6
6
|
import InputAdornment from "@mui/material/InputAdornment";
|
|
7
|
-
export const CardFieldNumber = ({ label, formName, value: defaultValue, required = false, isDisabled = false, size = "grow", isReadable = true, adornment, ...props }) => {
|
|
7
|
+
export const CardFieldNumber = ({ label, formName, value: defaultValue, required = false, isDisabled = false, size = "grow", isReadable = true, disabled, adornment, ...props }) => {
|
|
8
8
|
const { isEditing } = useCardContext();
|
|
9
|
-
return (React.createElement(Grid, { size: size }, isEditing ? (React.createElement(TextField, { type: "number", name: formName, defaultValue: defaultValue ?? "", label: label, variant: "outlined", required: required, disabled: isDisabled, inputProps: {
|
|
9
|
+
return (React.createElement(Grid, { size: size }, isEditing ? (React.createElement(TextField, { type: "number", name: formName, defaultValue: defaultValue ?? "", label: label, variant: "outlined", required: required, disabled: isDisabled || disabled, inputProps: {
|
|
10
10
|
min: "min" in props ? props.min : undefined,
|
|
11
11
|
max: "max" in props ? props.max : undefined,
|
|
12
12
|
}, fullWidth: true, slotProps: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardFieldNumber.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,OAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC,OAAO,cAAc,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"CardFieldNumber.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,OAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAW1D,MAAM,CAAC,MAAM,eAAe,GAAiD,CAAC,EAC5E,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,YAAY,EACnB,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,MAAM,EACb,UAAU,GAAG,IAAI,EACjB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IAEvC,OAAO,CACL,oBAAC,IAAI,IAAC,IAAI,EAAE,IAAI,IACb,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,SAAS,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,YAAY,IAAI,EAAE,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAC,UAAU,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,UAAU,IAAI,QAAQ,EAChC,UAAU,EAAE;YACV,GAAG,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YAC3C,GAAG,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAC5C,EACD,SAAS,QACT,SAAS,EAAE;YACT,KAAK,EAAE;gBACL,YAAY,EAAE,oBAAC,cAAc,IAAC,QAAQ,EAAC,KAAK,IAAE,SAAS,CAAkB;aAC1E;SACF,GACD,CACH,CAAC,CAAC,CAAC,CACF,UAAU,IAAI,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,IAAI,GAAG,EAAE,GAAI,CAC9E,CACI,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -14,7 +14,7 @@ export const CardFieldSelect = ({ label, formName, value: defaultValue = undefin
|
|
|
14
14
|
};
|
|
15
15
|
return (React.createElement(Grid, { size: size }, isEditing ? (React.createElement(FormControl, { fullWidth: true },
|
|
16
16
|
React.createElement(InputLabel, null, label),
|
|
17
|
-
React.createElement(Select, { name: formName, value: value, label: label, onChange: handleChange, disabled: isDisabled, required: required, ...props }, options?.map((opt) => (React.createElement(MenuItem, { key: opt.id, value: opt.label }, opt.label)))))) : (isReadable && React.createElement(LabeledValue, { label: label, value: defaultValue?.label ?? "" }))));
|
|
17
|
+
React.createElement(Select, { name: formName, value: value, label: label, onChange: handleChange, disabled: isDisabled, required: required, ...props }, options?.map((opt) => (React.createElement(MenuItem, { key: opt.id, value: opt.label }, opt.label)))))) : (isReadable && React.createElement(LabeledValue, { label: label, value: defaultValue?.label ?? "—" }))));
|
|
18
18
|
};
|
|
19
19
|
export default CardFieldSelect;
|
|
20
20
|
//# sourceMappingURL=CardFieldSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardFieldSelect.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,MAA+C,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAW3C,MAAM,CAAC,MAAM,eAAe,GAAiD,CAAC,EAC5E,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,MAAM,EACb,OAAO,EACP,UAAU,GAAG,IAAI,EACjB,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,YAAY,GAAG,CAAC,KAAiC,EAAE,EAAE;QACzD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,OAAO,CACL,oBAAC,IAAI,IAAC,IAAI,EAAE,IAAI,IACb,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,WAAW,IAAC,SAAS;QACpB,oBAAC,UAAU,QAAE,KAAK,CAAc;QAChC,oBAAC,MAAM,IACL,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,QAAQ,KACd,KAAK,IAER,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACrB,oBAAC,QAAQ,IAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IACpC,GAAG,CAAC,KAAK,CACD,CACZ,CAAC,CACK,CACG,CACf,CAAC,CAAC,CAAC,CACF,UAAU,IAAI,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"CardFieldSelect.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,MAA+C,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAW3C,MAAM,CAAC,MAAM,eAAe,GAAiD,CAAC,EAC5E,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,MAAM,EACb,OAAO,EACP,UAAU,GAAG,IAAI,EACjB,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,YAAY,GAAG,CAAC,KAAiC,EAAE,EAAE;QACzD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,OAAO,CACL,oBAAC,IAAI,IAAC,IAAI,EAAE,IAAI,IACb,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,WAAW,IAAC,SAAS;QACpB,oBAAC,UAAU,QAAE,KAAK,CAAc;QAChC,oBAAC,MAAM,IACL,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,QAAQ,KACd,KAAK,IAER,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACrB,oBAAC,QAAQ,IAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IACpC,GAAG,CAAC,KAAK,CACD,CACZ,CAAC,CACK,CACG,CACf,CAAC,CAAC,CAAC,CACF,UAAU,IAAI,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,GAAG,GAAI,CAChF,CACI,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import FormControlLabel from "@mui/material/FormControlLabel";
|
|
4
|
+
import Typography from "@mui/material/Typography";
|
|
5
|
+
import Switch from "@mui/material/Switch";
|
|
6
|
+
import LabeledValue from "../../../components/LabeledValue";
|
|
7
|
+
import Card from "../../../components/Card";
|
|
8
|
+
import CardActions from "../../../components/Card/CardActions";
|
|
9
|
+
import CardContent from "../../../components/Card/CardContent";
|
|
10
|
+
import CardFieldNumber from "../../../components/Card/CardFieldNumber";
|
|
11
|
+
import CardFieldSelect from "../../../components/Card/CardFieldSelect";
|
|
12
|
+
import CardCancelButton from "../../../components/Card/CardCancelButton";
|
|
13
|
+
import CardHeader from "../../../components/Card/CardHeader";
|
|
14
|
+
import CardRow from "../../../components/Card/CardRow";
|
|
15
|
+
import CardSaveButton from "../../../components/Card/CardSaveButton";
|
|
16
|
+
import { useApi } from "../../../contexts/ApiContext";
|
|
17
|
+
import { useI18n } from "../../../contexts/I18nContext";
|
|
18
|
+
import { useCardContext } from "../../../contexts/CardContext";
|
|
19
|
+
const RecurringSwitch = ({ isRecurring, onToggle }) => {
|
|
20
|
+
const { isEditing } = useCardContext();
|
|
21
|
+
const { t } = useI18n();
|
|
22
|
+
return isEditing ? (React.createElement(FormControlLabel, { control: React.createElement(Switch, { checked: isRecurring, onChange: (_, checked) => onToggle(checked) }), label: React.createElement(Typography, { color: "textSecondary", variant: "subtitle2" }, t("Recurring")), labelPlacement: "top" })) : (React.createElement(LabeledValue, { label: t("Recurring"), value: isRecurring ? "Yes" : "No" }));
|
|
23
|
+
};
|
|
24
|
+
const SubscriptionPlanCard = ({ data, refresh }) => {
|
|
25
|
+
const [isRecurring, setIsRecurring] = useState(Boolean(data.periodicity != null));
|
|
26
|
+
const api = useApi();
|
|
27
|
+
const { t } = useI18n();
|
|
28
|
+
const handleSave = async (formData) => {
|
|
29
|
+
const action = api.operations["subscription.contrib:article-plan-update"];
|
|
30
|
+
const response = await action.call({
|
|
31
|
+
params: { code: data.code },
|
|
32
|
+
body: formData,
|
|
33
|
+
});
|
|
34
|
+
if (response.ok) {
|
|
35
|
+
refresh();
|
|
36
|
+
return t("Plan updated successfully.");
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.error(response);
|
|
40
|
+
throw new Error("updating plan.");
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
return (React.createElement(Card, { onSubmit: handleSave, isEditable: true },
|
|
44
|
+
React.createElement(CardHeader, { title: "Subscription Plan" }),
|
|
45
|
+
React.createElement(CardContent, null,
|
|
46
|
+
React.createElement(CardRow, null,
|
|
47
|
+
React.createElement(RecurringSwitch, { isRecurring: isRecurring, onToggle: setIsRecurring }),
|
|
48
|
+
React.createElement(CardFieldNumber, { label: t("Frequency"), formName: "nth", value: data.nth, min: 1, disabled: !isRecurring, required: false }),
|
|
49
|
+
React.createElement(CardFieldSelect, { label: t("Periodicity"), formName: "periodicity", value: isRecurring
|
|
50
|
+
? { label: data.periodicity ?? "", id: data.periodicity ?? "" }
|
|
51
|
+
: undefined, disabled: !isRecurring, required: false, options: [
|
|
52
|
+
{ label: "MONTH", id: "MONTH" },
|
|
53
|
+
{ label: "DAY", id: "DAY" },
|
|
54
|
+
] }))),
|
|
55
|
+
React.createElement(CardActions, null,
|
|
56
|
+
React.createElement(CardCancelButton, null),
|
|
57
|
+
React.createElement(CardSaveButton, null))));
|
|
58
|
+
};
|
|
59
|
+
export default SubscriptionPlanCard;
|
|
60
|
+
//# sourceMappingURL=ArticleSubscriptionPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleSubscriptionPlan.js","sourceRoot":"","sources":["../../../../../src/extensions/subscription/contrib/ArticleSubscriptionPlan.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import SubscriptionsOutlinedIcon from "@mui/icons-material/SubscriptionsOutlined";
|
|
2
|
+
export const contrib = {
|
|
3
|
+
catalog: {
|
|
4
|
+
"catalog:article:detail:plan": {
|
|
5
|
+
title: "Subscription Plan",
|
|
6
|
+
icon: SubscriptionsOutlinedIcon,
|
|
7
|
+
component: async () => (await import("./contrib/ArticleSubscriptionPlan")).default,
|
|
8
|
+
predicate: (article) => article.item_type == "PLAN",
|
|
9
|
+
variant: "inline",
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/subscription/index.tsx"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,2CAA2C,CAAC;AAKlF,MAAM,CAAC,MAAM,OAAO,GAAwC;IAC1D,OAAO,EAAE;QACP,6BAA6B,EAAE;YAC7B,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,yBAAyB;YAC/B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC,OAAO;YAClF,SAAS,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM;YAClE,OAAO,EAAE,QAAQ;SAClB;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../../../src/extensions/subscription/types/plan.ts"],"names":[],"mappings":""}
|
package/dist/esm/index.js
CHANGED
|
@@ -44,4 +44,5 @@ export * as report from "./extensions/report";
|
|
|
44
44
|
export * as catalog from "./extensions/catalog";
|
|
45
45
|
export * as pricing from "./extensions/pricing";
|
|
46
46
|
export * as member from "./extensions/member";
|
|
47
|
+
export * as subscription from "./extensions/subscription";
|
|
47
48
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAElC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AAEtB,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAElC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AAEtB,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC"}
|
|
@@ -6,6 +6,7 @@ export interface CardFieldNumberProps extends CardFieldBaseProps, React.PropsWit
|
|
|
6
6
|
min?: number;
|
|
7
7
|
max?: number;
|
|
8
8
|
adornment?: string;
|
|
9
|
+
disabled?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export declare const CardFieldNumber: React.FC<Omit<CardFieldNumberProps, "type">>;
|
|
11
12
|
export default CardFieldNumber;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export * as report from "./extensions/report";
|
|
|
44
44
|
export * as catalog from "./extensions/catalog";
|
|
45
45
|
export * as pricing from "./extensions/pricing";
|
|
46
46
|
export * as member from "./extensions/member";
|
|
47
|
+
export * as subscription from "./extensions/subscription";
|
|
47
48
|
export type * as mui from "./mui";
|
|
48
49
|
export type * as types from "./types";
|
|
49
50
|
export type { RouterExtension } from "./router/Router";
|
package/package.json
CHANGED
|
@@ -12,6 +12,7 @@ export interface CardFieldNumberProps extends CardFieldBaseProps, React.PropsWit
|
|
|
12
12
|
min?: number;
|
|
13
13
|
max?: number;
|
|
14
14
|
adornment?: string;
|
|
15
|
+
disabled?: boolean;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
export const CardFieldNumber: React.FC<Omit<CardFieldNumberProps, "type">> = ({
|
|
@@ -22,6 +23,7 @@ export const CardFieldNumber: React.FC<Omit<CardFieldNumberProps, "type">> = ({
|
|
|
22
23
|
isDisabled = false,
|
|
23
24
|
size = "grow",
|
|
24
25
|
isReadable = true,
|
|
26
|
+
disabled,
|
|
25
27
|
adornment,
|
|
26
28
|
...props
|
|
27
29
|
}) => {
|
|
@@ -37,7 +39,7 @@ export const CardFieldNumber: React.FC<Omit<CardFieldNumberProps, "type">> = ({
|
|
|
37
39
|
label={label}
|
|
38
40
|
variant="outlined"
|
|
39
41
|
required={required}
|
|
40
|
-
disabled={isDisabled}
|
|
42
|
+
disabled={isDisabled || disabled}
|
|
41
43
|
inputProps={{
|
|
42
44
|
min: "min" in props ? props.min : undefined,
|
|
43
45
|
max: "max" in props ? props.max : undefined,
|
|
@@ -56,7 +56,7 @@ export const CardFieldSelect: React.FC<Omit<CardFieldSelectProps, "type">> = ({
|
|
|
56
56
|
</Select>
|
|
57
57
|
</FormControl>
|
|
58
58
|
) : (
|
|
59
|
-
isReadable && <LabeledValue label={label} value={defaultValue?.label ?? ""} />
|
|
59
|
+
isReadable && <LabeledValue label={label} value={defaultValue?.label ?? "—"} />
|
|
60
60
|
)}
|
|
61
61
|
</Grid>
|
|
62
62
|
);
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import FormControlLabel from "@mui/material/FormControlLabel";
|
|
4
|
+
import Typography from "@mui/material/Typography";
|
|
5
|
+
import Switch from "@mui/material/Switch";
|
|
6
|
+
|
|
7
|
+
import { ContribComponent } from "../../../types";
|
|
8
|
+
import LabeledValue from "../../../components/LabeledValue";
|
|
9
|
+
import Card from "../../../components/Card";
|
|
10
|
+
import CardActions from "../../../components/Card/CardActions";
|
|
11
|
+
import CardContent from "../../../components/Card/CardContent";
|
|
12
|
+
import CardFieldNumber from "../../../components/Card/CardFieldNumber";
|
|
13
|
+
import CardFieldSelect from "../../../components/Card/CardFieldSelect";
|
|
14
|
+
import CardCancelButton from "../../../components/Card/CardCancelButton";
|
|
15
|
+
import CardHeader from "../../../components/Card/CardHeader";
|
|
16
|
+
import CardRow from "../../../components/Card/CardRow";
|
|
17
|
+
import CardSaveButton from "../../../components/Card/CardSaveButton";
|
|
18
|
+
import { useApi } from "../../../contexts/ApiContext";
|
|
19
|
+
import { useI18n } from "../../../contexts/I18nContext";
|
|
20
|
+
import { useCardContext } from "../../../contexts/CardContext";
|
|
21
|
+
import { SubscriptionPlan } from "../types/plan";
|
|
22
|
+
|
|
23
|
+
interface RecurringSwitchProps {
|
|
24
|
+
isRecurring: boolean;
|
|
25
|
+
onToggle: (checked: boolean) => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const RecurringSwitch: React.FC<RecurringSwitchProps> = ({ isRecurring, onToggle }) => {
|
|
29
|
+
const { isEditing } = useCardContext();
|
|
30
|
+
const { t } = useI18n();
|
|
31
|
+
|
|
32
|
+
return isEditing ? (
|
|
33
|
+
<FormControlLabel
|
|
34
|
+
control={<Switch checked={isRecurring} onChange={(_, checked) => onToggle(checked)} />}
|
|
35
|
+
label={
|
|
36
|
+
<Typography color="textSecondary" variant="subtitle2">
|
|
37
|
+
{t("Recurring")}
|
|
38
|
+
</Typography>
|
|
39
|
+
}
|
|
40
|
+
labelPlacement="top"
|
|
41
|
+
/>
|
|
42
|
+
) : (
|
|
43
|
+
<LabeledValue label={t("Recurring")} value={isRecurring ? "Yes" : "No"} />
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const SubscriptionPlanCard: ContribComponent<SubscriptionPlan> = ({ data, refresh }) => {
|
|
48
|
+
const [isRecurring, setIsRecurring] = useState(Boolean(data.periodicity != null));
|
|
49
|
+
const api = useApi();
|
|
50
|
+
const { t } = useI18n();
|
|
51
|
+
|
|
52
|
+
const handleSave = async (formData: any) => {
|
|
53
|
+
const action = api.operations["subscription.contrib:article-plan-update"];
|
|
54
|
+
const response = await action.call({
|
|
55
|
+
params: { code: data.code },
|
|
56
|
+
body: formData as Omit<SubscriptionPlan, "code">,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
if (response.ok) {
|
|
60
|
+
refresh();
|
|
61
|
+
return t("Plan updated successfully.");
|
|
62
|
+
} else {
|
|
63
|
+
console.error(response);
|
|
64
|
+
throw new Error("updating plan.");
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<Card onSubmit={handleSave} isEditable={true}>
|
|
70
|
+
<CardHeader title="Subscription Plan" />
|
|
71
|
+
<CardContent>
|
|
72
|
+
<CardRow>
|
|
73
|
+
<RecurringSwitch isRecurring={isRecurring} onToggle={setIsRecurring} />
|
|
74
|
+
<CardFieldNumber
|
|
75
|
+
label={t("Frequency")}
|
|
76
|
+
formName="nth"
|
|
77
|
+
value={data.nth}
|
|
78
|
+
min={1}
|
|
79
|
+
disabled={!isRecurring}
|
|
80
|
+
required={false}
|
|
81
|
+
/>
|
|
82
|
+
<CardFieldSelect
|
|
83
|
+
label={t("Periodicity")}
|
|
84
|
+
formName="periodicity"
|
|
85
|
+
value={
|
|
86
|
+
isRecurring
|
|
87
|
+
? { label: data.periodicity ?? "", id: data.periodicity ?? "" }
|
|
88
|
+
: undefined
|
|
89
|
+
}
|
|
90
|
+
disabled={!isRecurring}
|
|
91
|
+
required={false}
|
|
92
|
+
options={[
|
|
93
|
+
{ label: "MONTH", id: "MONTH" },
|
|
94
|
+
{ label: "DAY", id: "DAY" },
|
|
95
|
+
]}
|
|
96
|
+
/>
|
|
97
|
+
</CardRow>
|
|
98
|
+
</CardContent>
|
|
99
|
+
<CardActions>
|
|
100
|
+
<CardCancelButton />
|
|
101
|
+
<CardSaveButton />
|
|
102
|
+
</CardActions>
|
|
103
|
+
</Card>
|
|
104
|
+
);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export default SubscriptionPlanCard;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import SubscriptionsOutlinedIcon from "@mui/icons-material/SubscriptionsOutlined";
|
|
2
|
+
|
|
3
|
+
import { ContribComponentMap } from "../../types";
|
|
4
|
+
import { ArticleDetail } from "../../extensions/catalog";
|
|
5
|
+
|
|
6
|
+
export const contrib: Record<string, ContribComponentMap> = {
|
|
7
|
+
catalog: {
|
|
8
|
+
"catalog:article:detail:plan": {
|
|
9
|
+
title: "Subscription Plan",
|
|
10
|
+
icon: SubscriptionsOutlinedIcon,
|
|
11
|
+
component: async () => (await import("./contrib/ArticleSubscriptionPlan")).default,
|
|
12
|
+
predicate: (article: ArticleDetail) => article.item_type == "PLAN",
|
|
13
|
+
variant: "inline",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
} as const;
|
package/src/index.ts
CHANGED
|
@@ -49,6 +49,7 @@ export * as report from "./extensions/report";
|
|
|
49
49
|
export * as catalog from "./extensions/catalog";
|
|
50
50
|
export * as pricing from "./extensions/pricing";
|
|
51
51
|
export * as member from "./extensions/member";
|
|
52
|
+
export * as subscription from "./extensions/subscription";
|
|
52
53
|
|
|
53
54
|
export type * as mui from "./mui";
|
|
54
55
|
export type * as types from "./types";
|