Skip to content

Commit

Permalink
optional-doi: fix new upload disabled states
Browse files Browse the repository at this point in the history
  • Loading branch information
zzacharo committed Jan 22, 2025
1 parent 3be6878 commit 7cdcedd
Showing 1 changed file with 40 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ import { i18next } from "@translations/invenio_rdm_records/i18next";

import PropTypes from "prop-types";
import React, { Component } from "react";
import { connect } from "react-redux";
import { Form, Radio, Popup } from "semantic-ui-react";
import _isEmpty from "lodash/isEmpty";

/**
* Manage radio buttons choices between managed (i.e. datacite), unmanaged (i.e. external) and no need for a PID.
*/
export class OptionalDOIoptions extends Component {
class OptionalDOIoptionsCmp extends Component {
handleChange = (e, { value }) => {
const { onManagedUnmanagedChange } = this.props;
const isManagedSelected = value === "managed";
Expand All @@ -23,24 +23,36 @@ export class OptionalDOIoptions extends Component {
};

_render = (cmp, shouldWrapPopup, message) =>
shouldWrapPopup ? <Popup content={message} trigger={cmp} /> : cmp;
shouldWrapPopup && message ? <Popup content={message} trigger={cmp} /> : cmp;

render() {
const { isManagedSelected, isNoNeedSelected, pidLabel, optionalDOItransitions } =
this.props;

const allDOIoptionsAllowed = _isEmpty(optionalDOItransitions);
const isUnManagedDisabled =
isManagedSelected ||
(!allDOIoptionsAllowed &&
!optionalDOItransitions.allowed_providers.includes("external"));
const isNoNeedDisabled =
isManagedSelected ||
(!allDOIoptionsAllowed &&
!optionalDOItransitions.allowed_providers.includes("not_needed"));
const {
isManagedSelected,
isNoNeedSelected,
pidLabel,
optionalDOItransitions,
record,
} = this.props;

const doi = record?.pids?.doi?.identifier || "";
const isNewUpload = record.status === "draft";

const hasDoi = doi !== "";
const isUnManagedDisabled = !isNewUpload
? !optionalDOItransitions.allowed_providers.includes("external")
: hasDoi && isManagedSelected;

const isNoNeedDisabled = !isNewUpload
? !optionalDOItransitions.allowed_providers.includes("not_needed")
: hasDoi && isManagedSelected;

const isManagedTransition = optionalDOItransitions?.allowed_providers?.some(
(val) => !["external", "not_needed"].includes(val)
);
// The locally managed DOI is disabled either if the external provider is allowed or if the no need option is allowed
const isManagedDisabled =
!allDOIoptionsAllowed && (!isUnManagedDisabled || !isNoNeedDisabled);
const isManagedDisabled = !isNewUpload
? !isManagedTransition
: hasDoi && isManagedSelected;

const yesIHaveOne = (
<Form.Field width={4}>
Expand Down Expand Up @@ -93,28 +105,31 @@ export class OptionalDOIoptions extends Component {
</Form.Field>
{this._render(
yesIHaveOne,
isUnManagedDisabled && !isManagedSelected,
isUnManagedDisabled,
optionalDOItransitions?.message
)}
{this._render(noINeedOne, isManagedDisabled, optionalDOItransitions?.message)}
{this._render(
noNeed,
isNoNeedDisabled && !isManagedSelected,
optionalDOItransitions?.message
)}
{this._render(noNeed, isNoNeedDisabled, optionalDOItransitions?.message)}
</Form.Group>
);
}
}

OptionalDOIoptions.propTypes = {
OptionalDOIoptionsCmp.propTypes = {
isManagedSelected: PropTypes.bool.isRequired,
isNoNeedSelected: PropTypes.bool.isRequired,
onManagedUnmanagedChange: PropTypes.func.isRequired,
pidLabel: PropTypes.string,
optionalDOItransitions: PropTypes.array.isRequired,
record: PropTypes.object.isRequired,
};

OptionalDOIoptions.defaultProps = {
OptionalDOIoptionsCmp.defaultProps = {
pidLabel: undefined,
};

const mapStateToProps = (state) => ({
record: state.deposit.record,
});

export const OptionalDOIoptions = connect(mapStateToProps, null)(OptionalDOIoptionsCmp);

0 comments on commit 7cdcedd

Please sign in to comment.