diff --git a/jsx/src/Store.js b/jsx/src/Store.js index f933fdfb..fd8b5833 100644 --- a/jsx/src/Store.js +++ b/jsx/src/Store.js @@ -1,55 +1,20 @@ export const initialState = { user_data: undefined, - user_page: { offset: 0, limit: window.api_page_limit || 100 }, - name_filter: "", + user_page: undefined, groups_data: undefined, - groups_page: { offset: 0, limit: window.api_page_limit || 100 }, + groups_page: undefined, limit: window.api_page_limit || 100, }; export const reducers = (state = initialState, action) => { switch (action.type) { // Updates the client user model data and stores the page - case "USER_OFFSET": - return Object.assign({}, state, { - user_page: Object.assign({}, state.user_page, { - offset: action.value.offset, - }), - }); - - case "USER_LIMIT": - return Object.assign({}, state, { - user_page: Object.assign({}, state.user_page, { - limit: action.value.limit, - }), - }); - - case "USER_NAME_FILTER": - // set offset to 0 if name filter changed, - // otherwise leave it alone - const newOffset = - action.value.name_filter !== state.name_filter ? 0 : state.name_filter; - return Object.assign({}, state, { - user_page: Object.assign({}, state.user_page, { - offset: newOffset, - }), - name_filter: action.value.name_filter, - }); - case "USER_PAGE": return Object.assign({}, state, { user_page: action.value.page, user_data: action.value.data, }); - // Updates the client group user model data and stores the page - case "GROUPS_OFFSET": - return Object.assign({}, state, { - groups_page: Object.assign({}, state.groups_page, { - offset: action.value.offset, - }), - }); - case "GROUPS_PAGE": return Object.assign({}, state, { groups_page: action.value.page, diff --git a/jsx/src/components/Groups/Groups.jsx b/jsx/src/components/Groups/Groups.jsx index e6332dbc..257caf6c 100644 --- a/jsx/src/components/Groups/Groups.jsx +++ b/jsx/src/components/Groups/Groups.jsx @@ -1,7 +1,6 @@ import React, { useEffect } from "react"; import { useSelector, useDispatch } from "react-redux"; import PropTypes from "prop-types"; -import { debounce } from "lodash"; import { Link } from "react-router-dom"; import { useSearchParams } from "react-router-dom-v5-compat"; @@ -12,49 +11,15 @@ const Groups = (props) => { groups_page = useSelector((state) => state.groups_page), dispatch = useDispatch(); - let [searchParams, setSearchParams] = useSearchParams(); - - var offset = parseInt(searchParams.get("offset", "0")) || 0; - var limit = parseInt(searchParams.get("limit", "0")) || window.api_page_limit; - - const setOffset = (offset) => { - console.log("setting offset", offset); - if (offset < 0) { - offset = 0; - } - setSearchParams((params) => { - params.set("offset", offset); - return params; - }); - dispatch({ - type: "GROUPS_OFFSET", - value: { - offset: offset, - }, - }); - }; - - const setLimit = (newLimit) => { - if (newLimit < 1) { - newLimit = 10; - } - setSearchParams((params) => { - params.set("limit", newLimit); - return params; - }); - dispatch({ - type: "GROUP_LIMIT", - value: { - limit: newLimit, - }, - }); - }; + const { setOffset, offset, setLimit, handleLimit, limit, setPagination } = + usePaginationParams(); var total = groups_page ? groups_page.total : undefined; var { updateGroups, history } = props; const dispatchPageUpdate = (data, page) => { + setPagination(page); dispatch({ type: "GROUPS_PAGE", value: { @@ -74,10 +39,6 @@ const Groups = (props) => { return
; } - const handleLimit = debounce(async (event) => { - setLimit(event.target.value); - }, 300); - return (