@atlaskit/editor-plugin-synced-block
Version:
SyncedBlock plugin for @atlaskit/editor-core
291 lines (289 loc) • 16.2 kB
JavaScript
/* DeleteConfirmationModal.tsx generated by @compiled/babel-plugin v0.39.1 */
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DeleteConfirmationModal = void 0;
require("./DeleteConfirmationModal.compiled.css");
var _runtime = require("@compiled/react/runtime");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _reactIntlNext = require("react-intl-next");
var _new = _interopRequireDefault(require("@atlaskit/button/new"));
var _hooks = require("@atlaskit/editor-common/hooks");
var _messages = require("@atlaskit/editor-common/messages");
var _editorPluginConnectivity = require("@atlaskit/editor-plugin-connectivity");
var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
var _compiled = require("@atlaskit/primitives/compiled");
var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
var _main = require("../pm-plugins/main");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var modalContentMapOld = {
'source-block-deleted': {
titleMultiple: _messages.syncBlockMessages.deleteConfirmationModalTitleMultiple,
titleSingle: _messages.syncBlockMessages.deletionConfirmationModalTitleSingle,
descriptionSingle: _messages.syncBlockMessages.deletionConfirmationModalDescriptionNoRef,
descriptionMultiple: _messages.syncBlockMessages.deletionConfirmationModalDescription,
confirmButtonLabel: _messages.syncBlockMessages.deleteConfirmationModalDeleteButton
},
'source-block-unpublished': {
titleMultiple: _messages.syncBlockMessages.deleteConfirmationModalTitleMultiple,
titleSingle: _messages.syncBlockMessages.deletionConfirmationModalTitleSingle,
descriptionSingle: _messages.syncBlockMessages.deletionConfirmationModalDescriptionNoRef,
descriptionMultiple: _messages.syncBlockMessages.deletionConfirmationModalDescription,
confirmButtonLabel: _messages.syncBlockMessages.deleteConfirmationModalDeleteButton
},
'source-block-unsynced': {
titleMultiple: _messages.syncBlockMessages.unsyncConfirmationModalTitle,
titleSingle: _messages.syncBlockMessages.unsyncConfirmationModalTitle,
descriptionSingle: _messages.syncBlockMessages.unsyncConfirmModalDescriptionSingle,
descriptionMultiple: _messages.syncBlockMessages.unsyncConfirmModalDescriptionMultiple,
confirmButtonLabel: _messages.syncBlockMessages.deleteConfirmationModalUnsyncButton
}
};
var modalContentMap = {
'source-block-deleted': {
titleMultiple: _messages.syncBlockMessages.deleteConfirmationModalTitleMultiple,
titleSingle: _messages.syncBlockMessages.deletionConfirmationModalTitleSingle,
descriptionSingle: _messages.syncBlockMessages.deletionConfirmationModalDescriptionNoRef,
descriptionMultiple: _messages.syncBlockMessages.deletionConfirmationModalDescriptionNew,
confirmButtonLabel: _messages.syncBlockMessages.deleteConfirmationModalDeleteButton
},
'source-block-unpublished': {
titleMultiple: _messages.syncBlockMessages.deleteConfirmationModalTitleMultiple,
titleSingle: _messages.syncBlockMessages.deletionConfirmationModalTitleSingle,
descriptionSingle: _messages.syncBlockMessages.deletionConfirmationModalDescriptionNoRef,
descriptionMultiple: _messages.syncBlockMessages.deletionConfirmationModalDescriptionNew,
confirmButtonLabel: _messages.syncBlockMessages.deleteConfirmationModalDeleteButton
},
'source-block-unsynced': {
titleMultiple: _messages.syncBlockMessages.unsyncConfirmationModalTitle,
titleSingle: _messages.syncBlockMessages.unsyncConfirmationModalTitle,
descriptionSingle: _messages.syncBlockMessages.unsyncConfirmModalDescriptionSingle,
descriptionMultiple: _messages.syncBlockMessages.unsyncConfirmModalDescriptionMultipleNew,
confirmButtonLabel: _messages.syncBlockMessages.deleteConfirmationModalUnsyncButton
}
};
var styles = {
spinner: "_1mou1wug _195g1wug"
};
var DeleteConfirmationModal = exports.DeleteConfirmationModal = function DeleteConfirmationModal(_ref) {
var _api$core2, _api$core4, _api$core6;
var syncBlockStoreManager = _ref.syncBlockStoreManager,
api = _ref.api;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isOpen = _useState2[0],
setIsOpen = _useState2[1];
var _useState3 = (0, _react.useState)(undefined),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
syncBlockIds = _useState4[0],
setSyncBlockIds = _useState4[1];
var _useState5 = (0, _react.useState)(undefined),
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
referenceCount = _useState6[0],
setReferenceCount = _useState6[1];
var _useState7 = (0, _react.useState)('source-block-deleted'),
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
deleteReason = _useState8[0],
setDeleteReason = _useState8[1];
var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['connectivity', 'syncedBlock'], function (states) {
var _states$connectivityS, _states$syncedBlockSt, _states$syncedBlockSt2;
return {
mode: (_states$connectivityS = states.connectivityState) === null || _states$connectivityS === void 0 ? void 0 : _states$connectivityS.mode,
bodiedSyncBlockDeletionStatus: (_states$syncedBlockSt = states.syncedBlockState) === null || _states$syncedBlockSt === void 0 ? void 0 : _states$syncedBlockSt.bodiedSyncBlockDeletionStatus,
activeFlag: (_states$syncedBlockSt2 = states.syncedBlockState) === null || _states$syncedBlockSt2 === void 0 ? void 0 : _states$syncedBlockSt2.activeFlag
};
}),
mode = _useSharedPluginState.mode,
bodiedSyncBlockDeletionStatus = _useSharedPluginState.bodiedSyncBlockDeletionStatus,
activeFlag = _useSharedPluginState.activeFlag;
var _useIntl = (0, _reactIntlNext.useIntl)(),
formatMessage = _useIntl.formatMessage;
var resolverRef = _react.default.useRef(undefined);
var handleClick = (0, _react.useCallback)(function (confirm) {
return function () {
var _api$core;
if (resolverRef.current) {
resolverRef.current(confirm);
resolverRef.current = undefined;
}
if (!confirm) {
setIsOpen(false);
setReferenceCount(undefined);
}
api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(function (_ref2) {
var tr = _ref2.tr;
return tr.setMeta(_main.syncedBlockPluginKey, {
bodiedSyncBlockDeletionStatus: confirm ? 'processing' : 'none',
activeFlag: false
});
});
};
}, [api === null || api === void 0 || (_api$core2 = api.core) === null || _api$core2 === void 0 ? void 0 : _api$core2.actions]);
var confirmationCallback = (0, _react.useCallback)(function (syncBlockIds, deleteReason) {
setIsOpen(true);
setSyncBlockIds(syncBlockIds);
if (deleteReason) {
setDeleteReason(deleteReason);
}
var confirmedPromise = new Promise(function (resolve) {
resolverRef.current = resolve;
});
if (activeFlag) {
var _api$core3;
api === null || api === void 0 || (_api$core3 = api.core) === null || _api$core3 === void 0 || _api$core3.actions.execute(function (_ref3) {
var tr = _ref3.tr;
return tr.setMeta(_main.syncedBlockPluginKey, {
// Clear flag to avoid potential retry deletion of different blocks
activeFlag: false
});
});
}
return confirmedPromise;
}, [activeFlag, api === null || api === void 0 || (_api$core4 = api.core) === null || _api$core4 === void 0 ? void 0 : _api$core4.actions]);
(0, _react.useEffect)(function () {
var unregister = syncBlockStoreManager.sourceManager.registerConfirmationCallback(confirmationCallback);
return function () {
unregister();
};
}, [syncBlockStoreManager, confirmationCallback]);
(0, _react.useEffect)(function () {
if (bodiedSyncBlockDeletionStatus === 'completed' && isOpen) {
var _api$core5;
// auto close modal once deletion is successful
// eslint-disable-next-line @atlassian/perf-linting/no-chain-state-updates -- Ignored via go/ees017 (to be fixed)
setIsOpen(false);
api === null || api === void 0 || (_api$core5 = api.core) === null || _api$core5 === void 0 || _api$core5.actions.execute(function (_ref4) {
var tr = _ref4.tr;
return tr.setMeta(_main.syncedBlockPluginKey, {
// Reset deletion status to have a clean state for next deletion
bodiedSyncBlockDeletionStatus: 'none'
});
});
}
}, [api === null || api === void 0 || (_api$core6 = api.core) === null || _api$core6 === void 0 ? void 0 : _api$core6.actions, bodiedSyncBlockDeletionStatus, isOpen]);
(0, _react.useEffect)(function () {
if (isOpen && syncBlockIds !== undefined) {
var fetchReferences = /*#__PURE__*/function () {
var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
var references, totalCount;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return Promise.all(syncBlockIds.map( /*#__PURE__*/function () {
var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(syncBlockId) {
var _references$reference, _references$reference2;
var references;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return syncBlockStoreManager.sourceManager.fetchReferences(syncBlockId.resourceId);
case 2:
references = _context.sent;
if (!(references !== null && references !== void 0 && references.error)) {
_context.next = 5;
break;
}
throw new Error();
case 5:
return _context.abrupt("return", (_references$reference = (_references$reference2 = references.references) === null || _references$reference2 === void 0 ? void 0 : _references$reference2.length) !== null && _references$reference !== void 0 ? _references$reference : 0);
case 6:
case "end":
return _context.stop();
}
}, _callee);
}));
return function (_x) {
return _ref6.apply(this, arguments);
};
}()));
case 3:
references = _context2.sent;
totalCount = references.reduce(function (sum, count) {
return sum + count;
}, 0);
setReferenceCount(totalCount);
_context2.next = 11;
break;
case 8:
_context2.prev = 8;
_context2.t0 = _context2["catch"](0);
setReferenceCount(0);
case 11:
case "end":
return _context2.stop();
}
}, _callee2, null, [[0, 8]]);
}));
return function fetchReferences() {
return _ref5.apply(this, arguments);
};
}();
// eslint-disable-next-line @atlassian/perf-linting/no-chain-state-updates -- Ignored via go/ees017 (to be fixed)
fetchReferences();
}
}, [isOpen, syncBlockIds, syncBlockStoreManager.sourceManager]);
return /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTransition, null, isOpen && /*#__PURE__*/_react.default.createElement(_modalDialog.default, {
onClose: handleClick(false),
testId: "sync-block-delete-confirmation",
height: 184
}, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, referenceCount === undefined ? /*#__PURE__*/_react.default.createElement(_compiled.Box, {
xcss: styles.spinner
}, /*#__PURE__*/_react.default.createElement(_spinner.default, {
size: "large"
})) : /*#__PURE__*/_react.default.createElement(ModalContent, {
content: (0, _platformFeatureFlags.fg)('platform_synced_block_patch_8') ? modalContentMap[deleteReason] : modalContentMapOld[deleteReason],
referenceCount: referenceCount,
handleClick: handleClick,
formatMessage: formatMessage,
isDeleting: bodiedSyncBlockDeletionStatus === 'processing',
isDisabled: (0, _editorPluginConnectivity.isOfflineMode)(mode),
deleteReason: deleteReason,
sourceCount: (syncBlockIds === null || syncBlockIds === void 0 ? void 0 : syncBlockIds.length) || 0
}))));
};
var ModalContent = function ModalContent(_ref7) {
var content = _ref7.content,
referenceCount = _ref7.referenceCount,
handleClick = _ref7.handleClick,
formatMessage = _ref7.formatMessage,
isDeleting = _ref7.isDeleting,
isDisabled = _ref7.isDisabled,
deleteReason = _ref7.deleteReason,
sourceCount = _ref7.sourceCount;
var titleMultiple = content.titleMultiple,
titleSingle = content.titleSingle,
descriptionSingle = content.descriptionSingle,
descriptionMultiple = content.descriptionMultiple,
confirmButtonLabel = content.confirmButtonLabel;
var hasNoReferenceOrFailToFetch = referenceCount === 0;
var syncBlockCount = deleteReason === 'source-block-deleted' ? referenceCount + sourceCount : referenceCount;
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalHeader, {
hasCloseButton: true
}, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTitle, {
appearance: "warning"
}, hasNoReferenceOrFailToFetch ? formatMessage(titleSingle) : formatMessage(titleMultiple, {
count: syncBlockCount
}))), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalBody, null, /*#__PURE__*/_react.default.createElement(_compiled.Text, null, hasNoReferenceOrFailToFetch ? formatMessage(descriptionSingle) : formatMessage(descriptionMultiple, {
syncBlockCount: syncBlockCount
}))), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_new.default, {
appearance: "subtle",
onClick: handleClick(false)
}, formatMessage(_messages.syncBlockMessages.deleteConfirmationModalCancelButton)), /*#__PURE__*/_react.default.createElement(_new.default, {
appearance: "warning",
onClick: handleClick(true),
autoFocus: true,
isDisabled: isDisabled,
isLoading: isDeleting,
testId: "synced-block-delete-confirmation-modal-".concat(deleteReason, "-button")
}, formatMessage(confirmButtonLabel))));
};