From 64e7b11f138563479b51a254a107e112b2b6e795 Mon Sep 17 00:00:00 2001 From: shuhaib s <95394061+shuhaib-aot@users.noreply.github.com> Date: Thu, 6 Jun 2024 13:09:56 +0530 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=96Release/6.0.2=20(#2089)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * release fix for access denied * Feature/fwf 3320 set default language per tenant (#2073) * FWF:3320 [feature] Added dynamic select language per tenant * FWF:3320 [Feature] Fixed test case * FWF:3320 [feature] fixed code, Added Language env * FWF:3320 [Feature] Upgraded version to 6.0.2 * FWF:3320 [Feature] Added strong check for language change * FWF:3320 [feature] Added REACT_APP_LANGUAGE in config template * FWF:3385 [Feature] Updated spanish resource bundle * Update CHANGELOG.md * Update CHANGELOG.md --------- Co-authored-by: abilpraju-aot Co-authored-by: Abil P Raju <83952803+abilpraju-aot@users.noreply.github.com> --- CHANGELOG.md | 22 + README.md | 2 +- VERSION | 2 +- deployment/docker/docker-compose.yml | 11 +- deployment/docker/sample.env | 13 +- forms-flow-api-utils/setup.py | 2 +- forms-flow-api/requirements.txt | 2 +- forms-flow-api/requirements/prod.txt | 2 +- forms-flow-api/setup.cfg | 2 +- forms-flow-bpm/forms-flow-bpm-camunda/pom.xml | 6 +- forms-flow-bpm/forms-flow-bpm-utils/pom.xml | 4 +- forms-flow-bpm/pom-default.xml | 2 +- forms-flow-bpm/pom.xml | 2 +- forms-flow-documents/requirements.txt | 2 +- forms-flow-documents/requirements/prod.txt | 2 +- forms-flow-documents/setup.cfg | 2 +- forms-flow-web-root-config/README.md | 11 +- forms-flow-web-root-config/docker-compose.yml | 11 +- .../public/config/config.sample.js | 1 + .../public/config/config.template.js | 3 + forms-flow-web-root-config/sample.env | 13 +- forms-flow-web/package.json | 2 +- .../test-redux-states/redux-state-sample.js | 3 + .../components/AccessDenied/AccessDenied.svg | 38 + .../components/AccessDenied/accessDenied.scss | 12 + .../src/components/AccessDenied/index.js | 24 + .../src/components/PrivateRoute.jsx | 32 +- .../resourceBundles/formio_resourceBundles.js | 937 +++++++++++++----- jobs/sentiment-analysis/setup.cfg | 2 +- 29 files changed, 840 insertions(+), 327 deletions(-) create mode 100644 forms-flow-web/src/components/AccessDenied/AccessDenied.svg create mode 100644 forms-flow-web/src/components/AccessDenied/accessDenied.scss create mode 100644 forms-flow-web/src/components/AccessDenied/index.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c0dee4674..ce42ae1ce9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,28 @@ Mark items as `Added`, `Changed`, `Fixed`, `Modified`, `Removed`, `Untested Features`, `Upcoming Features`, `Known Issues` +## 6.0.2 - 2024-06-05 + +`Added` + +**forms-flow-web-root-config** +* Added env variable `LANGUAGE` for default language setting + +`Fixed` + +**forms-flow-web-root-config** +* Fixed service worker cache issue + +**forms-flow-bpm** +* Fixed white label error on login to bpm + + +`Modified` + +**forms-flow-web** +* The tenant user's default language is set from their data, tenant data, or the default application language. + + ## 6.0.1 - 2024-05-21 `Added` diff --git a/README.md b/README.md index 32aaf2112f..c66f755dd6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![FormsFlow BPM CI](https://github.com/AOT-Technologies/forms-flow-ai/actions/workflows/forms-flow-bpm-ci.yml/badge.svg)](https://github.com/AOT-Technologies/forms-flow-ai/actions) [![Join the chat at https://gitter.im/forms-flow-ai/community](https://badges.gitter.im/forms-flow-ai/community.svg)](https://gitter.im/forms-flow-ai/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Join the chat at https://stackoverflow.com/questions/tagged/formsflow.ai](https://img.shields.io/badge/ask%20-on%20%20stackoverflow-F47F24)](https://stackoverflow.com/questions/tagged/formsflow.ai?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - + [**formsflow.ai**](https://formsflow.ai/) is a Free, Open-Source, Low Code Development Platform for rapidly building powerful business applications. [**formsflow.ai**](https://formsflow.ai/) combines leading Open-Source applications including [form.io](https://form.io) forms, Camunda’s workflow engine, Keycloak’s security, and Redash’s data analytics into a seamless, integrated platform. diff --git a/VERSION b/VERSION index 478bbbb0f1..bd7f7cb3ac 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v6.0.1 \ No newline at end of file +v6.0.2 \ No newline at end of file diff --git a/deployment/docker/docker-compose.yml b/deployment/docker/docker-compose.yml index f837d9df1c..2448298597 100644 --- a/deployment/docker/docker-compose.yml +++ b/deployment/docker/docker-compose.yml @@ -132,16 +132,17 @@ services: context: ./../../forms-flow-web-root-config/ dockerfile: Dockerfile args: - - MF_FORMSFLOW_WEB_URL=${MF_FORMSFLOW_WEB_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.1/forms-flow-web.gz.js} - - MF_FORMSFLOW_NAV_URL=${MF_FORMSFLOW_NAV_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.1/forms-flow-nav.gz.js} - - MF_FORMSFLOW_SERVICE_URL=${MF_FORMSFLOW_SERVICE_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-service@v6.0.1/forms-flow-service.gz.js} - - MF_FORMSFLOW_ADMIN_URL=${MF_FORMSFLOW_ADMIN_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-admin@v6.0.1/forms-flow-admin.gz.js} - - MF_FORMSFLOW_THEME_URL=${MF_FORMSFLOW_THEME_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-theme@v6.0.1/forms-flow-theme.gz.js} + - MF_FORMSFLOW_WEB_URL=${MF_FORMSFLOW_WEB_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.2/forms-flow-web.gz.js} + - MF_FORMSFLOW_NAV_URL=${MF_FORMSFLOW_NAV_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.2/forms-flow-nav.gz.js} + - MF_FORMSFLOW_SERVICE_URL=${MF_FORMSFLOW_SERVICE_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-service@v6.0.2/forms-flow-service.gz.js} + - MF_FORMSFLOW_ADMIN_URL=${MF_FORMSFLOW_ADMIN_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-admin@v6.0.2/forms-flow-admin.gz.js} + - MF_FORMSFLOW_THEME_URL=${MF_FORMSFLOW_THEME_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-theme@v6.0.2/forms-flow-theme.gz.js} - NODE_ENV=${NODE_ENV:-production} entrypoint: /bin/sh -c "/usr/share/nginx/html/config/env.sh && nginx -g 'daemon off;'" environment: - NODE_ENV=${NODE_ENV:-production} - REACT_APP_API_SERVER_URL=${FORMIO_DEFAULT_PROJECT_URL} + - REACT_APP_LANGUAGE=${LANGUAGE:-en} - REACT_APP_API_PROJECT_URL=${FORMIO_DEFAULT_PROJECT_URL} - REACT_APP_KEYCLOAK_CLIENT=${KEYCLOAK_WEB_CLIENT_ID:-forms-flow-web} - REACT_APP_WEB_BASE_URL=${FORMSFLOW_API_URL} diff --git a/deployment/docker/sample.env b/deployment/docker/sample.env index b63952ac33..1a72481c89 100644 --- a/deployment/docker/sample.env +++ b/deployment/docker/sample.env @@ -186,19 +186,22 @@ CUSTOM_SUBMISSION_URL=http://{your-ip-address}:{port} #The MF Variables below are used to get MicroFrontend Components Created ##For running locally or if have custom changes then change the url to the one forms-flow-web folder content is running -#MF_FORMSFLOW_WEB_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.1/forms-flow-web.gz.js +#MF_FORMSFLOW_WEB_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.2/forms-flow-web.gz.js ## Refer Github Repo https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends and update to your own custom implementation for the Components here -#MF_FORMSFLOW_NAV_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.1/forms-flow-nav.gz.js -#MF_FORMSFLOW_SERVICE_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-service@v6.0.1/forms-flow-service.gz.js -#MF_FORMSFLOW_ADMIN_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-admin@v6.0.1/forms-flow-admin.gz.js -#MF_FORMSFLOW_THEME_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-theme@v6.0.1/forms-flow-theme.gz.js +#MF_FORMSFLOW_NAV_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.2/forms-flow-nav.gz.js +#MF_FORMSFLOW_SERVICE_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-service@v6.0.2/forms-flow-service.gz.js +#MF_FORMSFLOW_ADMIN_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-admin@v6.0.2/forms-flow-admin.gz.js +#MF_FORMSFLOW_THEME_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-theme@v6.0.2/forms-flow-theme.gz.js #++++++++++++++++--- formsflow.ai Web Microfrontend components ENV Variables - STOP ---+++++++++++++++++++++++++# #++++++++++++++++--- formsflow.ai Web Modules and themeing ENV Variables - START ---+++++++++++++++++++++++++# +# Set Application default LANGUAGE +#LANGUAGE=en + # Only use if need to disable a particular module in forms-flow-web, default is true for all. #ENABLE_FORMS_MODULE=true #ENABLE_TASKS_MODULE=true diff --git a/forms-flow-api-utils/setup.py b/forms-flow-api-utils/setup.py index c7f51c6bba..7d18c5d34b 100644 --- a/forms-flow-api-utils/setup.py +++ b/forms-flow-api-utils/setup.py @@ -27,7 +27,7 @@ def read_requirements(filename): setuptools.setup( name='formsflow_api_utils', - version='6.0.1', + version='6.0.2', author='AOT Technologies', description='Formsflow api related libraries.', long_description=read("README.md"), diff --git a/forms-flow-api/requirements.txt b/forms-flow-api/requirements.txt index be3882c27a..1644ad1cba 100644 --- a/forms-flow-api/requirements.txt +++ b/forms-flow-api/requirements.txt @@ -27,7 +27,7 @@ ecdsa==0.18.0 flask-jwt-oidc==0.3.0 flask-marshmallow==1.2.1 flask-restx==1.3.0 -formsflow_api_utils @ git+https://github.com/AOT-Technologies/forms-flow-ai.git@release/6.0.1#subdirectory=forms-flow-api-utils +formsflow_api_utils @ git+https://github.com/AOT-Technologies/forms-flow-ai.git@release/6.0.2#subdirectory=forms-flow-api-utils gunicorn==21.2.0 h11==0.14.0 h2==4.1.0 diff --git a/forms-flow-api/requirements/prod.txt b/forms-flow-api/requirements/prod.txt index de736fa7e2..504a0ae9a1 100644 --- a/forms-flow-api/requirements/prod.txt +++ b/forms-flow-api/requirements/prod.txt @@ -16,4 +16,4 @@ sqlalchemy_utils markupsafe PyJWT redis -git+https://github.com/AOT-Technologies/forms-flow-ai.git@release/6.0.1#egg=formsflow_api_utils&subdirectory=forms-flow-api-utils \ No newline at end of file +git+https://github.com/AOT-Technologies/forms-flow-ai.git@release/6.0.2#egg=formsflow_api_utils&subdirectory=forms-flow-api-utils \ No newline at end of file diff --git a/forms-flow-api/setup.cfg b/forms-flow-api/setup.cfg index 0b4b8a48f7..2f72bbf943 100644 --- a/forms-flow-api/setup.cfg +++ b/forms-flow-api/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = formsflow_api -version = 6.0.1 +version = 6.0.2 author = aot-technologies classifiers = Development Status :: Production diff --git a/forms-flow-bpm/forms-flow-bpm-camunda/pom.xml b/forms-flow-bpm/forms-flow-bpm-camunda/pom.xml index 7fd1604e1a..d7e94f073b 100644 --- a/forms-flow-bpm/forms-flow-bpm-camunda/pom.xml +++ b/forms-flow-bpm/forms-flow-bpm-camunda/pom.xml @@ -7,11 +7,11 @@ formsflow.ai forms-flow-bpm - 6.0.1 + 6.0.2 formsflow-bpm-camunda - 6.0.1 + 6.0.2 formsflow BPM Camunda Extension formsflow BPM Camunda Extension @@ -69,7 +69,7 @@ formsflow.ai forms-flow-bpm-utils - 6.0.1 + 6.0.2 diff --git a/forms-flow-bpm/forms-flow-bpm-utils/pom.xml b/forms-flow-bpm/forms-flow-bpm-utils/pom.xml index 469811cc65..31ba6e2f26 100644 --- a/forms-flow-bpm/forms-flow-bpm-utils/pom.xml +++ b/forms-flow-bpm/forms-flow-bpm-utils/pom.xml @@ -8,11 +8,11 @@ formsflow.ai forms-flow-bpm - 6.0.1 + 6.0.2 forms-flow-bpm-utils - 6.0.1 + 6.0.2 formsflow BPM Extension Utils formsflow BPM Extension diff --git a/forms-flow-bpm/pom-default.xml b/forms-flow-bpm/pom-default.xml index 068102359a..ed4eef0c08 100644 --- a/forms-flow-bpm/pom-default.xml +++ b/forms-flow-bpm/pom-default.xml @@ -7,7 +7,7 @@ formsflow.ai forms-flow-bpm - 6.0.1 + 6.0.2 pom.xml diff --git a/forms-flow-bpm/pom.xml b/forms-flow-bpm/pom.xml index 3033e8eaa9..d67b840c92 100644 --- a/forms-flow-bpm/pom.xml +++ b/forms-flow-bpm/pom.xml @@ -6,7 +6,7 @@ formsflow.ai forms-flow-bpm - 6.0.1 + 6.0.2 pom formsflow BPM Extension diff --git a/forms-flow-documents/requirements.txt b/forms-flow-documents/requirements.txt index 65f02a0750..20cb4d8ea4 100644 --- a/forms-flow-documents/requirements.txt +++ b/forms-flow-documents/requirements.txt @@ -27,7 +27,7 @@ ecdsa==0.18.0 flask-jwt-oidc==0.3.0 flask-marshmallow==1.2.1 flask-restx==1.3.0 -formsflow_api_utils @ git+https://github.com/AOT-Technologies/forms-flow-ai.git@release/6.0.1#subdirectory=forms-flow-api-utils +formsflow_api_utils @ git+https://github.com/AOT-Technologies/forms-flow-ai.git@release/6.0.2#subdirectory=forms-flow-api-utils gunicorn==21.2.0 h11==0.14.0 h2==4.1.0 diff --git a/forms-flow-documents/requirements/prod.txt b/forms-flow-documents/requirements/prod.txt index 21b209bedf..f10fa09282 100644 --- a/forms-flow-documents/requirements/prod.txt +++ b/forms-flow-documents/requirements/prod.txt @@ -17,4 +17,4 @@ PyJWT selenium selenium-wire nested-lookup -git+https://github.com/AOT-Technologies/forms-flow-ai.git@release/6.0.1#egg=formsflow_api_utils&subdirectory=forms-flow-api-utils \ No newline at end of file +git+https://github.com/AOT-Technologies/forms-flow-ai.git@release/6.0.2#egg=formsflow_api_utils&subdirectory=forms-flow-api-utils \ No newline at end of file diff --git a/forms-flow-documents/setup.cfg b/forms-flow-documents/setup.cfg index 39c6e42a5a..88e73c667a 100644 --- a/forms-flow-documents/setup.cfg +++ b/forms-flow-documents/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = formsflow_documents -version = 6.0.1 +version = 6.0.2 author = aot-technologies classifiers = Development Status :: Beta diff --git a/forms-flow-web-root-config/README.md b/forms-flow-web-root-config/README.md index e691cfa8f8..1c5b225409 100644 --- a/forms-flow-web-root-config/README.md +++ b/forms-flow-web-root-config/README.md @@ -57,12 +57,13 @@ is mentioned on the [link](../forms-flow-idm/keycloak/README.md#create-forms-flo Variable name | Meaning | Possible values | Default value | --- | --- |----------| --- - `MF_FORMSFLOW_WEB_URL`:triangular_flag_on_post:| For running locally/ if have custom changes | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.1/forms-flow-web.gz.js`

For custom changes: `http://{your-ip-address}:3004/forms-flow-web.js` | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.1/forms-flow-nav.gz.js` - `MF_FORMSFLOW_NAV_UR`:triangular_flag_on_post:|For custom implementation of Navbar component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-nav)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.1/forms-flow-nav.gz.js` - `MF_FORMSFLOW_SERVICE_URL`:triangular_flag_on_post:|For custom implementation of Service component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-service)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.1/forms-flow-service.gz.js` - `MF_FORMSFLOW_ADMIN_URL`:triangular_flag_on_post:|For custom implementation of Admin component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-admin)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.1/forms-flow-admin.gz.js` - `MF_FORMSFLOW_THEME_URL`:triangular_flag_on_post:| For custom implementation of Theme component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-theme) | | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.1/forms-flow-theme.gz.js` + `MF_FORMSFLOW_WEB_URL`:triangular_flag_on_post:| For running locally/ if have custom changes | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.2/forms-flow-web.gz.js`

