Fix temp range display in show page and label templates
- Show page now displays temp ranges (min-max) instead of single values - Fixed label template rendering to handle multiple tags in conditional blocks - Added "not_set" translation key Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -131,16 +131,20 @@ export const FilamentShow: React.FC<IResourceComponentsProps> = () => {
|
||||
}}
|
||||
/>
|
||||
<Title level={5}>{t("filament.fields.settings_extruder_temp")}</Title>
|
||||
{!record?.settings_extruder_temp ? (
|
||||
<TextField value="Not Set" />
|
||||
{!record?.settings_extruder_temp_min && !record?.settings_extruder_temp_max ? (
|
||||
<TextField value={t("filament.fields.not_set")} />
|
||||
) : record?.settings_extruder_temp_min === record?.settings_extruder_temp_max || !record?.settings_extruder_temp_max ? (
|
||||
<NumberFieldUnit value={record?.settings_extruder_temp_min ?? ""} unit="°C" />
|
||||
) : (
|
||||
<NumberFieldUnit value={record?.settings_extruder_temp ?? ""} unit="°C" />
|
||||
<TextField value={`${record?.settings_extruder_temp_min ?? "?"} - ${record?.settings_extruder_temp_max ?? "?"} °C`} />
|
||||
)}
|
||||
<Title level={5}>{t("filament.fields.settings_bed_temp")}</Title>
|
||||
{!record?.settings_bed_temp ? (
|
||||
<TextField value="Not Set" />
|
||||
{!record?.settings_bed_temp_min && !record?.settings_bed_temp_max ? (
|
||||
<TextField value={t("filament.fields.not_set")} />
|
||||
) : record?.settings_bed_temp_min === record?.settings_bed_temp_max || !record?.settings_bed_temp_max ? (
|
||||
<NumberFieldUnit value={record?.settings_bed_temp_min ?? ""} unit="°C" />
|
||||
) : (
|
||||
<NumberFieldUnit value={record?.settings_bed_temp ?? ""} unit="°C" />
|
||||
<TextField value={`${record?.settings_bed_temp_min ?? "?"} - ${record?.settings_bed_temp_max ?? "?"} °C`} />
|
||||
)}
|
||||
<Title level={5}>{t("filament.fields.article_number")}</Title>
|
||||
<TextField value={record?.article_number} />
|
||||
|
||||
@@ -102,24 +102,45 @@ function applyTextFormatting(text: string): ReactElement[] {
|
||||
|
||||
export function renderLabelContents(template: string, spool: ISpool): ReactElement {
|
||||
// Find all {tags} in the template string and loop over them
|
||||
// let matches = [...template.matchAll(/(?:{(.*?))?{(.*?)}(.*?)(?:}(.*?))?/gs)];
|
||||
let matches = [...template.matchAll(/{(?:[^}{]|{[^}{]*})*}/gs)];
|
||||
let label_text = template;
|
||||
matches.forEach((match) => {
|
||||
if ((match[0].match(/{/g) || []).length == 1) {
|
||||
const braceCount = (match[0].match(/{/g) || []).length;
|
||||
if (braceCount == 1) {
|
||||
// Simple tag: {tag}
|
||||
let tag = match[0].replace(/[{}]/g, "");
|
||||
let tagValue = getTagValue(tag, spool);
|
||||
label_text = label_text.replace(match[0], tagValue);
|
||||
} else if ((match[0].match(/{/g) || []).length == 2) {
|
||||
let structure = match[0].match(/{(.*?){(.*?)}(.*?)}/);
|
||||
if (structure != null) {
|
||||
const tag = structure[2];
|
||||
let tagValue = getTagValue(tag, spool);
|
||||
if (tagValue == "?") {
|
||||
label_text = label_text.replace(match[0], "");
|
||||
} else {
|
||||
label_text = label_text.replace(match[0], structure[1] + tagValue + structure[3]);
|
||||
} else if (braceCount >= 2) {
|
||||
// Conditional block with one or more inner tags: {prefix {tag1} middle {tag2} suffix}
|
||||
// First, extract the outer content and find all inner tags
|
||||
const outerContent = match[0].slice(1, -1); // Remove outer braces
|
||||
const innerTagMatches = [...outerContent.matchAll(/{([^{}]+)}/g)];
|
||||
|
||||
if (innerTagMatches.length === 0) {
|
||||
// No inner tags found, leave as-is
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if any inner tag resolves to "?" (missing value)
|
||||
let allTagsValid = true;
|
||||
let processedContent = outerContent;
|
||||
|
||||
for (const innerMatch of innerTagMatches) {
|
||||
const tag = innerMatch[1];
|
||||
const tagValue = getTagValue(tag, spool);
|
||||
if (tagValue === "?" || tagValue === null || tagValue === undefined) {
|
||||
allTagsValid = false;
|
||||
break;
|
||||
}
|
||||
processedContent = processedContent.replace(innerMatch[0], String(tagValue));
|
||||
}
|
||||
|
||||
if (allTagsValid) {
|
||||
label_text = label_text.replace(match[0], processedContent);
|
||||
} else {
|
||||
// If any tag is missing, remove the entire conditional block
|
||||
label_text = label_text.replace(match[0], "");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user