Compare commits

...

76 Commits

Author SHA1 Message Date
Jawayria
46e4c78af8 Merge pull request #185 from openedx/jawayria/fix-release-ci
fix: Added semantic-release v17 in package.json to fix release CI
2022-02-28 18:44:58 +05:00
Jawayria
affbcbeb19 fix: Added semantic-release v17 in package.json to fix release CI 2022-02-28 17:31:34 +05:00
Jawayria
8c10919eb9 Merge pull request #177 from openedx/jenkins/node-16-2b56d27
feat: Added support for node v16
2022-02-25 17:25:02 +05:00
edX requirements bot
314781ac0b feat: Added support for Node v16 2022-02-25 17:22:36 +05:00
Sarina Canelake
b75ab299bd Merge DEPR automation workflow
Add DEPR workflow automation
2022-02-24 15:21:45 -05:00
Sarina Canelake
1fb4475b9a build: add DEPR workflow automation 2022-02-23 14:36:53 -05:00
Renovate Bot
2b56d270a2 chore(deps): update dependency @edx/frontend-platform to v1.14.1 2021-11-29 09:47:56 +00:00
Renovate Bot
395c9240a0 chore(deps): update dependency @edx/frontend-platform to v1.14.0 2021-11-08 09:03:26 +00:00
Renovate Bot
60ceedced9 chore(deps): update dependency redux to v4.1.2 2021-11-01 09:59:30 +00:00
Renovate Bot
032e4dd73f chore(deps): update dependency react-redux to v7.2.6 2021-11-01 09:48:29 +00:00
Renovate Bot
212bc015ad fix(deps): update dependency @fortawesome/react-fontawesome to v0.1.16 2021-10-25 09:42:17 +00:00
Renovate Bot
d72eaa6fab chore(deps): update dependency husky to v7.0.4 2021-10-25 09:30:59 +00:00
Ned Batchelder
1f5b74de21 build: no need for local commitlint.config.js 2021-10-22 14:23:04 -04:00
Ned Batchelder
07728e1498 build: use the organization commitlint check 2021-10-07 13:48:27 -04:00
Renovate Bot
5d44307136 chore(deps): update commitlint monorepo to v13.2.0 2021-10-04 08:21:39 +00:00
Renovate Bot
1769069cfe chore(deps): update dependency @edx/frontend-platform to v1.12.7 2021-09-20 08:33:36 +00:00
Renovate Bot
2fb0cac399 chore(deps): update dependency @edx/frontend-platform to v1.12.6 2021-09-13 11:48:51 +00:00
Renovate Bot
807dc66714 chore(deps): update dependency react-router-dom to v5.3.0 2021-09-06 08:38:27 +00:00
Renovate Bot
ea837695e9 chore(deps): update dependency react-redux to v7.2.5 2021-09-06 08:26:11 +00:00
stvn
e4801b8b81 merge(#135): renovate/codecov-codecov-action-2.x
commits
=======
- chore(deps): update codecov/codecov-action action to v2
2021-09-01 15:35:58 -07:00
Renovate Bot
89337c4819 chore(deps): update codecov/codecov-action action to v2 2021-08-30 08:41:29 +00:00
Renovate Bot
c75f6c079e chore(deps): update dependency husky to v7.0.2 2021-08-30 08:41:09 +00:00
Renovate Bot
77c251467c chore(deps): update dependency @edx/frontend-platform to v1.12.4 2021-08-23 09:20:49 +00:00
Renovate Bot
caba23d51b chore(deps): update dependency @edx/frontend-platform to v1.12.3 2021-08-16 06:55:48 +00:00
stvn
efbae26c56 merge(#137): renovate/major-commitlint-monorepo
commits
=======
- chore(deps): update commitlint monorepo to v13
2021-08-10 10:34:25 -07:00
Renovate Bot
efeacb8b73 chore(deps): update commitlint monorepo to v13 2021-08-10 06:39:06 +00:00
stvn
a0865c9c56 merge(#131): renovate/husky-7.x
commits
=======
- chore(deps): update dependency husky to v7
2021-08-09 23:34:47 -07:00
Renovate Bot
7cfd6932d5 chore(deps): update dependency husky to v7 2021-08-09 08:59:46 +00:00
Renovate Bot
e2f92992b6 fix(deps): update font awesome 2021-08-09 08:49:15 +00:00
Renovate Bot
f37e6c164e chore(deps): update dependency redux to v4.1.1 2021-08-09 08:35:40 +00:00
Renovate Bot
fef30fb8b5 chore(deps): update dependency @edx/frontend-platform to v1.11.3 2021-08-02 06:43:59 +00:00
Renovate Bot
bcac04d0cc chore(deps): update dependency codecov to v3.8.3 2021-07-26 07:06:11 +00:00
Renovate Bot
15ff0203ab chore(deps): update dependency @edx/frontend-platform to v1.11.1 2021-07-12 08:08:45 +00:00
stvn
940294d2a0 merge(#93): renovate/major-commitlint-monorepo
commits
=======
- chore(deps): update commitlint monorepo to v12
2021-06-14 15:35:19 -07:00
Renovate Bot
acd4a843a4 chore(deps): update commitlint monorepo to v12 2021-06-14 20:17:17 +00:00
Renovate Bot
d8ee5425bf chore(deps): update dependency @edx/paragon to v12.8.0 2021-06-14 20:13:11 +00:00
Renovate Bot
1d9e8d3c47 chore(deps): update dependency @edx/frontend-platform to v1.11.0 2021-06-14 20:04:09 +00:00
stvn
4d370f8a75 merge(#117): renovate/husky-6.x
commits
=======
- chore(deps): update dependency husky to v6
2021-06-11 23:22:51 -07:00
Renovate Bot
2a2be8eddb chore(deps): update dependency husky to v6 2021-06-11 20:56:20 +00:00
Renovate Bot
e7624adbfb chore(deps): update dependency @edx/frontend-build to v5.6.14 2021-06-11 20:45:14 +00:00
Renovate Bot
5d0a418e85 chore(deps): update dependency redux to v4.1.0 2021-06-09 07:17:17 +00:00
stvn
f5b18cdd54 merge(#111): renovate/actions-setup-node-2.x
commits
=======
- chore(deps): update actions/setup-node action to v2
2021-06-08 10:26:22 -07:00
Renovate Bot
d5d290bcbe chore(deps): update actions/setup-node action to v2 2021-06-08 08:45:20 +00:00
Renovate Bot
49c02c157b chore(deps): update react monorepo to v16.14.0 2021-06-08 08:35:06 +00:00
Renovate Bot
94b4aa7402 chore(deps): update dependency react-redux to v7.2.4 2021-06-08 08:16:27 +00:00
stvn
a9fe23287f merge(#19): build/renovate
commits
=======
- build(renovate): fix json syntax
2021-06-07 22:38:00 -07:00
stvn
30874b4972 build(renovate): fix json syntax 2021-06-07 22:37:21 -07:00
stvn
14d53ef514 merge(#125): build/renovate-stricter
commits
=======
- build(renovate): be more selective about automerging devDependencies
2021-06-04 13:41:14 -07:00
stvn
5c9270d88a build(renovate): be more selective about automerging devDependencies 2021-06-04 13:22:06 -07:00
Renovate Bot
f70ca27b34 chore(deps): update dependency react-router-dom to v5.2.0 2021-06-04 01:53:30 +00:00
Renovate Bot
d247e88541 fix(deps): update font awesome 2021-06-04 01:32:35 +00:00
Renovate Bot
ea257afcca chore(deps): update dependency husky to v3.1.0 2021-06-03 22:39:52 +00:00
Renovate Bot
24603cf98f chore(deps): update dependency enzyme-adapter-react-16 to v1.15.6 2021-06-03 22:14:10 +00:00
Renovate Bot
4249bbc6df chore(deps): update dependency enzyme to v3.11.0 2021-06-03 21:47:26 +00:00
Renovate Bot
611beb8294 chore(deps): pin dependencies 2021-06-03 21:20:20 +00:00
Renovate Bot
87803604b1 chore(deps): update dependency codecov to v3.8.2 2021-06-03 20:52:09 +00:00
Renovate Bot
99344d93a4 chore(deps): update commitlint monorepo 2021-06-03 20:21:45 +00:00
stvn
2a718743ea merge(#124): build/renovate
commits
=======
- build(renovate): be more liberal about what automerges
2021-06-03 11:15:55 -07:00
stvn
4fe8909ad5 build(renovate): be more liberal about what automerges
based on https://github.com/edx/frontend-app-account .
2021-06-03 10:48:02 -07:00
stvn
a0dc37dfb5 merge: stvn/own/code 2021-05-26 13:42:27 -07:00
stvn
e4917030fa build: add CODEOWNERS; edx/community-engineering
Background
==========
As part of our Squad-based ownership, we should stay on top of what
happens in these repositories. However, due to the number of
repositories (and subsequently pull requests) across the edX ecosystem,
it is challenging to stay on top of notifications, separating the
'signal' from the 'noise'. Email filters can go a long way to taming
Inbox notifications, but this is manual and requires maintenance as
Squad ownership changes. It also fails to account for Github-specific behavior.

Proposal
========
By leveraging Github support for `CODEOWNERS` files [1],
we can ensure that our team is at least CCed explicitly, here,
in the form a requested review. This request is just that, a request,
not a requirement; we are not enacting any new merge requirements
at this time.

- [1] https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners
2021-05-26 12:15:49 -07:00
David Joy
c756f42c28 docs: Updating README with repository details. (#122)
* docs: Specify component usage requirements in the README.

This includes both the component's dependency on @edx/frontend-platform, as well as its required environment variables.

* docs: fix verbatim formatting

* docs: improving footer README

Including headings and formatting consistent with frontend-component-header.  Hopefully others soon.
2021-05-14 12:57:09 -04:00
Renovate Bot
1b6a5eda0b chore(deps): update dependency @edx/frontend-platform to v1.8.4 2021-02-07 11:57:37 +00:00
David Joy
cbaf4bbb9e fix: remove unnecessary paragon peer dependency (#114)
The actual component code doesn’t use paragon.  Only the example app does, meaning this isn’t really a peer dependency.
2021-02-04 14:25:31 -05:00
Renovate Bot
c990cbbf5e fix(deps): update font awesome 2021-01-31 09:56:38 +00:00
Renovate Bot
b41af87b8e chore(deps): update dependency @edx/frontend-platform to v1.8.1 2021-01-23 11:58:46 +00:00
Carla Duarte
a7d59a874c Merge pull request #108 from edx/ciduarte/AA-465
fix: remove unnecessary aria-label
2021-01-07 09:33:22 -05:00
Carla Duarte
d66d3b7b62 fix: remove unnecessary aria-label 2021-01-06 17:23:50 -05:00
Jawayria
7095e79471 Merge pull request #103 from Jawayria/update-badge
Updated the build status badge to point to travis-ci.com
2020-12-17 13:47:00 +05:00
Renovate Bot
4a9b3f2bfb fix(deps): update font awesome 2020-12-11 09:58:08 +00:00
Jeff Chaves
e4d23d366b feat: upgrading deps, retheme with from @edx/brand, pull logo from config settings (#104)
* feat: upgrading deps, use logo from @edx/brand

* feat: upgrading peer deps

* feat: pr feedback

* update snapshots and example app

* pull config from AppContext

Co-authored-by: Adam Stankiewicz <agstanki@gmail.com>
2020-11-30 14:00:26 -05:00
Adam Stankiewicz
2e75cc95cb ci: migrate to use GH actions (#106)
* ci: migrate to use GH actions

* ci: change gh action names
2020-11-30 13:56:29 -05:00
Jawayria
f64faf9f14 Updated the build status badge to point to travis-ci.com 2020-11-20 15:01:06 +05:00
Renovate Bot
0be3098191 chore(deps): update dependency codecov to v3.7.2 2020-07-22 03:36:15 +00:00
renovate[bot]
799cdb3b3c chore(deps): update dependency codecov to v3.7.1 [security] (#95)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-07-21 09:26:50 -04:00
Renovate Bot
370ae52c04 fix(deps): update dependency @fortawesome/fontawesome-svg-core to v1.2.30 2020-07-15 18:20:09 +00:00
23 changed files with 14115 additions and 11723 deletions

19
.env.development Normal file
View File

@@ -0,0 +1,19 @@
ACCESS_TOKEN_COOKIE_NAME=edx-jwt-cookie-header-payload
BASE_URL=localhost:8080
CREDENTIALS_BASE_URL=http://localhost:18150
CSRF_TOKEN_API_PATH=/csrf/api/v1/token
ECOMMERCE_BASE_URL=http://localhost:18130
LANGUAGE_PREFERENCE_COOKIE_NAME=openedx-language-preference
LMS_BASE_URL=http://localhost:18000
LOGIN_URL=http://localhost:18000/login
LOGOUT_URL=http://localhost:18000/login
MARKETING_SITE_BASE_URL=http://localhost:18000
ORDER_HISTORY_URL=localhost:1996/orders
REFRESH_ACCESS_TOKEN_ENDPOINT=http://localhost:18000/login_refresh
SEGMENT_KEY=null
SITE_NAME=Open edX
USER_INFO_COOKIE_NAME=edx-user-info
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
FAVICON_URL=https://edx-cdn.org/v3/default/favicon.ico

View File

@@ -1,3 +1,4 @@
coverage
dist
example
node_modules

1
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1 @@
* @edx/community-engineering

View File

@@ -0,0 +1,19 @@
# Run the workflow that adds new tickets that are either:
# - labelled "DEPR"
# - title starts with "[DEPR]"
# - body starts with "Proposal Date" (this is the first template field)
# to the org-wide DEPR project board
name: Add newly created DEPR issues to the DEPR project board
on:
issues:
types: [opened]
jobs:
routeissue:
uses: openedx/.github/.github/workflows/add-depr-ticket-to-depr-board.yml@master
secrets:
GITHUB_APP_ID: ${{ secrets.GRAPHQL_AUTH_APP_ID }}
GITHUB_APP_PRIVATE_KEY: ${{ secrets.GRAPHQL_AUTH_APP_PEM }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_ISSUE_BOT_TOKEN }}

35
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: Default CI
on:
push:
branches:
- 'master'
pull_request:
branches:
- '**'
jobs:
tests:
runs-on: ubuntu-latest
strategy:
matrix:
node: [12, 14, 16]
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Setup Nodejs
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: npm ci
- name: Validate package-lock.json changes
run: make validate-no-uncommitted-package-lock-changes
- name: Lint
run: npm run lint
- name: Test
run: npm run test
- name: i18n_extract
run: npm run i18n_extract
- name: Coverage
uses: codecov/codecov-action@v2

10
.github/workflows/commitlint.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
# Run commitlint on the commit messages in a pull request.
name: Lint Commit Messages
on:
- pull_request
jobs:
commitlint:
uses: edx/.github/.github/workflows/commitlint.yml@master

37
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
name: Release CI
on:
push:
branches:
- master
jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: 12
- name: Install dependencies
run: npm ci
- name: Validate package-lock.json changes
run: make validate-no-uncommitted-package-lock-changes
- name: Lint
run: npm run lint
- name: Test
run: npm run test
- name: i18n_extract
run: npm run i18n_extract
- name: Coverage
uses: codecov/codecov-action@v2
- name: Build
run: npm run build
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.SEMANTIC_RELEASE_GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.SEMANTIC_RELEASE_NPM_TOKEN }}
run: npx semantic-release

1
.gitignore vendored
View File

@@ -9,3 +9,4 @@ temp
src/i18n/transifex_input.json
temp/babel-plugin-react-intl
/.vscode
module.config.js

View File

@@ -1,19 +0,0 @@
language: node_js
node_js: 12
before_install:
- npm install -g npm@6
install:
- npm install
script:
- make validate-no-uncommitted-package-lock-changes
- npm run lint
- npm run i18n_extract
- npm run test
- npm run build
after_success:
- npx semantic-release
- codecov
env:
global:
- secure: dxQadqP6tsoJzHcqs/Hs5AjE42z45q8ZeWKP5HcjbXoJURB4gc1uIxLky0FA6ZpulaTgRVTLcWQbx9yOODc9PQuFnFEDWlCg5EP8tONzeu7BVlJvV5eakgGUhl9w2pekBKsTGhK5dDg2y2D8bGfIL55UX81uiWeytp8s/y8QNs/FNXx9ScJnfhnC+2RfW52fB7iW12F1VYdQfVe43o5PsHze+YhB3FU/ztGe3iMaQiq9QplZWpvqQMpI7pTjyUAX8ITiiPS6UvLFObgpXpfjZdgd+yveFoi3z8o8F0NkmzBphFeSYFjFZE0qJ8bnGNIZldanMeuUgHmDeTwVmKQFhH2LqqnfcdGgW6UsKcHkSN1G51zzad2dEwAHrgxj1NkMp3JfEed2C7Kvntl6KRjVDmYZqHJvt+e+AHNbpjzblOW8tYMIrdz0TeJdk4D9pP3B3tRCtP6fvQ3GLzAMnaCrSsN6hZ9YVxWku8sg8WNEDHl14sZsdgk312MlHIdiUw97FHGrqx/NCix4IkUlCBDbKYbKzbZp20FfzZcwNRNH74+k6xpOnMGSfq8gByEhm9y02MBL76HiAI2VGct2La1ExaUfoikYGoNaZpFcZyOZKo6PYTYHpiUJmqrEnDyVQEOOXUaVsxWXwnYq/mU4nOEPKCRbNpPoksZdNxf6jlmMi8s=
- secure: lrlV0WQaXTRJ2lqDkFZ+1RkRb7YM/STOViOHUNboXb5+1ReVwY0wklFDVk/Qigp3jkbqWfzkBmEjSDVGDLD61QjpGY4BsxZ/Jn3+KUdo0n82Ym6cI/je1fH2gqDLi4U8bylmnkI5oEjV/1txDxkj4hF5w/Leo/oGue3xQohpi//ihhm/PxzExj+QiDqyZPZ5RQZeqLfPEU3Wff04vLE5bRmy1nDTZrgm5Wb1n5ItGsyrUyrCGuAM9kIEun65Snb8hxCuU9pSm1w/xF73iOGLiiC8KZhLu6SxSKoC872ai1GpUXNIqA8kpVeH0Erf5opMtqJT3jTTan/VOFQEoOeAKhR0ga+5rfK2jkhhN77B98dGVndNCfBpDlgQxVv42H6riFk3payZT262QiUqDejiBDtSPTokTGxf7xFtQkQQahhxVXzC2HRKEkDTXNSP8cvk2JJ4zCcUgxJpycudLMuC/Xv0upK+Q0caItBrHxfVNnRKkjKqlDxRhA8nXTY8d2n19FNi7wahCECbyweJJ76EaJaa/Ib6remUBrbGLoQ2PkaSMBHAcn3+7+H/6x11b2s1RHj5qyfIyrvZcDDyNuxdXwpOkhtrkwZsjgtOfXL6IuxW5FExgPPr8B9nNwJJKdTxyxgfqtwBR5+m9nrMixzT6AMe95torZ6eX40gKZ/O9EU=

View File

@@ -1,61 +1,95 @@
#########################
frontend-component-footer
=========================
#########################
|Build Status| |Coveralls| |npm_version| |npm_downloads| |license|
|semantic-release|
|Build Status| |Codecov| |npm_version| |npm_downloads| |license| |semantic-release|
frontend-component-footer is a library containing a site footer
component for use when building Open edX frontend applications.
Usage
-----
To install frontend-component-footer into your project::
npm i --save @edx/frontend-component-footer
Component Usage::
import Footer, { messages } from '@edx/frontend-component-footer';
...
<Footer
onLanguageSelected={(languageCode) => {/* set language */}}
supportedLanguages={[
{ label: 'English', value: 'en'},
{ label: 'Español', value: 'es' },
]}
/>
- onLanguageSelected (optional)
- supportedLanguages (optional)
Styles (project.scss)::
@import '@edx/frontend-component-footer/src/footer.scss';
********
Overview
********
A generic footer for Open edX micro-frontend applications. It includes a logo and an optional language selector dropdown.
************
Requirements
------------
************
This component uses ``@edx/frontend-i18n``. Any containing app must provide ``@edx/frontend-i18n`` as a peer dependency, and be wrapped inside an ``IntlProvider`` element, whether or not your consuming application is actually localized. For a basic default locale (English) version, follow the ``IntlProvider`` example in the sample application in `src/index.jsx <src/index.jsx>`__.
This component uses ``@edx/frontend-platform`` services such as i18n, analytics, configuration, and the ``AppContext`` React component, and expects that it has been loaded into a micro-frontend that has been properly initialized via ``@edx/frontend-platform``'s ``initialize`` function. `Please visit the frontend template application to see an example. <https://github.com/edx/frontend-template-application/blob/3355bb3a96232390e9056f35b06ffa8f105ed7ca/src/index.jsx>`_
Environment Variables
=====================
This component requires that the following environment variable be set by the consuming micro-frontend.
* ``LOGO_TRADEMARK_URL`` - This is a URL to a logo for use in the footer. This is a different environment variable than ``LOGO_URL`` (used in frontend-component-header) to accommodate sites that would like to have additional trademark information on a logo in the footer, such as a (tm) or (r) symbol.
************
Installation
************
To install this footer into your Open edX micro-frontend, run the following command in your MFE:
``npm i --save @edx/frontend-component-footer``
This will make the component available to be imported into your application.
*****
Usage
*****
This library has the following exports:
* ``(default)``: The footer as a React component.
* ``messages``: Internationalization messages suitable for use with `@edx/frontend-platform/i18n <https://edx.github.io/frontend-platform/module-Internationalization.html>`_
* ``dist/footer.scss``: A SASS file which contains style information for the component. It should be imported into the micro-frontend's own SCSS file.
<Footer /> component props
==========================
* onLanguageSelected: Provides the footer with an event handler for when the user selects a
language from its dropdown.
* supportedLanguages: An array of objects representing available languages. See example below for object shape.
Examples
========
Component Usage Example::
import Footer, { messages } from '@edx/frontend-component-footer';
...
<Footer
onLanguageSelected={(languageCode) => {/* set language */}}
supportedLanguages={[
{ label: 'English', value: 'en'},
{ label: 'Español', value: 'es' },
]}
/>
* `An example of minimal component and messages usage. <https://github.com/edx/frontend-template-application/blob/3355bb3a96232390e9056f35b06ffa8f105ed7ca/src/index.jsx#L23>`_
* `An example of SCSS file usage. <https://github.com/edx/frontend-template-application/blob/3cd5485bf387b8c479baf6b02bf59e3061dc3465/src/index.scss#L9>`_
***********
Development
-----------
***********
Start the dev server::
Install dependencies::
npm i && npm start
npm i
Build the component::
Start the development server::
npm run build
npm start
.. |Build Status| image:: https://api.travis-ci.org/edx/frontend-component-footer.svg?branch=master
:target: https://travis-ci.org/edx/frontend-component-footer
.. |Coveralls| image:: https://img.shields.io/coveralls/edx/frontend-component-footer.svg?branch=master
:target: https://coveralls.io/github/edx/frontend-component-footer
Build a production distribution::
npm run build
.. |Build Status| image:: https://api.travis-ci.com/edx/frontend-component-footer.svg?branch=master
:target: https://travis-ci.com/edx/frontend-component-footer
.. |Codecov| image:: https://img.shields.io/codecov/c/github/edx/frontend-component-footer
:target: @edx/frontend-component-footer
.. |npm_version| image:: https://img.shields.io/npm/v/@edx/frontend-component-footer.svg
:target: @edx/frontend-component-footer
.. |npm_downloads| image:: https://img.shields.io/npm/dt/@edx/frontend-component-footer.svg

View File

@@ -1,3 +0,0 @@
module.exports = {
extends: ['@commitlint/config-angular'],
};

View File

@@ -1,22 +1,33 @@
import 'babel-polyfill';
import React from 'react';
import { render } from 'react-dom';
import { IntlProvider } from '@edx/frontend-platform/i18n';
import ReactDOM from 'react-dom';
import { initialize, getConfig, subscribe, APP_READY } from '@edx/frontend-platform';
import { AppContext, AppProvider } from '@edx/frontend-platform/react';
import Footer from '@edx/frontend-component-footer';
import './index.scss';
import Footer from '../src';
const App = () => (
<div>
<IntlProvider locale="en">
<Footer
onLanguageSelected={() => {}}
supportedLanguages={[
{ label: 'English', value: 'en' },
{ label: 'Español', value: 'es' },
]}
/>
</IntlProvider>
</div>
);
subscribe(APP_READY, () => {
ReactDOM.render(
<AppProvider>
<AppContext.Provider value={{
authenticatedUser: null,
config: getConfig(),
}}>
<Footer
onLanguageSelected={() => {}}
supportedLanguages={[
{ label: 'English', value: 'en' },
{ label: 'Español', value: 'es' },
]}
/>
</AppContext.Provider>
</AppProvider>,
document.getElementById('root'),
);
});
render(<App />, document.getElementById('root'));
initialize({
messages: []
});

View File

@@ -1,2 +1,6 @@
@import "~@edx/paragon/scss/core/core.scss";
@import "../src/footer";
@import "@edx/brand/paragon/fonts";
@import "@edx/brand/paragon/variables";
@import "@edx/paragon/scss/core/core";
@import "@edx/brand/paragon/overrides";
@import "@edx/frontend-component-footer/footer";

25291
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -19,8 +19,7 @@
],
"husky": {
"hooks": {
"pre-commit": "npm run lint",
"commit-msg": "commitlint -e $GIT_PARAMS"
"pre-commit": "npm run lint"
}
},
"repository": {
@@ -34,33 +33,33 @@
},
"homepage": "https://github.com/edx/frontend-component-footer#readme",
"devDependencies": {
"@commitlint/cli": "8.2.0",
"@commitlint/config-angular": "8.2.0",
"@commitlint/prompt": "8.2.0",
"@commitlint/prompt-cli": "8.2.0",
"@edx/frontend-build": "^2.0.4",
"@edx/frontend-platform": "1.1.6",
"@edx/paragon": "7.1.5",
"codecov": "3.6.5",
"enzyme": "3.10.0",
"enzyme-adapter-react-16": "1.14.0",
"husky": "3.0.9",
"@edx/brand": "npm:@edx/brand-openedx@1.1.0",
"@edx/frontend-build": "9.1.0",
"@edx/frontend-platform": "^1.14.1",
"@edx/paragon": "^16.0.0",
"codecov": "3.8.3",
"enzyme": "3.11.0",
"enzyme-adapter-react-16": "1.15.6",
"husky": "7.0.4",
"prop-types": "15.7.2",
"react": "16.10.2",
"react-dom": "16.10.2",
"react-test-renderer": "16.10.2",
"reactifex": "1.1.1"
"react": "16.14.0",
"react-dom": "16.14.0",
"react-redux": "7.2.6",
"react-router-dom": "5.3.0",
"react-test-renderer": "16.14.0",
"reactifex": "1.1.1",
"redux": "4.1.2",
"semantic-release": "^17.0.0"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "1.2.29",
"@fortawesome/free-brands-svg-icons": "5.8.2",
"@fortawesome/free-regular-svg-icons": "5.8.2",
"@fortawesome/free-solid-svg-icons": "5.8.2",
"@fortawesome/react-fontawesome": "0.1.11"
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
"@fortawesome/free-regular-svg-icons": "5.15.4",
"@fortawesome/free-solid-svg-icons": "5.15.4",
"@fortawesome/react-fontawesome": "0.1.16"
},
"peerDependencies": {
"@edx/frontend-platform": "^1.1.4",
"@edx/paragon": "^7.0.0",
"@edx/frontend-platform": "^1.8.0",
"prop-types": "^15.5.10",
"react": "^16.9.0",
"react-dom": "^16.9.0"

View File

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

View File

@@ -2,11 +2,16 @@ import React from 'react';
import PropTypes from 'prop-types';
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
import { sendTrackEvent } from '@edx/frontend-platform/analytics';
import { ensureConfig } from '@edx/frontend-platform/config';
import { AppContext } from '@edx/frontend-platform/react';
import messages from './Footer.messages';
import FooterLogo from '../edx-openedx-logo-tag.png';
import LanguageSelector from './LanguageSelector';
ensureConfig([
'LOGO_TRADEMARK_URL',
], 'Footer component');
const EVENT_NAMES = {
FOOTER_LINK: 'edx.bi.footer.link',
};
@@ -43,38 +48,40 @@ class SiteFooter extends React.Component {
intl,
} = this.props;
const showLanguageSelector = supportedLanguages.length > 0 && onLanguageSelected;
const { config } = this.context;
return (
<footer
role="contentinfo"
aria-label={intl.formatMessage(messages['footer.logo.ariaLabel'])}
className="footer d-flex border-top py-3 px-4"
>
<div className="container d-flex">
<div className="container-fluid d-flex">
<a
className="d-block mb-3"
className="d-block"
href="https://open.edx.org"
aria-label={intl.formatMessage(messages['footer.logo.ariaLabel'])}
>
<img
style={{ maxWidth: 150 }}
src={logo || FooterLogo}
style={{ maxHeight: 45 }}
src={logo || config.LOGO_TRADEMARK_URL}
alt={intl.formatMessage(messages['footer.logo.altText'])}
/>
</a>
<div className="flex-grow-1" />
{showLanguageSelector &&
{showLanguageSelector && (
<LanguageSelector
options={supportedLanguages}
onSubmit={onLanguageSelected}
/>
}
)}
</div>
</footer>
);
}
}
SiteFooter.contextType = AppContext;
SiteFooter.propTypes = {
intl: intlShape.isRequired,
logo: PropTypes.string,

View File

@@ -2,6 +2,7 @@ import React from 'react';
import renderer from 'react-test-renderer';
import { mount } from 'enzyme';
import { IntlProvider } from '@edx/frontend-platform/i18n';
import { AppContext } from '@edx/frontend-platform/react';
import Footer from './Footer';
@@ -11,7 +12,16 @@ describe('<Footer />', () => {
const tree = renderer
.create((
<IntlProvider locale="en">
<Footer />
<AppContext.Provider
value={{
authenticatedUser: null,
config: {
LOGO_TRADEMARK_URL: process.env.LOGO_TRADEMARK_URL,
},
}}
>
<Footer />
</AppContext.Provider>
</IntlProvider>
))
.toJSON();
@@ -21,7 +31,16 @@ describe('<Footer />', () => {
const tree = renderer
.create((
<IntlProvider locale="es">
<Footer />
<AppContext.Provider
value={{
authenticatedUser: null,
config: {
LOGO_TRADEMARK_URL: process.env.LOGO_TRADEMARK_URL,
},
}}
>
<Footer />
</AppContext.Provider>
</IntlProvider>
))
.toJSON();
@@ -31,13 +50,22 @@ describe('<Footer />', () => {
const tree = renderer
.create((
<IntlProvider locale="en">
<Footer
onLanguageSelected={() => {}}
supportedLanguages={[
{ label: 'English', value: 'en' },
{ label: 'Español', value: 'es' },
]}
/>
<AppContext.Provider
value={{
authenticatedUser: null,
config: {
LOGO_TRADEMARK_URL: process.env.LOGO_TRADEMARK_URL,
},
}}
>
<Footer
onLanguageSelected={() => {}}
supportedLanguages={[
{ label: 'English', value: 'en' },
{ label: 'Español', value: 'es' },
]}
/>
</AppContext.Provider>
</IntlProvider>
))
.toJSON();
@@ -50,13 +78,22 @@ describe('<Footer />', () => {
const mockHandleLanguageSelected = jest.fn();
const wrapper = mount((
<IntlProvider locale="en">
<Footer
onLanguageSelected={mockHandleLanguageSelected}
supportedLanguages={[
{ label: 'English', value: 'en' },
{ label: 'Español', value: 'es' },
]}
/>
<AppContext.Provider
value={{
authenticatedUser: null,
config: {
LOGO_TRADEMARK_URL: process.env.LOGO_TRADEMARK_URL,
},
}}
>
<Footer
onLanguageSelected={mockHandleLanguageSelected}
supportedLanguages={[
{ label: 'English', value: 'en' },
{ label: 'Español', value: 'es' },
]}
/>
</AppContext.Provider>
</IntlProvider>
));

View File

@@ -17,8 +17,8 @@ const LanguageSelector = ({
onSubmit={handleSubmit}
{...props}
>
{/* eslint-disable-next-line jsx-a11y/label-has-for */}
<div className="form-group">
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
<label htmlFor="site-footer-language-select" className="d-inline-block m-0">
<FormattedMessage
id="footer.languageForm.select.label"
@@ -32,8 +32,7 @@ const LanguageSelector = ({
name="site-footer-language-select"
defaultValue={intl.locale}
>
{options.map(({ value, label }) =>
<option key={value} value={value}>{label}</option>)}
{options.map(({ value, label }) => <option key={value} value={value}>{label}</option>)}
</select>
<button className="btn btn-outline-primary btn-sm" type="submit">
<FormattedMessage

View File

@@ -2,24 +2,23 @@
exports[`<Footer /> renders correctly renders with a language selector 1`] = `
<footer
aria-label="edX Home"
className="footer d-flex border-top py-3 px-4"
role="contentinfo"
>
<div
className="container d-flex"
className="container-fluid d-flex"
>
<a
aria-label="edX Home"
className="d-block mb-3"
className="d-block"
href="https://open.edx.org"
>
<img
alt="Powered by Open edX"
src="test-file-stub"
src="https://edx-cdn.org/v3/default/logo-trademark.svg"
style={
Object {
"maxWidth": 150,
"maxHeight": 45,
}
}
/>
@@ -75,24 +74,23 @@ exports[`<Footer /> renders correctly renders with a language selector 1`] = `
exports[`<Footer /> renders correctly renders without a language selector 1`] = `
<footer
aria-label="edX Home"
className="footer d-flex border-top py-3 px-4"
role="contentinfo"
>
<div
className="container d-flex"
className="container-fluid d-flex"
>
<a
aria-label="edX Home"
className="d-block mb-3"
className="d-block"
href="https://open.edx.org"
>
<img
alt="Powered by Open edX"
src="test-file-stub"
src="https://edx-cdn.org/v3/default/logo-trademark.svg"
style={
Object {
"maxWidth": 150,
"maxHeight": 45,
}
}
/>
@@ -106,24 +104,23 @@ exports[`<Footer /> renders correctly renders without a language selector 1`] =
exports[`<Footer /> renders correctly renders without a language selector in es 1`] = `
<footer
aria-label="edX Home"
className="footer d-flex border-top py-3 px-4"
role="contentinfo"
>
<div
className="container d-flex"
className="container-fluid d-flex"
>
<a
aria-label="edX Home"
className="d-block mb-3"
className="d-block"
href="https://open.edx.org"
>
<img
alt="Powered by Open edX"
src="test-file-stub"
src="https://edx-cdn.org/v3/default/logo-trademark.svg"
style={
Object {
"maxWidth": 150,
"maxHeight": 45,
}
}
/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -2,3 +2,25 @@ import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
Enzyme.configure({ adapter: new Adapter() });
// These configuration values are usually set in webpack's EnvironmentPlugin however
// Jest does not use webpack so we need to set these so for testing
process.env.ACCESS_TOKEN_COOKIE_NAME = 'edx-jwt-cookie-header-payload';
process.env.BASE_URL = 'localhost:1995';
process.env.CREDENTIALS_BASE_URL = 'http://localhost:18150';
process.env.CSRF_TOKEN_API_PATH = '/csrf/api/v1/token';
process.env.ECOMMERCE_BASE_URL = 'http://localhost:18130';
process.env.LANGUAGE_PREFERENCE_COOKIE_NAME = 'openedx-language-preference';
process.env.LMS_BASE_URL = 'http://localhost:18000';
process.env.LOGIN_URL = 'http://localhost:18000/login';
process.env.LOGOUT_URL = 'http://localhost:18000/login';
process.env.MARKETING_SITE_BASE_URL = 'http://localhost:18000';
process.env.ORDER_HISTORY_URL = 'localhost:1996/orders';
process.env.REFRESH_ACCESS_TOKEN_ENDPOINT = 'http://localhost:18000/login_refresh';
process.env.SEGMENT_KEY = 'segment_whoa';
process.env.SITE_NAME = 'edX';
process.env.USER_INFO_COOKIE_NAME = 'edx-user-info';
process.env.LOGO_URL = 'https://edx-cdn.org/v3/default/logo.svg';
process.env.LOGO_TRADEMARK_URL = 'https://edx-cdn.org/v3/default/logo-trademark.svg';
process.env.LOGO_WHITE_URL = 'https://edx-cdn.org/v3/default/logo-white.svg';
process.env.FAVICON_URL = 'https://edx-cdn.org/v3/default/favicon.ico';

View File

@@ -7,4 +7,9 @@ module.exports = createConfig('webpack-dev', {
path: path.resolve(__dirname, 'example/dist'),
publicPath: '/',
},
resolve: {
alias: {
'@edx/frontend-component-footer': path.resolve(__dirname, 'src'),
},
},
});