@atlaskit/link-create 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/controllers/callback-context/main.js +16 -5
  3. package/dist/cjs/controllers/edit-post-create-context/index.js +43 -0
  4. package/dist/cjs/controllers/form-context/main.js +15 -2
  5. package/dist/cjs/controllers/plugin-context/index.js +39 -0
  6. package/dist/cjs/ui/create-form/main.js +11 -2
  7. package/dist/cjs/ui/link-create/confirm-dismiss-dialog/index.js +12 -0
  8. package/dist/cjs/ui/link-create/confirm-dismiss-dialog/main.js +32 -0
  9. package/dist/cjs/ui/link-create/confirm-dismiss-dialog/messages.js +29 -0
  10. package/dist/cjs/ui/link-create/edit-modal/index.js +25 -0
  11. package/dist/cjs/ui/link-create/main.js +57 -9
  12. package/dist/cjs/ui/main.js +1 -1
  13. package/dist/es2019/controllers/callback-context/main.js +11 -5
  14. package/dist/es2019/controllers/edit-post-create-context/index.js +28 -0
  15. package/dist/es2019/controllers/form-context/main.js +14 -3
  16. package/dist/es2019/controllers/plugin-context/index.js +25 -0
  17. package/dist/es2019/ui/create-form/main.js +10 -3
  18. package/dist/es2019/ui/link-create/confirm-dismiss-dialog/index.js +1 -0
  19. package/dist/es2019/ui/link-create/confirm-dismiss-dialog/main.js +23 -0
  20. package/dist/es2019/ui/link-create/confirm-dismiss-dialog/messages.js +23 -0
  21. package/dist/es2019/ui/link-create/edit-modal/index.js +17 -0
  22. package/dist/es2019/ui/link-create/main.js +54 -9
  23. package/dist/es2019/ui/main.js +1 -1
  24. package/dist/esm/controllers/callback-context/main.js +16 -5
  25. package/dist/esm/controllers/edit-post-create-context/index.js +33 -0
  26. package/dist/esm/controllers/form-context/main.js +16 -3
  27. package/dist/esm/controllers/plugin-context/index.js +29 -0
  28. package/dist/esm/ui/create-form/main.js +12 -3
  29. package/dist/esm/ui/link-create/confirm-dismiss-dialog/index.js +1 -0
  30. package/dist/esm/ui/link-create/confirm-dismiss-dialog/main.js +22 -0
  31. package/dist/esm/ui/link-create/confirm-dismiss-dialog/messages.js +23 -0
  32. package/dist/esm/ui/link-create/edit-modal/index.js +15 -0
  33. package/dist/esm/ui/link-create/main.js +58 -10
  34. package/dist/esm/ui/main.js +1 -1
  35. package/dist/types/controllers/edit-post-create-context/index.d.ts +12 -0
  36. package/dist/types/controllers/form-context/main.d.ts +3 -0
  37. package/dist/types/controllers/plugin-context/index.d.ts +18 -0
  38. package/dist/types/ui/link-create/confirm-dismiss-dialog/index.d.ts +2 -0
  39. package/dist/types/ui/link-create/confirm-dismiss-dialog/main.d.ts +7 -0
  40. package/dist/types/ui/link-create/confirm-dismiss-dialog/messages.d.ts +23 -0
  41. package/dist/types/ui/link-create/edit-modal/index.d.ts +4 -0
  42. package/dist/types/ui/link-create/main.d.ts +3 -3
  43. package/dist/types-ts4.5/controllers/edit-post-create-context/index.d.ts +12 -0
  44. package/dist/types-ts4.5/controllers/form-context/main.d.ts +3 -0
  45. package/dist/types-ts4.5/controllers/plugin-context/index.d.ts +18 -0
  46. package/dist/types-ts4.5/ui/link-create/confirm-dismiss-dialog/index.d.ts +2 -0
  47. package/dist/types-ts4.5/ui/link-create/confirm-dismiss-dialog/main.d.ts +7 -0
  48. package/dist/types-ts4.5/ui/link-create/confirm-dismiss-dialog/messages.d.ts +23 -0
  49. package/dist/types-ts4.5/ui/link-create/edit-modal/index.d.ts +4 -0
  50. package/dist/types-ts4.5/ui/link-create/main.d.ts +3 -3
  51. package/package.json +6 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/link-create
