Compare commits
25 Commits
bilalqamar
...
open-relea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e08dc1ddc3 | ||
|
|
3d2dd5006a | ||
|
|
694b1a75fc | ||
|
|
eff1ac0900 | ||
|
|
918463de91 | ||
|
|
a2d119aa43 | ||
|
|
ccb7865100 | ||
|
|
997d205ac6 | ||
|
|
13433e969f | ||
|
|
c21a81eb55 | ||
|
|
9675a6e9a9 | ||
|
|
d9a0a11936 | ||
|
|
13a19a274c | ||
|
|
f4edf956bb | ||
|
|
c3c328fddb | ||
|
|
75725c16f4 | ||
|
|
d59a4bf54d | ||
|
|
18cede45a6 | ||
|
|
c3823c39b0 | ||
|
|
ef8e20f2b3 | ||
|
|
d683e874b7 | ||
|
|
4e9270ab8e | ||
|
|
6450d8648b | ||
|
|
9c7c848df5 | ||
|
|
f1c9140c8e |
@@ -7,7 +7,6 @@ LOGOUT_URL='http://localhost:18000/login'
|
||||
LOGO_URL=https://edx-cdn.org/v3/default/logo.svg
|
||||
LOGO_TRADEMARK_URL=https://edx-cdn.org/v3/default/logo-trademark.svg
|
||||
LOGO_WHITE_URL=https://edx-cdn.org/v3/default/logo-white.svg
|
||||
LOGO_POWERED_BY_OPEN_EDX_URL_SVG=https://edx-cdn.org/v3/stage/open-edx-tag.svg
|
||||
FAVICON_URL=https://edx-cdn.org/v3/default/favicon.ico
|
||||
CSRF_TOKEN_API_PATH='/csrf/api/v1/token'
|
||||
REFRESH_ACCESS_TOKEN_ENDPOINT='http://localhost:18000/login_refresh'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||
const { createConfig } = require('@edx/frontend-build');
|
||||
const { createConfig } = require('@openedx/frontend-build');
|
||||
|
||||
const config = createConfig('eslint', {
|
||||
rules: {
|
||||
|
||||
33
.github/renovate.json
vendored
Normal file
33
.github/renovate.json
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
17
.github/workflows/ci.yml
vendored
17
.github/workflows/ci.yml
vendored
@@ -10,19 +10,19 @@ on:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
node: [18, 20]
|
||||
|
||||
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@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ env.NODE_VER }}
|
||||
node-version: ${{ matrix.node }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
@@ -43,7 +43,10 @@ jobs:
|
||||
run: npm run build
|
||||
|
||||
- name: Run Coverage
|
||||
uses: codecov/codecov-action@v2
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
fail_ci_if_error: true
|
||||
|
||||
- name: Send failure notification
|
||||
if: ${{ failure() }}
|
||||
|
||||
2
.github/workflows/lockfileversion-check.yml
vendored
2
.github/workflows/lockfileversion-check.yml
vendored
@@ -10,4 +10,4 @@ on:
|
||||
|
||||
jobs:
|
||||
version-check:
|
||||
uses: openedx/.github/.github/workflows/lockfile-check.yml@master
|
||||
uses: openedx/.github/.github/workflows/lockfileversion-check-v3.yml@master
|
||||
|
||||
2
.github/workflows/npm-publish.yml
vendored
2
.github/workflows/npm-publish.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
jobs:
|
||||
release:
|
||||
name: Release
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -23,3 +23,5 @@ temp/babel-plugin-react-intl
|
||||
### transifex ###
|
||||
src/i18n/transifex_input.json
|
||||
temp
|
||||
|
||||
src/i18n/messages/
|
||||
@@ -1,9 +0,0 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[o:open-edx:p:edx-platform:r:frontend-app-gradebook]
|
||||
file_filter = src/i18n/messages/<lang>.json
|
||||
source_file = src/i18n/transifex_input.json
|
||||
source_lang = en
|
||||
type = KEYVALUEJSON
|
||||
|
||||
25
Makefile
25
Makefile
@@ -1,15 +1,11 @@
|
||||
npm-install-%: ## install specified % npm package
|
||||
npm ci $* --save-dev
|
||||
git add package.json
|
||||
export TRANSIFEX_RESOURCE = frontend-app-gradebook
|
||||
transifex_langs = "ar,de,es_419,fa_IR,fr,fr_CA,hi,it,pt,ru,uk,zh_CN"
|
||||
|
||||
intl_imports = ./node_modules/.bin/intl-imports.js
|
||||
transifex_utils = ./node_modules/.bin/transifex-utils.js
|
||||
i18n = ./src/i18n
|
||||
transifex_input = $(i18n)/transifex_input.json
|
||||
tx_url1 = https://www.transifex.com/api/2/project/edx-platform/resource/$(transifex_resource)/translation/en/strings/
|
||||
tx_url2 = https://www.transifex.com/api/2/project/edx-platform/resource/$(transifex_resource)/source/
|
||||
|
||||
# This directory must match .babelrc .
|
||||
transifex_temp = ./temp/babel-plugin-formatjs
|
||||
@@ -39,27 +35,7 @@ i18n.concat:
|
||||
|
||||
extract_translations: | requirements i18n.extract i18n.concat
|
||||
|
||||
# Despite the name, we actually need this target to detect changes in the incoming translated message files as well.
|
||||
detect_changed_source_translations:
|
||||
# Checking for changed translations...
|
||||
git diff --exit-code $(i18n)
|
||||
|
||||
# Pushes translations to Transifex. You must run make extract_translations first.
|
||||
push_translations:
|
||||
# Pushing strings to Transifex...
|
||||
tx push -s
|
||||
# Fetching hashes from Transifex...
|
||||
./node_modules/@edx/reactifex/bash_scripts/get_hashed_strings_v3.sh
|
||||
# Writing out comments to file...
|
||||
$(transifex_utils) $(transifex_temp) --comments --v3-scripts-path
|
||||
# Pushing comments to Transifex...
|
||||
./node_modules/@edx/reactifex/bash_scripts/put_comments_v3.sh
|
||||
|
||||
ifeq ($(OPENEDX_ATLAS_PULL),)
|
||||
# Pulls translations from Transifex.
|
||||
pull_translations:
|
||||
tx pull -t -f --mode reviewed --languages=$(transifex_langs)
|
||||
else
|
||||
# Experimental: OEP-58 Pulls translations using atlas
|
||||
pull_translations:
|
||||
rm -rf src/i18n/messages
|
||||
@@ -73,7 +49,6 @@ pull_translations:
|
||||
translations/frontend-app-gradebook/src/i18n/messages:frontend-app-gradebook
|
||||
|
||||
$(intl_imports) frontend-platform paragon frontend-component-header frontend-component-footer frontend-app-gradebook
|
||||
endif
|
||||
|
||||
# This target is used by CI.
|
||||
validate-no-uncommitted-package-lock-changes:
|
||||
|
||||
@@ -108,6 +108,11 @@ check the ``enabled`` and ``enabled for all courses`` boxes.
|
||||
numbers for grades. If your gradebook isn't accepting your changes, or the changes aren't resulting in sane,
|
||||
recalculated grade values, verify you've set all flags correctly.
|
||||
|
||||
## Plugins
|
||||
This MFE can be customized using [Frontend Plugin Framework](https://github.com/openedx/frontend-plugin-framework).
|
||||
|
||||
The parts of this MFE that can be customized in that manner are documented [here](/src/plugin-slots).
|
||||
|
||||
## Running tests
|
||||
|
||||
1. Assuming that you're operating in the context of the edX devstack,
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
const { createConfig } = require('@edx/frontend-build');
|
||||
const { createConfig } = require('@openedx/frontend-build');
|
||||
|
||||
module.exports = createConfig('babel');
|
||||
|
||||
13
catalog-info.yaml
Normal file
13
catalog-info.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
# 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'
|
||||
@@ -1,4 +1,4 @@
|
||||
const { createConfig } = require('@edx/frontend-build');
|
||||
const { createConfig } = require('@openedx/frontend-build');
|
||||
|
||||
module.exports = createConfig('jest', {
|
||||
setupFilesAfterEnv: [
|
||||
|
||||
15567
package-lock.json
generated
15567
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
15
package.json
15
package.json
@@ -29,12 +29,13 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
|
||||
"@edx/frontend-component-footer": "12.2.0",
|
||||
"@edx/frontend-component-header": "4.6.0",
|
||||
"@edx/frontend-platform": "5.5.4",
|
||||
"@edx/frontend-component-header": "^5.6.0",
|
||||
"@edx/frontend-platform": "8.0.0",
|
||||
"@edx/openedx-atlas": "^0.6.0",
|
||||
"@edx/paragon": "20.45.0",
|
||||
"@edx/react-unit-test-utils": "1.7.1",
|
||||
"@edx/react-unit-test-utils": "^3.0.0",
|
||||
"@openedx/frontend-plugin-framework": "^1.2.1",
|
||||
"@openedx/frontend-slot-footer": "^1.0.2",
|
||||
"@openedx/paragon": "^22.1.1",
|
||||
"@edx/reactifex": "^2.1.1",
|
||||
"@fortawesome/fontawesome-svg-core": "^1.2.25",
|
||||
"@fortawesome/free-brands-svg-icons": "^5.11.2",
|
||||
@@ -67,7 +68,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@edx/browserslist-config": "^1.1.1",
|
||||
"@edx/frontend-build": "13.0.1",
|
||||
"@openedx/frontend-build": "14.0.3",
|
||||
"@testing-library/react": "12.1.5",
|
||||
"axios": "0.21.2",
|
||||
"axios-mock-adapter": "^1.17.0",
|
||||
@@ -75,7 +76,7 @@
|
||||
"fetch-mock": "^6.5.2",
|
||||
"husky": "2.7.0",
|
||||
"identity-obj-proxy": "^3.0.0",
|
||||
"jest": "^26.6.3",
|
||||
"jest": "^29.7.0",
|
||||
"react-dev-utils": "^12.0.1",
|
||||
"react-test-renderer": "17.0.2",
|
||||
"reactifex": "1.1.1",
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Route, Routes } from 'react-router-dom';
|
||||
|
||||
import { AppProvider } from '@edx/frontend-platform/react';
|
||||
|
||||
import Footer from '@edx/frontend-component-footer';
|
||||
import FooterSlot from '@openedx/frontend-slot-footer';
|
||||
import Header from '@edx/frontend-component-header';
|
||||
|
||||
import store from 'data/store';
|
||||
@@ -24,7 +24,7 @@ const App = () => (
|
||||
/>
|
||||
</Routes>
|
||||
</main>
|
||||
<Footer logo={process.env.LOGO_POWERED_BY_OPEN_EDX_URL_SVG} />
|
||||
<FooterSlot />
|
||||
</div>
|
||||
</AppProvider>
|
||||
);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// frontend-app-*/src/index.scss
|
||||
@import "~@edx/brand/paragon/fonts";
|
||||
@import "~@edx/brand/paragon/variables";
|
||||
@import "~@edx/paragon/scss/core/core";
|
||||
@import "~@openedx/paragon/scss/core/core";
|
||||
@import "~@edx/brand/paragon/overrides";
|
||||
|
||||
$fa-font-path: "~font-awesome/fonts";
|
||||
|
||||
@@ -3,8 +3,6 @@ import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { Route } from 'react-router-dom';
|
||||
|
||||
import Footer from '@edx/frontend-component-footer';
|
||||
|
||||
import store from 'data/store';
|
||||
import GradebookPage from 'containers/GradebookPage';
|
||||
|
||||
@@ -18,13 +16,12 @@ jest.mock('react-router-dom', () => ({
|
||||
jest.mock('@edx/frontend-platform/react', () => ({
|
||||
AppProvider: () => 'AppProvider',
|
||||
}));
|
||||
jest.mock('@edx/frontend-component-footer', () => 'Footer');
|
||||
jest.mock('@edx/frontend-component-footer', () => ({ FooterSlot: 'Footer' }));
|
||||
jest.mock('data/store', () => 'testStore');
|
||||
jest.mock('containers/GradebookPage', () => 'GradebookPage');
|
||||
jest.mock('@edx/frontend-component-header', () => 'Header');
|
||||
jest.mock('./head/Head', () => 'Head');
|
||||
|
||||
const logo = 'fakeLogo.png';
|
||||
let el;
|
||||
let secondChild;
|
||||
|
||||
@@ -34,7 +31,6 @@ describe('App router component', () => {
|
||||
});
|
||||
describe('component', () => {
|
||||
beforeEach(() => {
|
||||
process.env.LOGO_POWERED_BY_OPEN_EDX_URL_SVG = logo;
|
||||
el = shallow(<App />);
|
||||
secondChild = el.instance.children;
|
||||
});
|
||||
@@ -63,8 +59,5 @@ describe('App router component', () => {
|
||||
expect(secondChild[1].findByType(Route)[0].props.element.type).toEqual(GradebookPage);
|
||||
});
|
||||
});
|
||||
test('Footer logo drawn from env variable', () => {
|
||||
expect(secondChild[1].findByType(Footer)[0].props.logo).toEqual(logo);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -15,7 +15,7 @@ exports[`App router component snapshot 1`] = `
|
||||
/>
|
||||
</Routes>
|
||||
</main>
|
||||
<Footer />
|
||||
<FooterSlot />
|
||||
</div>
|
||||
</AppProvider>
|
||||
`;
|
||||
|
||||
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
|
||||
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { Alert } from '@edx/paragon';
|
||||
import { Alert } from '@openedx/paragon';
|
||||
|
||||
import selectors from 'data/selectors';
|
||||
import messages from './messages';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
import { Alert } from '@edx/paragon';
|
||||
import { Alert } from '@openedx/paragon';
|
||||
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import selectors from 'data/selectors';
|
||||
@@ -12,7 +12,7 @@ jest.mock('@edx/frontend-platform/i18n', () => ({
|
||||
defineMessages: m => m,
|
||||
FormattedMessage: () => 'FormattedMessage',
|
||||
}));
|
||||
jest.mock('@edx/paragon', () => ({
|
||||
jest.mock('@openedx/paragon', () => ({
|
||||
Alert: () => 'Alert',
|
||||
}));
|
||||
jest.mock('data/selectors', () => ({
|
||||
|
||||
@@ -3,7 +3,7 @@ import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { DataTable } from '@edx/paragon';
|
||||
import { DataTable } from '@openedx/paragon';
|
||||
|
||||
import { bulkManagementColumns } from 'data/constants/app';
|
||||
import selectors from 'data/selectors';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* eslint-disable import/no-named-as-default */
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
import { DataTable } from '@edx/paragon';
|
||||
import { DataTable } from '@openedx/paragon';
|
||||
|
||||
import selectors from 'data/selectors';
|
||||
import { bulkManagementColumns } from 'data/constants/app';
|
||||
@@ -9,7 +9,7 @@ import { bulkManagementColumns } from 'data/constants/app';
|
||||
import ResultsSummary from './ResultsSummary';
|
||||
import { HistoryTable, mapStateToProps } from './HistoryTable';
|
||||
|
||||
jest.mock('@edx/paragon', () => ({ DataTable: () => 'DataTable' }));
|
||||
jest.mock('@openedx/paragon', () => ({ DataTable: () => 'DataTable' }));
|
||||
|
||||
jest.mock('@edx/frontend-platform/i18n', () => ({
|
||||
defineMessages: m => m,
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { Hyperlink, Icon } from '@edx/paragon';
|
||||
import { Download } from '@edx/paragon/icons';
|
||||
import { Hyperlink, Icon } from '@openedx/paragon';
|
||||
import { Download } from '@openedx/paragon/icons';
|
||||
|
||||
import lms from 'data/services/lms';
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { Download } from '@edx/paragon/icons';
|
||||
import { Download } from '@openedx/paragon/icons';
|
||||
|
||||
import lms from 'data/services/lms';
|
||||
import ResultsSummary from './ResultsSummary';
|
||||
|
||||
jest.mock('@edx/paragon', () => ({
|
||||
jest.mock('@openedx/paragon', () => ({
|
||||
Hyperlink: () => 'Hyperlink',
|
||||
Icon: () => 'Icon',
|
||||
}));
|
||||
jest.mock('@edx/paragon/icons', () => ({
|
||||
jest.mock('@openedx/paragon/icons', () => ({
|
||||
Download: 'DownloadIcon',
|
||||
}));
|
||||
jest.mock('data/services/lms', () => ({
|
||||
|
||||
@@ -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 @@ Array [
|
||||
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"
|
||||
>
|
||||
|
||||
@@ -4,8 +4,8 @@ exports[`ResultsSummary component snapshot - safe hyperlink with bulkGradesUrl w
|
||||
<Hyperlink
|
||||
destination="www.edx.org"
|
||||
href={
|
||||
Object {
|
||||
"url": Object {
|
||||
{
|
||||
"url": {
|
||||
"rowId": 42,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React from 'react';
|
||||
import { Hyperlink } from '@edx/paragon';
|
||||
import { Hyperlink } from '@openedx/paragon';
|
||||
import { getConfig } from '@edx/frontend-platform';
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,7 +5,7 @@ import { getConfig } from '@edx/frontend-platform';
|
||||
|
||||
import Header from '.';
|
||||
|
||||
jest.mock('@edx/paragon', () => ({
|
||||
jest.mock('@openedx/paragon', () => ({
|
||||
Hyperlink: () => 'Hyperlink',
|
||||
}));
|
||||
jest.mock('@edx/frontend-platform', () => ({
|
||||
|
||||
@@ -10,7 +10,7 @@ exports[`AssignmentFilter component render snapshot 1`] = `
|
||||
label="Assignment"
|
||||
onChange={[MockFunction]}
|
||||
options={
|
||||
Array [
|
||||
[
|
||||
<option
|
||||
value=""
|
||||
>
|
||||
|
||||
@@ -2,7 +2,7 @@ import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
|
||||
import useAssignmentGradeFilterData from './hooks';
|
||||
import messages from '../messages';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
|
||||
import PercentGroup from '../PercentGroup';
|
||||
import useAssignmentGradeFilterData from './hooks';
|
||||
|
||||
@@ -10,7 +10,7 @@ exports[`AssignmentFilterType component render snapshot 1`] = `
|
||||
label="Assignment Types"
|
||||
onChange={[MockFunction]}
|
||||
options={
|
||||
Array [
|
||||
[
|
||||
<option
|
||||
value=""
|
||||
>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import messages from '../messages';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
|
||||
import PercentGroup from '../PercentGroup';
|
||||
import useCourseGradeFilterData from './hooks';
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
|
||||
const PercentGroup = ({
|
||||
id,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
|
||||
const SelectGroup = ({
|
||||
id,
|
||||
|
||||
@@ -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"
|
||||
>
|
||||
|
||||
@@ -6,8 +6,8 @@ import {
|
||||
Icon,
|
||||
IconButton,
|
||||
Form,
|
||||
} from '@edx/paragon';
|
||||
import { Close } from '@edx/paragon/icons';
|
||||
} from '@openedx/paragon';
|
||||
import { Close } from '@openedx/paragon/icons';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import messages from './messages';
|
||||
|
||||
@@ -2,7 +2,7 @@ import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { Collapsible } from '@edx/paragon';
|
||||
import { Collapsible } from '@openedx/paragon';
|
||||
|
||||
import { formatMessage } from 'testUtils';
|
||||
|
||||
|
||||
@@ -21,7 +21,9 @@ exports[`GradebookHeader component render default view shapshot 1`] = `
|
||||
<div
|
||||
className="subtitle-row d-flex justify-content-between align-items-center"
|
||||
>
|
||||
<h2>
|
||||
<h2
|
||||
className="text-break"
|
||||
>
|
||||
test-course-id
|
||||
</h2>
|
||||
</div>
|
||||
@@ -49,7 +51,9 @@ exports[`GradebookHeader component render frozen grades snapshot: show frozen wa
|
||||
<div
|
||||
className="subtitle-row d-flex justify-content-between align-items-center"
|
||||
>
|
||||
<h2>
|
||||
<h2
|
||||
className="text-break"
|
||||
>
|
||||
test-course-id
|
||||
</h2>
|
||||
</div>
|
||||
@@ -83,7 +87,9 @@ exports[`GradebookHeader component render show bulk management snapshot: show to
|
||||
<div
|
||||
className="subtitle-row d-flex justify-content-between align-items-center"
|
||||
>
|
||||
<h2>
|
||||
<h2
|
||||
className="text-break"
|
||||
>
|
||||
test-course-id
|
||||
</h2>
|
||||
<Button
|
||||
@@ -117,7 +123,9 @@ exports[`GradebookHeader component render user cannot view gradebook snapshot: s
|
||||
<div
|
||||
className="subtitle-row d-flex justify-content-between align-items-center"
|
||||
>
|
||||
<h2>
|
||||
<h2
|
||||
className="text-break"
|
||||
>
|
||||
test-course-id
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
|
||||
import { instructorDashboardUrl } from 'data/services/lms/urls';
|
||||
import useGradebookHeaderData from './hooks';
|
||||
@@ -26,7 +26,7 @@ export const GradebookHeader = () => {
|
||||
</a>
|
||||
<h1>{formatMessage(messages.gradebook)}</h1>
|
||||
<div className="subtitle-row d-flex justify-content-between align-items-center">
|
||||
<h2>{courseId}</h2>
|
||||
<h2 className="text-break">{courseId}</h2>
|
||||
{showBulkManagement && (
|
||||
<Button variant="tertiary" onClick={handleToggleViewClick}>
|
||||
{formatMessage(toggleViewMessage)}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
|
||||
import { formatMessage } from 'testUtils';
|
||||
import { instructorDashboardUrl } from 'data/services/lms/urls';
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -22,7 +22,7 @@ export const HistoryKeys = StrictDict({
|
||||
*/
|
||||
export const ModalHeaders = () => {
|
||||
const { assignmentName, updateUserName } = selectors.app.useModalData();
|
||||
const { currentGrade, originalGrade } = selectors.grades.useGradeData();
|
||||
const { gradeOverrideCurrentEarnedGradedOverride, gradeOriginalEarnedGraded } = selectors.grades.useGradeData();
|
||||
const { formatMessage } = useIntl();
|
||||
return (
|
||||
<div>
|
||||
@@ -39,12 +39,12 @@ export const ModalHeaders = () => {
|
||||
<HistoryHeader
|
||||
id={HistoryKeys.originalGrade}
|
||||
label={formatMessage(messages.originalGradeHeader)}
|
||||
value={originalGrade}
|
||||
value={gradeOriginalEarnedGraded}
|
||||
/>
|
||||
<HistoryHeader
|
||||
id={HistoryKeys.currentGrade}
|
||||
label={formatMessage(messages.currentGradeHeader)}
|
||||
value={currentGrade}
|
||||
value={gradeOverrideCurrentEarnedGradedOverride}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -25,8 +25,8 @@ const modalData = {
|
||||
};
|
||||
selectors.app.useModalData.mockReturnValue(modalData);
|
||||
const gradeData = {
|
||||
currentGrade: 'test-current-grade',
|
||||
originalGrade: 'test-original-grade',
|
||||
gradeOverrideCurrentEarnedGradedOverride: 'test-current-grade',
|
||||
gradeOriginalEarnedGraded: 'test-original-grade',
|
||||
};
|
||||
selectors.grades.useGradeData.mockReturnValue(gradeData);
|
||||
|
||||
@@ -70,7 +70,7 @@ describe('ModalHeaders', () => {
|
||||
expect(headerProps).toMatchObject({
|
||||
id: HistoryKeys.originalGrade,
|
||||
label: formatMessage(messages.originalGradeHeader),
|
||||
value: gradeData.originalGrade,
|
||||
value: gradeData.gradeOriginalEarnedGraded,
|
||||
});
|
||||
});
|
||||
test('currentGrade header', () => {
|
||||
@@ -78,7 +78,7 @@ describe('ModalHeaders', () => {
|
||||
expect(headerProps).toMatchObject({
|
||||
id: HistoryKeys.currentGrade,
|
||||
label: formatMessage(messages.currentGradeHeader),
|
||||
value: gradeData.currentGrade,
|
||||
value: gradeData.gradeOverrideCurrentEarnedGradedOverride,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
|
||||
import useAdjustedGradeInputData from './hooks';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
|
||||
import useAdjustedGradeInputData from './hooks';
|
||||
import AdjustedGradeInput from '.';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
|
||||
import useReasonInputData from './hooks';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
|
||||
import useReasonInputData from './hooks';
|
||||
import ReasonInput from '.';
|
||||
|
||||
@@ -5,7 +5,7 @@ import useReasonInputData from './hooks';
|
||||
import ReasonInput, { controlTestId } from '.';
|
||||
|
||||
jest.unmock('react');
|
||||
jest.unmock('@edx/paragon');
|
||||
jest.unmock('@openedx/paragon');
|
||||
jest.mock('./hooks', () => ({ __esModule: true, default: jest.fn() }));
|
||||
|
||||
const focus = jest.fn();
|
||||
|
||||
@@ -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": Object {
|
||||
"date": {
|
||||
"formatted": 2000-01-01T00:00:00.000Z,
|
||||
},
|
||||
"reason": <ReasonInput />,
|
||||
},
|
||||
]
|
||||
}
|
||||
itemCount={2}
|
||||
itemCount={3}
|
||||
/>
|
||||
`;
|
||||
|
||||
@@ -9,7 +9,7 @@ const useOverrideTableData = () => {
|
||||
const { formatMessage } = useIntl();
|
||||
|
||||
const hide = selectors.grades.useHasOverrideErrors();
|
||||
const gradeOverrides = selectors.grades.useGradeData().gradeOverrideHistoryResults;
|
||||
const gradeOverrides = selectors.grades.useGradeData().gradeOverrideHistoryResults || [];
|
||||
const tableProps = {};
|
||||
if (!hide) {
|
||||
tableProps.columns = [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* eslint-disable react/sort-comp, react/button-has-type, import/no-named-as-default */
|
||||
import React from 'react';
|
||||
|
||||
import { DataTable } from '@edx/paragon';
|
||||
import { DataTable } from '@openedx/paragon';
|
||||
|
||||
import { formatDateForDisplay } from 'utils';
|
||||
|
||||
@@ -20,18 +20,20 @@ export const OverrideTable = () => {
|
||||
|
||||
if (hide) { return null; }
|
||||
|
||||
const tableData = [
|
||||
...data,
|
||||
{
|
||||
adjustedGrade: <AdjustedGradeInput />,
|
||||
date: formatDateForDisplay(new Date()),
|
||||
reason: <ReasonInput />,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<DataTable
|
||||
columns={columns}
|
||||
data={[
|
||||
...data,
|
||||
{
|
||||
adjustedGrade: <AdjustedGradeInput />,
|
||||
date: formatDateForDisplay(new Date()),
|
||||
reason: <ReasonInput />,
|
||||
},
|
||||
]}
|
||||
itemCount={data.length}
|
||||
data={tableData}
|
||||
itemCount={tableData.length}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { DataTable } from '@edx/paragon';
|
||||
import { DataTable } from '@openedx/paragon';
|
||||
|
||||
import { formatDateForDisplay } from 'utils';
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import {
|
||||
Alert,
|
||||
ModalDialog,
|
||||
ActionRow,
|
||||
} from '@edx/paragon';
|
||||
} from '@openedx/paragon';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import OverrideTable from './OverrideTable';
|
||||
|
||||
@@ -4,7 +4,7 @@ import { shallow } from '@edx/react-unit-test-utils';
|
||||
import {
|
||||
ActionRow,
|
||||
ModalDialog,
|
||||
} from '@edx/paragon';
|
||||
} from '@openedx/paragon';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import { formatMessage } from 'testUtils';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import { selectors } from 'data/redux/hooks';
|
||||
|
||||
@@ -3,11 +3,11 @@ import { shallow } from '@edx/react-unit-test-utils';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import { formatMessage } from 'testUtils';
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
import { selectors } from 'data/redux/hooks';
|
||||
import FilterBadge from './FilterBadge';
|
||||
|
||||
jest.mock('@edx/paragon', () => ({
|
||||
jest.mock('@openedx/paragon', () => ({
|
||||
Button: () => 'Button',
|
||||
}));
|
||||
jest.mock('data/redux/hooks', () => ({
|
||||
|
||||
@@ -19,8 +19,8 @@ exports[`FilterBadge render do not hide value snapshot 1`] = `
|
||||
aria-label="close"
|
||||
className="btn-info"
|
||||
onClick={
|
||||
Object {
|
||||
"handleClose": Array [
|
||||
{
|
||||
"handleClose": [
|
||||
"some",
|
||||
"filters",
|
||||
],
|
||||
@@ -55,8 +55,8 @@ exports[`FilterBadge render hide Value snapshot 1`] = `
|
||||
aria-label="close"
|
||||
className="btn-info"
|
||||
onClick={
|
||||
Object {
|
||||
"handleClose": Array [
|
||||
{
|
||||
"handleClose": [
|
||||
"some",
|
||||
"filters",
|
||||
],
|
||||
|
||||
@@ -7,6 +7,7 @@ exports[`FilterMenuToggle component render snapshot 1`] = `
|
||||
onClick={[MockFunction hooks.toggleFilterMenu]}
|
||||
>
|
||||
<Icon
|
||||
className="mr-1"
|
||||
src="FilterAlt"
|
||||
/>
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Button, Icon } from '@edx/paragon';
|
||||
import { Button, Icon } from '@openedx/paragon';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { FilterAlt } from '@edx/paragon/icons';
|
||||
import { FilterAlt } from '@openedx/paragon/icons';
|
||||
|
||||
import { thunkActions } from 'data/redux/hooks';
|
||||
|
||||
@@ -21,7 +21,7 @@ export const FilterMenuToggle = () => {
|
||||
className="btn-primary align-self-start"
|
||||
onClick={toggleFilterMenu}
|
||||
>
|
||||
<Icon src={FilterAlt} /> {formatMessage(messages.editFilters)}
|
||||
<Icon src={FilterAlt} className="mr-1" /> {formatMessage(messages.editFilters)}
|
||||
</Button>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -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}
|
||||
/>,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
|
||||
import { selectors, thunkActions } from 'data/redux/hooks';
|
||||
import transforms from 'data/redux/transforms';
|
||||
|
||||
@@ -5,7 +5,7 @@ import {
|
||||
Icon,
|
||||
OverlayTrigger,
|
||||
Tooltip,
|
||||
} from '@edx/paragon';
|
||||
} from '@openedx/paragon';
|
||||
|
||||
import { StrictDict } from 'utils';
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
import { getLocale } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import { OverlayTrigger } from '@edx/paragon';
|
||||
import { OverlayTrigger } from '@openedx/paragon';
|
||||
|
||||
import LabelReplacements from './LabelReplacements';
|
||||
|
||||
@@ -12,7 +12,7 @@ const {
|
||||
MastersOnlyLabelReplacement,
|
||||
} = LabelReplacements;
|
||||
|
||||
jest.mock('@edx/paragon', () => ({
|
||||
jest.mock('@openedx/paragon', () => ({
|
||||
Icon: () => 'Icon',
|
||||
OverlayTrigger: () => 'OverlayTrigger',
|
||||
Tooltip: () => 'Tooltip',
|
||||
|
||||
@@ -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`] = `
|
||||
Object {
|
||||
"children": Array [
|
||||
Object {
|
||||
"children": Array [
|
||||
Object {
|
||||
"children": Array [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
"MyNameFromHere",
|
||||
],
|
||||
"props": Object {},
|
||||
"props": {},
|
||||
"type": "div",
|
||||
},
|
||||
Object {
|
||||
"children": Array [
|
||||
{
|
||||
"children": [
|
||||
"My name from another land",
|
||||
],
|
||||
"props": Object {
|
||||
"props": {
|
||||
"className": "student-key",
|
||||
},
|
||||
"type": "div",
|
||||
},
|
||||
],
|
||||
"props": Object {},
|
||||
"props": {},
|
||||
"type": "div",
|
||||
},
|
||||
],
|
||||
"props": Object {
|
||||
"props": {
|
||||
"className": "wrap-text-in-cell",
|
||||
},
|
||||
"type": "span",
|
||||
|
||||
@@ -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",
|
||||
]
|
||||
|
||||
@@ -7,13 +7,13 @@ exports[`GradebookTable snapshot 1`] = `
|
||||
<DataTable
|
||||
RowStatusComponent={[MockFunction hooks.nullMethod]}
|
||||
columns={
|
||||
Array [
|
||||
[
|
||||
"some",
|
||||
"columns",
|
||||
]
|
||||
}
|
||||
data={
|
||||
Array [
|
||||
[
|
||||
"some",
|
||||
"data",
|
||||
]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { DataTable } from '@edx/paragon';
|
||||
import { DataTable } from '@openedx/paragon';
|
||||
|
||||
import useGradebookTableData from './hooks';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { DataTable } from '@edx/paragon';
|
||||
import { DataTable } from '@openedx/paragon';
|
||||
|
||||
import useGradebookTableData from './hooks';
|
||||
import GradebookTable from '.';
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
}
|
||||
.grade-history-header{
|
||||
float: left;
|
||||
min-width: 170px;
|
||||
}
|
||||
|
||||
.grade-history-assignment{
|
||||
@@ -65,7 +66,7 @@
|
||||
.gradebook-container {
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
height: 600px;
|
||||
max-height: 600px;
|
||||
overflow-y: auto;
|
||||
position: relative;
|
||||
}
|
||||
@@ -122,3 +123,34 @@ select#ScoreView.form-control {
|
||||
border-right-color: $black;
|
||||
}
|
||||
}
|
||||
|
||||
#edit-filters-btn {
|
||||
@include media-breakpoint-down(xs) {
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.search-container {
|
||||
@include media-breakpoint-down(xs) {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.pgn__modal-body-content .pgn__data-table-layout-wrapper {
|
||||
@include media-breakpoint-down(sm) {
|
||||
clear: both;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
}
|
||||
|
||||
.page-gradebook {
|
||||
position: relative;
|
||||
|
||||
.sidebar-container {
|
||||
position: relative;
|
||||
}
|
||||
aside.sidebar {
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -3,7 +3,7 @@ import React from 'react';
|
||||
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
|
||||
import NetworkButton from 'components/NetworkButton';
|
||||
import messages from './messages';
|
||||
|
||||
@@ -2,7 +2,7 @@ import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
|
||||
import NetworkButton from 'components/NetworkButton';
|
||||
import useImportGradesButtonData from './hooks';
|
||||
|
||||
@@ -5,7 +5,7 @@ import useImportGradesButtonData from './hooks';
|
||||
import ImportGradesButton from '.';
|
||||
|
||||
jest.unmock('react');
|
||||
jest.unmock('@edx/paragon');
|
||||
jest.unmock('@openedx/paragon');
|
||||
jest.mock('components/NetworkButton', () => 'network-button');
|
||||
jest.mock('./hooks', () => ({ __esModule: true, default: jest.fn() }));
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Toast } from '@edx/paragon';
|
||||
import { Toast } from '@openedx/paragon';
|
||||
|
||||
import useImportSuccessToastData from './hooks';
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
|
||||
import usePageButtonsData from './hooks';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { Button } from '@edx/paragon';
|
||||
import { Button } from '@openedx/paragon';
|
||||
|
||||
import usePageButtonsData from './hooks';
|
||||
import PageButtons from '.';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Form } from '@edx/paragon';
|
||||
import { Form } from '@openedx/paragon';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import { actions, selectors } from 'data/redux/hooks';
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`SearchControls component render snapshot 1`] = `
|
||||
<div>
|
||||
<div
|
||||
className="search-container"
|
||||
>
|
||||
<SearchField
|
||||
inputLabel="test-input-label"
|
||||
onBlur={[MockFunction hooks.onBlur]}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { SearchField } from '@edx/paragon';
|
||||
import { SearchField } from '@openedx/paragon';
|
||||
import useSearchControlsData from './hooks';
|
||||
|
||||
/**
|
||||
@@ -18,7 +18,7 @@ export const SearchControls = () => {
|
||||
} = useSearchControlsData();
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="search-container">
|
||||
<SearchField
|
||||
onSubmit={onSubmit}
|
||||
inputLabel={inputLabel}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { SearchField } from '@edx/paragon';
|
||||
import { SearchField } from '@openedx/paragon';
|
||||
|
||||
import useSearchControlsData from './hooks';
|
||||
import SearchControls from '.';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Icon } from '@edx/paragon';
|
||||
import { Icon } from '@openedx/paragon';
|
||||
|
||||
import { selectors } from 'data/redux/hooks';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Alert } from '@edx/paragon';
|
||||
import { Alert } from '@openedx/paragon';
|
||||
|
||||
import useStatusAlertsData from './hooks';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { Alert } from '@edx/paragon';
|
||||
import { Alert } from '@openedx/paragon';
|
||||
|
||||
import useStatusAlertsData from './hooks';
|
||||
import StatusAlerts from '.';
|
||||
|
||||
@@ -10,7 +10,7 @@ exports[`GradesView component render snapshot 1`] = `
|
||||
filter-step-heading
|
||||
</h3>
|
||||
<div
|
||||
className="d-flex justify-content-between"
|
||||
className="d-flex justify-content-between flex-wrap"
|
||||
>
|
||||
<FilterMenuToggle />
|
||||
<SearchControls />
|
||||
|
||||
@@ -34,7 +34,7 @@ export const GradesView = ({ updateQueryParams }) => {
|
||||
{stepHeadings.filter}
|
||||
</h3>
|
||||
|
||||
<div className="d-flex justify-content-between">
|
||||
<div className="d-flex justify-content-between flex-wrap">
|
||||
<FilterMenuToggle />
|
||||
<SearchControls />
|
||||
</div>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { StatefulButton, Icon } from '@edx/paragon';
|
||||
import { StatefulButton, Icon } from '@openedx/paragon';
|
||||
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import selectors from 'data/selectors';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from '@edx/react-unit-test-utils';
|
||||
|
||||
import { Icon, StatefulButton } from '@edx/paragon';
|
||||
import { Icon, StatefulButton } from '@openedx/paragon';
|
||||
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import selectors from 'data/selectors';
|
||||
@@ -10,7 +10,7 @@ import { NetworkButton, mapStateToProps, buttonStates } from '.';
|
||||
jest.mock('@edx/frontend-platform/i18n', () => ({
|
||||
FormattedMessage: () => 'FormattedMessage',
|
||||
}));
|
||||
jest.mock('@edx/paragon', () => ({
|
||||
jest.mock('@openedx/paragon', () => ({
|
||||
Icon: () => 'Icon',
|
||||
StatefulButton: () => 'StatefulButton',
|
||||
}));
|
||||
|
||||
@@ -20,7 +20,7 @@ jest.mock('query-string', () => ({
|
||||
stringify: (val) => `stringify: ${JSON.stringify(val, Object.keys(val).sort())}`,
|
||||
}));
|
||||
|
||||
jest.mock('@edx/paragon', () => ({
|
||||
jest.mock('@openedx/paragon', () => ({
|
||||
Tab: () => 'Tab',
|
||||
Tabs: () => 'Tabs',
|
||||
}));
|
||||
|
||||
@@ -87,15 +87,16 @@ 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;
|
||||
|
||||
@@ -1,39 +1 @@
|
||||
import { messages as footerMessages } from '@edx/frontend-component-footer';
|
||||
import { messages as headerMessages } from '@edx/frontend-component-header';
|
||||
import { messages as paragonMessages } from '@edx/paragon';
|
||||
|
||||
import arMessages from './messages/ar.json';
|
||||
import deMessages from './messages/de.json';
|
||||
import es419Messages from './messages/es_419.json';
|
||||
import faIRMessages from './messages/fa_IR.json';
|
||||
import frMessages from './messages/fr.json';
|
||||
import frCAMessages from './messages/fr_CA.json';
|
||||
import hiMessages from './messages/hi.json';
|
||||
import itMessages from './messages/it.json';
|
||||
import ptMessages from './messages/pt.json';
|
||||
import ruMessages from './messages/ru.json';
|
||||
import ukMessages from './messages/uk.json';
|
||||
import zhcnMessages from './messages/zh_CN.json';
|
||||
// no need to import en messages-- they are in the defaultMessage field
|
||||
|
||||
const appMessages = {
|
||||
ar: arMessages,
|
||||
'es-419': es419Messages,
|
||||
'fa-ir': faIRMessages,
|
||||
fr: frMessages,
|
||||
'zh-cn': zhcnMessages,
|
||||
pt: ptMessages,
|
||||
it: itMessages,
|
||||
de: deMessages,
|
||||
hi: hiMessages,
|
||||
'fr-ca': frCAMessages,
|
||||
ru: ruMessages,
|
||||
uk: ukMessages,
|
||||
};
|
||||
|
||||
export default [
|
||||
paragonMessages,
|
||||
footerMessages,
|
||||
headerMessages,
|
||||
appMessages,
|
||||
];
|
||||
export default [];
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
{
|
||||
"gradebook.BulkManagementHistoryView.heading": "سجلّ الإدارة بالجملة",
|
||||
"gradebook.BulkManagementHistoryView": "فيما يلي سجلّ رفع الدرجات. لتحميل CSV الدرجات أو استيراد درجات بديلة، عد إلى دفتر الدرجات. يرجى الملاحظة أن معالجة الدرجات البديلة قد يأخذ بضع ثوانٍ بعد الاستيراد.",
|
||||
"gradebook.BulkManagementHistoryView.successDialog": "تتم الآن معالجة CSV. قد يتطلب إتمام رفع الملفات عدة دقائق.",
|
||||
"gradebook.GradebookFilters.assignmentsFilterLabel": "الواجبات",
|
||||
"gradebook.GradebookFilters.overallGradeFilterLabel": "الدرجة الكلّية",
|
||||
"gradebook.GradebookFilters.studentGroupsFilterLabel": "مجموعات الطلبة",
|
||||
"gradebook.GradebookFilters.includeCourseTeamMembersFilterLabel": "تضمين أعضاء فريق المساق",
|
||||
"gradebook.GradebookFilters.assignmentFilterLabel": "الواجب",
|
||||
"gradebook.GradebookFilters.assignmentTypesLabel": "أنواع الواجبات",
|
||||
"gradebook.GradebookFilters.maxGradeFilterLabel": " الدرجة القصوى",
|
||||
"gradebook.GradebookFilters.minGradeFilterLabel": "الدرجة الدنيا",
|
||||
"gradebook.GradebookFilters.cohorts": "الأفواج",
|
||||
"gradebook.GradebookFilters.cohortsAll": "جميع الأفواج",
|
||||
"gradebook.GradebookFilters.tracks": "المسارات",
|
||||
"gradebook.GradebookFilters.trackAll": "جميع المسارات",
|
||||
"gradebook.GradebookFilters.closeFilters": "إغلاق المرشحات",
|
||||
"gradebook.GradebookHeader.backButton": "العودة إلى لوحة المعلومات",
|
||||
"gradebook.GradebookHeader.appLabel": "دفتر الدرجات",
|
||||
"gradebook.GradebookHeader.frozenWarning": "درجات هذا المساق الآن مجمدة. لم يعد تعديل الدرجات ممكنا.",
|
||||
"gradebook.GradebookHeader.unauthorizedWarning": "أنت غير مخوّل بالاطّلاع على دفتر درجات هذا المساق.",
|
||||
"gradebook.GradebookHeader.toActivityLogButton": "عرض سجلّ الإدارة بالجملة",
|
||||
"gradebook.GradebookHeader.toGradesView": "العودة إلى دفتر الدرجات",
|
||||
"gradebook.GradesView.BulkManagementControls.bulkManagementLabel": "تحميل الدرجات",
|
||||
"gradebook.GradesView.EditModal.headers.assignment": "الواجب",
|
||||
"gradebook.GradesView.EditModal.headers.currentGrade": "الدرجة الحالية",
|
||||
"gradebook.GradesView.EditModal.headers.originalGrade": "الدرجة الأصلية",
|
||||
"gradebook.GradesView.EditModal.headers.student": "الطالب",
|
||||
"gradebook.GradesView.EditModal.title": "تعديل الدرجات",
|
||||
"gradebook.GradesView.EditModal.closeText": "إلغاء",
|
||||
"gradebook.GradesView.EditModal.contactSupport": "يتم إظهار أحدث العمليات فقط (5 على الأكثر). للاطلاع على المزيد، يرجى الاتصال بالدعم.",
|
||||
"gradebook.GradesView.EditModal.saveVisibility": "ملاحظة: ستظهر تعديلاتك للطلبة بمجرد الحفظ.",
|
||||
"gradebook.GradesView.EditModal.saveGrade": "حفظ الدرجات",
|
||||
"gradebook.GradesView.EditModal.Overrides.adjustedGradeHeader": "الدرجة المعدّلة",
|
||||
"gradebook.GradesView.EditModal.Overrides.dateHeader": "التاريخ",
|
||||
"gradebook.GradesView.EditModal.Overrides.graderHeader": "صاحب التقييم",
|
||||
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "السبب",
|
||||
"gradebook.GradesTab.usersVisibilityLabel'": "عرض {filteredUsers} من إجمالي {totalUsers} متعلمًا",
|
||||
"gradebook.GradesView.editFilterLabel": "تعديل المرشحات",
|
||||
"gradebook.GradesView.table.headings.email": "البريد الإلكتروني",
|
||||
"gradebook.GradesView.table.headings.totalGrade": "الدرجة الإجمالية (%)",
|
||||
"gradebook.GradesView.table.headings.username": "اسم المستخدم",
|
||||
"gradebook.GradesView.table.labels.studentKey": "مفتاح الطالب*",
|
||||
"gradebook.GradesView.table.labels.username": "اسم المستخدم",
|
||||
"gradebook.GradesView.table.totalGradePercentage": "الدرجات الإجمالية تظهر دائمًا على شكل نسب مئوية",
|
||||
"gradebook.BulkManagementHistoryView.csvUploadLabel": "رفع درجات بصيغة CSV",
|
||||
"gradebook.GradesView.importGradesBtnText": "استيراد الدرجات",
|
||||
"gradebook.GradesView.ImportSuccessToast.description": "نجح الاستيراد! سيتم فورًا تحديث الدرجات.",
|
||||
"gradebook.GradesView.ImportSuccessToast.showHistoryViewBtn": "عرض سجلّ النشاط",
|
||||
"gradebook.GradesView.InterventionsReport.title": "تقرير التدخلات",
|
||||
"gradebook.GradesView.InterventionsReport.description": "هل تحتاج لإيجاد طلبة قد يكونون متأخرين؟ حمّل تقرير التدخلات للحصول على قياسات الالتزام كالزيارات و المحاولات الخاصة بكل فصل.",
|
||||
"gradebook.GradesView.InterventionsReport.downloadBtn": "تحميل التدخلات",
|
||||
"gradebook.GradesView.filterHeading": "الخطوة 1: ترشيح تقرير الدرجات",
|
||||
"gradebook.GradesView.gradebookStepHeading": "الخطوة 2: معاينة و تعديل الدرجات على حدة",
|
||||
"gradebook.GradesView.mastersHint": "متوفر فقط للمتعلمين المسجلين في مسار الماستر",
|
||||
"gradebook.GradesView.PageButtons.prevPage": "الصفحة السابقة",
|
||||
"gradebook.GradesView.PageButtons.nextPage": "الصفحة التالية",
|
||||
"gradebook.GradesView.scoreViewLabel": "مظهر الدرجة",
|
||||
"gradebook.GradesView.absoluteOption": "مطلقة",
|
||||
"gradebook.GradesView.percentOption": "نسبة مئوية",
|
||||
"gradebook.GradesView.search.label": "البحث عن متعلّم",
|
||||
"gradebook.GradesView.search.hint": "ابحث حسب اسم المستخدم، البريد الإلكتروني أو مفتاح الطالب",
|
||||
"gradebook.GradesView.editSuccessAlert": "تم تعديل الدرجة بنجاح. قد تلاحظ تأخّرًا طفيفا في ظهور التحديثات في دفتر الدرجات.",
|
||||
"gradebook.GradesView.maxCourseGradeInvalid": "الدرجة القصوى يجب أن تكون بين 0 و 100",
|
||||
"gradebook.GradesView.minCourseGradeInvalid": "الدرجة الدنيا يجب أن تكون بين 0 و 100",
|
||||
"gradebook.GradesTab.FilterBadges.assignment": "الواجب",
|
||||
"gradebook.GradesTab.FilterBadges.assignmentGrade": "درجة الواجب",
|
||||
"gradebook.GradesTab.FilterBadges.assignmentType": "نوع الواجب",
|
||||
"gradebook.GradesTab.FilterBadges.cohort": "فوج",
|
||||
"gradebook.GradesTab.FilterBadges.courseGrade": "درجة المساق",
|
||||
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "تضمين أعضاء فريق المساق",
|
||||
"gradebook.GradesTab.FilterBadges.track": "المسار"
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
{
|
||||
"gradebook.BulkManagementHistoryView.heading": "Bulk Management History",
|
||||
"gradebook.BulkManagementHistoryView": "Below is a log of previous grade imports. To download a CSV of your gradebook and import grades for override, return to the Gradebook. Please note, after importing grades, it may take a few seconds to process the override.",
|
||||
"gradebook.BulkManagementHistoryView.successDialog": "CSV processing. File uploads may take several minutes to complete.",
|
||||
"gradebook.GradebookFilters.assignmentsFilterLabel": "Assignments",
|
||||
"gradebook.GradebookFilters.overallGradeFilterLabel": "Overall Grade",
|
||||
"gradebook.GradebookFilters.studentGroupsFilterLabel": "Student Groups",
|
||||
"gradebook.GradebookFilters.includeCourseTeamMembersFilterLabel": "Include Course Team Members",
|
||||
"gradebook.GradebookFilters.assignmentFilterLabel": "Assignment",
|
||||
"gradebook.GradebookFilters.assignmentTypesLabel": "Assignment Types",
|
||||
"gradebook.GradebookFilters.maxGradeFilterLabel": "Max Grade",
|
||||
"gradebook.GradebookFilters.minGradeFilterLabel": "Min Grade",
|
||||
"gradebook.GradebookFilters.cohorts": "Cohorts",
|
||||
"gradebook.GradebookFilters.cohortsAll": "Cohort-All",
|
||||
"gradebook.GradebookFilters.tracks": "Tracks",
|
||||
"gradebook.GradebookFilters.trackAll": "Track-All",
|
||||
"gradebook.GradebookFilters.closeFilters": "Close Filters",
|
||||
"gradebook.GradebookHeader.backButton": "Back to Dashboard",
|
||||
"gradebook.GradebookHeader.appLabel": "Gradebook",
|
||||
"gradebook.GradebookHeader.frozenWarning": "The grades for this course are now frozen. Editing of grades is no longer allowed.",
|
||||
"gradebook.GradebookHeader.unauthorizedWarning": "You are not authorized to view the gradebook for this course.",
|
||||
"gradebook.GradebookHeader.toActivityLogButton": "View Bulk Management History",
|
||||
"gradebook.GradebookHeader.toGradesView": "Return to Gradebook",
|
||||
"gradebook.GradesView.BulkManagementControls.bulkManagementLabel": "Download Grades",
|
||||
"gradebook.GradesView.EditModal.headers.assignment": "Assignment",
|
||||
"gradebook.GradesView.EditModal.headers.currentGrade": "Current Grade",
|
||||
"gradebook.GradesView.EditModal.headers.originalGrade": "Original Grade",
|
||||
"gradebook.GradesView.EditModal.headers.student": "Student",
|
||||
"gradebook.GradesView.EditModal.title": "Edit Grades",
|
||||
"gradebook.GradesView.EditModal.closeText": "Cancel",
|
||||
"gradebook.GradesView.EditModal.contactSupport": "Showing most recent actions (max 5). To see more, please contact support",
|
||||
"gradebook.GradesView.EditModal.saveVisibility": "Note: Once you save, your changes will be visible to students.",
|
||||
"gradebook.GradesView.EditModal.saveGrade": "Save Grades",
|
||||
"gradebook.GradesView.EditModal.Overrides.adjustedGradeHeader": "Adjusted grade",
|
||||
"gradebook.GradesView.EditModal.Overrides.dateHeader": "Date",
|
||||
"gradebook.GradesView.EditModal.Overrides.graderHeader": "Grader",
|
||||
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Reason",
|
||||
"gradebook.GradesTab.usersVisibilityLabel'": "Showing {filteredUsers} of {totalUsers} total learners",
|
||||
"gradebook.GradesView.editFilterLabel": "Edit Filters",
|
||||
"gradebook.GradesView.table.headings.email": "Email",
|
||||
"gradebook.GradesView.table.headings.totalGrade": "Total Grade (%)",
|
||||
"gradebook.GradesView.table.headings.username": "Username",
|
||||
"gradebook.GradesView.table.labels.studentKey": "Student Key*",
|
||||
"gradebook.GradesView.table.labels.username": "Username",
|
||||
"gradebook.GradesView.table.totalGradePercentage": "Total Grade values are always displayed as a percentage",
|
||||
"gradebook.BulkManagementHistoryView.csvUploadLabel": "Upload Grade CSV",
|
||||
"gradebook.GradesView.importGradesBtnText": "Import Grades",
|
||||
"gradebook.GradesView.ImportSuccessToast.description": "Import Successful! Grades will be updated momentarily.",
|
||||
"gradebook.GradesView.ImportSuccessToast.showHistoryViewBtn": "View Activity Log",
|
||||
"gradebook.GradesView.InterventionsReport.title": "Interventions Report",
|
||||
"gradebook.GradesView.InterventionsReport.description": "Need to find students who may be falling behind? Download the interventions report to obtain engagement metrics such as section attempts and visits.",
|
||||
"gradebook.GradesView.InterventionsReport.downloadBtn": "Download Interventions",
|
||||
"gradebook.GradesView.filterHeading": "Step 1: Filter the Grade Report",
|
||||
"gradebook.GradesView.gradebookStepHeading": "Step 2: View or Modify Individual Grades",
|
||||
"gradebook.GradesView.mastersHint": "available for learners in the Master's track only",
|
||||
"gradebook.GradesView.PageButtons.prevPage": "Previous Page",
|
||||
"gradebook.GradesView.PageButtons.nextPage": "Next Page",
|
||||
"gradebook.GradesView.scoreViewLabel": "Score View",
|
||||
"gradebook.GradesView.absoluteOption": "Absolute",
|
||||
"gradebook.GradesView.percentOption": "Percent",
|
||||
"gradebook.GradesView.search.label": "Search for a learner",
|
||||
"gradebook.GradesView.search.hint": "Search by username, email, or student key",
|
||||
"gradebook.GradesView.editSuccessAlert": "The grade has been successfully edited. You may see a slight delay before updates appear in the Gradebook.",
|
||||
"gradebook.GradesView.maxCourseGradeInvalid": "Maximum course grade must be between 0 and 100",
|
||||
"gradebook.GradesView.minCourseGradeInvalid": "Minimum course grade must be between 0 and 100",
|
||||
"gradebook.GradesTab.FilterBadges.assignment": "Assignment",
|
||||
"gradebook.GradesTab.FilterBadges.assignmentGrade": "Assignment Grade",
|
||||
"gradebook.GradesTab.FilterBadges.assignmentType": "Assignment Type",
|
||||
"gradebook.GradesTab.FilterBadges.cohort": "Cohort",
|
||||
"gradebook.GradesTab.FilterBadges.courseGrade": "Course Grade",
|
||||
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Include Course Team Members",
|
||||
"gradebook.GradesTab.FilterBadges.track": "Track"
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
{
|
||||
"gradebook.BulkManagementHistoryView.heading": "Historial de administración masiva",
|
||||
"gradebook.BulkManagementHistoryView": "A continuación se muestra un registro de importaciones de grados anteriores. Para descargar un archivo CSV de su libro de calificaciones e importar las calificaciones para anularlas, regrese al Libro de calificaciones. Tenga en cuenta que, después de importar las calificaciones, es posible que el procesamiento de la anulación demore unos segundos. ",
|
||||
"gradebook.BulkManagementHistoryView.successDialog": "Procesando archivo CSV. Los archivos subidos pueden tomar algunos minutos para completarse.",
|
||||
"gradebook.GradebookFilters.assignmentsFilterLabel": "Tareas",
|
||||
"gradebook.GradebookFilters.overallGradeFilterLabel": "Calificación general",
|
||||
"gradebook.GradebookFilters.studentGroupsFilterLabel": "Grupos de estudiantes",
|
||||
"gradebook.GradebookFilters.includeCourseTeamMembersFilterLabel": "Incluir miembros del equipo del curso",
|
||||
"gradebook.GradebookFilters.assignmentFilterLabel": "Tarea",
|
||||
"gradebook.GradebookFilters.assignmentTypesLabel": "Tipos de tareas",
|
||||
"gradebook.GradebookFilters.maxGradeFilterLabel": "Calificación máxima",
|
||||
"gradebook.GradebookFilters.minGradeFilterLabel": "Calificación mínima",
|
||||
"gradebook.GradebookFilters.cohorts": "Cohortes",
|
||||
"gradebook.GradebookFilters.cohortsAll": "Cohortes-todas",
|
||||
"gradebook.GradebookFilters.tracks": "Seguimientos",
|
||||
"gradebook.GradebookFilters.trackAll": " Seguimiento de todo",
|
||||
"gradebook.GradebookFilters.closeFilters": "Filtros cerrados",
|
||||
"gradebook.GradebookHeader.backButton": "Volver al Panel de Control",
|
||||
"gradebook.GradebookHeader.appLabel": "Libro de Calificaciones",
|
||||
"gradebook.GradebookHeader.frozenWarning": "Las calificaciones para este curso se encuentran congeladas. La edición de las calificaciones ya no se encuentra habilitada. ",
|
||||
"gradebook.GradebookHeader.unauthorizedWarning": "No tienes autorización para ver el libro de calificaciones de este curso. ",
|
||||
"gradebook.GradebookHeader.toActivityLogButton": "Ver historial de administración masiva",
|
||||
"gradebook.GradebookHeader.toGradesView": "Volver al libro de calificaciones.",
|
||||
"gradebook.GradesView.BulkManagementControls.bulkManagementLabel": "Descargar calificaciones",
|
||||
"gradebook.GradesView.EditModal.headers.assignment": "Tarea",
|
||||
"gradebook.GradesView.EditModal.headers.currentGrade": "Calificación actual",
|
||||
"gradebook.GradesView.EditModal.headers.originalGrade": "Calificación original",
|
||||
"gradebook.GradesView.EditModal.headers.student": "Estudiante",
|
||||
"gradebook.GradesView.EditModal.title": "Editar calificaciones",
|
||||
"gradebook.GradesView.EditModal.closeText": "Cancelar",
|
||||
"gradebook.GradesView.EditModal.contactSupport": "Mostrar las acciones más recientes (máximo 5). Para ver más, por favor contacta a soporte.",
|
||||
"gradebook.GradesView.EditModal.saveVisibility": "Nota: una vez hayas guardado, tus cambios serán visibles para los estudiantes.",
|
||||
"gradebook.GradesView.EditModal.saveGrade": "Guardar calificaciones",
|
||||
"gradebook.GradesView.EditModal.Overrides.adjustedGradeHeader": "Ajustar calificación",
|
||||
"gradebook.GradesView.EditModal.Overrides.dateHeader": "Fecha",
|
||||
"gradebook.GradesView.EditModal.Overrides.graderHeader": "Calificador",
|
||||
"gradebook.GradesView.EditModal.Overrides.reasonHeader": "Razón",
|
||||
"gradebook.GradesTab.usersVisibilityLabel'": "Mostrando {filteredUsers} de {totalUsers} estudiantes en total",
|
||||
"gradebook.GradesView.editFilterLabel": "Editar filtros ",
|
||||
"gradebook.GradesView.table.headings.email": "Correo electrónico",
|
||||
"gradebook.GradesView.table.headings.totalGrade": "Calificación total (%)",
|
||||
"gradebook.GradesView.table.headings.username": "Nombre de usuario",
|
||||
"gradebook.GradesView.table.labels.studentKey": "Llave de estudiante*",
|
||||
"gradebook.GradesView.table.labels.username": "Nombre de usuario",
|
||||
"gradebook.GradesView.table.totalGradePercentage": "Los valores de las calificaciones totales serán siempre mostrados en porcentajes",
|
||||
"gradebook.BulkManagementHistoryView.csvUploadLabel": "Subir calificación en CSV",
|
||||
"gradebook.GradesView.importGradesBtnText": "Importar calificaciones",
|
||||
"gradebook.GradesView.ImportSuccessToast.description": "¡Importación exitosa! Las calificaciones serán actualizadas momentáneamente. ",
|
||||
"gradebook.GradesView.ImportSuccessToast.showHistoryViewBtn": "Ver actividad del log",
|
||||
"gradebook.GradesView.InterventionsReport.title": "Reporte de intervenciones",
|
||||
"gradebook.GradesView.InterventionsReport.description": "¿Necesitas encontrar estudiantes que no estén teniendo un buen rendimiento? Descarga el reporte de intervenciones para obtener métricas de comportamiento como lo son las visitas e intentos. ",
|
||||
"gradebook.GradesView.InterventionsReport.downloadBtn": "Descargar de intervenciones",
|
||||
"gradebook.GradesView.filterHeading": "Paso 1: Filtra el reporte de calificaciones",
|
||||
"gradebook.GradesView.gradebookStepHeading": "Paso 2: Mira o modifica las calificaciones individuales",
|
||||
"gradebook.GradesView.mastersHint": "Disponible solo para estudiante en el seguimiento máster",
|
||||
"gradebook.GradesView.PageButtons.prevPage": "Página anterior",
|
||||
"gradebook.GradesView.PageButtons.nextPage": "Siguiente página",
|
||||
"gradebook.GradesView.scoreViewLabel": "Ver puntaje",
|
||||
"gradebook.GradesView.absoluteOption": "Absoluto",
|
||||
"gradebook.GradesView.percentOption": "Porcentaje",
|
||||
"gradebook.GradesView.search.label": "Busca a un estudiante",
|
||||
"gradebook.GradesView.search.hint": "Busca por nombre de usuario, correo electrónico o llave de estudiante",
|
||||
"gradebook.GradesView.editSuccessAlert": "La calificación ha sido editada de manera exitosa. Podrás apreciar un retraso mínimo mientras se realizan las actualizaciones en el libro de calificaciones. ",
|
||||
"gradebook.GradesView.maxCourseGradeInvalid": "La máxima calificación de curso debe estar entre 0 y 100",
|
||||
"gradebook.GradesView.minCourseGradeInvalid": "La calificación de curso mínima debe estar entre 0 y 100",
|
||||
"gradebook.GradesTab.FilterBadges.assignment": "Tarea",
|
||||
"gradebook.GradesTab.FilterBadges.assignmentGrade": "Calificación de la tarea",
|
||||
"gradebook.GradesTab.FilterBadges.assignmentType": "Tipo de tarea",
|
||||
"gradebook.GradesTab.FilterBadges.cohort": "Cohorte",
|
||||
"gradebook.GradesTab.FilterBadges.courseGrade": "Calificación del curso",
|
||||
"gradebook.GradesTab.FilterBadges.includeCourseRoleMembers": "Incluir miembros del equipo del curso",
|
||||
"gradebook.GradesTab.FilterBadges.track": "Hacer seguimiento"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user