EN · DE · RU · FR · ES

#2706: FilterListEntry.jsx

projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx React component, projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx 50 lines · 45 code · 0 comments · 5 blank
Purpose: React webapp: FilterListEntry.jsx. FilterListEntry.jsx is part of the ProjectForge open-source project management application.

Source (first 100 lines)

import classNames from 'classnames';
import PropTypes from 'prop-types';
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { addFilter } from '../../../../../actions/list/filter';
import styles from '../../ListPage.module.scss';

function FilterListEntry(
    {
        id,
        label,
        afterSelect,
    },
) {
    const isSelected = useSelector((state) => {
        const listState = state.list;
        return listState.categories[listState.currentCategory].filter.entries
            .filter(({ field }) => field === id).length !== 0;
    });
    const dispatch = useDispatch();
    const onFilterAdd = (filterId) => dispatch(addFilter(filterId));
    const handleSelect = () => {
        if (isSelected) {
            return;
        }

        onFilterAdd(id);
        afterSelect();
    };

    return (
        <li
            className={classNames(styles.filter, { [styles.isSelected]: isSelected })}
            onClick={handleSelect}
            role="option"
            aria-selected="false"
            onKeyPress={undefined}
        >
            {label}
        </li>
    );
}

FilterListEntry.propTypes = {
    id: PropTypes.string.isRequired,
    label: PropTypes.string.isRequired,
    afterSelect: PropTypes.func.isRequired,
};

export default FilterListEntry;

Git History

bf988bc6d Eliminate 43 npm vulnerabilities: react-scripts→Vite, ESLint 9, dependency cleanup, bugfixes
3685edd6c lift to react 18 wip
bbd81edc3 es-lint, new js versions.
f61b44dab fix advanced popper open on click
14dd20970 fix magic filters selection

bf988bc6d

Eliminate 43 npm vulnerabilities: react-scripts→Vite, ESLint 9, dependency cleanup, bugfixes
bf988bc6d14252863c2a7a54c409c947fb9feb7b
diff --git a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
index dd0c4df6a..eaef49cad 100644
--- a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
+++ b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
@@ -1,7 +1,7 @@
 import classNames from 'classnames';
 import PropTypes from 'prop-types';
 import React from 'react';
-import { connect } from 'react-redux';
+import { useSelector, useDispatch } from 'react-redux';
 import { addFilter } from '../../../../../actions/list/filter';
 import styles from '../../ListPage.module.scss';
 
@@ -10,10 +10,15 @@ function FilterListEntry(
         id,
         label,
         afterSelect,
-        onFilterAdd,
-        isSelected,
     },
 ) {
+    const isSelected = useSelector((state) => {
+        const listState = state.list;
+        return listState.categories[listState.currentCategory].filter.entries
+            .filter(({ field }) => field === id).length !== 0;
+    });
+    const dispatch = useDispatch();
+    const onFilterAdd = (filterId) => dispatch(addFilter(filterId));
     const handleSelect = () => {
         if (isSelected) {
             return;
@@ -40,17 +45,6 @@ FilterListEntry.propTypes = {
     id: PropTypes.string.isRequired,
     label: PropTypes.string.isRequired,
     afterSelect: PropTypes.func.isRequired,
-    onFilterAdd: PropTypes.func.isRequired,
-    isSelected: PropTypes.bool.isRequired,
 };
 
-const mapStateToProps = ({ list }, { id }) => ({
-    isSelected: list.categories[list.currentCategory].filter.entries
-        .filter(({ field }) => field === id).length !== 0,
-});
-
-const actions = (dispatch) => ({
-    onFilterAdd: (filterId) => dispatch(addFilter(filterId)),
-});
-
-export default connect(mapStateToProps, actions)(FilterListEntry);
+export default FilterListEntry;

3685edd6c

lift to react 18 wip
3685edd6c9f0dfd4582dbeb01c05491c254ccb84
diff --git a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
index 083dbcb3c..dd0c4df6a 100644
--- a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
+++ b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
@@ -44,8 +44,6 @@ FilterListEntry.propTypes = {
     isSelected: PropTypes.bool.isRequired,
 };
 
-FilterListEntry.defaultProps = {};
-
 const mapStateToProps = ({ list }, { id }) => ({
     isSelected: list.categories[list.currentCategory].filter.entries
         .filter(({ field }) => field === id).length !== 0,

bbd81edc3

es-lint, new js versions.
bbd81edc3f6b2fd975756421148651d4d75eaf33
diff --git a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
index 40c06a10b..083dbcb3c 100644
--- a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
+++ b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
@@ -51,8 +51,8 @@ const mapStateToProps = ({ list }, { id }) => ({
         .filter(({ field }) => field === id).length !== 0,
 });
 
-const actions = dispatch => ({
-    onFilterAdd: filterId => dispatch(addFilter(filterId)),
+const actions = (dispatch) => ({
+    onFilterAdd: (filterId) => dispatch(addFilter(filterId)),
 });
 
 export default connect(mapStateToProps, actions)(FilterListEntry);

f61b44dab

fix advanced popper open on click
f61b44daba7f1cd26fca31f1c51518b4b5d094f6
diff --git a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
index 2f6c7d2d4..40c06a10b 100644
--- a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
+++ b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
@@ -14,14 +14,13 @@ function FilterListEntry(
         isSelected,
     },
 ) {
-    const handleSelect = (event) => {
+    const handleSelect = () => {
         if (isSelected) {
             return;
         }
 
         onFilterAdd(id);
         afterSelect();
-        event.stopPropagation();
     };
 
     return (

14dd20970

fix magic filters selection
14dd2097028d615d52d80b0ed8f284fb254c8e51
diff --git a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
index d7fb0c974..2f6c7d2d4 100644
--- a/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
+++ b/projectforge-webapp/src/containers/page/list/searchFilter/magicFilter/FilterListEntry.jsx
@@ -14,14 +14,14 @@ function FilterListEntry(
         isSelected,
     },
 ) {
-    const handleSelect = () => {
+    const handleSelect = (event) => {
         if (isSelected) {
             return;
         }
 
         onFilterAdd(id);
-
         afterSelect();
+        event.stopPropagation();
     };
 
     return (