2
2
 
3
+ ## 1.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#42436](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42436) [`08c8e861177`](https://bitbucket.org/atlassian/atlassian-frontend/commits/08c8e861177) - EDM-8371: internal refactor under feature flag platform.linking-platform.link-create.enable-edit
8
+
9
+ ## 1.4.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#42119](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42119) [`fbb3d5ea801`](https://bitbucket.org/atlassian/atlassian-frontend/commits/fbb3d5ea801) - Displays a confirm dismiss dialog when user clicks cancel and made changes to form
14
+
3
15
  ## 1.3.0
4
16
 
5
17
  ### Minor Changes
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.useLinkCreateCallback = exports.LinkCreateCallbackProvider = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
12
  var _react = _interopRequireWildcard(require("react"));
12
13
  var _analyticsNext = require("@atlaskit/analytics-next");
@@ -14,6 +15,8 @@ var _constants = require("../../common/constants");
14
15
  var _analytics = _interopRequireDefault(require("../../common/utils/analytics/analytics.codegen"));
15
16
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
17
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
20
  var LinkCreateCallbackContext = /*#__PURE__*/_react.default.createContext({});
18
21
  var LinkCreateCallbackProvider = exports.LinkCreateCallbackProvider = function LinkCreateCallbackProvider(_ref) {
19
22
  var children = _ref.children,
@@ -22,7 +25,7 @@ var LinkCreateCallbackProvider = exports.LinkCreateCallbackProvider = function L
22
25
  onCancel = _ref.onCancel;
23
26
  var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
24
27
  createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
25
- var value = (0, _react.useMemo)(function () {
28
+ var handleCreate = (0, _react.useMemo)(function () {
26
29
  return {
27
30
  onCreate: function () {
28
31
  var _onCreate2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(result) {
@@ -51,7 +54,11 @@ var LinkCreateCallbackProvider = exports.LinkCreateCallbackProvider = function L
51
54
  return _onCreate2.apply(this, arguments);
52
55
  }
53
56
  return onCreate;
54
- }(),
57
+ }()
58
+ };
59
+ }, [createAnalyticsEvent, _onCreate]);
60
+ var handleFailure = (0, _react.useMemo)(function () {
61
+ return {
55
62
  onFailure: function () {
56
63
  var _onFailure2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(error) {
57
64
  return _regenerator.default.wrap(function _callee2$(_context2) {
@@ -71,10 +78,14 @@ var LinkCreateCallbackProvider = exports.LinkCreateCallbackProvider = function L
71
78
  return _onFailure2.apply(this, arguments);
72
79
  }
73
80
  return onFailure;
74
- }(),
75
- onCancel: onCancel
81
+ }()
76
82
  };
77
- }, [_onFailure, onCancel, createAnalyticsEvent, _onCreate]);
83
+ }, [createAnalyticsEvent, _onFailure]);
84
+ var value = (0, _react.useMemo)(function () {
85
+ return _objectSpread(_objectSpread({
86
+ onCancel: onCancel
87
+ }, handleCreate), handleFailure);
88
+ }, [onCancel, handleCreate, handleFailure]);
78
89
  return /*#__PURE__*/_react.default.createElement(LinkCreateCallbackContext.Provider, {
79
90
  value: value
80
91
  }, children);
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useEditPostCreateModal = exports.EditPostCreateModalProvider = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ var EditPostCreateModalContext = /*#__PURE__*/(0, _react.createContext)({
14
+ editViewPayload: undefined,
15
+ setEditViewPayload: function setEditViewPayload() {}
16
+ });
17
+ var EditPostCreateModalProvider = exports.EditPostCreateModalProvider = function EditPostCreateModalProvider(_ref) {
18
+ var active = _ref.active,
19
+ children = _ref.children;
20
+ var _useState = (0, _react.useState)(undefined),
21
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
22
+ editViewPayload = _useState2[0],
23
+ setEditViewPayload = _useState2[1];
24
+ var value = (0, _react.useMemo)(function () {
25
+ return {
26
+ editViewPayload: editViewPayload,
27
+ setEditViewPayload: setEditViewPayload
28
+ };
29
+ }, [editViewPayload, setEditViewPayload]);
30
+ if (editViewPayload && !active) {
31
+ setEditViewPayload(undefined);
32
+ }
33
+ return /*#__PURE__*/_react.default.createElement(EditPostCreateModalContext.Provider, {
34
+ value: value
35
+ }, children);
36
+ };
37
+ var useEditPostCreateModal = exports.useEditPostCreateModal = function useEditPostCreateModal() {
38
+ var value = (0, _react.useContext)(EditPostCreateModalContext);
39
+ if (!value) {
40
+ throw new Error('useEditPostCreateModal used outside of useEditPostCreateModalProvider');
41
+ }
42
+ return value;
43
+ };
@@ -19,7 +19,11 @@ var FormContext = exports.FormContext = /*#__PURE__*/(0, _react.createContext)({
19
19
  return {};
20
20
  },
21
21
  setFormErrorMessage: function setFormErrorMessage() {},
22
- enableEditView: undefined
22
+ enableEditView: undefined,
23
+ setFormDirty: function setFormDirty() {},
24
+ isFormDirty: function isFormDirty() {
25
+ return false;
26
+ }
23
27
  });
