1
0
Fork 0
freesewing/packages/react/components/Pattern/utils.mjs
Benjamin Fan 74ba6c2329 fix(react): Untranslated strings also need a trailing space (#349)
The bug appears in part title cutlist instructions. The bug behavior exists only in the React component. It does not exist with the core SVG renderer.

Before:
![Screenshot 2025-05-12 at 10.59.49 AM.png](/attachments/cb43d749-bad3-4d54-95ba-ae1ed4675bd2)

After:
![Screenshot 2025-05-12 at 10.59.15 AM.png](/attachments/979ca23a-1db4-49e6-8b31-4e2cd84ecbdf)

Edit: (Added, in case the keyword needs to be in the PR description/first comment, not just in a subsequent comment):
Fixes #331

Co-authored-by: Benjamin Fan <ben-git@swinglonga.com>
Reviewed-on: https://codeberg.org/freesewing/freesewing/pulls/349
Reviewed-by: Joost De Cock <joostdecock@noreply.codeberg.org>
Co-authored-by: Benjamin Fan <benjamesben@noreply.codeberg.org>
Co-committed-by: Benjamin Fan <benjamesben@noreply.codeberg.org>
2025-05-18 09:44:18 +00:00

82 lines
2.1 KiB
JavaScript

import React from 'react'
export const getProps = (obj) => {
/** I can't believe it but there seems to be no method on NPM todo this */
const cssKey = (key) => {
let chunks = key.split('-')
if (chunks.length > 1) {
key = chunks.shift()
for (let s of chunks) key += s.charAt(0).toUpperCase() + s.slice(1)
}
return key
}
const convert = (css) => {
let style = {}
let rules = css.split(';')
for (let rule of rules) {
let chunks = rule.split(':')
if (chunks.length === 2) style[cssKey(chunks[0].trim())] = chunks[1].trim()
}
return style
}
let rename = {
class: 'className',
'marker-start': 'markerStart',
'marker-end': 'markerEnd',
}
let props = {}
for (let key in obj.attributes.list) {
if (key === 'style') props[key] = convert(obj.attributes.list[key].join(' '))
if (Object.keys(rename).indexOf(key) !== -1)
props[rename[key]] = obj.attributes.list[key].join(' ')
else if (key !== 'style') props[key] = obj.attributes.list[key].join(' ')
}
return props
}
export const withinPartBounds = (point, part) =>
point.x >= part.topLeft.x &&
point.x <= part.bottomRight.x &&
point.y >= part.topLeft.y &&
point.y <= part.bottomRight.y
? true
: false
export const getId = ({
settings = {},
stackName = false,
partName = false,
pathName = false,
pointName = false,
snippetName = false,
name = false,
}) => {
let id = settings.idPrefix || ''
if (stackName) id += `${stackName}-`
if (partName) id += `${partName}-`
if (pathName) id += `${pathName}-`
if (pointName) id += `${pointName}-`
if (snippetName) id += `${snippetName}-`
if (name) id += name
return id
}
export const translateStrings = (list, translations = {}) => {
let translated = ''
if (!list) return translated
for (const string of list) {
if (Array.isArray(string)) translated += translateStrings(string, translations)
else if (string) {
if (translations[string]) {
translated += `${translations[string]}`.replace(/&quot;/g, '"') + ' '
} else translated += `${string}` + ' '
}
}
return translated
}