From 04dba99dba827f898466dd2f0333bdb18a110240 Mon Sep 17 00:00:00 2001 From: Daniil Palagin Date: Thu, 5 Sep 2024 19:44:28 +0200 Subject: [PATCH] [#202] Fix convention. Add group input --- src/components/record/Records.jsx | 2 +- src/components/user/User.jsx | 54 +++++++++++++++--------- src/constants/DefaultConstants.js | 6 +++ src/constants/Vocabulary.js | 23 +++++----- src/i18n/cs.js | 1 + src/i18n/en.js | 1 + tests/__tests__/components/User.spec.jsx | 6 +-- 7 files changed, 57 insertions(+), 36 deletions(-) diff --git a/src/components/record/Records.jsx b/src/components/record/Records.jsx index bc7f667..f0d4813 100644 --- a/src/components/record/Records.jsx +++ b/src/components/record/Records.jsx @@ -2,7 +2,7 @@ import React from "react"; import { Alert, Button, Card } from "react-bootstrap"; import { injectIntl } from "react-intl"; import withI18n from "../../i18n/withI18n"; -import { EXTENSION_CONSTANTS, ROLE } from "../../constants/DefaultConstants"; +import { ROLE } from "../../constants/DefaultConstants"; import PropTypes from "prop-types"; import { processTypeaheadOptions } from "./TypeaheadAnswer"; import { EXTENSIONS } from "../../../config"; diff --git a/src/components/user/User.jsx b/src/components/user/User.jsx index a281a20..24f2778 100644 --- a/src/components/user/User.jsx +++ b/src/components/user/User.jsx @@ -4,15 +4,14 @@ import withI18n from "../../i18n/withI18n"; import { injectIntl } from "react-intl"; import HorizontalInput from "../HorizontalInput"; import UserValidator from "../../validation/UserValidator"; -import { ACTION_STATUS, ROLE, ROLE_TYPE } from "../../constants/DefaultConstants"; -import { getRole, processInstitutions } from "../../utils/Utils"; -import * as Vocabulary from "../../constants/Vocabulary"; +import { ACTION_STATUS, GROUP, ROLE_TYPE } from "../../constants/DefaultConstants"; +import { processInstitutions } from "../../utils/Utils"; import { LoaderCard, LoaderSmall } from "../Loader"; import HelpIcon from "../HelpIcon"; import PropTypes from "prop-types"; import { FaRandom } from "react-icons/fa"; import { isUsingOidcAuth } from "../../utils/OidcUtils"; -import { getRoles, isAdmin } from "../../utils/SecurityUtils"; +import { getRoles, isAdmin, roleToType } from "../../utils/SecurityUtils"; import RoleSelector from "../../RoleSelector.jsx"; class User extends React.Component { @@ -57,17 +56,6 @@ class User extends React.Component { this.props.handlers.onChange(change); }; - _onAdminStatusChange = (e) => { - const role = e.target.value; - let types = this.props.user.types.slice(); - if (role === ROLE.ADMIN) { - types.push(Vocabulary.ADMIN_TYPE); - } else { - types.splice(types.indexOf(Vocabulary.ADMIN_TYPE), 1); - } - this.props.handlers.onChange({ types: types }); - }; - _generateInstitutionsOptions = () => { let options = []; const institutions = processInstitutions(this.props.institutions); @@ -88,15 +76,21 @@ class User extends React.Component { return options; }; - _generateRolesOptions = () => { - const roles = ROLE; - return Object.keys(roles).map((key) => { + _generateGroupOptions = () => { + let options = Object.keys(GROUP).map((key) => { return ( - ); }); + + options.unshift( + , + ); + return options; }; _passwordChangeButton() { @@ -210,6 +204,10 @@ class User extends React.Component { this.props.handlers.onChange({ types: types }); } + _onGroupSelected(group) { + this.props.handlers.onChange({ group: group }); + } + _onSaveAndSendEmail() { this.props.handlers.onSave(); this.setState({ savedWithEmail: true }); @@ -295,6 +293,20 @@ class User extends React.Component {
+
+ + {this._generateGroupOptions()} + +
{isAdmin(currentUser) && (
diff --git a/src/constants/DefaultConstants.js b/src/constants/DefaultConstants.js index acddf12..4ebda6d 100644 --- a/src/constants/DefaultConstants.js +++ b/src/constants/DefaultConstants.js @@ -96,6 +96,12 @@ export const ROLE = { IMPORT_CODELISTS: "rm_import_codelists", }; +export const GROUP = { + OPERATOR: "Operator", + SUPPLIER: "Supplier", + EXTERNAL_USER: "External User", +}; + export const TYPE_ROLE = { [Vocabulary.ADMIN_TYPE]: ROLE.ADMIN, [Vocabulary.DOCTOR_TYPE]: ROLE.DOCTOR, diff --git a/src/constants/Vocabulary.js b/src/constants/Vocabulary.js index a4dff40..e5237f7 100644 --- a/src/constants/Vocabulary.js +++ b/src/constants/Vocabulary.js @@ -3,22 +3,23 @@ /** * Ontological vocabulary used by JSON-LD responses we get. */ +export const RECORD_MANAGER_URL = "http://onto.fel.cvut.cz/ontologies/record-manager"; export const RDFS_LABEL = "http://www.w3.org/2000/01/rdf-schema#label"; export const RDFS_COMMENT = "http://www.w3.org/2000/01/rdf-schema#comment"; export const ADMIN_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/administrator"; export const DOCTOR_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/doctor"; export const IMPERSONATOR_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/impersonator"; -export const COMPLETE_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/record-complete"; -export const REJECT_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/reject-records"; -export const PUBLISH_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/publish-records"; -export const DELETE_ALL_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/delete-all-records"; -export const EDIT_ALL_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/edit-all-records"; -export const VIEW_ALL_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/view-all-records"; +export const COMPLETE_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/complete_records"; +export const REJECT_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/reject_records"; +export const PUBLISH_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/publish_records"; +export const DELETE_ALL_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/delete_all_records"; +export const EDIT_ALL_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/edit_all_records"; +export const VIEW_ALL_RECORDS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/view_all_records"; export const DELETE_ORGANIZATION_RECORDS_TYPE = - "http://onto.fel.cvut.cz/ontologies/record-manager/delete-organization-records"; + "http://onto.fel.cvut.cz/ontologies/record-manager/delete_organization_records"; export const EDIT_ORGANIZATION_RECORDS_TYPE = - "http://onto.fel.cvut.cz/ontologies/record-manager/edit-organization-records"; + "http://onto.fel.cvut.cz/ontologies/record-manager/edit_organization_records"; export const VIEW_ORGANIZATION_RECORDS_TYPE = - "http://onto.fel.cvut.cz/ontologies/record-manager/view-organization-records"; -export const EDIT_USERS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/edit-users"; -export const IMPORT_CODELISTS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/import-codelists"; + "http://onto.fel.cvut.cz/ontologies/record-manager/view_organization_records"; +export const EDIT_USERS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/edit_users"; +export const IMPORT_CODELISTS_TYPE = "http://onto.fel.cvut.cz/ontologies/record-manager/import_codelists"; diff --git a/src/i18n/cs.js b/src/i18n/cs.js index 95159d3..6398ae6 100644 --- a/src/i18n/cs.js +++ b/src/i18n/cs.js @@ -99,6 +99,7 @@ export default { "user.passwords-not-matching-tooltip": "Hesla se neshodují", "user.role": "Role", "user.roles": "Roles", + "user.group": "Skupina", "user.save-success": "Uživatel úspěšně uložen", "user.save-success-with-email": "Uživatel úspěšně uložen a informován emailem.", "user.save-error": "Uživatele se nepodařilo uložit. {error}", diff --git a/src/i18n/en.js b/src/i18n/en.js index 9784909..a857c56 100644 --- a/src/i18n/en.js +++ b/src/i18n/en.js @@ -99,6 +99,7 @@ export default { "user.passwords-not-matching-tooltip": "Passwords don't match", "user.role": "Role", "user.roles": "Roles", + "user.group": "Group", "user.save-success": "User saved successfully", "user.save-success-with-email": "User saved successfully and informed by email.", "user.save-error": "Unable to save user. {error}", diff --git a/tests/__tests__/components/User.spec.jsx b/tests/__tests__/components/User.spec.jsx index 9d3e742..8008fa2 100644 --- a/tests/__tests__/components/User.spec.jsx +++ b/tests/__tests__/components/User.spec.jsx @@ -189,7 +189,7 @@ describe("User", function () { } } const selects = TestUtils.scryRenderedDOMComponentsWithTag(tree, "select"); - expect(selects.length).toEqual(1); + expect(selects.length).toEqual(2); const randomButton = TestUtils.scryRenderedDOMComponentsWithClass(tree, "button-random"); expect(randomButton.length).toEqual(1); }); @@ -316,7 +316,7 @@ describe("User", function () { } } const selects = TestUtils.scryRenderedDOMComponentsWithTag(tree, "select"); - expect(selects.length).toEqual(1); + expect(selects.length).toEqual(2); expect(selects[0].disabled).toBeFalsy(); const randomButton = TestUtils.scryRenderedDOMComponentsWithClass(tree, "glyphicon"); expect(randomButton.length).toEqual(0); @@ -361,7 +361,7 @@ describe("User", function () { } } const selects = TestUtils.scryRenderedDOMComponentsWithTag(tree, "select"); - expect(selects.length).toEqual(1); + expect(selects.length).toEqual(2); expect(selects[0].disabled).toBeFalsy(); });