24
28
  var FormContextProvider = exports.FormContextProvider = function FormContextProvider(_ref) {
25
29
  var enableEditView = _ref.enableEditView,
@@ -32,6 +36,13 @@ var FormContextProvider = exports.FormContextProvider = function FormContextProv
32
36
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
33
37
  validators = _useState4[0],
34
38
  setValidators = _useState4[1];
39
+ var dirty = (0, _react.useRef)(false);
40
+ var isFormDirty = (0, _react.useCallback)(function () {
41
+ return dirty.current;
42
+ }, [dirty]);
43
+ var setFormDirty = (0, _react.useCallback)(function (isDirty) {
44
+ dirty.current = !!isDirty;
45
+ }, [dirty]);
35
46
 
36
47
  // Add validators to the form
37
48
  var assignValidator = (0, _react.useCallback)(function (name, fieldValidators) {
@@ -55,7 +66,9 @@ var FormContextProvider = exports.FormContextProvider = function FormContextProv
55
66
  getValidators: getValidators,
56
67
  setFormErrorMessage: setFormErrorMessage,
57
68
  formErrorMessage: error,
58
- enableEditView: enableEditView
69
+ enableEditView: enableEditView,
70
+ setFormDirty: setFormDirty,
71
+ isFormDirty: isFormDirty
59
72
  }
60
73
  }, children);
61
74
  };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useLinkCreatePlugins = exports.LinkCreatePluginsProvider = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ var LinkCreatePluginsContext = /*#__PURE__*/(0, _react.createContext)(null);
14
+ var LinkCreatePluginsProvider = exports.LinkCreatePluginsProvider = function LinkCreatePluginsProvider(_ref) {
15
+ var plugins = _ref.plugins,
16
+ propEntityKey = _ref.entityKey,
17
+ children = _ref.children;
18
+ var _useState = (0, _react.useState)(propEntityKey),
19
+ _useState2 = (0, _slicedToArray2.default)(_useState, 1),
20
+ entityKey = _useState2[0];
21
+ var value = (0, _react.useMemo)(function () {
22
+ var _plugins$find;
23
+ return {
24
+ activePlugin: (_plugins$find = plugins.find(function (plugin) {
25
+ return plugin.key === entityKey;
26
+ })) !== null && _plugins$find !== void 0 ? _plugins$find : null
27
+ };
28
+ }, [entityKey, plugins]);
29
+ return /*#__PURE__*/_react.default.createElement(LinkCreatePluginsContext.Provider, {
30
+ value: value
31
+ }, children);
32
+ };
33
+ var useLinkCreatePlugins = exports.useLinkCreatePlugins = function useLinkCreatePlugins() {
34
+ var value = (0, _react.useContext)(LinkCreatePluginsContext);
35
+ if (!value) {
36
+ throw new Error('useLinkCreatePlugins used outside of LinkCreatePluginsProvider');
37
+ }
38
+ return value;
39
+ };
@@ -12,6 +12,7 @@ var _react = require("react");
12
12
  var _react2 = require("@emotion/react");
