mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-06-05 13:10:41 +02:00
frontend: fixes displayName for dotted dictionary keys
This commit is contained in:
parent
37d698a1b2
commit
33aa8708fd
@ -15,6 +15,7 @@ import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
|||||||
import { WebSettingsContext } from '../WebSettings';
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
import { updateValue } from '../socket';
|
import { updateValue } from '../socket';
|
||||||
import { DictComponent } from './DictComponent';
|
import { DictComponent } from './DictComponent';
|
||||||
|
import { parseFullAccessPath } from '../utils/stateUtils';
|
||||||
|
|
||||||
type AttributeType =
|
type AttributeType =
|
||||||
| 'str'
|
| 'str'
|
||||||
@ -51,12 +52,37 @@ type GenericComponentProps = {
|
|||||||
addNotification: (message: string, levelname?: LevelName) => void;
|
addNotification: (message: string, levelname?: LevelName) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getPathFromPathParts = (pathParts: string[]): string => {
|
||||||
|
let path = '';
|
||||||
|
for (const pathPart of pathParts) {
|
||||||
|
if (!pathPart.startsWith('[') && path !== '') {
|
||||||
|
path += '.';
|
||||||
|
}
|
||||||
|
path += pathPart;
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
};
|
||||||
|
|
||||||
|
const createDisplayNameFromAccessPath = (fullAccessPath: string): string => {
|
||||||
|
const displayNameParts = [];
|
||||||
|
const parsedFullAccessPath = parseFullAccessPath(fullAccessPath);
|
||||||
|
for (let i = parsedFullAccessPath.length - 1; i >= 0; i--) {
|
||||||
|
const item = parsedFullAccessPath[i];
|
||||||
|
displayNameParts.unshift(item);
|
||||||
|
if (!item.startsWith('[')) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return getPathFromPathParts(displayNameParts);
|
||||||
|
};
|
||||||
|
|
||||||
export const GenericComponent = React.memo(
|
export const GenericComponent = React.memo(
|
||||||
({ attribute, isInstantUpdate, addNotification }: GenericComponentProps) => {
|
({ attribute, isInstantUpdate, addNotification }: GenericComponentProps) => {
|
||||||
const { full_access_path: fullAccessPath } = attribute;
|
const { full_access_path: fullAccessPath } = attribute;
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
const webSettings = useContext(WebSettingsContext);
|
const webSettings = useContext(WebSettingsContext);
|
||||||
let displayName = fullAccessPath.split('.').at(-1);
|
|
||||||
|
let displayName = createDisplayNameFromAccessPath(fullAccessPath);
|
||||||
|
|
||||||
if (webSettings[fullAccessPath]) {
|
if (webSettings[fullAccessPath]) {
|
||||||
if (webSettings[fullAccessPath].display === false) {
|
if (webSettings[fullAccessPath].display === false) {
|
||||||
|
@ -15,7 +15,7 @@ export type State = {
|
|||||||
* @returns An array of components that make up the path, including attribute names,
|
* @returns An array of components that make up the path, including attribute names,
|
||||||
* numeric indices, and string keys as separate elements.
|
* numeric indices, and string keys as separate elements.
|
||||||
*/
|
*/
|
||||||
function parseFullAccessPath(path: string): string[] {
|
export function parseFullAccessPath(path: string): string[] {
|
||||||
// The pattern matches:
|
// The pattern matches:
|
||||||
// \w+ - Words
|
// \w+ - Words
|
||||||
// \[\d+\.\d+\] - Floating point numbers inside brackets
|
// \[\d+\.\d+\] - Floating point numbers inside brackets
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"files": {
|
"files": {
|
||||||
"main.css": "/static/css/main.7ef670d5.css",
|
"main.css": "/static/css/main.7ef670d5.css",
|
||||||
"main.js": "/static/js/main.ee3ff1c7.js",
|
"main.js": "/static/js/main.57f8ec4c.js",
|
||||||
"index.html": "/index.html",
|
"index.html": "/index.html",
|
||||||
"main.7ef670d5.css.map": "/static/css/main.7ef670d5.css.map",
|
"main.7ef670d5.css.map": "/static/css/main.7ef670d5.css.map",
|
||||||
"main.ee3ff1c7.js.map": "/static/js/main.ee3ff1c7.js.map"
|
"main.57f8ec4c.js.map": "/static/js/main.57f8ec4c.js.map"
|
||||||
},
|
},
|
||||||
"entrypoints": [
|
"entrypoints": [
|
||||||
"static/css/main.7ef670d5.css",
|
"static/css/main.7ef670d5.css",
|
||||||
"static/js/main.ee3ff1c7.js"
|
"static/js/main.57f8ec4c.js"
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -1 +1 @@
|
|||||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site displaying a pydase UI."/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>pydase App</title><script defer="defer" src="/static/js/main.ee3ff1c7.js"></script><link href="/static/css/main.7ef670d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site displaying a pydase UI."/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>pydase App</title><script defer="defer" src="/static/js/main.57f8ec4c.js"></script><link href="/static/css/main.7ef670d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
File diff suppressed because one or more lines are too long
1
src/pydase/frontend/static/js/main.57f8ec4c.js.map
Normal file
1
src/pydase/frontend/static/js/main.57f8ec4c.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user