Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 39 additions & 24 deletions src/Configuration/Customers/CustomerDataTable/CustomersPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import React, {
useMemo,
useState,
useCallback,
useEffect,
} from 'react';
import debounce from 'lodash.debounce';
import {
Expand All @@ -21,33 +20,43 @@ import LmsApiService from '../../../data/services/EnterpriseApiService';
import CustomerDetailRowSubComponent from './CustomerDetailSubComponent';

const CustomersPage = () => {
const [enterpriseList, setEnterpriseList] = useState([]);
const [enterpriseListTableData, setEnterpriseListTableData] = useState({
itemCount: 0,
pageCount: 0,
results: [],
});
const [isLoading, setIsLoading] = useState(true);

const fetchData = useCallback(
async () => {
try {
const { data } = await LmsApiService.fetchEnterpriseCustomerSupportTool();
const result = camelCaseObject(data);
setEnterpriseList(result);
} catch (error) {
logError(error);
} finally {
setIsLoading(false);
}
},
[],
);
const fetchData = useCallback(async (args) => {
try {
setIsLoading(true);
const options = {};
args.filters.forEach((filter) => {
const { id, value } = filter;
if (id === 'name') {
options.user_query = value;
}
});
options.page = args.pageIndex + 1;
const { data } = await LmsApiService.fetchEnterpriseCustomerSupportTool(options);
const result = camelCaseObject(data);
setEnterpriseListTableData({
itemCount: result.count,
pageCount: result.numPages,
results: result.results,
});
} catch (error) {
logError(error);
} finally {
setIsLoading(false);
}
}, []);

const debouncedFetchData = useMemo(() => debounce(
fetchData,
300,
), [fetchData]);

useEffect(() => {
debouncedFetchData();
}, [debouncedFetchData]);

return (
<Container className="mt-5">
<h1>Customers</h1>
Expand All @@ -56,22 +65,28 @@ const CustomersPage = () => {
isLoading={isLoading}
isExpandable
initialState={{
pageSize: 12,
pageSize: 10,
pageIndex: 0,
filters: [],
}}
renderRowSubComponent={({ row }) => <CustomerDetailRowSubComponent row={row} />}
isPaginated
manualPagination
isFilterable
manualFilters
defaultColumnValues={{ Filter: TextFilter }}
itemCount={enterpriseList?.length || 0}
data={enterpriseList || []}
fetchData={debouncedFetchData}
itemCount={enterpriseListTableData.itemCount}
pageCount={enterpriseListTableData.pageCount}
data={enterpriseListTableData.results || []}
columns={[
{
id: 'expander',
Header: DataTable.ExpandAll,
Cell: DataTable.ExpandRow,
},
{
id: 'customer details',
id: 'name',
Header: 'Customer details',
accessor: 'name',
Cell: CustomerDetailLink,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import { IntlProvider } from '@edx/frontend-platform/i18n';
import CustomersPage from '../CustomersPage';
import LmsApiService from '../../../../data/services/EnterpriseApiService';

const mockData = [{
const mockData = {
count: 1,
numPages: 1,
results: [{
name: 'Ubuntu',
slug: 'test-ubuntu',
uuid: 'test-enterprise-uuid',
Expand All @@ -24,7 +27,7 @@ const mockData = [{
active: true,
}],
enableGenerationOfApiCredentials: true,
}];
}]};

jest.mock('lodash.debounce', () => jest.fn((fn) => fn));
jest
Expand Down