13
13
  var _reactFinalForm = require("react-final-form");
14
14
  var _analyticsNext = require("@atlaskit/analytics-next");
15
+ var _primitives = require("@atlaskit/primitives");
15
16
  var _constants = require("../../common/constants");
16
17
  var _analytics = _interopRequireDefault(require("../../common/utils/analytics/analytics.codegen"));
17
18
  var _formContext = require("../../controllers/form-context");
@@ -39,7 +40,8 @@ var CreateForm = exports.CreateForm = function CreateForm(_ref) {
39
40
  createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
40
41
  var _useFormContext = (0, _formContext.useFormContext)(),
41
42
  getValidators = _useFormContext.getValidators,
42
- formErrorMessage = _useFormContext.formErrorMessage;
43
+ formErrorMessage = _useFormContext.formErrorMessage,
44
+ setFormDirty = _useFormContext.setFormDirty;
43
45
  var handleSubmit = (0, _react.useCallback)( /*#__PURE__*/function () {
44
46
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(data) {
45
47
  var validators, errors;
@@ -94,7 +96,14 @@ var CreateForm = exports.CreateForm = function CreateForm(_ref) {
94
96
  name: "link-create-form",
95
97
  "data-testid": testId,
96
98
  css: formStyles
97
- }, (0, _react2.jsx)("div", null, children), !hideFooter && (0, _react2.jsx)(_formFooter.CreateFormFooter, {
99
+ }, (0, _react2.jsx)(_reactFinalForm.FormSpy, {
100
+ subscription: {
101
+ dirty: true
102
+ },
103
+ onChange: function onChange(state) {
104
+ return setFormDirty(state.dirty);
105
+ }
106
+ }), (0, _react2.jsx)(_primitives.Box, null, children), !hideFooter && (0, _react2.jsx)(_formFooter.CreateFormFooter, {
98
107
  formErrorMessage: formErrorMessage,
99
108
  handleCancel: handleCancel,
100
109
  submitting: submitting,
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ConfirmDismissDialog", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _main.ConfirmDismissDialog;
10
+ }
11
+ });
12
+ var _main = require("./main");
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ConfirmDismissDialog = void 0;
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _reactIntlNext = require("react-intl-next");
11
+ var _button = _interopRequireDefault(require("@atlaskit/button"));
12
+ var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
13
+ var _messages = _interopRequireDefault(require("./messages"));
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ var ConfirmDismissDialog = exports.ConfirmDismissDialog = function ConfirmDismissDialog(_ref) {
17
+ var active = _ref.active,
18
+ onCancelDismiss = _ref.onCancelDismiss,
19
+ onConfirmDismiss = _ref.onConfirmDismiss;
20
+ var intl = (0, _reactIntlNext.useIntl)();
21
+ return /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTransition, null, active && /*#__PURE__*/_react.default.createElement(_modalDialog.default, {
22
+ testId: "link-create-confirm-dismiss-dialog",
23
+ onClose: onCancelDismiss,
24
+ width: "small"
25
+ }, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalHeader, null, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTitle, null, intl.formatMessage(_messages.default.title))), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalBody, null, intl.formatMessage(_messages.default.description)), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_button.default, {
26
+ appearance: "subtle",
27
+ onClick: onCancelDismiss
28
+ }, intl.formatMessage(_messages.default.cancelButtonLabel)), /*#__PURE__*/_react.default.createElement(_button.default, {
29
+ appearance: "primary",
30
+ onClick: onConfirmDismiss
31
+ }, intl.formatMessage(_messages.default.confirmButtonLabel)))));
32
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var _default = exports.default = (0, _reactIntlNext.defineMessages)({
9
+ title: {
10
+ id: 'linkCreate.confirm-dismiss-dialog.modal.title',
11
+ defaultMessage: 'Your changes won’t be saved',
12
+ description: 'Title for confirm-dismiss modal popup'
13
+ },
14
+ cancelButtonLabel: {
15
+ id: 'linkCreate.confirm-dismiss-dialog.modal.cancel-button-label',
16
+ defaultMessage: 'Go back',
17
+ description: 'Label for secondary button for confirm-dismiss modal popup'
18
+ },
19
+ confirmButtonLabel: {
20
+ id: 'linkCreate.confirm-dismiss-dialog.modal.confirm-button-label',
21
+ defaultMessage: 'Discard',
22
+ description: 'Label for primary button for confirm-dismiss modal popup'
23
+ },
24
+ description: {
25
+ id: 'linkCreate.confirm-dismiss-dialog.modal.description',
26
+ defaultMessage: 'We won’t be able to save your information if you move away from this page.',
27
+ description: 'Description for confirm-dismiss modal popup'
28
+ }
29
+ });
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.EditModal = void 0;
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
11
+ var _editPostCreateContext = require("../../../controllers/edit-post-create-context");
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+ var EditModal = exports.EditModal = function EditModal(_ref) {
15
+ var onClose = _ref.onClose;
16
+ var _useEditPostCreateMod = (0, _editPostCreateContext.useEditPostCreateModal)(),
17
+ editViewPayload = _useEditPostCreateMod.editViewPayload;
18
+ return /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTransition, null, !!editViewPayload && /*#__PURE__*/_react.default.createElement(_modalDialog.default, {
19
+ testId: "link-create-edit-modal",
20
+ onClose: onClose,
21
+ shouldScrollInViewport: true,
22
+ width: "calc(100vw - 120px)",
23
+ height: "calc(100vh - 120px)"
24
+ }));
25
+ };
@@ -7,20 +7,28 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = exports.TEST_ID = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
13
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
14
  var _react = require("react");
