Compare commits

..

1 Commits

Author SHA1 Message Date
Adolfo R. Brandes
3e76a4e606 feat: use frontend-plugin-framework to provide a FooterSlot (#397)
Co-authored-by: Brian Smith <bsmith@axim.org>
2024-06-06 15:05:25 -03:00
26 changed files with 7808 additions and 3866 deletions

33
.github/renovate.json vendored
View File

@@ -1,33 +0,0 @@
{
"extends": [
"config:base",
"schedule:weekly",
":automergeLinters",
":automergeMinor",
":automergeTesters",
":enableVulnerabilityAlerts",
":rebaseStalePrs",
":semanticCommits",
":updateNotScheduled"
],
"packageRules": [
{
"matchDepTypes": [
"devDependencies"
],
"matchUpdateTypes": [
"lockFileMaintenance",
"minor",
"patch",
"pin"
],
"automerge": true
},
{
"matchPackagePatterns": ["@edx", "@openedx"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
}
],
"timezone": "America/New_York"
}

View File

@@ -10,19 +10,19 @@ on:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node: [18, 20]
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Nodejs Env
run: echo "NODE_VER=`cat .nvmrc`" >> $GITHUB_ENV
- name: Setup Nodejs
uses: actions/setup-node@v4
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
node-version: ${{ env.NODE_VER }}
- name: Install dependencies
run: npm ci
@@ -43,10 +43,7 @@ jobs:
run: npm run build
- name: Run Coverage
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
uses: codecov/codecov-action@v2
- name: Send failure notification
if: ${{ failure() }}

View File

@@ -10,4 +10,4 @@ on:
jobs:
version-check:
uses: openedx/.github/.github/workflows/lockfileversion-check-v3.yml@master
uses: openedx/.github/.github/workflows/lockfile-check.yml@master

View File

@@ -7,7 +7,7 @@ on:
jobs:
release:
name: Release
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
steps:
- name: Checkout

2
.nvmrc
View File

@@ -1 +1 @@
20
18.15

View File

@@ -1,13 +0,0 @@
# This file records information about this repo. Its use is described in OEP-55:
# https://open-edx-proposals.readthedocs.io/en/latest/processes/oep-0055-proc-project-maintainers.html
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: "frontend-app-gradebook"
description: "The frontend (MFE) for Open edX Gradebook"
annotations:
openedx.org/arch-interest-groups: ""
spec:
owner: user:farhaanbukhsh
type: 'website'
lifecycle: 'experimental'

11454
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -29,11 +29,11 @@
],
"dependencies": {
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
"@edx/frontend-component-header": "^5.6.0",
"@edx/frontend-platform": "8.0.0",
"@edx/frontend-component-header": "^5.0.2",
"@edx/frontend-platform": "^7.1.0",
"@edx/openedx-atlas": "^0.6.0",
"@edx/react-unit-test-utils": "^3.0.0",
"@openedx/frontend-plugin-framework": "^1.2.1",
"@edx/react-unit-test-utils": "^2.0.0",
"@openedx/frontend-plugin-framework": "^1.1.2",
"@openedx/frontend-slot-footer": "^1.0.2",
"@openedx/paragon": "^22.1.1",
"@edx/reactifex": "^2.1.1",
@@ -68,7 +68,7 @@
},
"devDependencies": {
"@edx/browserslist-config": "^1.1.1",
"@openedx/frontend-build": "14.0.3",
"@openedx/frontend-build": "^13.0.28",
"@testing-library/react": "12.1.5",
"axios": "0.21.2",
"axios-mock-adapter": "^1.17.0",
@@ -76,7 +76,7 @@
"fetch-mock": "^6.5.2",
"husky": "2.7.0",
"identity-obj-proxy": "^3.0.0",
"jest": "^29.7.0",
"jest": "^26.6.3",
"react-dev-utils": "^12.0.1",
"react-test-renderer": "17.0.2",
"reactifex": "1.1.1",

View File

@@ -1,8 +1,8 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`HistoryTable component snapshot history table data (from bulkManagementHistory.map(this.formatHistoryRow) snapshot: maps resultsSummay to ResultsSummary, wraps filename and user, forwards the rest 1`] = `
[
{
Array [
Object {
"filename": <span
className="wrap-text-in-cell"
>
@@ -20,7 +20,7 @@ exports[`HistoryTable component snapshot history table data (from bulkManagement
Eifel
</span>,
},
{
Object {
"filename": <span
className="wrap-text-in-cell"
>
@@ -45,26 +45,26 @@ exports[`HistoryTable component snapshot snapshot - loads formatted table 1`] =
<DataTable
className="table-striped"
columns={
[
{
Array [
Object {
"Header": "Gradebook",
"accessor": "filename",
"columnSortable": false,
"width": "col-5",
},
{
Object {
"Header": "Download Summary",
"accessor": "resultsSummary",
"columnSortable": false,
"width": "col",
},
{
Object {
"Header": "Who",
"accessor": "user",
"columnSortable": false,
"width": "col-1",
},
{
Object {
"Header": "When",
"accessor": "timeUploaded",
"columnSortable": false,
@@ -73,8 +73,8 @@ exports[`HistoryTable component snapshot snapshot - loads formatted table 1`] =
]
}
data={
[
{
Array [
Object {
"filename": <span
className="wrap-text-in-cell"
>
@@ -92,7 +92,7 @@ exports[`HistoryTable component snapshot snapshot - loads formatted table 1`] =
Eifel
</span>,
},
{
Object {
"filename": <span
className="wrap-text-in-cell"
>

View File

@@ -4,8 +4,8 @@ exports[`ResultsSummary component snapshot - safe hyperlink with bulkGradesUrl w
<Hyperlink
destination="www.edx.org"
href={
{
"url": {
Object {
"url": Object {
"rowId": 42,
},
}

View File

@@ -10,7 +10,7 @@ exports[`AssignmentFilter component render snapshot 1`] = `
label="Assignment"
onChange={[MockFunction]}
options={
[
Array [
<option
value=""
>

View File

@@ -10,7 +10,7 @@ exports[`AssignmentFilterType component render snapshot 1`] = `
label="Assignment Types"
onChange={[MockFunction]}
options={
[
Array [
<option
value=""
>

View File

@@ -7,7 +7,7 @@ exports[`StudentGroupsFilter component render snapshot 1`] = `
label="Tracks"
onChange={[MockFunction]}
options={
[
Array [
<option
value="Track-All"
>
@@ -43,7 +43,7 @@ exports[`StudentGroupsFilter component render snapshot 1`] = `
label="Cohorts"
onChange={[MockFunction]}
options={
[
Array [
<option
value="Cohort-All"
>

View File

@@ -6,7 +6,7 @@ exports[`BulkManagementControls render snapshot - show - network and import butt
>
<NetworkButton
label={
{
Object {
"defaultMessage": "Download Grades",
"description": "A labeled button that allows an admin user to download course grades all at once (in bulk).",
"id": "gradebook.GradesView.BulkManagementControls.bulkManagementLabel",

View File

@@ -4,22 +4,22 @@ exports[`OverrideTable component render snapshot 1`] = `
<DataTable
columns="test-columns"
data={
[
{
Array [
Object {
"test": "data",
},
{
Object {
"andOther": "test-data",
},
{
Object {
"adjustedGrade": <AdjustedGradeInput />,
"date": {
"date": Object {
"formatted": 2000-01-01T00:00:00.000Z,
},
"reason": <ReasonInput />,
},
]
}
itemCount={3}
itemCount={2}
/>
`;

View File

@@ -20,20 +20,18 @@ export const OverrideTable = () => {
if (hide) { return null; }
const tableData = [
...data,
{
adjustedGrade: <AdjustedGradeInput />,
date: formatDateForDisplay(new Date()),
reason: <ReasonInput />,
},
];
return (
<DataTable
columns={columns}
data={tableData}
itemCount={tableData.length}
data={[
...data,
{
adjustedGrade: <AdjustedGradeInput />,
date: formatDateForDisplay(new Date()),
reason: <ReasonInput />,
},
]}
itemCount={data.length}
/>
);
};

View File

@@ -19,8 +19,8 @@ exports[`FilterBadge render do not hide value snapshot 1`] = `
aria-label="close"
className="btn-info"
onClick={
{
"handleClose": [
Object {
"handleClose": Array [
"some",
"filters",
],
@@ -55,8 +55,8 @@ exports[`FilterBadge render hide Value snapshot 1`] = `
aria-label="close"
className="btn-info"
onClick={
{
"handleClose": [
Object {
"handleClose": Array [
"some",
"filters",
],

View File

@@ -3,14 +3,14 @@
exports[`FilteredUsersLabel component render snapshot 1`] = `
<format-message-function
message={
{
Object {
"defaultMessage": "Showing {filteredUsers} of {totalUsers} total learners",
"description": "Users visibility label",
"id": "gradebook.GradesTab.usersVisibilityLabel",
}
}
values={
{
Object {
"filteredUsers": <BoldText
text={100}
/>,

View File

@@ -28,32 +28,32 @@ exports[`Gradebook Table Fields Username with external_user_key snapshot 1`] = `
`;
exports[`Gradebook Table Fields Username with external_user_key wraps external user key and username 1`] = `
{
"children": [
{
"children": [
{
"children": [
Object {
"children": Array [
Object {
"children": Array [
Object {
"children": Array [
"MyNameFromHere",
],
"props": {},
"props": Object {},
"type": "div",
},
{
"children": [
Object {
"children": Array [
"My name from another land",
],
"props": {
"props": Object {
"className": "student-key",
},
"type": "div",
},
],
"props": {},
"props": Object {},
"type": "div",
},
],
"props": {
"props": Object {
"className": "wrap-text-in-cell",
},
"type": "span",

View File

@@ -32,7 +32,7 @@ exports[`LabelReplacements TotalGradeLabelReplacement snapshot 1`] = `
}
placement="left"
trigger={
[
Array [
"hover",
"focus",
]
@@ -84,7 +84,7 @@ exports[`snapshot left to right overlay placement 1`] = `
}
placement="right"
trigger={
[
Array [
"hover",
"focus",
]
@@ -118,7 +118,7 @@ exports[`snapshot right to left overlay placement 1`] = `
}
placement="left"
trigger={
[
Array [
"hover",
"focus",
]

View File

@@ -7,13 +7,13 @@ exports[`GradebookTable snapshot 1`] = `
<DataTable
RowStatusComponent={[MockFunction hooks.nullMethod]}
columns={
[
Array [
"some",
"columns",
]
}
data={
[
Array [
"some",
"data",
]

View File

@@ -41,7 +41,7 @@ exports[`ImportGradesButton component render snapshot 1`] = `
className="import-grades-btn"
import={true}
label={
{
Object {
"defaultMessage": "Import Grades",
"description": "A labeled button to import grades in the BulkManagement Tab File Upload Form",
"id": "gradebook.GradesView.importGradesBtnText",

View File

@@ -17,7 +17,7 @@ exports[`InterventionsReport component output snapshot 1`] = `
</div>
<NetworkButton
label={
{
Object {
"defaultMessage": "Download Interventions",
"description": "The labeled button to download the Intervention report from the Grades View",
"id": "gradebook.GradesView.InterventionsReport.downloadBtn",

View File

@@ -4,7 +4,7 @@ exports[`PageButtons component render snapshot 1`] = `
<div
className="d-flex justify-content-center"
style={
{
Object {
"paddingBottom": "20px",
}
}
@@ -13,7 +13,7 @@ exports[`PageButtons component render snapshot 1`] = `
disabled="prev-disabled"
onClick={[MockFunction hooks.prev.onClick]}
style={
{
Object {
"margin": "20px",
}
}
@@ -25,7 +25,7 @@ exports[`PageButtons component render snapshot 1`] = `
disabled="next-disabled"
onClick={[MockFunction hooks.next.onClick]}
style={
{
Object {
"margin": "20px",
}
}

View File

@@ -4,12 +4,12 @@ exports[`NetworkButton component snapshots snapshot 1`] = `
<StatefulButton
className="ml-2 test-class"
disabledStates={
[
Array [
"pending",
]
}
icons={
{
Object {
"default": <Icon
className="fa mr-2 fa-download"
/>,
@@ -19,7 +19,7 @@ exports[`NetworkButton component snapshots snapshot 1`] = `
}
}
labels={
{
Object {
"default": <FormattedMessage
defaultMessage="test button label"
description="test button label description"

View File

@@ -87,16 +87,15 @@ describe('root selectors', () => {
});
});
describe('if neither/only 1 are default values', () => {
beforeEach(() => {
filterConstants.filterConfig[filterName] = testConfig;
config = selectors.root.filterBadgeConfig(testState, filterName);
});
describe.each([
['neither', () => false],
['only filter1', (v) => v === filters[0]],
['only filter2', (v) => v === filters[1]],
], '%1 is default', (label, isDefaultFn) => {
beforeEach(() => {
filterConstants.filterConfig[filterName] = testConfig;
config = selectors.root.filterBadgeConfig(testState, filterName);
});
it('returns isDefault: false, string value, and remaining filterConfig', () => {
selectors.filters.isDefault.mockImplementation(isDefaultFn);
const { filterOrder, ...rest } = testConfig;