diff --git a/.coverage.babel.config.js b/.coverage.babel.config.js
index e8b54d3..37219fd 100644
--- a/.coverage.babel.config.js
+++ b/.coverage.babel.config.js
@@ -2,7 +2,7 @@ const defaultBabel = require('@plone/volto/babel');
function applyDefault(api) {
const voltoBabel = defaultBabel(api);
- voltoBabel.plugins.push('@babel/plugin-transform-modules-commonjs', 'transform-class-properties', 'istanbul');
+ voltoBabel.plugins.push('istanbul');
return voltoBabel;
}
diff --git a/.gitignore b/.gitignore
index cdcaf46..53b9801 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,9 @@
.vscode/
.history
.eslintrc.js
+.nyc_output
project
+coverage
logs
*.log
npm-debug.log*
diff --git a/.i18n.babel.config.js b/.i18n.babel.config.js
index 2f4e1e8..a900a75 100644
--- a/.i18n.babel.config.js
+++ b/.i18n.babel.config.js
@@ -1,17 +1 @@
-module.exports = function (api) {
- api.cache(true);
- const presets = ['razzle/babel'];
- const plugins = [
- [
- 'react-intl', // React Intl extractor, required for the whole i18n infrastructure to work
- {
- messagesDir: './build/messages/',
- },
- ],
- ];
-
- return {
- plugins,
- presets,
- };
-};
+module.exports = require('@plone/volto/babel');
diff --git a/.project.eslintrc.js b/.project.eslintrc.js
index cfefd89..765070f 100644
--- a/.project.eslintrc.js
+++ b/.project.eslintrc.js
@@ -1,7 +1,9 @@
const fs = require('fs');
const path = require('path');
-const projectRootPath = fs.realpathSync('./project'); // __dirname
+const projectRootPath = fs.existsSync('./project')
+ ? fs.realpathSync('./project')
+ : fs.realpathSync('./../../../');
const packageJson = require(path.join(projectRootPath, 'package.json'));
const jsConfig = require(path.join(projectRootPath, 'jsconfig.json')).compilerOptions;
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8ffad11..e494e35 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+### [2.0.13](https://github.com/eea/volto-industry-theme/compare/2.0.12...2.0.13) - 22 December 2022
+
+#### :bug: Bug Fixes
+
+- fix(cypress): use cypress 10 [Miu Razvan - [`dc81381`](https://github.com/eea/volto-industry-theme/commit/dc813815b3a4aebc00b22c2b758d2d3713c086b9)]
+- fix: replace cypress config file [Miu Razvan - [`177e74f`](https://github.com/eea/volto-industry-theme/commit/177e74fbf29095095a65b10a684554c39d114dfd)]
+- fix: clean up facility/site name before fetching data [Miu Razvan - [`bbb9e6f`](https://github.com/eea/volto-industry-theme/commit/bbb9e6fe6683755442ff0dc72f2601742b74e13d)]
+
+#### :hammer_and_wrench: Others
+
+- tests: remove unused call [valentinab25 - [`f522b13`](https://github.com/eea/volto-industry-theme/commit/f522b1309feec65f6f739c2669888d7a1654bea7)]
+- update scripts [Claudia Ifrim - [`f6cb005`](https://github.com/eea/volto-industry-theme/commit/f6cb005ca554ad7e367a256996e1d584574a810f)]
+- update tests [Claudia Ifrim - [`6b3c382`](https://github.com/eea/volto-industry-theme/commit/6b3c382b7cfdac3211752ff3ce8edab2df8ef792)]
+- update steps [Claudia Ifrim - [`2af8271`](https://github.com/eea/volto-industry-theme/commit/2af8271e002f965fcb16bb4c54ef2273f756bda8)]
+- test(update) JENKINSFILE, do not use cypress binary in env [Nilesh - [`45bd73f`](https://github.com/eea/volto-industry-theme/commit/45bd73f8383a474f6e7a69150552962048f45ffc)]
+- update JENKINSFILE [Nilesh - [`cb642b8`](https://github.com/eea/volto-industry-theme/commit/cb642b87481d94eba465b302549f90edada74a55)]
+- cleanup package.json [Nilesh - [`5671543`](https://github.com/eea/volto-industry-theme/commit/56715435fbf315bdfe627fb25168a78dc124c984)]
+- fix error [Claudia Ifrim - [`ed44532`](https://github.com/eea/volto-industry-theme/commit/ed4453225031d4e3b28af464ac7b46d88026d702)]
+- update gitignore file [Claudia Ifrim - [`a3dadf6`](https://github.com/eea/volto-industry-theme/commit/a3dadf6ade0bfab6faae3e48f712ff3049a050f6)]
### [2.0.12](https://github.com/eea/volto-industry-theme/compare/2.0.11...2.0.12) - 26 October 2022
#### :hammer_and_wrench: Others
diff --git a/Jenkinsfile b/Jenkinsfile
index 74cd622..3311897 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -6,7 +6,7 @@ pipeline {
NAMESPACE = "@eeacms"
SONARQUBE_TAGS = "volto.eea.europa.eu,industry.eea.europa.eu"
DEPENDENCIES = ""
- VOLTO = "16.0.0-alpha.14"
+ VOLTO = "alpha"
}
stages {
@@ -41,19 +41,19 @@ pipeline {
"ES lint": {
node(label: 'docker') {
- sh '''docker run -i --rm --name="$BUILD_TAG-eslint" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO="$VOLTO" plone/volto-addon-ci eslint'''
+ sh '''docker pull plone/volto-addon-ci:alpha; docker run -i --rm --name="$BUILD_TAG-eslint" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO=$VOLTO plone/volto-addon-ci:alpha eslint'''
}
},
"Style lint": {
node(label: 'docker') {
- sh '''docker run -i --rm --name="$BUILD_TAG-stylelint" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO="$VOLTO" plone/volto-addon-ci stylelint'''
+ sh '''docker pull plone/volto-addon-ci:alpha; docker run -i --rm --name="$BUILD_TAG-stylelint" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO=$VOLTO plone/volto-addon-ci:alpha stylelint'''
}
},
"Prettier": {
node(label: 'docker') {
- sh '''docker run -i --rm --name="$BUILD_TAG-prettier" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO="$VOLTO" plone/volto-addon-ci prettier'''
+ sh '''docker pull plone/volto-addon-ci:alpha; docker run -i --rm --name="$BUILD_TAG-prettier" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO=$VOLTO plone/volto-addon-ci:alpha prettier'''
}
}
)
@@ -77,8 +77,8 @@ pipeline {
node(label: 'docker') {
script {
try {
- sh '''docker pull plone/volto-addon-ci'''
- sh '''docker run -i --name="$BUILD_TAG-volto" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" plone/volto-addon-ci'''
+ sh '''docker pull plone/volto-addon-ci:alpha'''
+ sh '''docker run -i --name="$BUILD_TAG-volto" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO=$VOLTO plone/volto-addon-ci:alpha'''
sh '''rm -rf xunit-reports'''
sh '''mkdir -p xunit-reports'''
sh '''docker cp $BUILD_TAG-volto:/opt/frontend/my-volto-project/coverage xunit-reports/'''
@@ -125,8 +125,8 @@ pipeline {
node(label: 'docker') {
script {
try {
- sh '''docker pull eeacms/plone-backend; docker run -d --rm --name="$BUILD_TAG-plone" -e SITE="Plone" -e PROFILES="eea.kitkat:testing" eeacms/plone-backend'''
- sh '''docker pull plone/volto-addon-ci; docker run -i --name="$BUILD_TAG-cypress" --link $BUILD_TAG-plone:plone -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e DEPENDENCIES="$DEPENDENCIES" -e NODE_ENV=development -e VOLTO="$VOLTO" plone/volto-addon-ci cypress'''
+ sh '''docker pull eeacms/plone-backend; docker run --rm -d --name="$BUILD_TAG-plone" -e SITE="Plone" -e PROFILES="eea.kitkat:testing" eeacms/plone-backend'''
+ sh '''docker pull plone/volto-addon-ci:alpha; docker run -i --name="$BUILD_TAG-cypress" --link $BUILD_TAG-plone:plone -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e DEPENDENCIES="$DEPENDENCIES" -e NODE_ENV=development -e VOLTO=$VOLTO plone/volto-addon-ci:alpha cypress'''
} finally {
try {
sh '''rm -rf cypress-reports cypress-results cypress-coverage'''
diff --git a/Makefile b/Makefile
index 44057ec..aeb0f30 100644
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,12 @@ GREEN=`tput setaf 2`
RESET=`tput sgr0`
YELLOW=`tput setaf 3`
+ifeq ($(wildcard ./project),)
+ NODE_MODULES = "../../../node_modules"
+else
+ NODE_MODULES = "./project/node_modules"
+endif
+
project:
npm install -g yo
npm install -g @plone/generator-volto
@@ -35,16 +41,57 @@ start-backend-docker: ## Starts a Docker-based backend
docker run -it --rm --name=plone -p 8080:8080 -e SITE=Plone -e ADDONS="kitconcept.volto" -e ZCML="kitconcept.volto.cors" plone
.PHONY: test
-test:
- docker pull plone/volto-addon-ci
- docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" plone/volto-addon-ci yarn test --watchAll=false
+test: ## Run jest tests
+ docker pull plone/volto-addon-ci:alpha
+ docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" -e CI="true" plone/volto-addon-ci:alpha
.PHONY: test-update
-test-update:
- docker pull plone/volto-addon-ci
- docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" plone/volto-addon-ci yarn test --watchAll=false -u
+test-update: ## Update jest tests snapshots
+ docker pull plone/volto-addon-ci:alpha
+ docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" -e CI="true" plone/volto-addon-ci:alpha yarn test src/addons/${DIR}/src --watchAll=false -u
+
+.PHONY: stylelint
+stylelint: ## Stylelint
+ $(NODE_MODULES)/stylelint/bin/stylelint.js --allow-empty-input 'src/**/*.{css,less}'
+
+.PHONY: stylelint-overrides
+stylelint-overrides:
+ $(NODE_MODULES)/.bin/stylelint --syntax less --allow-empty-input 'theme/**/*.overrides' 'src/**/*.overrides'
+
+.PHONY: stylelint-fix
+stylelint-fix: ## Fix stylelint
+ $(NODE_MODULES)/stylelint/bin/stylelint.js --allow-empty-input 'src/**/*.{css,less}' --fix
+ $(NODE_MODULES)/.bin/stylelint --syntax less --allow-empty-input 'theme/**/*.overrides' 'src/**/*.overrides' --fix
+
+.PHONY: prettier
+prettier: ## Prettier
+ $(NODE_MODULES)/.bin/prettier --single-quote --check 'src/**/*.{js,jsx,json,css,less,md}'
+
+.PHONY: prettier-fix
+prettier-fix: ## Fix prettier
+ $(NODE_MODULES)/.bin/prettier --single-quote --write 'src/**/*.{js,jsx,json,css,less,md}'
+
+.PHONY: lint
+lint: ## ES Lint
+ $(NODE_MODULES)/eslint/bin/eslint.js --max-warnings=0 'src/**/*.{js,jsx}'
+
+.PHONY: lint-fix
+lint-fix: ## Fix ES Lint
+ $(NODE_MODULES)/eslint/bin/eslint.js --fix 'src/**/*.{js,jsx}'
+
+.PHONY: i18n
+i18n: ## i18n
+ rm -rf build/messages
+ NODE_ENV=development $(NODE_MODULES)/.bin/i18n --addon
+
+.PHONY: cypress-run
+cypress-run: ## Run cypress integration tests
+ NODE_ENV=development $(NODE_MODULES)/cypress/bin/cypress run
+
+.PHONY: cypress-open
+cypress-open: ## Open cypress integration tests
+ NODE_ENV=development $(NODE_MODULES)/cypress/bin/cypress open
.PHONY: help
-help: ## Show this help.
+help: ## Show this help.
@echo -e "$$(grep -hE '^\S+:.*##' $(MAKEFILE_LIST) | sed -e 's/:.*##\s*/:/' -e 's/^\(.\+\):\(.*\)/\\x1b[36m\1\\x1b[m:\2/' | column -c2 -t -s :)"
-.*\)/\\x1b[36m\1\\x1b[m:\2/' | column -c2 -t -s :)"
diff --git a/README.md b/README.md
index ddbfa57..99d19f8 100644
--- a/README.md
+++ b/README.md
@@ -34,6 +34,7 @@ Demo GIF
```
1. Start Plone backend
+
```
docker run -d --name plone -p 8080:8080 -e SITE=Plone -e PROFILES="profile-plone.restapi:blocks" plone
```
@@ -52,25 +53,25 @@ Demo GIF
1. Start Volto frontend
-* If you already have a volto project, just update `package.json`:
+- If you already have a volto project, just update `package.json`:
- ```JSON
- "addons": [
- "@eeacms/volto-industry-theme"
- ],
+ ```JSON
+ "addons": [
+ "@eeacms/volto-industry-theme"
+ ],
- "dependencies": {
- "@eeacms/volto-industry-theme": "^1.0.0"
- }
- ```
+ "dependencies": {
+ "@eeacms/volto-industry-theme": "^1.0.0"
+ }
+ ```
-* If not, create one:
+- If not, create one:
- ```
- npm install -g yo @plone/generator-volto
- yo @plone/volto my-volto-project --addon @eeacms/volto-industry-theme
- cd my-volto-project
- ```
+ ```
+ npm install -g yo @plone/generator-volto
+ yo @plone/volto my-volto-project --addon @eeacms/volto-industry-theme
+ cd my-volto-project
+ ```
1. Install new add-ons and restart Volto:
@@ -85,78 +86,7 @@ Demo GIF
## Release
-### Automatic release using Jenkins
-
-* The automatic release is started by creating a [Pull Request](../../compare/master...develop) from `develop` to `master`. The pull request status checks correlated to the branch and PR Jenkins jobs need to be processed successfully. 1 review from a github user with rights is mandatory.
-* It runs on every commit on `master` branch, which is protected from direct commits, only allowing pull request merge commits.
-* The automatic release is done by [Jenkins](https://ci.eionet.europa.eu). The status of the release job can be seen both in the Readme.md badges and the green check/red cross/yellow circle near the last commit information. If you click on the icon, you will have the list of checks that were run. The `continuous-integration/jenkins/branch` link goes to the Jenkins job execution webpage.
-* Automated release scripts are located in the `eeacms/gitflow` docker image, specifically [js-release.sh](https://github.com/eea/eea.docker.gitflow/blob/master/src/js-release.sh) script. It uses the `release-it` tool.
-* As long as a PR request is open from develop to master, the PR Jenkins job will automatically re-create the CHANGELOG.md and package.json files to be production-ready.
-* The version format must be MAJOR.MINOR.PATCH. By default, next release is set to next minor version (with patch 0).
-* You can manually change the version in `package.json`. The new version must not be already present in the tags/releases of the repository, otherwise it will be automatically increased by the script. Any changes to the version will trigger a `CHANGELOG.md` re-generation.
-* Automated commits and commits with [JENKINS] or [YARN] in the commit log are excluded from `CHANGELOG.md` file.
-
-### Manual release from the develop branch ( beta release )
-
-#### Installation and configuration of release-it
-
-You need to first install the [release-it](https://github.com/release-it/release-it) client.
-
- ```
- npm install -g release-it
- ```
-
-Release-it uses the configuration written in the [`.release-it.json`](./.release-it.json) file located in the root of the repository.
-
-Release-it is a tool that automates 4 important steps in the release process:
-
-1. Version increase in `package.json` ( increased from the current version in `package.json`)
-2. `CHANGELOG.md` automatic generation from commit messages ( grouped by releases )
-3. GitHub release on the commit with the changelog and package.json modification on the develop branch
-4. NPM release ( by default it's disabled, but can be enabled in the configuration file )
-
-To configure the authentification, you need to export GITHUB_TOKEN for [GitHub](https://github.com/settings/tokens)
-
- ```
- export GITHUB_TOKEN=XXX-XXXXXXXXXXXXXXXXXXXXXX
- ```
-
- To configure npm, you can use the `npm login` command or use a configuration file with a TOKEN :
-
- ```
- echo "//registry.npmjs.org/:_authToken=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" > .npmrc
- ```
-
-#### Using release-it tool
-
-There are 3 yarn scripts that can be run to do the release
-
-##### yarn release-beta
-
-Automatically calculates and presents 3 beta versions - patch, minor and major for you to choose ( or Other for manual input).
-
-```
-? Select increment (next version):
-❯ prepatch (0.1.1-beta.0)
- preminor (0.2.0-beta.0)
- premajor (1.0.0-beta.0)
- Other, please specify...
-```
-
-##### yarn release-major-beta
-
-Same as `yarn release-beta`, but with premajor version pre-selected.
-
-##### yarn release
-
-Generic command, does not automatically add the `beta` to version, but you can still manually write it if you choose Other.
-
-#### Important notes
-
-> Do not use release-it tool on master branch, the commit on CHANGELOG.md file and the version increase in the package.json file can't be done without a PULL REQUEST.
-
-> Do not keep Pull Requests from develop to master branches open when you are doing beta releases from the develop branch. As long as a PR to master is open, an automatic script will run on every commit and will update both the version and the changelog to a production-ready state - ( MAJOR.MINOR.PATCH mandatory format for version).
-
+See [RELEASE.md](https://github.com/eea/volto-industry-theme/blob/master/RELEASE.md).
## How to contribute
diff --git a/RELEASE.md b/RELEASE.md
new file mode 100644
index 0000000..24f98ee
--- /dev/null
+++ b/RELEASE.md
@@ -0,0 +1,74 @@
+## Release
+
+### Automatic release using Jenkins
+
+* The automatic release is started by creating a [Pull Request](../../compare/master...develop) from `develop` to `master`. The pull request status checks correlated to the branch and PR Jenkins jobs need to be processed successfully. 1 review from a github user with rights is mandatory.
+* It runs on every commit on `master` branch, which is protected from direct commits, only allowing pull request merge commits.
+* The automatic release is done by [Jenkins](https://ci.eionet.europa.eu). The status of the release job can be seen both in the Readme.md badges and the green check/red cross/yellow circle near the last commit information. If you click on the icon, you will have the list of checks that were run. The `continuous-integration/jenkins/branch` link goes to the Jenkins job execution webpage.
+* Automated release scripts are located in the `eeacms/gitflow` docker image, specifically [js-release.sh](https://github.com/eea/eea.docker.gitflow/blob/master/src/js-release.sh) script. It uses the `release-it` tool.
+* As long as a PR request is open from develop to master, the PR Jenkins job will automatically re-create the CHANGELOG.md and package.json files to be production-ready.
+* The version format must be MAJOR.MINOR.PATCH. By default, next release is set to next minor version (with patch 0).
+* You can manually change the version in `package.json`. The new version must not be already present in the tags/releases of the repository, otherwise it will be automatically increased by the script. Any changes to the version will trigger a `CHANGELOG.md` re-generation.
+* Automated commits and commits with [JENKINS] or [YARN] in the commit log are excluded from `CHANGELOG.md` file.
+
+### Manual release from the develop branch ( beta release )
+
+#### Installation and configuration of release-it
+
+You need to first install the [release-it](https://github.com/release-it/release-it) client.
+
+ ```
+ npm install -g release-it
+ ```
+
+Release-it uses the configuration written in the [`.release-it.json`](./.release-it.json) file located in the root of the repository.
+
+Release-it is a tool that automates 4 important steps in the release process:
+
+1. Version increase in `package.json` ( increased from the current version in `package.json`)
+2. `CHANGELOG.md` automatic generation from commit messages ( grouped by releases )
+3. GitHub release on the commit with the changelog and package.json modification on the develop branch
+4. NPM release ( by default it's disabled, but can be enabled in the configuration file )
+
+To configure the authentification, you need to export GITHUB_TOKEN for [GitHub](https://github.com/settings/tokens)
+
+ ```
+ export GITHUB_TOKEN=XXX-XXXXXXXXXXXXXXXXXXXXXX
+ ```
+
+ To configure npm, you can use the `npm login` command or use a configuration file with a TOKEN :
+
+ ```
+ echo "//registry.npmjs.org/:_authToken=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" > .npmrc
+ ```
+
+#### Using release-it tool
+
+There are 3 yarn scripts that can be run to do the release
+
+##### yarn release-beta
+
+Automatically calculates and presents 3 beta versions - patch, minor and major for you to choose ( or Other for manual input).
+
+```
+? Select increment (next version):
+❯ prepatch (0.1.1-beta.0)
+ preminor (0.2.0-beta.0)
+ premajor (1.0.0-beta.0)
+ Other, please specify...
+```
+
+##### yarn release-major-beta
+
+Same as `yarn release-beta`, but with premajor version pre-selected.
+
+##### yarn release
+
+Generic command, does not automatically add the `beta` to version, but you can still manually write it if you choose Other.
+
+#### Important notes
+
+> Do not use release-it tool on master branch, the commit on CHANGELOG.md file and the version increase in the package.json file can't be done without a PULL REQUEST.
+
+> Do not keep Pull Requests from develop to master branches open when you are doing beta releases from the develop branch. As long as a PR to master is open, an automatic script will run on every commit and will update both the version and the changelog to a production-ready state - ( MAJOR.MINOR.PATCH mandatory format for version).
+
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..51bd52b
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,17 @@
+module.exports = function (api) {
+ api.cache(true);
+ const presets = ['razzle'];
+ const plugins = [
+ [
+ 'react-intl', // React Intl extractor, required for the whole i18n infrastructure to work
+ {
+ messagesDir: './build/messages/',
+ },
+ ],
+ ];
+
+ return {
+ plugins,
+ presets,
+ };
+};
diff --git a/cypress.config.js b/cypress.config.js
new file mode 100644
index 0000000..da8e7ba
--- /dev/null
+++ b/cypress.config.js
@@ -0,0 +1,27 @@
+const { defineConfig } = require('cypress');
+
+module.exports = defineConfig({
+ viewportWidth: 1280,
+ defaultCommandTimeout: 8888,
+ chromeWebSecurity: false,
+ reporter: 'junit',
+ video: true,
+ retries: {
+ runMode: 8,
+ openMode: 0,
+ },
+ reporterOptions: {
+ mochaFile: 'cypress/reports/cypress-[hash].xml',
+ jenkinsMode: true,
+ toConsole: true,
+ },
+ e2e: {
+ setupNodeEvents(on, config) {
+ // e2e testing node events setup code
+ require('@cypress/code-coverage/task')(on, config);
+ require('cypress-fail-fast/plugin')(on, config);
+ return config;
+ },
+ baseUrl: 'http://localhost:3000',
+ },
+});
diff --git a/cypress.json b/cypress.json
deleted file mode 100644
index 736dedd..0000000
--- a/cypress.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "baseUrl": "http://localhost:3000",
- "viewportWidth": 1280,
- "defaultCommandTimeout": 8888,
- "chromeWebSecurity": false,
- "reporter": "junit",
- "video": true,
- "retries": {
- "runMode": 8,
- "openMode": 0
- },
- "reporterOptions": {
- "mochaFile": "cypress/reports/cypress-[hash].xml",
- "jenkinsMode": true,
- "toConsole": true
- }
-}
diff --git a/cypress/integration/block-basics.js b/cypress/e2e/01-block-basics.cy.js
similarity index 57%
rename from cypress/integration/block-basics.js
rename to cypress/e2e/01-block-basics.cy.js
index 454084c..1e726ef 100644
--- a/cypress/integration/block-basics.js
+++ b/cypress/e2e/01-block-basics.cy.js
@@ -1,20 +1,20 @@
-import { setupBeforeEach, tearDownAfterEach } from '../support';
+import { slateBeforeEach, slateAfterEach } from '../support/e2e';
+
+import 'cypress-fail-fast';
describe('Blocks Tests', () => {
- beforeEach(setupBeforeEach);
- afterEach(tearDownAfterEach);
+ beforeEach(slateBeforeEach);
+ afterEach(slateAfterEach);
it('Add Block: Empty', () => {
// Change page title
- cy.get('.documentFirstHeading > .public-DraftStyleDefault-block')
- .clear()
- .type('My Add-on Page')
- .get('.documentFirstHeading span[data-text]')
- .contains('My Add-on Page');
-
- cy.get('.documentFirstHeading > .public-DraftStyleDefault-block').type(
- '{enter}',
- );
+ cy.get('[contenteditable=true]').first().clear();
+
+ cy.get('[contenteditable=true]').first().type('My Add-on Page');
+
+ cy.get('.documentFirstHeading').contains('My Add-on Page');
+
+ cy.get('[contenteditable=true]').first().type('{enter}');
// Add block
cy.get('.ui.basic.icon.button.block-add-button').first().click();
diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js
deleted file mode 100644
index 27a31a5..0000000
--- a/cypress/plugins/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-///
-// ***********************************************************
-// This example plugins/index.js can be used to load plugins
-//
-// You can change the location of this file or turn off loading
-// the plugins file with the 'pluginsFile' configuration option.
-//
-// You can read more here:
-// https://on.cypress.io/plugins-guide
-// ***********************************************************
-
-// This function is called when a project is opened or re-opened (e.g. due to
-// the project's config changing)
-
-/**
- * @type {Cypress.PluginConfig}
- */
-module.exports = (on, config) => {
- // `on` is used to hook into various events Cypress emits
- // `config` is the resolved Cypress config
- /* coverage-start
- require('@cypress/code-coverage/task')(on, config)
- on('file:preprocessor', require('@cypress/code-coverage/use-babelrc'))
- return config
- coverage-end */
-};
diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js
new file mode 100644
index 0000000..51369fb
--- /dev/null
+++ b/cypress/support/e2e.js
@@ -0,0 +1,126 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands';
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
+
+//Generate code-coverage
+import '@cypress/code-coverage/support';
+
+export const slateBeforeEach = (contentType = 'Document') => {
+ cy.autologin();
+ cy.createContent({
+ contentType: 'Document',
+ contentId: 'cypress',
+ contentTitle: 'Cypress',
+ });
+ cy.createContent({
+ contentType: contentType,
+ contentId: 'my-page',
+ contentTitle: 'My Page',
+ path: 'cypress',
+ });
+ cy.visit('/cypress/my-page');
+ cy.waitForResourceToLoad('@navigation');
+ // industry does not call @breadcrumbs
+ // cy.waitForResourceToLoad('@breadcrumbs');
+ cy.waitForResourceToLoad('@actions');
+ cy.waitForResourceToLoad('@types');
+ cy.waitForResourceToLoad('my-page');
+ cy.navigate('/cypress/my-page/edit');
+};
+
+export const slateAfterEach = () => {
+ cy.autologin();
+ cy.removeContent('cypress');
+};
+
+export const slateJsonBeforeEach = (contentType = 'slate') => {
+ cy.autologin();
+ cy.addContentType(contentType);
+ cy.addSlateJSONField(contentType, 'slate');
+ slateBeforeEach(contentType);
+};
+
+export const slateJsonAfterEach = (contentType = 'slate') => {
+ cy.autologin();
+ cy.removeContentType(contentType);
+ slateAfterEach();
+};
+
+export const getSelectedSlateEditor = () => {
+ return cy.get('.slate-editor.selected [contenteditable=true]').click();
+};
+
+export const createSlateBlock = () => {
+ cy.get('.ui.basic.icon.button.block-add-button').first().click();
+ cy.get('.blocks-chooser .title').contains('Text').click();
+ cy.get('.ui.basic.icon.button.slate').contains('Text').click();
+ return getSelectedSlateEditor();
+};
+
+export const getSlateBlockValue = (sb) => {
+ return sb.invoke('attr', 'data-slate-value').then((str) => {
+ return typeof str === 'undefined' ? [] : JSON.parse(str);
+ });
+};
+
+export const createSlateBlockWithList = ({
+ numbered,
+ firstItemText,
+ secondItemText,
+}) => {
+ let s1 = createSlateBlock();
+
+ s1.typeInSlate(firstItemText + secondItemText);
+
+ // select all contents of slate block
+ // - this opens hovering toolbar
+ cy.contains(firstItemText + secondItemText).then((el) => {
+ selectSlateNodeOfWord(el);
+ });
+
+ // TODO: do not hardcode these selectors:
+ if (numbered) {
+ // this is the numbered list option in the hovering toolbar
+ cy.get('.slate-inline-toolbar > :nth-child(9)').click();
+ } else {
+ // this is the bulleted list option in the hovering toolbar
+ cy.get('.slate-inline-toolbar > :nth-child(10)').click();
+ }
+
+ // move the text cursor
+ const sse = getSelectedSlateEditor();
+ sse.type('{leftarrow}');
+ for (let i = 0; i < firstItemText.length; ++i) {
+ sse.type('{rightarrow}');
+ }
+
+ // simulate pressing Enter
+ getSelectedSlateEditor().lineBreakInSlate();
+
+ return s1;
+};
+
+export const selectSlateNodeOfWord = (el) => {
+ return cy.window().then((win) => {
+ var event = new CustomEvent('Test_SelectWord', {
+ detail: el[0],
+ });
+ win.document.dispatchEvent(event);
+ });
+};
diff --git a/cypress/support/index.js b/cypress/support/index.js
deleted file mode 100644
index 5c807ed..0000000
--- a/cypress/support/index.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// ***********************************************************
-// This example support/index.js is processed and
-// loaded automatically before your test files.
-//
-// This is a great place to put global configuration and
-// behavior that modifies Cypress.
-//
-// You can change the location of this file or turn off
-// automatically serving support files with the
-// 'supportFile' configuration option.
-//
-// You can read more here:
-// https://on.cypress.io/configuration
-// ***********************************************************
-
-// Import commands.js using ES2015 syntax:
-import './commands';
-
-// Alternatively you can use CommonJS syntax:
-// require('./commands')
-
-/* coverage-start
-//Generate code-coverage
-import '@cypress/code-coverage/support';
-coverage-end */
-
-export const setupBeforeEach = () => {
- cy.autologin();
- cy.createContent({
- contentType: 'Document',
- contentId: 'cypress',
- contentTitle: 'Cypress',
- });
- cy.createContent({
- contentType: 'Document',
- contentId: 'my-page',
- contentTitle: 'My Page',
- path: 'cypress',
- });
- cy.visit('/cypress/my-page');
- cy.waitForResourceToLoad('@navigation');
- // cy.waitForResourceToLoad('@breadcrumbs');
- cy.waitForResourceToLoad('@actions');
- cy.waitForResourceToLoad('@types');
- cy.waitForResourceToLoad('my-page');
- cy.navigate('/cypress/my-page/edit');
- cy.get(`.block.title [data-contents]`);
-};
-
-export const tearDownAfterEach = () => {
- cy.autologin();
- cy.removeContent('cypress');
-};
diff --git a/jest-addon.config.js b/jest-addon.config.js
index 7c15499..da38318 100644
--- a/jest-addon.config.js
+++ b/jest-addon.config.js
@@ -9,18 +9,18 @@ module.exports = {
'@plone/volto/babel': '/node_modules/@plone/volto/babel',
'@plone/volto/(.*)$': '/node_modules/@plone/volto/src/$1',
'@package/(.*)$': '/src/$1',
+ '@root/(.*)$': '/src/$1',
'@plone/volto-quanta/(.*)$': '/src/addons/volto-quanta/src/$1',
'@eeacms/(.*?)/(.*)$': '/src/addons/$1/src/$2',
- 'volto-slate/(.*)$': '/src/addons/volto-slate/src/$1',
+ '@plone/volto-slate':
+ '/node_modules/@plone/volto/packages/volto-slate/src',
'~/(.*)$': '/src/$1',
'load-volto-addons':
'/node_modules/@plone/volto/jest-addons-loader.js',
+ '\\.(css|less|scss|sass)$': 'identity-obj-proxy',
},
transform: {
'^.+\\.js(x)?$': 'babel-jest',
- '^.+\\.css$': 'jest-css-modules',
- '^.+\\.less$': 'jest-css-modules',
- '^.+\\.scss$': 'jest-css-modules',
'^.+\\.(png)$': 'jest-file',
'^.+\\.(jpg)$': 'jest-file',
'^.+\\.(svg)$': './node_modules/@plone/volto/jest-svgsystem-transform.js',
diff --git a/locales/volto.pot b/locales/volto.pot
new file mode 100644
index 0000000..e69de29
diff --git a/package.json b/package.json
index efacfa3..f2910df 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@eeacms/volto-industry-theme",
- "version": "2.0.12",
+ "version": "2.0.13",
"description": "@eeacms/volto-industry-theme: Volto add-on",
"main": "src/index.js",
"author": "European Environment Agency: IDM2 A-Team",
@@ -24,7 +24,6 @@
"@eeacms/volto-matomo"
],
"dependencies": {
- "@cypress/code-coverage": "^3.9.5",
"@eeacms/volto-columns-block": "*",
"@eeacms/volto-datablocks": "*",
"@eeacms/volto-matomo": "*",
@@ -35,9 +34,11 @@
"react-tooltip": "4.2.21"
},
"devDependencies": {
- "@cypress/code-coverage": "^3.9.5",
- "md5": "^2.3.0",
- "babel-plugin-transform-class-properties": "^6.24.1"
+ "@cypress/code-coverage": "^3.10.0",
+ "@plone/scripts": "*",
+ "babel-plugin-transform-class-properties": "^6.24.1",
+ "cypress-fail-fast": "^5.0.1",
+ "md5": "^2.3.0"
},
"scripts": {
"release": "release-it",
@@ -50,12 +51,12 @@
"stylelint": "../../../node_modules/stylelint/bin/stylelint.js --allow-empty-input 'src/**/*.{css,less}'",
"stylelint:overrides": "../../../node_modules/.bin/stylelint --syntax less --allow-empty-input 'theme/**/*.overrides' 'src/**/*.overrides'",
"stylelint:fix": "yarn stylelint --fix && yarn stylelint:overrides --fix",
- "prettier": "if [ -d ./project ]; then ./project/node_modules/.bin/prettier --single-quote --check 'src/**/*.{js,jsx,json,css,less,md}'; else ../../../node_modules/.bin/prettier --single-quote --check 'src/**/*.{js,jsx,json,css,less,md}'; fi",
- "prettier:fix": "if [ -d ./project ]; then ./project/node_modules/.bin/prettier --single-quote --write 'src/**/*.{js,jsx,json,css,less,md}'; else ../../../node_modules/.bin/prettier --single-quote --write 'src/**/*.{js,jsx,json,css,less,md}'; fi",
- "lint": "if [ -d ./project ]; then ./project/node_modules/eslint/bin/eslint.js --max-warnings=0 'src/**/*.{js,jsx}'; else ../../../node_modules/eslint/bin/eslint.js --max-warnings=0 'src/**/*.{js,jsx}'; fi",
- "lint:fix": "if [ -d ./project ]; then ./project/node_modules/eslint/bin/eslint.js --fix 'src/**/*.{js,jsx}'; else ../../../node_modules/eslint/bin/eslint.js --fix 'src/**/*.{js,jsx}'; fi",
+ "prettier": "../../../node_modules/.bin/prettier --single-quote --check 'src/**/*.{js,jsx,json,css,less,md}'",
+ "prettier:fix": "../../../node_modules/.bin/prettier --single-quote --write 'src/**/*.{js,jsx,json,css,less,md}'",
+ "lint": "../../../node_modules/eslint/bin/eslint.js --max-warnings=0 'src/**/*.{js,jsx}'",
+ "lint:fix": "../../../node_modules/eslint/bin/eslint.js --fix 'src/**/*.{js,jsx}'",
"i18n": "mv .i18n.babel.config.js babel.config.js; rm -rf build/messages && NODE_ENV=production node src/i18n.js; mv babel.config.js .i18n.babel.config.js",
- "cypress:run": "if [ -d ./project ]; then ./project/node_modules/cypress/bin/cypress run; else ../../../node_modules/cypress/bin/cypress run; fi",
- "cypress:open": "if [ -d ./project ]; then ./project/node_modules/cypress/bin/cypress open; else ../../../node_modules/cypress/bin/cypress open; fi"
+ "cypress:run": "../../../node_modules/cypress/bin/cypress run",
+ "cypress:open": "../../../node_modules/cypress/bin/cypress open"
}
}
diff --git a/src/components/manage/Blocks/IndustryDataTable/View.jsx b/src/components/manage/Blocks/IndustryDataTable/View.jsx
index 67ca9aa..940fb41 100644
--- a/src/components/manage/Blocks/IndustryDataTable/View.jsx
+++ b/src/components/manage/Blocks/IndustryDataTable/View.jsx
@@ -7,6 +7,7 @@ import cx from 'classnames';
import RenderComponent from '@eeacms/volto-datablocks/components/manage/Blocks/SimpleDataTable/components';
import { ConnectorContext } from '@eeacms/volto-datablocks/hocs';
import { setQuery } from '@eeacms/volto-industry-theme/actions';
+import { cleanUpText } from '@eeacms/volto-industry-theme/helpers';
import leftSVG from '@plone/volto/icons/left-key.svg';
import rightSVG from '@plone/volto/icons/right-key.svg';
@@ -175,7 +176,7 @@ const getConditions = (query) => {
{
like: [
'siteName',
- { literal: query.filter_search.text.replaceAll("'", "''") },
+ { literal: cleanUpText(query.filter_search.text) },
],
},
]
@@ -186,7 +187,7 @@ const getConditions = (query) => {
{
like: [
'facilityNames',
- { literal: query.filter_search.text.replaceAll("'", "''") },
+ { literal: cleanUpText(query.filter_search.text) },
],
},
]
diff --git a/src/components/manage/Blocks/IndustryMap/index.js b/src/components/manage/Blocks/IndustryMap/index.js
index 2d55c54..eca7c42 100644
--- a/src/components/manage/Blocks/IndustryMap/index.js
+++ b/src/components/manage/Blocks/IndustryMap/index.js
@@ -2,7 +2,10 @@ import axios from 'axios';
import config from '@plone/volto/registry';
import sliderSVG from '@plone/volto/icons/slider.svg';
import mapPlaceholder from '@eeacms/volto-industry-theme/components/PrivacyProtection/map_placeholder.png';
-import { getEncodedQueryString } from '@eeacms/volto-industry-theme/helpers';
+import {
+ cleanUpText,
+ getEncodedQueryString,
+} from '@eeacms/volto-industry-theme/helpers';
import IndustryMapEdit from './Edit';
import IndustryMapView from './View';
@@ -192,9 +195,8 @@ export const getSiteExtent = (data) => {
MAX(shape_wm.STX) AS MAX_X,
MAX(shape_wm.STY) AS MAX_Y
FROM [IED].[${db_version}].[SiteMap]
- WHERE [siteName] COLLATE Latin1_General_CI_AI LIKE '%${data.text.replaceAll(
- "'",
- "''",
+ WHERE [siteName] COLLATE Latin1_General_CI_AI LIKE '%${cleanUpText(
+ data.text,
)}%'`)}`,
);
};
@@ -203,9 +205,6 @@ export const getFacilityExtent = (data) => {
const db_version =
process.env.RAZZLE_DB_VERSION || config.settings.db_version || 'latest';
- let text = data.text.replaceAll('\n', '');
- text = text.replaceAll("'", "''");
-
return axios.get(
`${config.settings.providerUrl}?${getEncodedQueryString(`SELECT
MIN(shape_wm.STX) AS MIN_X,
@@ -213,7 +212,9 @@ export const getFacilityExtent = (data) => {
MAX(shape_wm.STX) AS MAX_X,
MAX(shape_wm.STY) AS MAX_Y
FROM [IED].[${db_version}].[SiteMap]
- WHERE [facilityNames] COLLATE Latin1_General_CI_AI LIKE '%${text}%'`)}`,
+ WHERE [facilityNames] COLLATE Latin1_General_CI_AI LIKE '%${cleanUpText(
+ data.text,
+ )}%'`)}`,
);
};
diff --git a/src/helpers/index.js b/src/helpers/index.js
index c2d9a1d..5e57bee 100644
--- a/src/helpers/index.js
+++ b/src/helpers/index.js
@@ -10,6 +10,14 @@ import { getBaseUrl } from '@plone/volto/helpers';
import config from '@plone/volto/registry';
import { setConnectedDataParameters } from '@eeacms/volto-datablocks/actions';
+export function cleanUpText(value) {
+ let text = value.replaceAll('\n', '');
+ text = text.replaceAll("'", "''");
+ text = text.replace(/^\s+|\s+$/gm, '');
+
+ return text;
+}
+
export function removeValue(arr) {
if (!arr || arr.length === 0) return [];
let what,