13
15
  var _react2 = require("@emotion/react");
14
16
  var _reactIntlNext = require("react-intl-next");
15
17
  var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
18
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
19
+ var _primitives = require("@atlaskit/primitives");
16
20
  var _constants = require("../../common/constants");
17
21
  var _callbackContext = require("../../controllers/callback-context");
22
+ var _editPostCreateContext = require("../../controllers/edit-post-create-context");
18
23
  var _formContext = require("../../controllers/form-context");
24
+ var _pluginContext = require("../../controllers/plugin-context");
25
+ var _confirmDismissDialog = require("./confirm-dismiss-dialog");
26
+ var _editModal = require("./edit-modal");
19
27
  var _errorBoundary = require("./error-boundary");
20
28
  var _messages = require("./messages");
21
29
  var _trackMount = _interopRequireDefault(require("./track-mount"));
22
30
  var _excluded = ["testId", "onCreate", "onFailure", "onCancel", "triggeredFrom"],
23
- _excluded2 = ["active", "modalTitle", "onOpenComplete", "onCloseComplete"];
31
+ _excluded2 = ["active", "modalTitle", "onCancel", "onOpenComplete", "onCloseComplete"];
24
32
  /** @jsx jsx */
25
33
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
34
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -36,7 +44,7 @@ var LinkCreateContent = function LinkCreateContent(_ref) {
36
44
  }
37
45
  return (0, _react2.jsx)(_react.Fragment, null, chosenOne.form);
38
46
  };
