diff --git a/package.json b/package.json index 7ba5ad94447..1dfad9cf01e 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "angular": "1.8.2", "bootstrap-select": "1.13.18", "ngreact": "^0.5.0", - "query-string": "^6.1.0", "react-bootstrap": "^0.32.1", "use-deep-compare-effect": "^1.6.1" } diff --git a/webpack/components/Content/ContentTable.js b/webpack/components/Content/ContentTable.js index 502ce406e88..1ba87d28642 100644 --- a/webpack/components/Content/ContentTable.js +++ b/webpack/components/Content/ContentTable.js @@ -20,7 +20,6 @@ const ContentTable = ({ content, tableSchema, onPaginationChange }) => { loadingText={__('Loading')} > { + const { searchParam } = useUrlParams(); + const [searchQuery, setSearchQuery] = useState(searchParam || ''); + const { getModuleStreams } = props; - const queryParams = qs.parse(this.props.location.search); - this.state = { - searchQuery: queryParams.search || '', - }; - } - - componentDidMount() { - this.props.getModuleStreams({ - search: this.state.searchQuery, + useEffect(() => { + getModuleStreams({ + search: searchQuery, }); - } + }, [getModuleStreams, searchQuery]); - onPaginationChange = (pagination) => { - this.props.getModuleStreams({ + const onPaginationChange = (pagination) => { + props.getModuleStreams({ ...pagination, }); }; - onSearch = (search) => { - this.props.getModuleStreams({ search }); + const onSearch = (search) => { + props.getModuleStreams({ search }); }; - updateSearchQuery = (searchQuery) => { - this.setState({ searchQuery }); + const updateSearchQuery = (newSearchQuery) => { + setSearchQuery(newSearchQuery); }; - render() { - const { moduleStreams } = this.props; - return ( - - ); - } -} + const { moduleStreams } = props; + return ( + + ); +}; + ModuleStreamsPage.propTypes = { location: PropTypes.shape({ diff --git a/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js b/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js index 43464b5a7c9..0bf6bea45ca 100644 --- a/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +++ b/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js @@ -1,19 +1,21 @@ import React from 'react'; import { shallow } from 'enzyme'; import toJson from 'enzyme-to-json'; +import * as hooks from 'foremanReact/components/PF4/TableIndexPage/Table/TableHooks'; import ModuleStreamsPage from '../ModuleStreamsPage'; import GenericContentPage from '../../../components/Content/GenericContentPage'; describe('Module streams page', () => { it('should render and contain appropiate components', async () => { const moduleStreams = {}; - const mockLocation = { search: '' }; + jest.spyOn(hooks, 'useUrlParams').mockImplementation(() => ({ + searchParam: '', + })); const getModuleStreams = () => {}; const wrapper = shallow(); expect(toJson(wrapper)).toMatchSnapshot(); diff --git a/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamsTable.test.js.snap b/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamsTable.test.js.snap index d58ca06ded0..1b399a608c8 100644 --- a/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamsTable.test.js.snap +++ b/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamsTable.test.js.snap @@ -88,7 +88,6 @@ exports[`Module streams table should render and contain appropiate components 1` } itemCount={0} onPaginationChange={[Function]} - ouiaId="content-table-table" pagination={Object {}} rows={Array []} /> diff --git a/webpack/utils/__tests__/useParamsWithHash.test.js b/webpack/utils/__tests__/useParamsWithHash.test.js deleted file mode 100644 index 60f364aa179..00000000000 --- a/webpack/utils/__tests__/useParamsWithHash.test.js +++ /dev/null @@ -1,22 +0,0 @@ -import paramsFromHash from '../paramsFromHash'; - -test('can parse both hash and query params', () => { - const { hash, params: { foo } } = paramsFromHash('#filters?foo=bar'); - expect(hash).toBe('filters'); - expect(foo).toBe('bar'); -}); - -test('can parse just hash', () => { - const { hash } = paramsFromHash('#filters'); - expect(hash).toBe('filters'); -}); - -test('can parse just query params', () => { - const { params: { foo } } = paramsFromHash('?foo=bar'); - expect(foo).toBe('bar'); -}); - -test("won't error with blank string", () => { - const { hash } = paramsFromHash(''); - expect(hash).toBe(''); -}); diff --git a/webpack/utils/paramsFromHash.js b/webpack/utils/paramsFromHash.js deleted file mode 100644 index 00aaac50b7e..00000000000 --- a/webpack/utils/paramsFromHash.js +++ /dev/null @@ -1,16 +0,0 @@ -import qs from 'query-string'; - -/* - For when you have a hash with your params in the URL - pass in the the 'hash' object from react-router's useLocation(); - e.g. "mysite.com/foo#bar?baz=bop" - will return { hash: 'bar', params: { baz: "bop" }} -*/ -const paramsFromHash = (hash) => { - const [baseHash, queryParams = {}] = hash.split('?'); - const params = qs.parse(queryParams); - const trimmedHash = baseHash.replace('#', '').replace('/', ''); - return { hash: trimmedHash, params }; -}; - -export default paramsFromHash; diff --git a/webpack/utils/useUrlParams.js b/webpack/utils/useUrlParams.js deleted file mode 100644 index 2901acadc4e..00000000000 --- a/webpack/utils/useUrlParams.js +++ /dev/null @@ -1,14 +0,0 @@ -import qs from 'query-string'; -import { useLocation } from 'react-router-dom'; - -// Allows hash and params e.g. "/foo#bar?query=baz" -// returns { hash: "bar", params: { query: "baz" } } -const useUrlParamsWithHash = () => { - const { hash: fullParams } = useLocation(); - const [hash, queryParams = {}] = fullParams.split('?'); - const params = qs.parse(queryParams); - const trimmedhash = hash.replace('#', ''); - return { hash: trimmedhash, params }; -}; - -export default useUrlParamsWithHash;