For custom changes: `http://{your-ip-address}:3004/forms-flow-web.js` | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.2/forms-flow-nav.gz.js` + `MF_FORMSFLOW_NAV_UR`:triangular_flag_on_post:|For custom implementation of Navbar component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-nav)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.2/forms-flow-nav.gz.js` + `MF_FORMSFLOW_SERVICE_URL`:triangular_flag_on_post:|For custom implementation of Service component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-service)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.2/forms-flow-service.gz.js` + `MF_FORMSFLOW_ADMIN_URL`:triangular_flag_on_post:|For custom implementation of Admin component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-admin)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.2/forms-flow-admin.gz.js` + `MF_FORMSFLOW_THEME_URL`:triangular_flag_on_post:| For custom implementation of Theme component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-theme) | | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.2/forms-flow-theme.gz.js` `NODE_ENV`| Define project level configuration | `development, test, production` | `production` + `LANGUAGE`| Set Application default language | `en` `zh-CN` `pt` `fr` `bg` `de` `es` | `en` `FORMIO_DEFAULT_PROJECT_URL`:triangular_flag_on_post:|The URL of the form.io server| |`http://{your-ip-address}:3001` `KEYCLOAK_WEB_CLIENTID`|Your Keycloak Client ID within the realm| eg. forms-flow-web | `forms-flow-web` `KEYCLOAK_URL_REALM`| The Keycloak realm to use| eg. forms-flow-ai | `forms-flow-ai` diff --git a/forms-flow-web-root-config/docker-compose.yml b/forms-flow-web-root-config/docker-compose.yml index 9a88d2f574..fc5e349218 100644 --- a/forms-flow-web-root-config/docker-compose.yml +++ b/forms-flow-web-root-config/docker-compose.yml @@ -5,16 +5,17 @@ services: context: . dockerfile: Dockerfile args: - - MF_FORMSFLOW_WEB_URL=${MF_FORMSFLOW_WEB_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.1/forms-flow-web.gz.js} - - MF_FORMSFLOW_NAV_URL=${MF_FORMSFLOW_NAV_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.1/forms-flow-nav.gz.js} - - MF_FORMSFLOW_SERVICE_URL=${MF_FORMSFLOW_SERVICE_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-service@v6.0.1/forms-flow-service.gz.js} - - MF_FORMSFLOW_ADMIN_URL=${MF_FORMSFLOW_ADMIN_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-admin@v6.0.1/forms-flow-admin.gz.js} - - MF_FORMSFLOW_THEME_URL=${MF_FORMSFLOW_THEME_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-theme@v6.0.1/forms-flow-theme.gz.js} + - MF_FORMSFLOW_WEB_URL=${MF_FORMSFLOW_WEB_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.2/forms-flow-web.gz.js} + - MF_FORMSFLOW_NAV_URL=${MF_FORMSFLOW_NAV_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.2/forms-flow-nav.gz.js} + - MF_FORMSFLOW_SERVICE_URL=${MF_FORMSFLOW_SERVICE_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-service@v6.0.2/forms-flow-service.gz.js} + - MF_FORMSFLOW_ADMIN_URL=${MF_FORMSFLOW_ADMIN_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-admin@v6.0.2/forms-flow-admin.gz.js} + - MF_FORMSFLOW_THEME_URL=${MF_FORMSFLOW_THEME_URL:-https://forms-flow-microfrontends.aot-technologies.com/forms-flow-theme@v6.0.2/forms-flow-theme.gz.js} - NODE_ENV=${NODE_ENV:-production} entrypoint: /bin/sh -c "/usr/share/nginx/html/config/env.sh && nginx -g 'daemon off;'" environment: - NODE_ENV=${NODE_ENV:-production} - REACT_APP_API_SERVER_URL=${FORMIO_DEFAULT_PROJECT_URL} + - REACT_APP_LANGUAGE=${LANGUAGE:-en} - REACT_APP_API_PROJECT_URL=${FORMIO_DEFAULT_PROJECT_URL} - REACT_APP_KEYCLOAK_CLIENT=${KEYCLOAK_WEB_CLIENT_ID:-forms-flow-web} - REACT_APP_WEB_BASE_URL=${FORMSFLOW_API_URL} diff --git a/forms-flow-web-root-config/public/config/config.sample.js b/forms-flow-web-root-config/public/config/config.sample.js index e559ca41a6..c30ecf8d76 100644 --- a/forms-flow-web-root-config/public/config/config.sample.js +++ b/forms-flow-web-root-config/public/config/config.sample.js @@ -18,6 +18,7 @@ window["_env_"] = { REACT_APP_KEYCLOAK_URL: "", REACT_APP_KEYCLOAK_URL_HTTP_RELATIVE_PATH: "/auth", + REACT_APP_LANGUAGE: "en", //// Environment Variables for forms-flow-bpm //// // bpm base api, default: http://{your-ip-address}:8000/camunda REACT_APP_BPM_URL: "", diff --git a/forms-flow-web-root-config/public/config/config.template.js b/forms-flow-web-root-config/public/config/config.template.js index 4d196de00c..0aef98cbe0 100644 --- a/forms-flow-web-root-config/public/config/config.template.js +++ b/forms-flow-web-root-config/public/config/config.template.js @@ -20,6 +20,9 @@ window["_env_"] = { REACT_APP_KEYCLOAK_URL_REALM: "${REACT_APP_KEYCLOAK_URL_REALM}", // Keycloak URL REACT_APP_KEYCLOAK_URL: "${REACT_APP_KEYCLOAK_URL}", + // default language + REACT_APP_LANGUAGE: "${REACT_APP_LANGUAGE}", + REACT_APP_KEYCLOAK_URL_HTTP_RELATIVE_PATH: "${REACT_APP_KEYCLOAK_URL_HTTP_RELATIVE_PATH}", diff --git a/forms-flow-web-root-config/sample.env b/forms-flow-web-root-config/sample.env index 922deccbdb..d6df2b496e 100644 --- a/forms-flow-web-root-config/sample.env +++ b/forms-flow-web-root-config/sample.env @@ -13,7 +13,7 @@ ##For running locally or if have custom changes then change the url to the one forms-flow-web folder content is running -#MF_FORMSFLOW_WEB_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.1/forms-flow-web.gz.js +#MF_FORMSFLOW_WEB_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v6.0.2/forms-flow-web.gz.js #TODO only for Customised Local delevelopment with code from forms-flow-web folder content use below default values instead #MF_FORMSFLOW_WEB_URL=//{your-ip-address}:3004/forms-flow-web.js @@ -21,10 +21,10 @@ ## Use this as default values ## (Note: https://forms-flow-microfrontends.aot-technologies.com/{MF-componet-name}@{version}/{MF-componet-name}.gz.js, will be the default format ) ## Refer Github Repo https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends and update to your own custom implementation for the Components here -#MF_FORMSFLOW_NAV_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.1/forms-flow-nav.gz.js -#MF_FORMSFLOW_SERVICE_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-service@v6.0.1/forms-flow-service.gz.js -#MF_FORMSFLOW_ADMIN_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-admin@v6.0.1/forms-flow-admin.gz.js -#MF_FORMSFLOW_THEME_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-theme@v6.0.1/forms-flow-theme.gz.js +#MF_FORMSFLOW_NAV_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v6.0.2/forms-flow-nav.gz.js +#MF_FORMSFLOW_SERVICE_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-service@v6.0.2/forms-flow-service.gz.js +#MF_FORMSFLOW_ADMIN_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-admin@v6.0.2/forms-flow-admin.gz.js +#MF_FORMSFLOW_THEME_URL=https://forms-flow-microfrontends.aot-technologies.com/forms-flow-theme@v6.0.2/forms-flow-theme.gz.js #OR @@ -122,6 +122,9 @@ ENABLE_APPLICATION_ACCESS_PERMISSION_CHECK=false #MT_ADMIN_BASE_URL=http://{your-ip-address}:5010/api #MT_ADMIN_BASE_URL_VERSION=v1 +# Set Application default LANGUAGE +#LANGUAGE=en + # Only use if need to disable a particular module in forms-flow-web, default is true for all. #ENABLE_FORMS_MODULE=true #ENABLE_TASKS_MODULE=true diff --git a/forms-flow-web/package.json b/forms-flow-web/package.json index aaa95b9b62..052dc2bffb 100644 --- a/forms-flow-web/package.json +++ b/forms-flow-web/package.json @@ -1,7 +1,7 @@ { "name": "formsflow-ai-react", "description": "React web app for formsflow.ai project", - "version": "6.0.1", + "version": "6.0.2", "main": "single-spa-index.js", "scripts": { "analyze": "source-map-explorer 'build/static/js/*.js'", diff --git a/forms-flow-web/src/_tests_/test-redux-states/redux-state-sample.js b/forms-flow-web/src/_tests_/test-redux-states/redux-state-sample.js index 517e6c9679..4d547642e2 100644 --- a/forms-flow-web/src/_tests_/test-redux-states/redux-state-sample.js +++ b/forms-flow-web/src/_tests_/test-redux-states/redux-state-sample.js @@ -139,4 +139,7 @@ export const appState = { isFormChecked: false, isAllFormChecked: false, }, + tenants:{ + tenantData: {} + } }; diff --git a/forms-flow-web/src/components/AccessDenied/AccessDenied.svg b/forms-flow-web/src/components/AccessDenied/AccessDenied.svg new file mode 100644 index 0000000000..84da7467ef --- /dev/null +++ b/forms-flow-web/src/components/AccessDenied/AccessDenied.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forms-flow-web/src/components/AccessDenied/accessDenied.scss b/forms-flow-web/src/components/AccessDenied/accessDenied.scss new file mode 100644 index 0000000000..2512fea4fb --- /dev/null +++ b/forms-flow-web/src/components/AccessDenied/accessDenied.scss @@ -0,0 +1,12 @@ +.access-denied-text { + font-family: Arial, Helvetica, sans-serif; + font-size: 2rem; + color: var(--ff-black); + opacity: 1; + } + .access-denied{ + font-family: Arial, Helvetica, sans-serif; + font-size: 1rem; + color: var(--ff-black); + opacity: 1; + } \ No newline at end of file diff --git a/forms-flow-web/src/components/AccessDenied/index.js b/forms-flow-web/src/components/AccessDenied/index.js new file mode 100644 index 0000000000..f819a5cdd4 --- /dev/null +++ b/forms-flow-web/src/components/AccessDenied/index.js @@ -0,0 +1,24 @@ +import React from "react"; +import { kcServiceInstance } from "../PrivateRoute"; // Import the kcServiceInstance function +import { ReactComponent as AccessDeniedIcon } from "./AccessDenied.svg"; +import './accessDenied.scss'; +import { useTranslation } from "react-i18next"; +const AccessDenied = () => { + const { t } = useTranslation(); + const handleLogout = () => { + const kcInstance = kcServiceInstance(); // Get the Keycloak instance + kcInstance.userLogout(); + }; + + return ( +
+ +

