medusa-invoice
Version:
Generate invoice from Medusa
115 lines • 17.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const jsx_runtime_1 = require("react/jsx-runtime");
const ui_1 = require("@medusajs/ui");
const material_1 = require("@mui/material");
const medusa_react_1 = require("medusa-react");
const react_hook_form_1 = require("react-hook-form");
const ui_2 = require("@medusajs/ui");
const react_1 = require("react");
const settings_invoice_display_number_1 = __importDefault(require("./settings-invoice-display-number"));
const lodash_1 = require("lodash");
const InvoiceSettingsForm = ({ invoiceSettings, setOpenModal, }) => {
const { register, handleSubmit, formState: { errors }, } = (0, react_hook_form_1.useForm)();
const [formatNumber, setFormatNumber] = (0, react_1.useState)(invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.invoice_number_format);
const [forcedNumber, setForcedNumber] = (0, react_1.useState)(invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.invoice_forced_number);
const [error, setError] = (0, react_1.useState)(undefined);
const { mutate } = (0, medusa_react_1.useAdminCustomPost)(`/document-invoice-settings`, ["document-invoice-settings"]);
const onSubmit = (data) => {
return mutate({
formatNumber: data.formatNumber,
forcedNumber: data.forcedNumber !== undefined && data.forcedNumber.toString().length
? data.forcedNumber
: undefined,
}, {
onSuccess: async ({ response, settings }) => {
if (response.status == 201 && settings) {
ui_2.toast.success("Invoice settings", {
description: "New invoice settings saved",
});
setOpenModal(false);
}
else {
ui_2.toast.error("Invoice settings", {
description: "New invoice settings cannot be saved, some error happened.",
});
}
},
onError: ({}) => {
ui_2.toast.error("Invoice settings", {
description: "New invoice settings cannot be saved, some error happened.",
});
},
});
};
const INVOICE_NUMBER_PLACEHOLDER = "{invoice_number}";
const errorText = `Text ${INVOICE_NUMBER_PLACEHOLDER} needs to be included in input.`;
const LABEL_MUST_FORMAT = `Format must include ${INVOICE_NUMBER_PLACEHOLDER}`;
const LABEL_MUST_FORCED = `Forced number must be a number`;
const LABEL_INFO_FORCED = `It will auto-increment starting from this number.`;
const validateFormatNumber = (value) => {
if (!value.includes(INVOICE_NUMBER_PLACEHOLDER)) {
return LABEL_MUST_FORMAT;
}
return true;
};
const validateForcedNumber = (value) => {
if (value.length && isNaN(Number(value))) {
return LABEL_MUST_FORCED;
}
return true;
};
return ((0, jsx_runtime_1.jsx)("form", { children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, direction: "column", rowSpacing: 4, paddingTop: 8, children: [(0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, direction: "column", spacing: 1, marginTop: 2, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, direction: "column", children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Label, { size: "small", children: "Number format" }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Label, { size: "xsmall", children: LABEL_MUST_FORMAT }) })] }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Input, { placeholder: INVOICE_NUMBER_PLACEHOLDER, defaultValue: (invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.invoice_number_format)
? invoiceSettings.invoice_number_format
: INVOICE_NUMBER_PLACEHOLDER, ...register("formatNumber", {
validate: validateFormatNumber,
onChange(e) {
const value = e.target.value;
if ((0, lodash_1.isBoolean)(validateFormatNumber(value))) {
setError(undefined);
setFormatNumber(value);
}
else {
setError(validateFormatNumber(value));
}
},
}) }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, direction: "column", spacing: 1, marginTop: 2, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, direction: "column", children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Label, { size: "small", children: "Forced number" }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Label, { size: "xsmall", children: LABEL_INFO_FORCED }) })] }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Input, { defaultValue: (invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.invoice_forced_number) !== undefined &&
invoiceSettings.invoice_forced_number !== null
? invoiceSettings.invoice_forced_number
: "", type: "number", ...register("forcedNumber", {
validate: validateForcedNumber,
onChange(e) {
const value = e.target.value;
if ((0, lodash_1.isBoolean)(validateForcedNumber(value))) {
setError(undefined);
setForcedNumber(value);
}
else {
setError(validateForcedNumber(value));
}
},
}) }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, direction: "column", spacing: 1, marginTop: 2, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Label, { size: "small", children: "Your next invoice number will be:" }) }), errors.formatNumber == undefined &&
errors.forcedNumber == undefined &&
error == undefined && ((0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(settings_invoice_display_number_1.default, { formatNumber: formatNumber, forcedNumber: forcedNumber !== undefined && forcedNumber !== null
? parseInt(forcedNumber)
: undefined }) }))] }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Button, { type: "submit", variant: "primary", onClick: handleSubmit(onSubmit), children: "Save" }) }), (errors.formatNumber || errors.forcedNumber) && ((0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Alert, { variant: "error", children: errorText }) })), error && ((0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Alert, { variant: "error", children: error }) }))] }) }));
};
const InvoiceSettingsModalDetails = ({ setOpenModal }) => {
const { data, isLoading } = (0, medusa_react_1.useAdminCustomQuery)("/document-invoice-settings", [], {}, {
refetchOnMount: "always",
cacheTime: 0,
});
if (isLoading) {
return ((0, jsx_runtime_1.jsx)(ui_1.FocusModal.Body, { children: (0, jsx_runtime_1.jsx)(material_1.CircularProgress, {}) }));
}
return ((0, jsx_runtime_1.jsx)(ui_1.FocusModal.Body, { children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, direction: "column", alignContent: "center", paddingTop: 8, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Heading, { children: "Invoice settings" }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Text, { children: "These settings will be applied for newly generated invoices." }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(InvoiceSettingsForm, { invoiceSettings: data === null || data === void 0 ? void 0 : data.settings, setOpenModal: setOpenModal }) })] }) }));
};
const InvoiceSettingsModal = () => {
const [open, setOpen] = (0, react_1.useState)(false);
return ((0, jsx_runtime_1.jsxs)(ui_1.FocusModal, { open: open, onOpenChange: setOpen, children: [(0, jsx_runtime_1.jsx)(ui_1.FocusModal.Trigger, { asChild: true, children: (0, jsx_runtime_1.jsx)(ui_1.Button, { children: "Change settings" }) }), (0, jsx_runtime_1.jsxs)(ui_1.FocusModal.Content, { children: [(0, jsx_runtime_1.jsx)(ui_1.FocusModal.Header, {}), (0, jsx_runtime_1.jsx)(InvoiceSettingsModalDetails, { setOpenModal: setOpen })] })] }));
};
exports.default = InvoiceSettingsModal;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MtaW52b2ljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91aS1jb21wb25lbnRzL3NldHRpbmdzL3NldHRpbmdzLWludm9pY2UudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFDQVFzQjtBQUN0Qiw0Q0FBdUQ7QUFDdkQsK0NBQXVFO0FBQ3ZFLHFEQUEwQztBQUMxQyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBUWpDLHdHQUE2RTtBQUM3RSxtQ0FBbUM7QUFPbkMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEVBQzNCLGVBQWUsRUFDZixZQUFZLEdBSWIsRUFBRSxFQUFFO0lBQ0gsTUFBTSxFQUNKLFFBQVEsRUFDUixZQUFZLEVBQ1osU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQ3RCLEdBQUcsSUFBQSx5QkFBTyxHQUFtQixDQUFDO0lBQy9CLE1BQU0sQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLEdBQUcsSUFBQSxnQkFBUSxFQUM5QyxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUscUJBQXFCLENBQ3ZDLENBQUM7SUFDRixNQUFNLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUEsZ0JBQVEsRUFDOUMsZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFFLHFCQUFxQixDQUN2QyxDQUFDO0lBQ0YsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxJQUFBLGdCQUFRLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFFOUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsaUNBQWtCLEVBR25DLDRCQUE0QixFQUFFLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBcUIsRUFBRSxFQUFFO1FBQ3pDLE9BQU8sTUFBTSxDQUNYO1lBQ0UsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLFlBQVksRUFDVixJ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