diff --git a/CHANGELOG.md b/CHANGELOG.md index 7490157e..cce49890 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ * [UIQM-694](https://issues.folio.org/browse/UIQM-694) Separate error messages triggered by controlled subfields of different linked fields. * [UIQM-592](https://issues.folio.org/browse/UIQM-592) Fix to input polish special chars into fields. * [UIQM-697](https://issues.folio.org/browse/UIQM-697) Field 008: Validate the length of subfields. Add backslashes if the length of a subfield of field 008 is shorter, if longer - cut off the extra characters. +* [UIQM-699](https://issues.folio.org/browse/UIQM-699) ECS - send validation request with central tenant id for shared Bib and Authority records. ## [8.0.1] (https://github.com/folio-org/ui-quick-marc/tree/v8.0.1) (2024-04-18) diff --git a/src/QuickMarcEditor/QuickMarcCreateWrapper.js b/src/QuickMarcEditor/QuickMarcCreateWrapper.js index da8490c6..5bd1fe41 100644 --- a/src/QuickMarcEditor/QuickMarcCreateWrapper.js +++ b/src/QuickMarcEditor/QuickMarcCreateWrapper.js @@ -4,12 +4,14 @@ import React, { useMemo, useState, } from 'react'; +import { useLocation } from 'react-router-dom'; import PropTypes from 'prop-types'; import flow from 'lodash/flow'; import noop from 'lodash/noop'; import isEmpty from 'lodash/isEmpty'; import { useShowCallout } from '@folio/stripes-acq-components'; +import { useStripes } from '@folio/stripes/core'; import QuickMarcEditor from './QuickMarcEditor'; import { QuickMarcContext } from '../contexts'; @@ -35,6 +37,7 @@ import { autopopulateMaterialCharsField, autopopulateIndicators, removeRowsWithoutContent, + applyCentralTenantInHeaders, } from './utils'; const propTypes = { @@ -60,11 +63,17 @@ const QuickMarcCreateWrapper = ({ fixedFieldSpec, locations, }) => { + const stripes = useStripes(); + const location = useLocation(); const showCallout = useShowCallout(); const [httpError, setHttpError] = useState(null); const { linkableBibFields, actualizeLinks, linkingRules, sourceFiles } = useAuthorityLinking({ marcType, action }); const { validationErrorsRef } = useContext(QuickMarcContext); + const isRequestToCentralTenantFromMember = applyCentralTenantInHeaders(location, stripes, marcType); + const centralTenantId = stripes.user.user.consortium?.centralTenantId; + const tenantId = isRequestToCentralTenantFromMember ? centralTenantId : ''; + const validationContext = useMemo(() => ({ initialValues, marcType, @@ -76,7 +85,7 @@ const QuickMarcCreateWrapper = ({ fixedFieldSpec, instanceId: instance.id, }), [initialValues, marcType, locations, linkableBibFields, linkingRules, sourceFiles, fixedFieldSpec, instance.id]); - const { validate } = useValidation(validationContext); + const { validate } = useValidation(validationContext, tenantId); const prepareForSubmit = useCallback((formValues) => { const formValuesForCreate = flow( diff --git a/src/QuickMarcEditor/QuickMarcDeriveWrapper.js b/src/QuickMarcEditor/QuickMarcDeriveWrapper.js index 2d304c00..36712ef8 100644 --- a/src/QuickMarcEditor/QuickMarcDeriveWrapper.js +++ b/src/QuickMarcEditor/QuickMarcDeriveWrapper.js @@ -4,11 +4,13 @@ import React, { useMemo, useState, } from 'react'; +import { useLocation } from 'react-router-dom'; import PropTypes from 'prop-types'; import flow from 'lodash/flow'; import isEmpty from 'lodash/isEmpty'; import { useShowCallout } from '@folio/stripes-acq-components'; +import { useStripes } from '@folio/stripes/core'; import QuickMarcEditor from './QuickMarcEditor'; import { @@ -35,6 +37,7 @@ import { removeEnteredDate, autopopulatePhysDescriptionField, autopopulateMaterialCharsField, + applyCentralTenantInHeaders, } from './utils'; const propTypes = { @@ -56,11 +59,17 @@ const QuickMarcDeriveWrapper = ({ marcType, fixedFieldSpec, }) => { + const stripes = useStripes(); + const location = useLocation(); const showCallout = useShowCallout(); const { linkableBibFields, actualizeLinks, linkingRules } = useAuthorityLinking({ marcType, action }); const [httpError, setHttpError] = useState(null); const { validationErrorsRef } = useContext(QuickMarcContext); + const isRequestToCentralTenantFromMember = applyCentralTenantInHeaders(location, stripes, marcType); + const centralTenantId = stripes.user.user.consortium?.centralTenantId; + const tenantId = isRequestToCentralTenantFromMember ? centralTenantId : ''; + const validationContext = useMemo(() => ({ initialValues, marcType, @@ -70,7 +79,7 @@ const QuickMarcDeriveWrapper = ({ fixedFieldSpec, instanceId: instance.id, }), [initialValues, marcType, linkableBibFields, linkingRules, fixedFieldSpec, instance.id]); - const { validate } = useValidation(validationContext); + const { validate } = useValidation(validationContext, tenantId); const prepareForSubmit = useCallback((formValues) => { const formValuesForDerive = flow( diff --git a/src/QuickMarcEditor/QuickMarcEditWrapper.js b/src/QuickMarcEditor/QuickMarcEditWrapper.js index 26c29f0a..f26559d1 100644 --- a/src/QuickMarcEditor/QuickMarcEditWrapper.js +++ b/src/QuickMarcEditor/QuickMarcEditWrapper.js @@ -112,7 +112,7 @@ const QuickMarcEditWrapper = ({ instance.naturalId, instance.id, ]); - const { validate } = useValidation(validationContext); + const { validate } = useValidation(validationContext, tenantId); const prepareForSubmit = useCallback((formValues) => { const formValuesToSave = flow( diff --git a/src/hooks/useValidation/useValidation.js b/src/hooks/useValidation/useValidation.js index bc550186..1bb35460 100644 --- a/src/hooks/useValidation/useValidation.js +++ b/src/hooks/useValidation/useValidation.js @@ -48,9 +48,9 @@ const formatFEValidation = (errors = {}) => { }, {}); }; -const useValidation = (context = {}) => { +const useValidation = (context = {}, tenantId = null) => { const quickMarcContext = useContext(QuickMarcContext); - const { validate: validateFetch } = useValidate(); + const { validate: validateFetch } = useValidate({ tenantId }); const { duplicateLccnCheckingEnabled } = useLccnDuplicateConfig({ marcType: context.marcType }); const ky = useOkapiKy(); const intl = useIntl(); diff --git a/src/queries/useValidate/useValidate.js b/src/queries/useValidate/useValidate.js index d10a379d..628f08ac 100644 --- a/src/queries/useValidate/useValidate.js +++ b/src/queries/useValidate/useValidate.js @@ -7,8 +7,8 @@ import { import { VALIDATE_API } from '../../common/constants'; -export const useValidate = () => { - const ky = useOkapiKy(); +export const useValidate = ({ tenantId } = {}) => { + const ky = useOkapiKy({ tenant: tenantId }); const [namespace] = useNamespace({ key: 'MARC_VALIDATE' }); const { isFetching, data, mutateAsync } = useMutation(