Skip to content

Commit

Permalink
chore: PR fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
brobro10000 committed Jul 11, 2023
1 parent 38b040b commit ebc8e12
Show file tree
Hide file tree
Showing 18 changed files with 95 additions and 113 deletions.
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"babel-polyfill": "6.26.0",
"classnames": "2.2.6",
"lodash.debounce": "4.0.8",
"lodash.snakecase": "^4.1.1",
"moment": "2.29.1",
"prop-types": "15.7.2",
"react": "16.14.0",
Expand Down
4 changes: 2 additions & 2 deletions src/Configuration/Provisioning/Dashboard.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { v4 as uuidv4 } from 'uuid';

import DashboardHeader from './DashboardHeader';
import DashboardToast from './DashboardToast';
import DashboardDatatable from './DashboardDatatable';
import DashboardDataTable from './DashboardDataTable';
import { toastText } from './data/constants';

// TODO: Create a new item header, search box and datatable
Expand All @@ -29,7 +29,7 @@ const Dashboard = () => {
return (
<>
<DashboardHeader />
<DashboardDatatable />
<DashboardDataTable />
{toasts.map(({ text, uuid }) => (<DashboardToast toastText={text} key={uuid} />))}
</>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
import {
DataTable,
TextFilter,
} from '@edx/paragon';
import React, {
useCallback, useMemo, useState,
} from 'react';
import { DataTable, TextFilter } from '@edx/paragon';
import React, { useCallback, useMemo, useState } from 'react';
import { useContextSelector } from 'use-context-selector';
import debounce from 'lodash.debounce';
import { logError } from '@edx/frontend-platform/logging';
Expand All @@ -13,9 +8,9 @@ import { MAX_PAGE_SIZE } from '../data/constants';
import { useDashboardContext } from '../data/hooks';
import DashboardTableActions from './DashboardTableActions';
import DashboardTableBadges from './DashboardTableBadges';
import { filterDatatableData, sortDatatableData, transformDatatableDate } from '../data/utils';
import { filterDatatableData, sortDataTableData, transformDatatableDate } from '../data/utils';

const DashboardDatatable = () => {
const DashboardDataTable = () => {
const { enterpriseSubsidies } = useContextSelector(DashboardContext, v => v[0]);
const { hydrateEnterpriseSubsidies } = useDashboardContext();
const [isLoading, setIsLoading] = useState(true);
Expand All @@ -25,10 +20,11 @@ const DashboardDatatable = () => {

const fetchData = useCallback(async (datatableProps) => {
setIsLoading(true);
console.log(datatableProps.sortBy);

Check warning on line 23 in src/Configuration/Provisioning/DashboardDataTable/DashboardDataTable.jsx

View workflow job for this annotation

GitHub Actions / tests (16)

Unexpected console statement
try {
await hydrateEnterpriseSubsidies({
pageIndex: datatableProps.pageIndex + 1,
sortBy: sortDatatableData(datatableProps),
sortBy: sortDataTableData(datatableProps),
filterBy: filterDatatableData(datatableProps),
});
} catch (e) {
Expand Down Expand Up @@ -111,4 +107,4 @@ const DashboardDatatable = () => {
);
};

export default DashboardDatatable;
export default DashboardDataTable;
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ const DashboardTableActions = ({ row }) => {
const { DJANGO_ADMIN_SUBSIDY_BASE_URL } = getConfig();
const history = useHistory();
const { HOME } = ROUTES.CONFIGURATION.SUB_DIRECTORY.PROVISIONING;
return [
getConfig().FEATURE_CONFIGURATION_EDIT_ENTERPRISE_PROVISION && (
const enabledActionArray = [{
action: (
<IconButton
key="edit-icon"
size="sm"
Expand All @@ -29,22 +29,28 @@ const DashboardTableActions = ({ row }) => {
data-testid={`Edit-${rowUuid}`}
/>
),
<Hyperlink
key="django-icon"
destination={`${DJANGO_ADMIN_SUBSIDY_BASE_URL}/admin/subsidy/subsidy/?uuid=${rowUuid}`}
target="_blank"
showLaunchIcon={false}
data-testid="django-admin-link"
>
<IconButton
size="sm"
src={DjangoShort}
iconAs={Icon}
alt="Django Admin Icon Button"
data-testid={`Django-Admin-Page-${rowUuid}`}
/>
</Hyperlink>,
];
enabled: getConfig().FEATURE_CONFIGURATION_EDIT_ENTERPRISE_PROVISION,
}, {
action: (
<Hyperlink
key="django-icon"
destination={`${DJANGO_ADMIN_SUBSIDY_BASE_URL}/admin/subsidy/subsidy/?uuid=${rowUuid}`}
target="_blank"
showLaunchIcon={false}
data-testid="django-admin-link"
>
<IconButton
size="sm"
src={DjangoShort}
iconAs={Icon}
alt="Django Admin Icon Button"
data-testid={`Django-Admin-Page-${rowUuid}`}
/>
</Hyperlink>),
enabled: true,
}].filter(interaction => interaction.enabled);

return enabledActionArray.map(interaction => interaction.action);
};

DashboardTableActions.propTypes = {
Expand Down
3 changes: 3 additions & 0 deletions src/Configuration/Provisioning/DashboardDataTable/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import DashboardDataTable from './DashboardDataTable';

export default DashboardDataTable;
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { renderWithRouter } from '@edx/frontend-enterprise-utils';
import { screen, waitFor } from '@testing-library/react';
import { camelCaseObject } from '@edx/frontend-platform';
import { DashboardContext, initialStateValue } from '../../../testData/Dashboard';
import DashboardDatatable from '../DashboardDatatable';
import DashboardDataTable from '../DashboardDataTable';
import { sampleDataTableData } from '../../../testData/constants';

// Mock the debounce function
Expand Down Expand Up @@ -32,7 +32,7 @@ const DashboardDatatableWrapper = ({
value = initialStateValue,
}) => (
<DashboardContext value={value}>
<DashboardDatatable />
<DashboardDataTable />
</DashboardContext>
);

Expand Down
3 changes: 0 additions & 3 deletions src/Configuration/Provisioning/DashboardDatatable/index.js

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ const ProvisioningFormCustomer = () => {
data-testid="customer-financial-identifier"
/>
{isOpportunityProduct && (
<Form.Control.Feedback>
{financialIdentifier.length}/{CUSTOMER.FINANCIAL_IDENTIFIER.MAX_LENGTH}
</Form.Control.Feedback>
<Form.Control.Feedback>
{financialIdentifier.length}/{CUSTOMER.FINANCIAL_IDENTIFIER.MAX_LENGTH}
</Form.Control.Feedback>
)}
{!isOpportunityProduct && (
<Form.Control.Feedback
Expand Down
2 changes: 1 addition & 1 deletion src/Configuration/Provisioning/data/hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export function useDashboardContext() {

// Retrieve Subsidy Data with sorted and filtered data
const subsidyData = await SubsidyApiService.getAllSubsidies({
paginatedURL: pageIndex,
pageIndex,
pageSize: MAX_PAGE_SIZE,
sortBy,
filteredData,
Expand Down
34 changes: 17 additions & 17 deletions src/Configuration/Provisioning/data/tests/utils.test.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
import { camelCaseObject } from '@edx/frontend-platform';
import {
createCatalogs,
createPolicy,
createSubsidy,
determineInvalidFields,
extractDefinedCatalogTitle,
filterByEnterpriseCustomerName,
filterDatatableData,
filterIndexOfCatalogQueryTitle,
getCamelCasedConfigAttribute,
hasValidPolicyAndSubidy,
lmsCustomerCatalog,
normalizeSubsidyDataTableData,
selectProvisioningContext,
sortDataTableData,
sortedCatalogQueries,
hasValidPolicyAndSubidy,
getCamelCasedConfigAttribute,
extractDefinedCatalogTitle,
normalizeSubsidyDataTableData,
filterIndexOfCatalogQueryTitle,
createSubsidy,
createPolicy,
determineInvalidFields,
transformPolicyData,
transformDatatableDate,
filterDatatableData,
sortDatatableData,
filterByEnterpriseCustomerName,
transformPolicyData,
} from '../utils';
import {
sampleCatalogQueries,
Expand Down Expand Up @@ -372,13 +372,13 @@ describe('filterDatatableData', () => {
describe('sortDatatableData', () => {
it('returns null if no data is passed', () => {
const output = null;
expect(sortDatatableData({ sortBy: {} })).toEqual(output);
expect(sortDataTableData({ sortBy: {} })).toEqual(output);
});
it('returns a sort by expirationDateTime if isActive is passed as the id', () => {
const output = 'expirationDatetime';

// desc is true
expect(sortDatatableData({
expect(sortDataTableData({
sortBy:
[{
id: 'isActive',
Expand All @@ -387,7 +387,7 @@ describe('sortDatatableData', () => {
})).toEqual(`-${output}`);

// desc is false
expect(sortDatatableData({
expect(sortDataTableData({
sortBy:
[{
id: 'isActive',
Expand All @@ -399,7 +399,7 @@ describe('sortDatatableData', () => {
const output = 'title';

// desc is true
expect(sortDatatableData({
expect(sortDataTableData({
sortBy:
[{
id: 'title',
Expand All @@ -408,7 +408,7 @@ describe('sortDatatableData', () => {
})).toEqual(`-${output}`);

// desc is false
expect(sortDatatableData({
expect(sortDataTableData({
sortBy:
[{
id: 'title',
Expand Down
26 changes: 12 additions & 14 deletions src/Configuration/Provisioning/data/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -246,10 +246,7 @@ export function getCamelCasedConfigAttribute(attribute) {
*/
export function normalizeSubsidyDataTableData({ fetchedSubsidyData, fetchedCustomerData }) {
if (fetchedSubsidyData.count === 0) {
return {
...fetchedSubsidyData,
results: [],
};
return fetchedSubsidyData;
}
const normalizedData = fetchedSubsidyData.results.map((item) => {
const {
Expand Down Expand Up @@ -453,10 +450,10 @@ export function generatePolicyName(formData, index) {
* @returns - Returns a date string in the format of MM-DD-YYYY
*/
export function transformDatatableDate(date) {
if (date) {
return new Date(date).toLocaleDateString().replace(/\//g, '-');
if (!date) {
return null;
}
return null;
return new Date(date).toLocaleDateString().replace(/\//g, '-');
}

/**
Expand All @@ -479,14 +476,15 @@ export function filterDatatableData({ filters }) {
* @param {Object} sortBy - The sort object from the datatable
* @returns - Returns a string that can be used to sort the API response
*/
export function sortDatatableData({ sortBy }) {
if (sortBy[0]?.id) {
if (sortBy[0].id === 'isActive') {
return sortBy[0].desc ? '-expirationDatetime' : 'expirationDatetime';
}
return sortBy[0].desc ? `-${sortBy[0].id}` : sortBy[0].id;
export function sortDataTableData({ sortBy }) {
const sortByObject = sortBy[0];
if (!sortByObject) {
return null;
}
return null;
if (sortByObject.id === 'isActive') {
return sortByObject.desc ? '-expirationDatetime' : 'expirationDatetime';
}
return sortByObject.desc ? `-${sortByObject.id}` : sortByObject.id;
}

/**
Expand Down
20 changes: 9 additions & 11 deletions src/data/services/SubsidyApiService.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
import { getConfig } from '@edx/frontend-platform';
import { getConfig, snakeCaseObject } from '@edx/frontend-platform';
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
import { snakeCaseWord } from '../../utils';
import snakeCase from 'lodash.snakecase';

class SubsidyApiService {
static apiClient = getAuthenticatedHttpClient;

static getAllSubsidies = ({
paginatedURL,
pageIndex,
pageSize,
sortBy,
filteredData,
}) => {
const subsidiesURL = `${getConfig().SUBSIDY_BASE_URL}/api/v1/subsidies/`;
let optionalUrlParams = '';

optionalUrlParams += pageSize ? `&page_size=${pageSize}` : '';
optionalUrlParams += sortBy ? `&sort_by=${snakeCaseWord(sortBy)}` : '';
Object.keys(filteredData).forEach((key) => {
optionalUrlParams += `&${snakeCaseWord(key)}=${filteredData[key]}`;
});
return SubsidyApiService.apiClient().get(`${subsidiesURL}?page=${paginatedURL}${optionalUrlParams}`);
const optionalUrlParams = new URLSearchParams(snakeCaseObject({
pageSize,
sortBy: sortBy ? snakeCase(sortBy) : 'uuid',
...filteredData,
})).toString();
return SubsidyApiService.apiClient().get(`${subsidiesURL}?page=${pageIndex}&${optionalUrlParams}`);
};

static postSubsidy = (
Expand Down
18 changes: 4 additions & 14 deletions src/utils/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,16 @@ export const isWholeDollarAmount = (value) => Boolean(value && value.match(DIGIT

// Opportunity Product must begin with 00k and be 18 alphanumeric characters long
export const isValidOpportunityProduct = value => {
if (!value) {
return false;
}
if (value?.length <= 2) {
return Boolean(value && value.match(/^0{1,2}$/));
}
if (value?.length === 3) {
return Boolean(value && value.match(/^0{2}k$/));
}
if (value?.length > 3 || value?.length < 19) {
return Boolean(value && value.match(/^0{2}k([0-9A-Za-z]{1,15})$/));
}
return false;
return Boolean(value && value.match(/^0{2}k([0-9A-Za-z]{1,15})$/));
};

export function sort(firstElement, secondElement, key, direction) {
Expand All @@ -73,16 +73,6 @@ export function titleCase(str) {
return str.toLowerCase().replace(/_/g, ' ').replace(/\b(\w)/g, s => s.toUpperCase());
}

/**
* Convert a string containing camelCase into snake_case.
* @param {String} word - word to be converted to snake_case
* @returns - snake_case word
*/
export function snakeCaseWord(word) {
const result = word.replace(/([A-Z])/g, ' $1');
return result.split(' ').join('_').toLowerCase();
}

/** Compare dates function for array.sort() */
export function sortedCompareDates(x, y, asc) {
const a = new Date(x);
Expand Down
Loading

0 comments on commit ebc8e12

Please sign in to comment.