chore: add html to text dep
All checks were successful
Spell Check / Spell Check with Typos (push) Successful in 6s
All checks were successful
Spell Check / Spell Check with Typos (push) Successful in 6s
This commit is contained in:
parent
f487a9169c
commit
4042cbcea4
3 changed files with 178 additions and 0 deletions
67
src/utils/string-template.ts
Normal file
67
src/utils/string-template.ts
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
export function formatNumberDecimal(num: number, point: number = 2): string {
|
||||
return (num || 0).toLocaleString("eng", {
|
||||
minimumFractionDigits: point,
|
||||
maximumFractionDigits: point,
|
||||
});
|
||||
}
|
||||
|
||||
const templates = {
|
||||
"quotation-labor": {
|
||||
converter: (context?: { name: string[] }) => {
|
||||
return context?.name.join("<br />") || "";
|
||||
},
|
||||
},
|
||||
"quotation-payment": {
|
||||
converter: (context?: {
|
||||
paymentType: "Full" | "Split" | "SplitCustom" | "BillFull" | "BillSplit" | "BillSplitCustom";
|
||||
|
||||
amount?: number;
|
||||
installments?: {
|
||||
no: number;
|
||||
amount: number;
|
||||
}[];
|
||||
}) => {
|
||||
if (context?.paymentType === "Full") {
|
||||
return [
|
||||
"**** เงื่อนไขเพิ่มเติม",
|
||||
"- เงื่อนไขการชำระเงิน แบบเต็มจำนวน",
|
||||
` จำนวน ${formatNumberDecimal(context?.amount || 0, 2)}`,
|
||||
].join("<br/>");
|
||||
} else {
|
||||
return [
|
||||
"**** เงื่อนไขเพิ่มเติม",
|
||||
`- เงื่อนไขการชำระเงิน แบบแบ่งจ่าย${context?.paymentType === "SplitCustom" ? " กำหนดเอง " : " "}${context?.installments?.length} งวด`,
|
||||
...(context?.installments?.map(
|
||||
(v) => ` งวดที่ ${v.no} จำนวน ${formatNumberDecimal(v.amount, 2)}`,
|
||||
) || []),
|
||||
].join("<br />");
|
||||
}
|
||||
},
|
||||
},
|
||||
} as const;
|
||||
|
||||
type Template = typeof templates;
|
||||
type TemplateName = keyof Template;
|
||||
type TemplateContext = {
|
||||
[key in TemplateName]?: Parameters<Template[key]["converter"]>[0];
|
||||
};
|
||||
|
||||
export function convertTemplate(
|
||||
text: string,
|
||||
context?: TemplateContext,
|
||||
templateUse?: TemplateName[],
|
||||
) {
|
||||
let ret = text;
|
||||
|
||||
for (const [name, template] of Object.entries(templates)) {
|
||||
if (templateUse && !templateUse.includes(name as TemplateName)) continue;
|
||||
ret = ret.replace(
|
||||
new RegExp("\\#\\[" + name.replaceAll("-", "\\-") + "\\]", "g"),
|
||||
typeof template.converter === "function"
|
||||
? template.converter(context?.[name as TemplateName] as any)
|
||||
: template.converter,
|
||||
);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue