Use redux hooks on admin components

This commit is contained in:
Grégoire Delattre 2020-04-03 16:13:35 +02:00
parent 6cfee5ea74
commit 81f497170f
4 changed files with 43 additions and 83 deletions

View File

@ -1,28 +1,20 @@
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import PropTypes from "prop-types"; import { useDispatch, useSelector } from "react-redux";
import { connect } from "react-redux";
import { getAdminModules } from "../../actions/admins"; import { getAdminModules } from "../../actions/admins";
import Modules from "../modules/modules"; import Modules from "../modules/modules";
const AdminModulesConnected = ({ modules, loading, getAdminModules }) => { export const AdminModules = () => {
const dispatch = useDispatch();
const loading = useSelector((state) =>
state.adminStore.get("fetchingModules")
);
const modules = useSelector((state) => state.adminStore.get("modules"));
useEffect(() => { useEffect(() => {
getAdminModules(); dispatch(getAdminModules());
}, [getAdminModules]); }, [dispatch]);
return <Modules modules={modules} isLoading={loading} />; return <Modules modules={modules} isLoading={loading} />;
}; };
AdminModulesConnected.propTypes = {
modules: PropTypes.object,
loading: PropTypes.bool,
getAdminModules: PropTypes.func.isRequired,
};
const mapStateToProps = (state) => ({
loading: state.adminStore.get("fetchingModules"),
modules: state.adminStore.get("modules"),
});
export const AdminModules = connect(mapStateToProps, { getAdminModules })(
AdminModulesConnected
);

View File

@ -1,15 +1,17 @@
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import PropTypes from "prop-types"; import { useDispatch, useSelector } from "react-redux";
import { connect } from "react-redux";
import { Stat } from "./stat"; import { Stat } from "./stat";
import { getStats } from "../../actions/admins"; import { getStats } from "../../actions/admins";
const StatsConnected = ({ stats, getStats }) => { export const Stats = () => {
const dispatch = useDispatch();
const stats = useSelector((state) => state.adminStore.get("stats"));
useEffect(() => { useEffect(() => {
getStats(); dispatch(getStats());
}, [getStats]); }, [dispatch]);
return ( return (
<div className="row d-flex flex-wrap"> <div className="row d-flex flex-wrap">
@ -34,13 +36,3 @@ const StatsConnected = ({ stats, getStats }) => {
</div> </div>
); );
}; };
StatsConnected.propTypes = {
stats: PropTypes.object,
getStats: PropTypes.func,
};
const mapStateToProps = (state) => ({
stats: state.adminStore.get("stats"),
});
export const Stats = connect(mapStateToProps, { getStats })(StatsConnected);

View File

@ -1,7 +1,6 @@
import React, { useState } from "react"; import React, { useState } from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import { connect } from "react-redux"; import { useSelector, useDispatch } from "react-redux";
import { List } from "immutable";
import { updateUser, deleteUser } from "../../actions/admins"; import { updateUser, deleteUser } from "../../actions/admins";
@ -11,7 +10,7 @@ import { PolochonSelect } from "../polochons/select";
import { FormModal } from "../forms/modal"; import { FormModal } from "../forms/modal";
import { FormInput } from "../forms/input"; import { FormInput } from "../forms/input";
const UserEditConnect = ({ export const UserEdit = ({
id, id,
name, name,
admin: initAdmin, admin: initAdmin,
@ -19,10 +18,10 @@ const UserEditConnect = ({
polochonToken, polochonToken,
polochonId: initPolochonId, polochonId: initPolochonId,
polochonActivated: initPolochonActivated, polochonActivated: initPolochonActivated,
updateUser,
deleteUser,
publicPolochons,
}) => { }) => {
const dispatch = useDispatch();
const publicPolochons = useSelector((state) => state.polochon.get("public"));
const [modal, setModal] = useState(false); const [modal, setModal] = useState(false);
const [admin, setAdmin] = useState(initAdmin); const [admin, setAdmin] = useState(initAdmin);
const [activated, setActivated] = useState(initActivated); const [activated, setActivated] = useState(initActivated);
@ -38,6 +37,7 @@ const UserEditConnect = ({
if (e) { if (e) {
e.preventDefault(); e.preventDefault();
} }
dispatch(
updateUser({ updateUser({
userId: id, userId: id,
polochonToken: token, polochonToken: token,
@ -46,7 +46,8 @@ const UserEditConnect = ({
polochonId, polochonId,
polochonActivated, polochonActivated,
password, password,
}); })
);
setModal(false); setModal(false);
}; };
@ -55,7 +56,7 @@ const UserEditConnect = ({
e.preventDefault(); e.preventDefault();
} }
if (confirmDelete) { if (confirmDelete) {
deleteUser(name); dispatch(deleteUser(name));
setModal(false); setModal(false);
} else { } else {
setConfirmDelete(true); setConfirmDelete(true);
@ -137,23 +138,12 @@ const UserEditConnect = ({
</span> </span>
); );
}; };
UserEditConnect.propTypes = { UserEdit.propTypes = {
id: PropTypes.string, id: PropTypes.string,
name: PropTypes.string, name: PropTypes.string,
activated: PropTypes.bool, activated: PropTypes.bool,
admin: PropTypes.bool, admin: PropTypes.bool,
updateUser: PropTypes.func,
deleteUser: PropTypes.func,
polochonToken: PropTypes.string, polochonToken: PropTypes.string,
polochonId: PropTypes.string, polochonId: PropTypes.string,
polochonActivated: PropTypes.bool, polochonActivated: PropTypes.bool,
publicPolochons: PropTypes.instanceOf(List),
}; };
const mapStateToProps = (state) => ({
publicPolochons: state.polochon.get("public"),
});
export const UserEdit = connect(mapStateToProps, { updateUser, deleteUser })(
UserEditConnect
);

View File

@ -1,23 +1,19 @@
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import PropTypes from "prop-types"; import { useDispatch, useSelector } from "react-redux";
import { List } from "immutable";
import { connect } from "react-redux";
import { User } from "./user"; import { User } from "./user";
import { getUsers } from "../../actions/admins"; import { getUsers } from "../../actions/admins";
import { getPolochons } from "../../actions/polochon"; import { getPolochons } from "../../actions/polochon";
const mapStateToProps = (state) => ({ export const UserList = () => {
users: state.adminStore.get("users"), const dispatch = useDispatch();
}); const users = useSelector((state) => state.adminStore.get("users"));
const mapDispatchToProps = { getUsers, getPolochons };
const UserListConnect = ({ users, getUsers, getPolochons }) => {
useEffect(() => { useEffect(() => {
getUsers(); dispatch(getUsers());
getPolochons(); dispatch(getPolochons());
}, [getUsers, getPolochons]); }, [dispatch]);
return ( return (
<div className="table-responsive my-2"> <div className="table-responsive my-2">
@ -54,13 +50,3 @@ const UserListConnect = ({ users, getUsers, getPolochons }) => {
</div> </div>
); );
}; };
UserListConnect.propTypes = {
getUsers: PropTypes.func,
getPolochons: PropTypes.func,
users: PropTypes.PropTypes.instanceOf(List),
};
export const UserList = connect(
mapStateToProps,
mapDispatchToProps
)(UserListConnect);