39
- var LinkCreate = (0, _formContext.withLinkCreateFormContext)(function (_ref2) {
47
+ var LinkCreate = function LinkCreate(_ref2) {
40
48
  var _ref2$testId = _ref2.testId,
41
49
  testId = _ref2$testId === void 0 ? TEST_ID : _ref2$testId,
42
50
  onCreate = _ref2.onCreate,
@@ -74,28 +82,68 @@ var LinkCreate = (0, _formContext.withLinkCreateFormContext)(function (_ref2) {
74
82
  setFormErrorMessage(error.message);
75
83
  onFailure && onFailure(error);
76
84
  }, [onFailure, setFormErrorMessage]);
77
- return (0, _react2.jsx)("div", {
78
- "data-testid": testId
85
+ return (0, _react2.jsx)(_primitives.Box, {
86
+ testId: testId
79
87
  }, (0, _react2.jsx)(_errorBoundary.ErrorBoundary, null, (0, _react2.jsx)(_callbackContext.LinkCreateCallbackProvider, {
80
88
  onCancel: onCancel,
81
89
  onCreate: handleCreate,
82
90
  onFailure: handleFailure
83
91
  }, (0, _react2.jsx)(_trackMount.default, null), (0, _react2.jsx)(LinkCreateContent, restProps))));
84
- });
92
+ };
85
93
  var LinkCreateWithModal = function LinkCreateWithModal(_ref4) {
86
94
  var active = _ref4.active,
87
95
  modalTitle = _ref4.modalTitle,
96
+ onCancel = _ref4.onCancel,
88
97
  onOpenComplete = _ref4.onOpenComplete,
89
98
  onCloseComplete = _ref4.onCloseComplete,
90
99
  createProps = (0, _objectWithoutProperties2.default)(_ref4, _excluded2);
100
+ var _useState = (0, _react.useState)(false),
101
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
102
+ dismissDialog = _useState2[0],
103
+ setDismissDialog = _useState2[1];
104
+ var _useFormContext2 = (0, _formContext.useFormContext)(),
105
+ isFormDirty = _useFormContext2.isFormDirty;
91
106
  var intl = (0, _reactIntlNext.useIntl)();
92
- return (0, _react2.jsx)(_modalDialog.ModalTransition, null, !!active && (0, _react2.jsx)(_modalDialog.default, {
107
+ var handleCancel = (0, _react.useCallback)(function () {
108
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.link-create.confirm-dismiss-dialog')) {
109
+ if (isFormDirty()) {
110
+ return setDismissDialog(true);
111
+ }
112
+ }
113
+ onCancel && onCancel();
114
+ }, [onCancel, isFormDirty]);
115
+ var handleCancelDismiss = (0, _react.useCallback)(function () {
116
+ setDismissDialog(false);
117
+ }, []);
118
+ var handleConfirmDismiss = (0, _react.useCallback)(function () {
119
+ setDismissDialog(false);
120
+ onCancel && onCancel();
121
+ }, [onCancel]);
122
+ return (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(_modalDialog.ModalTransition, null, !!active && (0, _react2.jsx)(_modalDialog.default, {
93
123
  testId: "link-create-modal",
94
- onClose: createProps.onCancel,
124
+ onClose: handleCancel,
95
125
  shouldScrollInViewport: true,
96
126
  onOpenComplete: onOpenComplete,
97
127
  onCloseComplete: onCloseComplete,
98
128
  width: "".concat(_constants.CREATE_FORM_MAX_WIDTH_IN_PX, "px")
99
- }, (0, _react2.jsx)(_modalDialog.ModalHeader, null, (0, _react2.jsx)(_modalDialog.ModalTitle, null, modalTitle || intl.formatMessage(_messages.messages.heading))), (0, _react2.jsx)(_modalDialog.ModalBody, null, (0, _react2.jsx)(LinkCreate, createProps))));
129
+ }, (0, _react2.jsx)(_modalDialog.ModalHeader, null, (0, _react2.jsx)(_modalDialog.ModalTitle, null, modalTitle || intl.formatMessage(_messages.messages.heading))), (0, _react2.jsx)(_modalDialog.ModalBody, null, (0, _react2.jsx)(LinkCreate, (0, _extends2.default)({}, createProps, {
130
+ onCancel: handleCancel
131
+ }))))), (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.link-create.enable-edit') && (0, _react2.jsx)(_editModal.EditModal, {
132
+ onClose: handleCancel
133
+ }), (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.link-create.confirm-dismiss-dialog') && (0, _react2.jsx)(_confirmDismissDialog.ConfirmDismissDialog, {
134
+ active: dismissDialog,
135
+ onCancelDismiss: handleCancelDismiss,
136
+ onConfirmDismiss: handleConfirmDismiss
137
+ }));
100
138
  };