{t("Access Denied")}

+ {t("You don't have permission to access this page.")} + {t("Please contact your administrator or try again later.")} + +
+ ); +}; + +export default AccessDenied; diff --git a/forms-flow-web/src/components/PrivateRoute.jsx b/forms-flow-web/src/components/PrivateRoute.jsx index 4628ccd53a..92a2c94875 100644 --- a/forms-flow-web/src/components/PrivateRoute.jsx +++ b/forms-flow-web/src/components/PrivateRoute.jsx @@ -50,7 +50,7 @@ import { } from "../apiManager/endpoints/config"; import { AppConfig } from "../config"; import { getFormioRoleIds } from "../apiManager/services/userservices"; -import { toast } from "react-toastify"; +import AccessDenied from "./AccessDenied"; export const kcServiceInstance = (tenantId = null) => { return KeycloakService.getInstance( @@ -76,16 +76,18 @@ const PrivateRoute = React.memo((props) => { const userRoles = useSelector((state) => state.user.roles || []); const { tenantId } = useParams(); const redirecUrl = MULTITENANCY_ENABLED ? `/tenant/${tenantId}/` : `/`; - + const selectedLanguage = useSelector((state) => state.user.lang); + const tenant = useSelector((state) => state.tenants); + const [authError, setAuthError] = React.useState(false); const [kcInstance, setKcInstance] = React.useState(getKcInstance()); const authenticate = (instance, store) => { + setKcInstance(instance); store.dispatch( setUserRole(JSON.parse(StorageService.get(StorageService.User.USER_ROLE))) ); dispatch(setUserAuth(instance.isAuthenticated())); store.dispatch(setUserToken(instance.getToken())); - store.dispatch(setLanguage(instance.getUserData()?.locale || "en")); //Set Cammunda/Formio Base URL setApiBaseUrlToLocalStorage(); // get formio roles @@ -125,10 +127,7 @@ const PrivateRoute = React.memo((props) => { instance.initKeycloak((authenticated) => { if(!authenticated) { - toast.error("Unauthorized Access.",{autoClose: 3000}); - setTimeout(function() { - instance.userLogout(); - }, 3000); + setAuthError(true); } else{ authenticate(instance, props.store); @@ -139,6 +138,19 @@ const PrivateRoute = React.memo((props) => { } }, [props.store, tenantId, dispatch]); + /** + * Retrieves the user's locale from the Keycloak instance or the tenant data, and dispatches an action to set the language in the application state. + * This effect is triggered whenever the Keycloak instance or the tenant data changes. + */ + useEffect(() => { + if(kcInstance){ + const lang = kcInstance?.userData?.locale || + tenant?.tenantData?.details?.locale || + selectedLanguage ; + dispatch(setLanguage(lang)); + } + }, [kcInstance, tenant?.tenantData]); + // useMemo prevents unneccessary rerendering caused by the route update. const DesignerRoute = useMemo( @@ -217,7 +229,9 @@ const PrivateRoute = React.memo((props) => { ); return ( <> - {isAuth ? ( + {authError ? ( + + ) : isAuth ? ( }> {ENABLE_FORMS_MODULE && ( @@ -263,7 +277,7 @@ const PrivateRoute = React.memo((props) => { )} - {userRoles.length && 18' where 'age' is the API key of a form component": "Cree los criterios utilizando la clave API de cualquier componente del formulario y una notación condicional. Por ejemplo, 'edad > 18' donde 'edad' es la clave API de un componente del formulario", + "Select form version": "Seleccionar versión del formulario", + "Please remove the special characters...!": "¡Por favor, elimine los caracteres especiales...!", + "No submission available in the selected date. Please select another date range": "No hay envíos disponibles en la fecha seleccionada. Por favor, seleccione otro rango de fechas", + "Latest Version": "Última Versión", + "No task variable selected": "No se ha seleccionado ninguna variable de tarea", + "Form saved": "Formulario guardado.", + "Request Status": "Estado de la Solicitud", + "Request Name": "Nombre de la Solicitud", + "Applications are submitted against": "Las solicitudes se presentan contra", + "Application is submitted against": "La solicitud se presenta contra", + "Are you sure to delete the": "¿Está seguro de eliminar el", + "Are you sure to delete the draft": "¿Está seguro de que desea eliminar el borrador", + "Are you sure to delete this submission ?": "¿Está seguro de que desea eliminar este envío?", + "Submissions are made against": "Las presentaciones se realizan contra", + "Submission is made against": "La presentación se realiza contra", + "Form-Workflow association saved.": "Asociación Formulario-Flujo de Trabajo guardada.", + "Form-Workflow association failed.": "Fallo en la asociación Formulario-Flujo de Trabajo.", + "Form deletion unsuccessful": "Eliminación del formulario fallida", + "Bundle deleted successfully": "Paquete eliminado con éxito", + "Diagram deployed": "Diagrama desplegado", + "Deployment failed": "Despliegue fallido", + "form uploaded": "formulario subido", + "forms uploaded": "formularios subidos", + "Failed to upload": "Error al subir", + "forms...!": "¡formularios...!", + "form...!": "¡formulario...!", + "Revert": "Revertir", + "Criteria": "Criterios", + "Select Form": "Seleccionar Formulario", + "Create Condition": "Crear Condición", + "Enter criteria": "Ingresar criterios", + "Make this form public": "Hacer este formulario público", + "Enable bundling": "Habilitar agrupamiento", + "Bundle Name": "Nombre del Paquete", + "View/Edit": "Ver/Editar", + "Create Bundle": "Crear Paquete", + "Rows per page": "Filas por página", + "Items per page": "Ítems por página", + "entries": "entradas", + "Form Bundle": "Paquete de Formularios", + "No bundles found": "No se encontraron paquetes", + "Please change the selected filters to view Bundles": "Por favor, cambie los filtros seleccionados para ver Paquetes", + "Select all to download forms": "Seleccionar todo para descargar formularios", + "Select for download": "Seleccionar para descargar", + "Bundle Description": "Descripción del Paquete", + "Conditions": "Condiciones", + "Enter name": "Ingresar nombre", + "Enter Description": "Ingresar Descripción", + "You can change the form order by drag and drop": "Puede cambiar el orden del formulario arrastrando y soltando", + "Form Order": "Orden del Formulario", + "Form Type": "Tipo de Formulario", + "Add Forms Launch together": "Agregar Formularios Lanzados Juntos", + "Form bundles can save your time by grouping forms together": "Los paquetes de formularios pueden ahorrar tiempo agrupando formularios", + "Add Forms": "Agregar Formularios", + "Create Conditions": "Crear Condiciones", + "Add Conditions": "Agregar Condiciones", + "Select Forms": "Seleccionar Formularios", + "Insert": "Insertar", + "View Form": "Ver Formulario", + "Publish this Bundle for Client Users.": "Publicar este Paquete para Usuarios Clientes.", + "Total Forms": "Total de Formularios", + "Edit Bundle": "Editar Paquete", + "Next Form": "Formulario Siguiente", + "Previous Form": "Formulario Anterior", + "Forms included under the package": "Formularios incluidos en el paquete", + "Submit": "Enviar", + "Reset Zoom": "Restablecer Zoom", + "Zoom In": "Acercar", + "Zoom Out": "Alejar", + "Deploy": "Desplegar", + "Export": "Exportar", + "Overview": "Visión General", + "Design Permission": "Permiso de Diseño", + "Application Permission": "Permiso de Aplicación", + "All Designers": "Todos los Diseñadores", + "Private(only you)": "Privado(solo tú)", + "Specific Designer Group": "Grupo de Diseñadores Específico", + "Submission Permission": "Permiso de Envío", + "All Users": "Todos los Usuarios", + "Specific User Group": "Grupo de Usuarios Específico", + "Specific Reviewers": "Revisores Específicos", + "All Reviewers": "Todos los Revisores", + "Permission for application tracking.": "Permiso para el seguimiento de aplicaciones.", + "Design Bundle": "Diseñar Paquete", + "Workflow": "Flujo de Trabajo", + "Bundle Name and Description is Required": "Se Requiere Nombre y Descripción del Paquete", + "Bundle Description is Required": "Se Requiere Descripción del Paquete", + "Bundle Create Successfully": "Paquete Creado Exitosamente", + "Bundle updated successfully": "Paquete actualizado exitosamente", + "Select": "Seleccionar", + "Unselect": "Deseleccionar", + "Applicable for Designer Roled Users only.": "Aplicable solo para Usuarios con Rol de Diseñador.", + "Applicable for Client and Reviewer Roled Users only.": "Aplicable solo para Usuarios con Rol de Cliente y Revisor.", + "Done": "Hecho", + "Failed to update permission!": "¡Fallo al actualizar el permiso!", + "Failed to fetch roles!": "¡Fallo al obtener roles!", + "Failed to update role!": "¡Fallo al actualizar el rol!", + "Permission updated successfully!": "¡Permiso actualizado con éxito!", + "Role updated successfully!": "¡Rol actualizado con éxito!", + "Update failed!": "¡Actualización fallida!", + "Clear": "Limpiar", + "Are you sure deleting the role": "¿Está seguro de eliminar el rol", + "Confirm Delete": "Confirmar Eliminación", + "All roles": "Todos los roles", + "Filter By:": "Filtrar Por:", + "Create": "Crear", + "Eg: Account Manager": "Ej: Gerente de Cuenta", + "Search by name, username or email": "Buscar por nombre, nombre de usuario o correo electrónico", + "No data Found": "No se encontraron datos", + "Dashboard": "Tablero", + "Roles": "Roles", + "Users": "Usuarios", + "Create New Role": "Crear Nuevo Rol", + "Search by role name": "Buscar por nombre del rol", + "Role Name": "Nombre del Rol", + "Actions": "Acciones", + "Create Role": "Crear Rol", + "Email": "Correo Electrónico", + "Role": "Rol", + "Add Role": "Agregar Rol", + "Role deleted successfully!": "¡Rol eliminado con éxito!", + "Failed to delete role!": "¡Fallo al eliminar el rol!", + "Role created successfully!": "¡Rol creado con éxito!", + "Failed to create role!": "¡Fallo al crear el rol!", + "Update success!": "¡Actualización exitosa!", + "No results found": "No se encontraron resultados", + "Edit Role": "Editar Rol", + "Failed to fetch users!": "¡Fallo al obtener usuarios!", + "Role names cannot contain special characters except _ , -": "Los nombres de rol no pueden contener caracteres especiales excepto _ , -", + "Role names cannot contain special characters except _ , - , / ": "Los nombres de rol no pueden contener caracteres especiales excepto _ , - , / ", + "Rules deployed successfully": "Reglas desplegadas con éxito", + "Choose From Template": "Elegir de la Plantilla", + "Back to forms": "Volver a los formularios", + "Choose From Templates": "Elegir de las Plantillas", + "Explore our Template Library to find the perfect combination of forms and workflows. Click to preview a template and, if it fits your needs, customize it to your liking. Once you've tailored it to your specific requirements, you're all set to create your business case": "Explore nuestra Biblioteca de Plantillas para encontrar la combinación perfecta de formularios y flujos de trabajo. Haga clic para ver una plantilla y, si se ajusta a sus necesidades, personalícela a su gusto. Una vez que la haya adaptado a sus requisitos específicos, estará listo para crear su caso de negocio", + "All templates": "Todas las plantillas", + "Template count": "Cantidad de plantillas", + "Learn more": "Aprender más", + "Template Details": "Detalles de la Plantilla", + "Template Title": "Título de la Plantilla", + "Preview Form": "Vista Previa del Formulario", + "Connected Workflow": "Flujo de Trabajo Conectado", + "Delete Template": "Eliminar Plantilla", + "Use Template": "Usar Plantilla", + "Template created successfully": "Plantilla creada con éxito", + "Template deleted successfully": "Plantilla eliminada con éxito", + "Template updated successfully": "Plantilla actualizada con éxito", + "Category": "Categoría", + "Search category...": "Buscar categoría...", + "Save as Template": "Guardar como Plantilla", + "Create Template": "Crear Plantilla", + "Select or Create Category": "Seleccionar o Crear Categoría", + "Short Intro": "Breve Introducción", + "Enter short intro": "Ingresar breve introducción", + "Enter description": "Ingresar descripción", + "Select or create": "Seleccionar o crear", + "Update Template": "Actualizar Plantilla", + "Form created successfully": "Formulario creado con éxito", + "select or create": "Seleccionar o crear", + "Update Associated Form": "Actualizar Formulario Asociado", + "Update Associated Workflow": "Actualizar Flujo de Trabajo Asociado", + "Enter title": "Ingresar título", + "No Templates Found": "No se encontraron plantillas", + "No Category Found": "No se encontró la categoría", + "Save Template": "Guardar Plantilla", + "You can type and click the": "Puede escribir y hacer clic en", + "to create the category.": "para crear la categoría.", + "select or type to create": "Seleccionar o escribir para crear", + "BPMN": "BPMN", + "DMN": "DMN", + "Advanced Designer": "Diseñador Avanzado", + "Basic Designer": "Diseñador Básico", + "Search": "Buscar", + "Key": "Clave", + "No Process Found": "No se encontró proceso", + "Search workflow": "Buscar flujo de trabajo", + "No Dmn Found": "No se encontró DMN", + "Submission ID": "ID de Envío", + "Submission Name": "Nombre de Envío", + "Submission History": "Historial de Envío", + "No Submission History found": "No se encontró historial de envío", + "Error in submission count": "Error en el recuento de envíos", + "Permission for submission tracking.": "Permiso para el seguimiento de envíos.", + "Reviewer permission to view submissions": "Permiso de revisor para ver envíos", + "Permission to create new submission": "Permiso para crear nuevo envío", + "Back to Bundle List": "Volver a la Lista de Paquetes", + "Bundle": "Paquete", + "You can drag these nodes to the pane on the right.": "Puede arrastrar estos nodos al panel de la derecha.", + "You can delete the element by select and click the backspace": "Puede eliminar el elemento seleccionándolo y haciendo clic en la tecla de retroceso", + "Workflow Id": "ID del Flujo de Trabajo", + "Enter Workflow Id": "Ingresar ID del Flujo de Trabajo", + "Back to Submissions": "Volver a Envíos", + "Back to Drafts": "Volver a Borradores", + "Choose Your Workflow Option": "Elija Su Opción de Flujo de Trabajo", + "Create New Workflow": "Crear Nuevo Flujo de Trabajo", + "Choose this option when you want to create a fresh workflow based on the template. System will generate and deploy a new workflow, then connect it to the selected form. Opt for this if your form requires a distinct set of workflow steps tailored to its specific needs.": "Elija esta opción cuando desee crear un nuevo flujo de trabajo basado en la plantilla. El sistema generará y desplegará un nuevo flujo de trabajo, luego lo conectará al formulario seleccionado. Opte por esta opción si su formulario requiere un conjunto distinto de pasos de flujo de trabajo adaptados a sus necesidades específicas.", + "Reuse Existing Workflow": "Reutilizar Flujo de Trabajo Existente", + "Select this option to link the form with an already established workflow. Any modifications made to the existing workflow will automatically reflect in this form as well. This is ideal when you want to leverage the existing workflow for your form's requirements.": "Seleccione esta opción para vincular el formulario con un flujo de trabajo ya establecido. Cualquier modificación realizada en el flujo de trabajo existente se reflejará automáticamente en este formulario también. Esto es ideal cuando desea aprovechar el flujo de trabajo existente para los requisitos de su formulario.", + "Are you sure you wish to delete the Template?": "¿Está seguro de que desea eliminar la Plantilla?", + "Enter Workflow Name": "Ingresar Nombre del Flujo de Trabajo", + "Create Workflow": "Crear Flujo de Trabajo", + "Upload Workflow": "Subir Flujo de Trabajo", + "Edit Workflow": "Editar Flujo de Trabajo", + "Published": "Publicado", + "Unpublished": "No Publicado", + "Private": "Privado", + "Anonymous": "Anónimo", + "Edit Processes": "Editar Procesos", + "Create Processes": "Crear Procesos", + "tasks": "tareas", + "Submission Id": "ID de Envío", + "Clear All Filters": "Limpiar Todos los Filtros", + "Show results": "Mostrar resultados", + "Delete Draft": "Eliminar Borrador", + "I can help you design forms effortlessly- all you have to do is give me a clear and concise description of what the form is meant to do. I will build out the fields and layout for you,which you can further customize.": "Puedo ayudarte a diseñar formularios sin esfuerzo, todo lo que tienes que hacer es darme una descripción clara y concisa de lo que se supone que debe hacer el formulario. Construiré los campos y el diseño para ti, que luego podrás personalizar más.", + "I am": "Yo soy", + "For example 'Give us a form that will serve as a patient intake form for walk-in clinics'": "Por ejemplo 'Danos un formulario que sirva como formulario de admisión de pacientes para clínicas sin cita previa'", + "Enter your prompt here": "Ingrese su solicitud aquí", + "Would you like to continue?": "¿Te gustaría continuar?", + "Restart": "Reiniciar", + "I'm here to provide further assistance. Thank you!": "Estoy aquí para brindarte más asistencia. ¡Gracias!", + "Generate Form Design": "Generar Diseño de Formulario", + "Preview": "Vista Previa", + "Your form is now ready!": "¡Tu formulario está listo!", + "Please tell me all the specifications and requirements you have in mind for your form. After you have finished the description, hit send.": "Por favor, dime todas las especificaciones y requisitos que tienes en mente para tu formulario. Después de que hayas terminado la descripción, presiona enviar.", + "Choose template": "Elegir plantilla", + "Search by bundle name": "Buscar por nombre del paquete", + "Save Bundle": "Guardar Paquete", + "Id": "Id", + "Enable bundling ?": "¿Habilitar agrupamiento?", + "Select a task in the List.": "Seleccione una tarea en la Lista.", + "Add Date": "Agregar Fecha", + "Assign to Me": "Asignar a Mí", + "Filter count:": "Conteo de filtros:", + "Selected Forms": "Formularios Seleccionados", + "Template Used:": "Plantilla Utilizada:", + "Select a task from the List.": "Seleccione una tarea de la Lista.", + "Choose a task from the list; your selection directs your current activity.": "Elija una tarea de la lista; su selección dirige su actividad actual.", + "Please change the selected filters to view submissions": "Por favor, cambie los filtros seleccionados para ver los envíos", + "Please change the selected filters to view drafts": "Por favor, cambie los filtros seleccionados para ver los borradores", + "No drafts found": "No se encontraron borradores", + "Flow-E helps to build faster": "Flow-E ayuda a construir más rápido", + "Flow-E is not available for demonstration in the trial instance. You can experience Flow-E in any of the premium packages of the product": "Flow-E no está disponible para demostración en la instancia de prueba. Puede experimentar Flow-E en cualquiera de los paquetes premium del producto", + "Get in touch with formsflow.ai team": "Póngase en contacto con el equipo de formsflow.ai", + "Premium": "Premium", + "Select a status": "Seleccionar un estado", + "Group": "Grupo", + "Form description": "Descripción del formulario", + "Select all forms": "Seleccionar todos los formularios", + "Bold": "Negrita", + "Italic": "Cursiva", + "Underline": "Subrayado", + "Align left": "Alinear a la izquierda", + "Align center": "Alinear al centro", + "Align right": "Alinear a la derecha", + "Align justify": "Justificar", + "Insert Link": "Insertar Enlace", + "Clean": "Limpiar", + "Click for task variables": "Hacer clic para variables de tarea", + "Upload DMN": "Subir DMN", + "DMN Name": "Nombre del DMN", + "Search by DMN name": "Buscar por nombre de DMN", + "Display authorized tasks based on user roles": "Mostrar tareas autorizadas según roles de usuario", + "You are currently using a test instance.The trial period ends in": "Actualmente está utilizando una instancia de prueba. El período de prueba termina en", + "days.": "días.", + "Are you sure to delete": "¿Está seguro de eliminar", + "filter?": "filtro?", + "Select Workflow": "Seleccionar Flujo de Trabajo", + "Select Assignee": "Seleccionar Asignado", + "Click here to select attributes": "Haga clic aquí para seleccionar atributos", + "Select the predefined attributes and custom task variables created as part of form submission you wish to display in the task list": "Seleccione los atributos predefinidos y las variables de tarea personalizadas creadas como parte de la presentación del formulario que desea mostrar en la lista de tareas", + "Task variables": "Variables de tarea", + "User Role": "Rol del Usuario", + "User Group": "Grupo de Usuarios", + "Select User Role": "Seleccionar Rol del Usuario", + "Select User Group": "Seleccionar Grupo de Usuarios", + "To display task variables, select a form as part of the filter": "Para mostrar variables de tarea, seleccione un formulario como parte del filtro", + "select a form": "seleccionar un formulario", + "No task variables found": "No se encontraron variables de tarea", + "Edit filter": "Editar filtro", + "Select form fields to display in task list": "Seleccionar campos de formulario para mostrar en la lista de tareas", + "Select all fields": "Seleccionar todos los campos", + "Edit Label": "Editar Etiqueta", + "Selecting all form fields may affect performance. For the best performance, just pick the form fields you really need.": "Seleccionar todos los campos del formulario puede afectar el rendimiento. Para un mejor rendimiento, elija solo los campos del formulario que realmente necesita.", + "User Added successfully!": "¡Usuario agregado con éxito!", + "Failed to create user!": "¡Error al crear el usuario!", + "Add Registered Users": "Agregar Usuarios Registrados", + "Username or Email": "Nombre de usuario o correo electrónico", + "Add User": "Agregar Usuario", + "User doesn't exist!": "¡El usuario no existe!", + "Success": "Éxito", + "User added": "Usuario agregado", + "From": "De", + "To": "A", + "Premium Subscription": "Suscripción Premium", + "For further insights on this exclusive premium feature, kindly connect": "Para más información sobre esta exclusiva función premium, por favor contacte", + "with our dedicated marketing team for detailed information.": "con nuestro equipo de marketing dedicado para obtener información detallada.", + "Get Connected With Us Now!": "¡Conéctese con nosotros ahora!", + "Visit our": "Visite nuestro", + "Pricing page": "Página de precios", + "for more details.": "para más detalles.", + "Integration": "Integración", + "Recipes": "Recetas", + "Connected Apps": "Aplicaciones Conectadas", + "Library": "Biblioteca", + "Add group": "Agregar grupo", + "Add task label": "Agregar etiqueta de tarea", + "Integrations": "Integraciones", + "We facilitate hundreds of native integrations via our ‘Native Integrations Pro’ package.": "Facilitamos cientos de integraciones nativas a través de nuestro paquete ‘Native Integrations Pro’.", + "This feature is not available by default in the 14 day trial. If your trial requires this feature, you can let us know and we can enable this for you.": "Esta función no está disponible por defecto en la prueba de 14 días. Si su prueba requiere esta función, puede informarnos y podemos habilitarla para usted.", + "Upgrade to unlock Native Integrations Pro": "Actualice para desbloquear Native Integrations Pro", + "We facilitate hundreds of native integrations via our ": "Facilitamos cientos de integraciones nativas a través de nuestro ", + "Native Integrations Pro": "Native Integrations Pro", + "package. This feature is not available by default in the 14 day trial. If your trial requires this feature, you can let us know and we can enable this for you.": "paquete. Esta función no está disponible por defecto en la prueba de 14 días. Si su prueba requiere esta función, puede informarnos y podemos habilitarla para usted.", + "To learn more about Native Integrations Pro": "Para obtener más información sobre Native Integrations Pro", + "Check out Integrations Feature": "Consulte la Función de Integraciones", + "Connect with": "Conéctese con", + "team for requests or queries.": "equipo para solicitudes o consultas.", + "Learn more about the feature": "Aprender más sobre la función", + "team.": "equipo.", + "Connect with formsflow.ai team.": "Conéctese con el equipo de formsflow.ai." } }; diff --git a/jobs/sentiment-analysis/setup.cfg b/jobs/sentiment-analysis/setup.cfg index 5b966bc020..1107b0707b 100755 --- a/jobs/sentiment-analysis/setup.cfg +++ b/jobs/sentiment-analysis/setup.cfg @@ -2,7 +2,7 @@ name = sentiment_analysis url = https://raw.githubusercontent.com/AOT-Technologies/forms-flow-ai/ author = AOT Technologies -version = 6.0.1 +version = 6.0.2 author_email = classifiers = Development Status :: Beta