EN · DE · RU · FR · ES

#2610: index.jsx

projectforge-webapp/src/components/base/dynamicLayout/index.jsx Composant React, projectforge-webapp/src/components/base/dynamicLayout/index.jsx 137 lignes · 117 code · 9 commentaires · 11 vides
Objectif : Application web React : index.jsx. index.jsx fait partie de l'application open-source de gestion de projet ProjectForge.

Source (100 premières lignes)

import PropTypes from 'prop-types';
import React from 'react';
import { buttonPropType, menuItemPropType } from '../../../utilities/propTypes';
import DynamicActionGroup from './action/DynamicActionGroup';
import renderLayout from './components/DynamicRenderer';
import {
    defaultValues as dynamicLayoutContextDefaultValues,
    DynamicLayoutContext,
} from './context';
import history from '../../../utilities/history';
import DynamicPageMenu from './DynamicPageMenu';
import { Button } from '../../design';

function DynamicLayout(
    {
        children,
        ui,
        callAction = dynamicLayoutContextDefaultValues.callAction,
        data = {},
        options = dynamicLayoutContextDefaultValues.options,
        setData = dynamicLayoutContextDefaultValues.setData,
        setVariables = dynamicLayoutContextDefaultValues.setVariables,
        validationErrors = [],
        variables = {},
        ...props
    },
) {
    // Déstructuration de la propriété 'ui'.
    const {
        actions,
        layout,
        layoutBelowActions,
        title,
        pageMenu,
        historyBackButton,
    } = ui;

    const {
        disableLayoutRendering,
        displayPageMenu,
        setBrowserTitle,
        showActionButtons,
    } = options;

    const [previousTitle, setPreviousTitle] = React.useState(document.title);

    // Définit le titre du document lorsqu'un titre est spécifié pour la page et que l'option
    // setBrowserTitle est true.
    React.useEffect(() => {
        if (setBrowserTitle && title) {
            setPreviousTitle(document.title);
            document.title = `ProjectForge - ${title}`;

            return () => {
                document.title = previousTitle;
            };
        }

        return () => undefined;
    }, [setBrowserTitle, title]);

    // Affiche le PageMenu si l'option displayPageMenu est true.
    const menu = React.useMemo(() => (
        displayPageMenu && <DynamicPageMenu menu={pageMenu} title={title} />
    ), [displayPageMenu, pageMenu, title]);

    // Affiche le groupe d'actions si des actions sont trouvées dans l'objet ui.
    const actionGroup = React.useMemo(() => (
        actions && showActionButtons && <DynamicActionGroup actions={actions} />
    ), [actions, showActionButtons]);

    return (
        <DynamicLayoutContext.Provider
            /* eslint-disable-next-line react/jsx-no-constructed-context-values */
            value={{
                ...dynamicLayoutContextDefaultValues,
                ui,
                options,
                renderLayout,
                callAction,
                data,
                setData,
                setVariables,
                validationErrors,
                variables,
                ...props,
            }}
        >
            {menu}
            {children}
            {!disableLayoutRendering && renderLayout(layout)}
            {actionGroup}
            {!disableLayoutRendering && renderLayout(layoutBelowActions)}
            {historyBackButton
            && (
                <Button
                    onClick={history.goBack}
                >
                    <span id="back">{historyBackButton}</span>
                </Button>

Historique Git

3685edd6c migration vers react 18 wip
1e8b61f8e Travail de migration en cours... dynamicLayout.layoutBelowActions (sous les boutons d'action dans les pages d'édition).
41bd5b6a8 Modifications de npm-updates-2 restaurées.
d2d755876 Fusion de la branche 'npm-updates-2' de github.com:micromata/projectforge dans develop
033629f77 correction des bugs eslint typescript

3685edd6c

migration vers react 18 wip
3685edd6c9f0dfd4582dbeb01c05491c254ccb84
diff --git a/projectforge-webapp/src/components/base/dynamicLayout/index.jsx b/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
index f6c1b3a6e..639813b94 100644
--- a/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
+++ b/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
@@ -15,7 +15,13 @@ function DynamicLayout(
     {
         children,
         ui,
-        options,
+        callAction = dynamicLayoutContextDefaultValues.callAction,
+        data = {},
+        options = dynamicLayoutContextDefaultValues.options,
+        setData = dynamicLayoutContextDefaultValues.setData,
+        setVariables = dynamicLayoutContextDefaultValues.setVariables,
+        validationErrors = [],
+        variables = {},
         ...props
     },
 ) {
@@ -71,6 +77,12 @@ function DynamicLayout(
                 ui,
                 options,
                 renderLayout,
+                callAction,
+                data,
+                setData,
+                setVariables,
+                validationErrors,
+                variables,
                 ...props,
             }}
         >
@@ -122,15 +134,4 @@ DynamicLayout.propTypes = {
     variables: PropTypes.shape({}),
 };
 
-DynamicLayout.defaultProps = {
-    callAction: dynamicLayoutContextDefaultValues.callAction,
-    children: undefined,
-    data: {},
-    options: dynamicLayoutContextDefaultValues.options,
-    setData: dynamicLayoutContextDefaultValues.setData,
-    setVariables: dynamicLayoutContextDefaultValues.setVariables,
-    validationErrors: [],
-    variables: {},
-};
-
 export default DynamicLayout;

1e8b61f8e

Travail de migration en cours... dynamicLayout.layoutBelowActions (sous les boutons d'action dans les pages d'édition).
1e8b61f8ee2af14cc3cf3c1ac5831acc0f10f763
diff --git a/projectforge-webapp/src/components/base/dynamicLayout/index.jsx b/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
index 8fc6de9a7..f6c1b3a6e 100644
--- a/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
+++ b/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
@@ -23,6 +23,7 @@ function DynamicLayout(
     const {
         actions,
         layout,
+        layoutBelowActions,
         title,
         pageMenu,
         historyBackButton,
@@ -77,6 +78,7 @@ function DynamicLayout(
             {children}
             {!disableLayoutRendering && renderLayout(layout)}
             {actionGroup}
+            {!disableLayoutRendering && renderLayout(layoutBelowActions)}
             {historyBackButton
             && (
                 <Button
@@ -94,6 +96,7 @@ DynamicLayout.propTypes = {
     ui: PropTypes.shape({
         actions: PropTypes.arrayOf(buttonPropType),
         layout: PropTypes.instanceOf(Array),
+        layoutBelowActions: PropTypes.instanceOf(Array),
         title: PropTypes.string,
         pageMenu: PropTypes.arrayOf(menuItemPropType),
         historyBackButton: PropTypes.string,

41bd5b6a8

Modifications de npm-updates-2 restaurées.
41bd5b6a8fab788ef726e4c8b22d3946bb6f7b22
diff --git a/projectforge-webapp/src/components/base/dynamicLayout/index.jsx b/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
index ee7c12b91..8fc6de9a7 100644
--- a/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
+++ b/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
@@ -62,14 +62,6 @@ function DynamicLayout(
         actions && showActionButtons && <DynamicActionGroup actions={actions} />
     ), [actions, showActionButtons]);
 
-    const dynamicLayoutContextValue = React.useMemo(() => ({
-        ...dynamicLayoutContextDefaultValues,
-        ui,
-        options,
-        renderLayout,
-        ...props,
-    }), [ui, options, renderLayout, props]);
-
     return (
         <DynamicLayoutContext.Provider
             /* eslint-disable-next-line react/jsx-no-constructed-context-values */

d2d755876

Fusion de la branche 'npm-updates-2' de github.com:micromata/projectforge dans develop

033629f77

correction des bugs eslint typescript
033629f77d479c13decda21b11734d8e97a658cd
diff --git a/projectforge-webapp/src/components/base/dynamicLayout/index.jsx b/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
index 003619862..8fc6de9a7 100644
--- a/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
+++ b/projectforge-webapp/src/components/base/dynamicLayout/index.jsx
@@ -49,8 +49,7 @@ function DynamicLayout(
             };
         }
 
-        return () => {
-        };
+        return () => undefined;
     }, [setBrowserTitle, title]);
 
     // Render PageMenu if the option displayPageMenu is true.