Selaa lähdekoodia

use is_promotable and is_submittable (#229)

Co-authored-by: Fred Lefévère-Laoide <Fred.Lefevere-Laoide@Taipy.io>
Fred Lefévère-Laoide 1 vuosi sitten
vanhempi
säilyke
7b56d9815c
3 muutettua tiedostoa jossa 36 lisäystä ja 10 poistoa
  1. 19 7
      gui/src/ScenarioViewer.tsx
  2. 5 1
      gui/src/utils.ts
  3. 12 2
      src/taipy/gui_core/GuiCoreLib.py

+ 19 - 7
gui/src/ScenarioViewer.tsx

@@ -89,6 +89,7 @@ interface PipelinesRowProps {
     onFocus: (e: MouseEvent<HTMLElement>) => void;
     onFocus: (e: MouseEvent<HTMLElement>) => void;
     focusName: string;
     focusName: string;
     setFocusName: (name: string) => void;
     setFocusName: (name: string) => void;
+    submittable: boolean;
 }
 }
 
 
 const MainBoxSx = {
 const MainBoxSx = {
@@ -144,6 +145,7 @@ const PipelineRow = ({
     onFocus,
     onFocus,
     focusName,
     focusName,
     setFocusName,
     setFocusName,
+    submittable,
 }: PipelinesRowProps) => {
 }: PipelinesRowProps) => {
     const [pipeline, setPipeline] = useState<string>(label);
     const [pipeline, setPipeline] = useState<string>(label);
 
 
@@ -207,8 +209,12 @@ const PipelineRow = ({
             </Grid>
             </Grid>
             <Grid item xs={2} container alignContent="center" alignItems="center" justifyContent="center">
             <Grid item xs={2} container alignContent="center" alignItems="center" justifyContent="center">
                 {submit ? (
                 {submit ? (
-                    <IconButton size="small" onClick={onSubmitPipeline} disabled={!enableScenarioFields || !active}>
-                        <Send color={disableColor("info", !enableScenarioFields)} />
+                    <IconButton
+                        size="small"
+                        onClick={onSubmitPipeline}
+                        disabled={!enableScenarioFields || !active || !submittable}
+                    >
+                        <Send color={disableColor("info", !enableScenarioFields || !active || !submittable)} />
                     </IconButton>
                     </IconButton>
                 ) : null}
                 ) : null}
             </Grid>
             </Grid>
@@ -251,6 +257,8 @@ const ScenarioViewer = (props: ScenarioViewerProps) => {
         scPipelines,
         scPipelines,
         scAuthorizedTags,
         scAuthorizedTags,
         scDeletable,
         scDeletable,
+        scPromotable,
+        scSubmittable,
         isScenario,
         isScenario,
     ] = useMemo(() => {
     ] = useMemo(() => {
         let sc: ScenarioFull | undefined = undefined;
         let sc: ScenarioFull | undefined = undefined;
@@ -263,7 +271,7 @@ const ScenarioViewer = (props: ScenarioViewerProps) => {
                 // DO nothing
                 // DO nothing
             }
             }
         }
         }
-        return sc ? [...sc, true] : ["", false, "", "", "", [], [], [], [], false, false];
+        return sc ? [...sc, true] : ["", false, "", "", "", [], [], [], [], false, false, false, false];
     }, [props.scenario, props.defaultScenario]);
     }, [props.scenario, props.defaultScenario]);
 
 
     const active = useDynamicProperty(props.active, props.defaultActive, true);
     const active = useDynamicProperty(props.active, props.defaultActive, true);
@@ -507,9 +515,12 @@ const ScenarioViewer = (props: ScenarioViewerProps) => {
                                     <IconButton
                                     <IconButton
                                         sx={IconPaddingSx}
                                         sx={IconPaddingSx}
                                         onClick={submitScenario}
                                         onClick={submitScenario}
-                                        disabled={!isScenario || !active}
+                                        disabled={!isScenario || !active || !scSubmittable}
                                     >
                                     >
-                                        <Send fontSize="medium" color={disableColor("info", !isScenario || !active)} />
+                                        <Send
+                                            fontSize="medium"
+                                            color={disableColor("info", !isScenario || !active || !scSubmittable)}
+                                        />
                                     </IconButton>
                                     </IconButton>
                                 ) : null}
                                 ) : null}
                             </Grid>
                             </Grid>