101
- var _default = exports.default = LinkCreateWithModal;
139
+ var _default = exports.default = (0, _formContext.withLinkCreateFormContext)(function (props) {
140
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.link-create.enable-edit')) {
141
+ return (0, _react2.jsx)(_pluginContext.LinkCreatePluginsProvider, {
142
+ plugins: props.plugins,
143
+ entityKey: props.entityKey
144
+ }, (0, _react2.jsx)(_editPostCreateContext.EditPostCreateModalProvider, {
145
+ active: !!props.active
146
+ }, (0, _react2.jsx)(LinkCreateWithModal, props)));
147
+ }
148
+ return (0, _react2.jsx)(LinkCreateWithModal, props);
149
+ });
@@ -24,7 +24,7 @@ var LinkCreateWithAnalyticsContext = (0, _analytics.withLinkCreateAnalyticsConte
24
24
  }));
25
25
  var PACKAGE_DATA = exports.PACKAGE_DATA = {
26
26
  packageName: "@atlaskit/link-create" || '',
27
- packageVersion: "1.3.0" || '',
27
+ packageVersion: "1.5.0" || '',
28
28
  componentName: _constants.COMPONENT_NAME,
29
29
  source: _constants.COMPONENT_NAME
30
30
  };
@@ -12,7 +12,7 @@ const LinkCreateCallbackProvider = ({
12
12
  const {
13
13
  createAnalyticsEvent
14
14
  } = useAnalyticsEvents();
15
- const value = useMemo(() => ({
15
+ const handleCreate = useMemo(() => ({
16
16
  onCreate: async result => {
17
17
  const {
18
18
  objectId,
@@ -25,15 +25,21 @@ const LinkCreateCallbackProvider = ({
25
25
  if (onCreate) {
26
26
  await onCreate(result);
27
27
  }
28
- },
28
+ }
29
+ }), [createAnalyticsEvent, onCreate]);
30
+ const handleFailure = useMemo(() => ({
29
31
  onFailure: async error => {
30
32
  createAnalyticsEvent(createEventPayload('track.object.createFailed.linkCreate', {
31
33
  failureType: error.name
32
34
  })).fire(ANALYTICS_CHANNEL);
33
35
  onFailure && onFailure(error);
34
- },
35
- onCancel
36
- }), [onFailure, onCancel, createAnalyticsEvent, onCreate]);
36
+ }
37
+ }), [createAnalyticsEvent, onFailure]);
38
+ const value = useMemo(() => ({
39
+ onCancel,
40
+ ...handleCreate,
41
+ ...handleFailure
42
+ }), [onCancel, handleCreate, handleFailure]);
37
43
  return /*#__PURE__*/React.createElement(LinkCreateCallbackContext.Provider, {
38
44
  value: value
39
45
  }, children);
@@ -0,0 +1,28 @@
1
+ import React, { createContext, useContext, useMemo, useState } from 'react';
2
+ const EditPostCreateModalContext = /*#__PURE__*/createContext({
3
+ editViewPayload: undefined,
4
+ setEditViewPayload: () => {}
5
+ });
6
+ export const EditPostCreateModalProvider = ({
7
+ active,
8
+ children
9
+ }) => {
10
+ const [editViewPayload, setEditViewPayload] = useState(undefined);
11
+ const value = useMemo(() => ({
12
+ editViewPayload,
13
+ setEditViewPayload
14
+ }), [editViewPayload, setEditViewPayload]);
15
+ if (editViewPayload && !active) {
16
+ setEditViewPayload(undefined);
17
+ }
18
+ return /*#__PURE__*/React.createElement(EditPostCreateModalContext.Provider, {
19
+ value: value
20
+ }, children);
21
+ };
22
+ export const useEditPostCreateModal = () => {
23
+ const value = useContext(EditPostCreateModalContext);
24
+ if (!value) {
25
+ throw new Error('useEditPostCreateModal used outside of useEditPostCreateModalProvider');
26
+ }
27
+ return value;
28
+ };
@@ -1,9 +1,11 @@
1
- import React, { createContext, useCallback, useContext, useState } from 'react';
1
+ import React, { createContext, useCallback, useContext, useRef, useState } from 'react';
2
2
  export const FormContext = /*#__PURE__*/createContext({
3
3
  assignValidator: () => {},
4
4
  getValidators: () => ({}),
5
5
  setFormErrorMessage: () => {},
6
- enableEditView: undefined
6
+ enableEditView: undefined,
7
+ setFormDirty: () => {},
8
+ isFormDirty: () => false
7
9
  });
8
10
  const FormContextProvider = ({
9
11
  enableEditView,
@@ -11,6 +13,13 @@ const FormContextProvider = ({
11
13
  }) => {
12
14
  const [error, setError] = useState();
13
15
  const [validators, setValidators] = useState({});
16
+ const dirty = useRef(false);
17
+ const isFormDirty = useCallback(() => {
18
+ return dirty.current;
19
+ }, [dirty]);
20
+ const setFormDirty = useCallback(isDirty => {
21
+ dirty.current = !!isDirty;
22
+ }, [dirty]);
14
23
 
15
24
  // Add validators to the form
16
25
  const assignValidator = useCallback((name, fieldValidators) => {
@@ -35,7 +44,9 @@ const FormContextProvider = ({
35
44
  getValidators,
36
45
  setFormErrorMessage,
37
46
  formErrorMessage: error,
38
- enableEditView
47
+ enableEditView,
48
+ setFormDirty,
49
+ isFormDirty
39
50
  }
40
51
  }, children);
41
52
  };
@@ -0,0 +1,25 @@
1
+ import React, { createContext, useContext, useMemo, useState } from 'react';
2
+ const LinkCreatePluginsContext = /*#__PURE__*/createContext(null);
3
+ export const LinkCreatePluginsProvider = ({
4
+ plugins,
5
+ entityKey: propEntityKey,
6
+ children
7
+ }) => {
8
+ const [entityKey] = useState(propEntityKey);
9
+ const value = useMemo(() => {
10
+ var _plugins$find;
11
+ return {
12
+ activePlugin: (_plugins$find = plugins.find(plugin => plugin.key === entityKey)) !== null && _plugins$find !== void 0 ? _plugins$find : null
13
+ };
14
+ }, [entityKey, plugins]);
15
+ return /*#__PURE__*/React.createElement(LinkCreatePluginsContext.Provider, {
16
+ value: value
17
+ }, children);
18
+ };
19
+ export const useLinkCreatePlugins = () => {
20
+ const value = useContext(LinkCreatePluginsContext);
21
+ if (!value) {
22
+ throw new Error('useLinkCreatePlugins used outside of LinkCreatePluginsProvider');
23
+ }
24
+ return value;
25
+ };
@@ -1,8 +1,9 @@
1
1
  /** @jsx jsx */
2
2
  import { useCallback } from 'react';
3
3
  import { css, jsx } from '@emotion/react';
4
- import { Form } from 'react-final-form';
4
+ import { Form, FormSpy } from 'react-final-form';
5
5
  import { useAnalyticsEvents } from '@atlaskit/analytics-next';
6
+ import { Box } from '@atlaskit/primitives';
6
7
  import { ANALYTICS_CHANNEL, CREATE_FORM_MAX_WIDTH_IN_PX } from '../../common/constants';
7
8
  import createEventPayload from '../../common/utils/analytics/analytics.codegen';
8
9
  import { useFormContext } from '../../controllers/form-context';
@@ -29,7 +30,8 @@ export const CreateForm = ({
29
30
  } = useAnalyticsEvents();
30
31
  const {
31
32
  getValidators,
32
- formErrorMessage
33
+ formErrorMessage,
34
+ setFormDirty
33
35
  } = useFormContext();
34
36
  const handleSubmit = useCallback(async data => {
35
37
  createAnalyticsEvent(createEventPayload('ui.button.clicked.create', {})).fire(ANALYTICS_CHANNEL);
@@ -67,7 +69,12 @@ export const CreateForm = ({
67
69
  name: "link-create-form",
68
70
  "data-testid": testId,
69
71
  css: formStyles
70
- }, jsx("div", null, children), !hideFooter && jsx(CreateFormFooter, {
72
+ }, jsx(FormSpy, {
73
+ subscription: {
74
+ dirty: true
75
+ },
76
+ onChange: state => setFormDirty(state.dirty)
77
+ }), jsx(Box, null, children), !hideFooter && jsx(CreateFormFooter, {
71
78
  formErrorMessage: formErrorMessage,
72
79
  handleCancel: handleCancel,
73
80
  submitting: submitting,
@@ -0,0 +1 @@
1
+ export { ConfirmDismissDialog } from './main';