@talend/react-containers
Version:
Provide connected components aka containers for @talend/react-cmf based on @talend/react-components.
167 lines (162 loc) • 6.09 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.DeleteResource = void 0;
var _react = require("react");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactCmf = require("@talend/react-cmf");
var _reactI18next = require("react-i18next");
var _translate = _interopRequireDefault(require("../translate"));
var _constant = _interopRequireDefault(require("../constant"));
var _constants = _interopRequireDefault(require("./constants"));
var _reactComponents = require("@talend/react-components");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /**
* getLabel: return label to display on delete confirmation dialog
* @param resource
* @returns {*}
*/
function getLabel(resource) {
if (resource) {
return resource.get('label') || resource.get('name') || '';
}
return '';
}
/**
* DeleteResource is used to delete a specific resource.
* When the component is mounted, it opens a confirm dialog.
* It uses the saga matching pattern to launch a race between the cancel and validate action.
*/
class DeleteResource extends _react.Component {
constructor(props) {
super(props);
this.getLabelInfo = this.getLabelInfo.bind(this);
this.getResourceInfo = this.getResourceInfo.bind(this);
this.onHide = this.onHide.bind(this);
}
/**
* onHide handler, called when click outside delete modal
* @param event
*/
onHide(event) {
this.props.dispatchActionCreator('DeleteResource#cancel', event, {
model: this.getResourceInfo()
});
}
/**
* Get the label from the collections.
* Return the label and a boolean to confirm that the item has been found.
*/
getLabelInfo() {
return {
label: getLabel(this.props.resource),
found: !!this.props.resource
};
}
/**
* Build an object with all the data's resource we need.
*/
getResourceInfo() {
return {
resourceType: this.props.resourceType,
collectionId: this.props.collectionId,
resourceTypeLabel: this.props.resourceTypeLabel ? this.props.resourceTypeLabel : this.props.resourceType,
uri: this.props.uri,
...this.getLabelInfo(),
id: this.props.resourceId,
redirectUrl: this.props.redirectUrl,
onCancelRedirectUrl: this.props.onCancelRedirectUrl,
resource: this.props.resource
};
}
render() {
const resourceInfo = this.getResourceInfo();
const validateAction = {
componentId: this.props[_constants.default.VALIDATE_ACTION],
model: resourceInfo,
label: this.props.t('DELETE_RESOURCE_YES', {
defaultValue: 'REMOVE'
}),
bsStyle: 'danger',
onClickActionCreator: 'DeleteResource#validate',
...this.props.validateActionProps
};
const cancelAction = {
componentId: this.props[_constants.default.CANCEL_ACTION],
model: resourceInfo,
label: this.props.t('DELETE_RESOURCE_NO', {
defaultValue: 'CANCEL'
}),
className: 'btn-inverse',
onClickActionCreator: 'DeleteResource#cancel',
...this.props.cancelAction
};
// Sorry for this duplication, but we need it because of the i18n scanner to create 2 keys
// DELETE_RESOURCE_MESSAGE and DELETE_RESOURCE_MESSAGE_female
let question;
const {
resourceTypeLabel,
label
} = resourceInfo;
if (this.props.female) {
question = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactI18next.Trans, {
i18nKey: "tui-containers:DELETE_RESOURCE_MESSAGE",
tOptions: {
context: 'female'
},
children: ["Are you sure you want to remove the ", {
resourceTypeLabel
}, " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("strong", {
children: {
label
}
}), "?"]
});
} else {
question = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactI18next.Trans, {
i18nKey: "tui-containers:DELETE_RESOURCE_MESSAGE",
children: ["Are you sure you want to remove the ", {
resourceTypeLabel
}, " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("strong", {
children: {
label
}
}), "?"]
});
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactComponents.ConfirmDialog, {
show: true,
header: this.props.header,
cancelAction: cancelAction,
validateAction: validateAction,
getComponent: this.props.getComponent,
onHide: this.onHide,
children: question
});
}
}
exports.DeleteResource = DeleteResource;
_defineProperty(DeleteResource, "displayName", 'Container(DeleteResource)');
_defineProperty(DeleteResource, "propTypes", {
..._reactCmf.cmfConnect.propTypes,
header: _propTypes.default.string,
uri: _propTypes.default.string.isRequired,
resourceType: _propTypes.default.string.isRequired,
resourceTypeLabel: _propTypes.default.string,
resourceId: _propTypes.default.string,
collectionId: _propTypes.default.string,
female: _propTypes.default.bool,
onCancelRedirectUrl: _propTypes.default.string,
validateActionProps: _propTypes.default.object,
t: _propTypes.default.func
});
_defineProperty(DeleteResource, "defaultProps", {
validateActionProps: {},
t: (0, _translate.default)()
});
var _default = exports.default = (0, _reactI18next.withTranslation)(_constant.default)(DeleteResource);
//# sourceMappingURL=DeleteResource.container.js.map