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.
Files changed (36) hide show
  1. package/dist/cjs/components/Card/CardFieldNumber.js +2 -2
  2. package/dist/cjs/components/Card/CardFieldNumber.js.map +1 -1
  3. package/dist/cjs/components/Card/CardFieldSelect.js +1 -1
  4. package/dist/cjs/components/Card/CardFieldSelect.js.map +1 -1
  5. package/dist/cjs/extensions/subscription/contrib/ArticleSubscriptionPlan.js +65 -0
  6. package/dist/cjs/extensions/subscription/contrib/ArticleSubscriptionPlan.js.map +1 -0
  7. package/dist/cjs/extensions/subscription/index.js +42 -0
  8. package/dist/cjs/extensions/subscription/index.js.map +1 -0
  9. package/dist/cjs/extensions/subscription/types/plan.js +3 -0
  10. package/dist/cjs/extensions/subscription/types/plan.js.map +1 -0
  11. package/dist/cjs/index.js +2 -1
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/esm/components/Card/CardFieldNumber.js +2 -2
  14. package/dist/esm/components/Card/CardFieldNumber.js.map +1 -1
  15. package/dist/esm/components/Card/CardFieldSelect.js +1 -1
  16. package/dist/esm/components/Card/CardFieldSelect.js.map +1 -1
  17. package/dist/esm/extensions/subscription/contrib/ArticleSubscriptionPlan.js +60 -0
  18. package/dist/esm/extensions/subscription/contrib/ArticleSubscriptionPlan.js.map +1 -0
  19. package/dist/esm/extensions/subscription/index.js +13 -0
  20. package/dist/esm/extensions/subscription/index.js.map +1 -0
  21. package/dist/esm/extensions/subscription/types/plan.js +2 -0
  22. package/dist/esm/extensions/subscription/types/plan.js.map +1 -0
  23. package/dist/esm/index.js +1 -0
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/types/components/Card/CardFieldNumber.d.ts +1 -0
  26. package/dist/types/extensions/subscription/contrib/ArticleSubscriptionPlan.d.ts +4 -0
  27. package/dist/types/extensions/subscription/index.d.ts +2 -0
  28. package/dist/types/extensions/subscription/types/plan.d.ts +6 -0
  29. package/dist/types/index.d.ts +1 -0
  30. package/package.json +1 -1
  31. package/src/components/Card/CardFieldNumber.tsx +3 -1
  32. package/src/components/Card/CardFieldSelect.tsx +1 -1
  33. package/src/extensions/subscription/contrib/ArticleSubscriptionPlan.tsx +107 -0
  34. package/src/extensions/subscription/index.tsx +16 -0
  35. package/src/extensions/subscription/types/plan.ts +7 -0
  36. 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;AAUnD,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,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,EACpB,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;AAxCW,QAAA,eAAe,mBAwC1B;AAEF,kBAAe,uBAAe,CAAC"}
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,EAAE,GAAI,CAC/E,CACI,CACR,CAAC;AACJ,CAAC,CAAC;AA5CW,QAAA,eAAe,mBA4C1B;AAEF,kBAAe,uBAAe,CAAC"}
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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=plan.js.map
@@ -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
@@ -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;AAU1D,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,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,EACpB,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"}
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,EAAE,GAAI,CAC/E,CACI,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plan.js.map
@@ -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
@@ -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;
@@ -0,0 +1,4 @@
1
+ import { ContribComponent } from "../../../types";
2
+ import { SubscriptionPlan } from "../types/plan";
3
+ declare const SubscriptionPlanCard: ContribComponent<SubscriptionPlan>;
4
+ export default SubscriptionPlanCard;
@@ -0,0 +1,2 @@
1
+ import { ContribComponentMap } from "../../types";
2
+ export declare const contrib: Record<string, ContribComponentMap>;
@@ -0,0 +1,6 @@
1
+ export type SubscriptionPeriodicity = "MONTH" | "DAY";
2
+ export interface SubscriptionPlan {
3
+ code: string;
4
+ nth?: number;
5
+ periodicity?: SubscriptionPeriodicity;
6
+ }
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bananas-commerce-admin",
3
- "version": "0.11.1",
3
+ "version": "0.11.2",
4
4
  "description": "Bananas-commerce admin interface and building blocks",
5
5
  "keywords": [
6
6
  "admin",
@@ -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;
@@ -0,0 +1,7 @@
1
+ export type SubscriptionPeriodicity = "MONTH" | "DAY";
2
+
3
+ export interface SubscriptionPlan {
4
+ code: string;
5
+ nth?: number;
6
+ periodicity?: SubscriptionPeriodicity;
7
+ }
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";