@@ -844,7 +855,7 @@ const ScenarioViewer = (props: ScenarioViewerProps) => {
 
 
                                     {scPipelines &&
                                     {scPipelines &&
                                         scPipelines.map((item, index) => {
                                         scPipelines.map((item, index) => {
-                                            const [key, value] = item;
+                                            const [key, value, submittable] = item;
                                             return (
                                             return (
                                                 <PipelineRow
                                                 <PipelineRow
                                                     active={active}
                                                     active={active}
@@ -859,6 +870,7 @@ const ScenarioViewer = (props: ScenarioViewerProps) => {
                                                     onFocus={onFocus}
                                                     onFocus={onFocus}
                                                     focusName={focusName}
                                                     focusName={focusName}
                                                     setFocusName={setFocusName}
                                                     setFocusName={setFocusName}
+                                                    submittable={submittable}
                                                 />
                                                 />
                                             );
                                             );
                                         })}
                                         })}
@@ -882,7 +894,7 @@ const ScenarioViewer = (props: ScenarioViewerProps) => {
                                 <Button
                                 <Button
                                     variant="outlined"
                                     variant="outlined"
                                     color="primary"
                                     color="primary"
-                                    disabled={!active || !isScenario || scPrimary}
+                                    disabled={!active || !isScenario || scPrimary || !scPromotable}
                                     onClick={openPrimaryDialog}
                                     onClick={openPrimaryDialog}
                                 >
                                 >
                                     PROMOTE TO PRIMARY
                                     PROMOTE TO PRIMARY

+ 5 - 1
gui/src/utils.ts

@@ -22,8 +22,10 @@ export type ScenarioFull = [
     string,
     string,
     string[],
     string[],
     Array<[string, string]>,
     Array<[string, string]>,
-    Array<[string, string]>,
+    Array<[string, string, boolean]>,
     string[],
     string[],
+    boolean,
+    boolean,
     boolean
     boolean
 ];
 ];
 
 
@@ -38,6 +40,8 @@ export enum ScFProps {
     pipelines,
     pipelines,
     authorized_tags,
     authorized_tags,
     deletable,
     deletable,
+    promotable,
+    submittable,
 }
 }
 export const ScenarioFullLength = Object.keys(ScFProps).length / 2;
 export const ScenarioFullLength = Object.keys(ScFProps).length / 2;
 
 

+ 12 - 2
src/taipy/gui_core/GuiCoreLib.py

@@ -20,7 +20,15 @@ from taipy.config import Config
 from taipy.core import Cycle, DataNode, Pipeline, Scenario, create_scenario
 from taipy.core import Cycle, DataNode, Pipeline, Scenario, create_scenario
 from taipy.core import delete as core_delete
 from taipy.core import delete as core_delete
 from taipy.core import get as core_get
 from taipy.core import get as core_get
-from taipy.core import get_cycles_scenarios, get_data_nodes, get_scenarios, is_deletable, set_primary
+from taipy.core import (
+    get_cycles_scenarios,
+    get_data_nodes,
+    get_scenarios,
+    is_deletable,
+    is_promotable,
+    is_submittable,
+    set_primary,
+)
 from taipy.core import submit as core_submit
 from taipy.core import submit as core_submit
 from taipy.core.notification import CoreEventConsumerBase, EventEntityType
 from taipy.core.notification import CoreEventConsumerBase, EventEntityType
 from taipy.core.notification.event import Event
 from taipy.core.notification.event import Event
@@ -68,9 +76,11 @@ class _GuiCoreScenarioAdapter(_TaipyBase):
                     scenario.get_simple_label(),
                     scenario.get_simple_label(),
                     list(scenario.tags),
                     list(scenario.tags),
                     [(k, v) for k, v in scenario.properties.items() if k not in _GuiCoreScenarioAdapter.__INNER_PROPS],
                     [(k, v) for k, v in scenario.properties.items() if k not in _GuiCoreScenarioAdapter.__INNER_PROPS],
-                    [(p.id, p.get_simple_label()) for p in scenario.pipelines.values()],
+                    [(p.id, p.get_simple_label(), is_submittable(p)) for p in scenario.pipelines.values()],
                     list(scenario.properties.get("authorized_tags", set())),
                     list(scenario.properties.get("authorized_tags", set())),
                     is_deletable(scenario),  # deletable
                     is_deletable(scenario),  # deletable
+                    is_promotable(scenario),
+                    is_submittable(scenario),
                 ]
                 ]
         return None
         return None