Skip to content

Commit 0e302c7

Browse files
iterations
1 parent ef2efeb commit 0e302c7

File tree

7 files changed

+136
-49
lines changed

7 files changed

+136
-49
lines changed

src/Configuration/Provisioning/ProvisioningForm/CatalogCuration/CatalogCurationSearch.jsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import { Configure, InstantSearch } from 'react-instantsearch-dom';
22
import { SearchData, SearchHeader } from '@edx/frontend-enterprise-catalog-search';
33
import { useContextSelector } from 'use-context-selector';
44

5-
import { Button } from '@edx/paragon';
65
import { useEffect, useState } from 'react';
76
import { configuration } from './data/config';
87
import { CatalogCurationContext } from './CatalogCurationContext';
9-
import { MAX_PAGE_SIZE } from './data/constants';
108
import CatalogCurationDateSelection from './CatalogCurationDateSelection';
119
import CatalogCurationSelectContentDataTable from './CatalogCurationSelectContentDataTable';
1210
import useCatalogCurationContext from './data/hooks';
@@ -27,18 +25,17 @@ const CatalogCurationSearch = () => {
2725
// check to see if one date is not null
2826
if (startDate !== '' || endDate !== '') {
2927
setCurrentSearchFilter({ currentSearchFilter: { content_type: 'course' } });
30-
let placeholderString = '';
31-
for (let [key, value] of Object.entries(currentSearchFilter)) {
28+
let placeholderString = ``;
29+
for (let [key, value] of Object.entries({ content_type: 'course' })) {
3230
placeholderString = placeholderString + ` AND ${key}:${value}`;
3331
};
3432
setCurrentSearchFilterValue(defaultSearchFilter + placeholderString);
35-
// set to have contentType = course
33+
// set to have contentType = course
3634
} else {
37-
setCurrentSearchFilter({});
35+
setCurrentSearchFilter({ currentSearchFilter: {} });
3836
setCurrentSearchFilterValue(defaultSearchFilter);
3937
}
4038
}, [startDate, endDate]);
41-
4239
return (
4340
<SearchData>
4441
<InstantSearch
@@ -47,7 +44,7 @@ const CatalogCurationSearch = () => {
4744
>
4845
<Configure
4946
filters={currentSearchFilterValue}
50-
hitsPerPage={MAX_PAGE_SIZE}
47+
hitsPerPage={500}
5148
/>
5249
<SearchHeader variant="default" />
5350
<CatalogCurationDateSelection />

src/Configuration/Provisioning/ProvisioningForm/CatalogCuration/CatalogCurationSelectContentDataTable.jsx

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
} from '@edx/paragon';
55
import { connectStateResults } from 'react-instantsearch-dom';
66
import PropTypes from 'prop-types';
7-
import { useState, useMemo } from 'react';
7+
import { useState, useMemo, useEffect } from 'react';
88
import { camelCaseObject } from '@edx/frontend-platform';
99
import { useContextSelector } from 'use-context-selector';
1010
import { FOOTER_TEXT_BY_CONTENT_TYPE } from './data/utils';
@@ -53,21 +53,41 @@ const BaseHighlightStepperSelectContentDataTable = ({
5353
const [currentView, setCurrentView] = useState(defaultActiveStateValue);
5454
// TODO: searchResults contain all information before its populated into the datatable (do manual filtering here)
5555
const { startDate, endDate } = useContextSelector(CatalogCurationContext, v => v[0]);
56-
const filteredHits = searchResults?.hits.filter((hit) => {
57-
const courseStartDate = hit.advertised_course_run?.start ? new Date(hit.advertised_course_run.start) : null;
58-
const courseEndDate = hit.advertised_course_run?.end ? new Date(hit.advertised_course_run.end) : null;
56+
const [filteredHits, setFilteredHits] = useState([]);
57+
const page_size = 12;
58+
const page_index = searchResults?.page || 0;
59+
let current_index = 1;
60+
const window_start_index = (page_index * page_size) + 1;
5961

60-
if (startDate && courseStartDate < new Date(startDate)) {
61-
return false;
62-
}
62+
useEffect(() => {
63+
setFilteredHits(searchResults?.hits.filter((hit) => {
64+
console.log("filtering results");
65+
if (current_index < window_start_index + page_size) {
66+
const courseStartDate = hit.advertised_course_run?.start ? new Date(hit.advertised_course_run.start) : null;
67+
const courseEndDate = hit.advertised_course_run?.end ? new Date(hit.advertised_course_run.end) : null;
68+
if (startDate && courseStartDate < new Date(startDate)) {
69+
return false;
70+
}
6371

64-
if (endDate && courseEndDate > new Date(endDate)) {
65-
return false;
66-
}
67-
return true;
68-
});
72+
if (endDate && courseEndDate > new Date(endDate)) {
73+
return false;
74+
}
6975

70-
const tableData = useMemo(() => camelCaseObject(filteredHits || []), [searchResults]);
76+
console.log("window_start_index", window_start_index);
77+
if (current_index >= window_start_index && current_index < window_start_index + page_size || (!startDate && !endDate)) {
78+
console.log("adding to filtered hits", current_index);
79+
current_index += 1;
80+
return true;
81+
}
82+
current_index += 1;
83+
return false;
84+
} else {
85+
return false;
86+
}
87+
}));
88+
}, [searchResults, startDate, endDate]);
89+
90+
const tableData = useMemo(() => camelCaseObject(filteredHits || []), [filteredHits, searchResults?.hits]);
7191
const searchResultsItemCount = searchResults?.nbHits || 0;
7292
const searchResultsPageCount = searchResults?.nbPages || 0;
7393
return (
@@ -85,7 +105,7 @@ const BaseHighlightStepperSelectContentDataTable = ({
85105
manualPagination
86106
initialState={{
87107
pageIndex: 0,
88-
pageSize: MAX_PAGE_SIZE,
108+
pageSize: 12,
89109
selectedRowIds,
90110
}}
91111
pageCount={searchResultsPageCount}
@@ -128,7 +148,7 @@ const BaseHighlightStepperSelectContentDataTable = ({
128148
CardComponent={ContentSearchResultCard}
129149
/>
130150
)}
131-
{currentView === 'list' && <DataTable.Table /> }
151+
{currentView === 'list' && <DataTable.Table />}
132152
<DataTable.EmptyTable content="No results found" />
133153
<DataTable.TableFooter>
134154
<SelectContentSearchPagination />

src/Configuration/Provisioning/ProvisioningForm/CustomCatalog/ProvisioningCatalogCurationContainer.jsx

Lines changed: 73 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,94 @@ import { Button } from '@edx/paragon';
55
import EnterpriseCatalogApiService from '../../../../data/services/EnterpriseCatalogApiService';
66
import { selectProvisioningContext } from '../../data/utils';
77
import { logError } from '@edx/frontend-platform/logging';
8+
import { useContextSelector } from 'use-context-selector';
9+
import { CatalogCurationContext } from '../CatalogCuration/CatalogCurationContext';
10+
import { useEffect, useState } from 'react';
11+
import { Form } from '@edx/paragon';
12+
import PROVISIONING_PAGE_TEXT from '../../data/constants';
813

914

1015
const ProvisioningCatalogCurationContainer = () => {
16+
const { CUSTOM_CATALOG } = PROVISIONING_PAGE_TEXT.FORM;
17+
const { startDate, endDate } = useContextSelector(CatalogCurationContext, v => v[0]);
18+
let searchParams = new URLSearchParams(window.location.search);
19+
20+
const [catalogQuery, setCatalogQuery] = useState({});
21+
useEffect(() => {
22+
let baseQuery = {
23+
"content_type": [
24+
"learnerpathway",
25+
"course"
26+
],
27+
"availability": [
28+
"Current",
29+
"Starting Soon",
30+
"Upcoming"
31+
],
32+
"partner": "edx",
33+
"level_type": [
34+
"Introductory",
35+
"Intermediate",
36+
"Advanced"
37+
],
38+
"status": [
39+
"published",
40+
"active"
41+
],
42+
"org__exclude": [
43+
"StanfordOnline",
44+
"PennX"
45+
]
46+
};
47+
if (startDate !== '') {
48+
baseQuery['start'] = startDate;
49+
}
50+
if (endDate !== '') {
51+
baseQuery['end'] = endDate;
52+
}
53+
if (searchParams) {
54+
searchParams.forEach((value, key) => {
55+
baseQuery[key] = value;
56+
});
57+
}
58+
setCatalogQuery(baseQuery)
59+
}, [startDate, endDate, window.location.search]);
60+
61+
// const [catalogQueryContentFilter, setCatalogQueryContentFilter] = useState(
62+
63+
// );
64+
1165
const [formData] = selectProvisioningContext('formData');
1266
const handleClick = () => {
1367
EnterpriseCatalogApiService.generateNewCustomerCatalog(
1468
formData.enterpriseUUID,
15-
{ 'data': 'foobar' },
69+
catalogQuery,
1670
)
1771
.then((response) => {
1872
console.log(response);
1973
})
2074
.catch((err) => {
2175
console.log("sad");
2276
});
23-
console.log("wassup");
2477
};
25-
26-
return (<CatalogCurationContextProvider>
27-
<CatalogCurationSearch />
28-
<Button
29-
onClick={handleClick}
30-
>
31-
Submit Catalog
32-
</Button>
33-
</CatalogCurationContextProvider>)
78+
return (
79+
<>
80+
<CatalogCurationSearch />
81+
<Form.Control
82+
className="mb-1 bg-gray-600"
83+
as="textarea"
84+
style={{ height: '200px' }}
85+
floatingLabel={CUSTOM_CATALOG.OPTIONS.queryPreview}
86+
value={JSON.stringify(catalogQuery, null, 4)}
87+
disabled
88+
/>
89+
<Button
90+
onClick={handleClick}
91+
>
92+
Submit Catalog
93+
</Button>
94+
</>
95+
)
3496
};
3597

3698
export default ProvisioningCatalogCurationContainer;

src/Configuration/Provisioning/ProvisioningForm/CustomCatalog/ProvisioningFormCustomCatalog.jsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import ProvisioningFormEnterpriseCustomerCatalog from './ProvisioningFormEnterpr
77
import { indexOnlyPropType, selectProvisioningContext } from '../../data/utils';
88
import ProvisioningFormCustomCatalogExecEdBoolean from './ProvisioningFormCustomCatalogExecEdBoolean';
99
import ProvisioningCatalogCurationContainer from './ProvisioningCatalogCurationContainer';
10+
import CatalogCurationContextProvider from '../CatalogCuration/CatalogCurationContext';
1011

1112
const ProvisioningFormCustomCatalog = ({ index }) => {
1213
const [formData] = selectProvisioningContext('formData');
@@ -33,19 +34,21 @@ const ProvisioningFormCustomCatalog = ({ index }) => {
3334
}
3435
if (customerCatalogBoolean === false) {
3536
return (
36-
<article className="mt-4.5">
37-
<ProvisioningFormDefineCustomCatalogHeader
38-
index={index}
39-
handleShowCatalogCurationButton={handleShowCatalogCurationButton}
40-
showCatalogCuration={showCatalogCuration}
41-
/>
42-
{showCatalogCuration && <ProvisioningCatalogCurationContainer />}
43-
{!showCatalogCuration && <ProvisioningFormCustomCatalogDropdown />}
44-
{!showCatalogCuration && policyData.catalogQuery.title && <ProvisioningFormCustomCatalogTitle />}
45-
{!showCatalogCuration && policyData.catalogQuery.contentFilter && <ProvisioningFormCustomCatalogTextArea />}
46-
{!showCatalogCuration && (policyData.catalogQuery.includeExecEd2UCourses !== undefined)
47-
&& <ProvisioningFormCustomCatalogExecEdBoolean />}
48-
</article>
37+
<CatalogCurationContextProvider>
38+
<article className="mt-4.5">
39+
<ProvisioningFormDefineCustomCatalogHeader
40+
index={index}
41+
handleShowCatalogCurationButton={handleShowCatalogCurationButton}
42+
showCatalogCuration={showCatalogCuration}
43+
/>
44+
{showCatalogCuration && <ProvisioningCatalogCurationContainer />}
45+
{!showCatalogCuration && <ProvisioningFormCustomCatalogDropdown />}
46+
{!showCatalogCuration && policyData.catalogQuery.title && <ProvisioningFormCustomCatalogTitle />}
47+
{!showCatalogCuration && policyData.catalogQuery.contentFilter && <ProvisioningFormCustomCatalogTextArea />}
48+
{!showCatalogCuration && (policyData.catalogQuery.includeExecEd2UCourses !== undefined)
49+
&& <ProvisioningFormCustomCatalogExecEdBoolean />}
50+
</article>
51+
</CatalogCurationContextProvider>
4952
);
5053
}
5154
return null;

src/Configuration/Provisioning/data/constants.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ const PROVISIONING_PAGE_TEXT = {
101101
},
102102
catalogTitle: 'Catalog title',
103103
contentFilter: 'Content filter',
104+
queryPreview: 'What your query is looking like now:',
104105
includeExecEd2UCourses: 'Includes Executive Education courses',
105106
courseModes: 'Enabled course modes',
106107
},

src/data/services/EnterpriseCatalogApiService

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import qs from 'query-string';
21

32
import { getHttpClient, getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
43

@@ -7,7 +6,8 @@ class EnterpriseCatalogApiService {
76

87
static apiClient = getAuthenticatedHttpClient;
98

10-
static generateNewCustomerCatalog(enterprise_uuid, options, query) {
9+
static generateNewCustomerCatalog(enterprise_uuid, query) {
10+
console.log("hello!", query);
1111
const enterpriseCatalogQueryUrl = `${EnterpriseCatalogApiService.enterpriseCatalogServiceApiUrl
1212
}/enterprise-customer/${enterprise_uuid}/catalog_query`;
1313
return EnterpriseCatalogApiService.apiClient().post(enterpriseCatalogQueryUrl, query);

src/overrides.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,4 +196,8 @@ div.fe__searchfield>div.mb-4 {
196196

197197
div.fe__searchbox-col--default>div.mb-4 {
198198
display: none !important;
199+
}
200+
201+
textarea.has-value {
202+
background-color: #c2c3c4 !important;
199203
}

0 commit comments

Comments
 (0)