Bläddra i källkod

update selected properties on plotly figure charts (#675) (#676)

better handling of default value for selcted properties

Co-authored-by: Fred Lefévère-Laoide <Fred.Lefevere-Laoide@Taipy.io>
Fred Lefévère-Laoide 1 år sedan
förälder
incheckning
689009db7e
2 ändrade filer med 35 tillägg och 26 borttagningar
  1. 28 25
      frontend/taipy-gui/src/components/Taipy/Chart.tsx
  2. 7 1
      taipy/gui/_renderers/builder.py

+ 28 - 25
frontend/taipy-gui/src/components/Taipy/Chart.tsx

@@ -516,11 +516,13 @@ const Chart = (props: ChartProp) => {
     const getRealIndex = useCallback(
         (index?: number) =>
             typeof index === "number"
-                ? data[dataKey].tp_index
+                ? props.figure
+                    ? index
+                    : data[dataKey].tp_index
                     ? (data[dataKey].tp_index[index] as number)
                     : index
                 : 0,
-        [data, dataKey]
+        [data, dataKey, props.figure]
     );
 
     const onSelect = useCallback(
@@ -553,29 +555,30 @@ const Chart = (props: ChartProp) => {
         <Box id={id} key="div" data-testid={props.testId} className={className} ref={plotRef}>
             <Tooltip title={hover || ""}>
                 <Suspense fallback={<Skeleton key="skeleton" sx={skelStyle} />}>
-                {Array.isArray(props.figure) && props.figure.length && props.figure[0].data !== undefined ?
-                    <Plot
-                    data={props.figure[0].data as Data[]}
-                    layout={layout}
-                    style={style}
-                    onRelayout={onRelayout}
-                    onAfterPlot={onAfterPlot}
-                    onSelected={onSelect}
-                    onDeselect={onSelect}
-                    config={plotConfig}
-                />
-:                <Plot
-                        data={dataPl}
-                        layout={layout}
-                        style={style}
-                        onRelayout={onRelayout}
-                        onAfterPlot={onAfterPlot}
-                        onSelected={isOnClick(config.types) ? undefined : onSelect}
-                        onDeselect={isOnClick(config.types) ? undefined : onSelect}
-                        onClick={isOnClick(config.types) ? onSelect : undefined}
-                        config={plotConfig}
-                    />
-                    }
+                    {Array.isArray(props.figure) && props.figure.length && props.figure[0].data !== undefined ? (
+                        <Plot
+                            data={props.figure[0].data as Data[]}
+                            layout={layout}
+                            style={style}
+                            onRelayout={onRelayout}
+                            onAfterPlot={onAfterPlot}
+                            onSelected={onSelect}
+                            onDeselect={onSelect}
+                            config={plotConfig}
+                        />
+                    ) : (
+                        <Plot
+                            data={dataPl}
+                            layout={layout}
+                            style={style}
+                            onRelayout={onRelayout}
+                            onAfterPlot={onAfterPlot}
+                            onSelected={isOnClick(config.types) ? undefined : onSelect}
+                            onDeselect={isOnClick(config.types) ? undefined : onSelect}
+                            onClick={isOnClick(config.types) ? onSelect : undefined}
+                            config={plotConfig}
+                        />
+                    )}
                 </Suspense>
             </Tooltip>
         </Box>

+ 7 - 1
taipy/gui/_renderers/builder.py

@@ -569,10 +569,14 @@ class _Builder:
     def _set_chart_selected(self, max=0):
         name = "selected"
         default_sel = self.__attributes.get(name)
+        if not isinstance(default_sel, list) and name in self.__attributes:
+            default_sel = []
         idx = 1
         name_idx = f"{name}[{idx}]"
         sel = self.__attributes.get(name_idx)
-        while idx <= max:
+        if not isinstance(sel, list) and name_idx in self.__attributes:
+            sel = []
+        while idx <= max or name_idx in self.__attributes:
             if sel is not None or default_sel is not None:
                 self.__update_vars.extend(
                     self.__set_list_attribute(
@@ -585,6 +589,8 @@ class _Builder:
             idx += 1
             name_idx = f"{name}[{idx}]"
             sel = self.__attributes.get(name_idx)
+            if not isinstance(sel, list) and name_idx in self.__attributes:
+                sel = []
 
     def _get_list_attribute(self, name: str, list_type: PropertyType):
         varname = self.__hashes.get(name)