@atlaskit/link-create 0.4.4 → 0.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 (50) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/common/constants.js +4 -2
  3. package/dist/cjs/controllers/form-context/main.js +3 -3
  4. package/dist/cjs/index.js +6 -0
  5. package/dist/cjs/ui/create-form/form-loader/index.js +12 -0
  6. package/dist/cjs/ui/create-form/form-loader/main.js +29 -0
  7. package/dist/cjs/ui/create-form/index.js +7 -0
  8. package/dist/cjs/ui/create-form/main.js +13 -6
  9. package/dist/cjs/ui/index.js +7 -0
  10. package/dist/cjs/ui/main.js +2 -7
  11. package/dist/cjs/version.json +1 -1
  12. package/dist/es2019/common/constants.js +2 -1
  13. package/dist/es2019/controllers/form-context/main.js +3 -3
  14. package/dist/es2019/index.js +1 -1
  15. package/dist/es2019/ui/create-form/form-loader/index.js +1 -0
  16. package/dist/es2019/ui/create-form/form-loader/main.js +21 -0
  17. package/dist/es2019/ui/create-form/index.js +1 -0
  18. package/dist/es2019/ui/create-form/main.js +13 -6
  19. package/dist/es2019/ui/index.js +1 -0
  20. package/dist/es2019/ui/main.js +2 -3
  21. package/dist/es2019/version.json +1 -1
  22. package/dist/esm/common/constants.js +2 -1
  23. package/dist/esm/controllers/form-context/main.js +3 -3
  24. package/dist/esm/index.js +1 -1
  25. package/dist/esm/ui/create-form/form-loader/index.js +1 -0
  26. package/dist/esm/ui/create-form/form-loader/main.js +21 -0
  27. package/dist/esm/ui/create-form/index.js +1 -0
  28. package/dist/esm/ui/create-form/main.js +13 -6
  29. package/dist/esm/ui/index.js +1 -0
  30. package/dist/esm/ui/main.js +2 -7
  31. package/dist/esm/version.json +1 -1
  32. package/dist/types/common/constants.d.ts +1 -0
  33. package/dist/types/controllers/form-context/main.d.ts +1 -1
  34. package/dist/types/index.d.ts +1 -1
  35. package/dist/types/ui/create-form/form-loader/index.d.ts +1 -0
  36. package/dist/types/ui/create-form/form-loader/main.d.ts +4 -0
  37. package/dist/types/ui/create-form/index.d.ts +1 -0
  38. package/dist/types/ui/create-form/main.d.ts +4 -2
  39. package/dist/types/ui/index.d.ts +1 -0
  40. package/dist/types-ts4.5/common/constants.d.ts +1 -0
  41. package/dist/types-ts4.5/controllers/form-context/main.d.ts +1 -1
  42. package/dist/types-ts4.5/index.d.ts +1 -1
  43. package/dist/types-ts4.5/ui/create-form/form-loader/index.d.ts +1 -0
  44. package/dist/types-ts4.5/ui/create-form/form-loader/main.d.ts +4 -0
  45. package/dist/types-ts4.5/ui/create-form/index.d.ts +1 -0
  46. package/dist/types-ts4.5/ui/create-form/main.d.ts +4 -2
  47. package/dist/types-ts4.5/ui/index.d.ts +1 -0
  48. package/package.json +4 -3
  49. package/report.api.md +13 -1
  50. package/tmp/api-report-tmp.d.ts +9 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/link-create
2
2
 
3
+ ## 0.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`ad753581e70`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ad753581e70) - [ux] Moves the FormFooter out of CreateForm and provides a new CreateFormLoader component & now we handle the submitting state in the form context
8
+
3
9
  ## 0.4.4
4
10
 
5
11
  ### Patch Changes
@@ -3,10 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.CREATE_FORM_MAX_WIDTH_IN_PX = exports.COMPONENT_NAME = exports.ANALYTICS_CHANNEL = void 0;
6
+ exports.CREATE_FORM_MIN_HEIGHT_IN_PX = exports.CREATE_FORM_MAX_WIDTH_IN_PX = exports.COMPONENT_NAME = exports.ANALYTICS_CHANNEL = void 0;
7
7
  var ANALYTICS_CHANNEL = 'media';
8
8
  exports.ANALYTICS_CHANNEL = ANALYTICS_CHANNEL;
9
9
  var COMPONENT_NAME = 'linkCreate';
10
10
  exports.COMPONENT_NAME = COMPONENT_NAME;
11
11
  var CREATE_FORM_MAX_WIDTH_IN_PX = '600';
12
- exports.CREATE_FORM_MAX_WIDTH_IN_PX = CREATE_FORM_MAX_WIDTH_IN_PX;
12
+ exports.CREATE_FORM_MAX_WIDTH_IN_PX = CREATE_FORM_MAX_WIDTH_IN_PX;
13
+ var CREATE_FORM_MIN_HEIGHT_IN_PX = '200';
14
+ exports.CREATE_FORM_MIN_HEIGHT_IN_PX = CREATE_FORM_MIN_HEIGHT_IN_PX;
@@ -32,19 +32,19 @@ var FormContextProvider = function FormContextProvider(_ref) {
32
32
  validators = _useState4[0],
33
33
  setValidators = _useState4[1];
34
34
 
35
- // Use useCallback to prevent infinite useEffect calls
35
+ // Add validators to the form
36
36
  var assignValidator = (0, _react.useCallback)(function (name, fieldValidators) {
37
37
  setValidators(function (prevValidators) {
38
38
  return _objectSpread(_objectSpread({}, prevValidators), {}, (0, _defineProperty2.default)({}, name, fieldValidators));
39
39
  });
40
40
  }, []);
41
41
 
42
- // Use useCallback to prevent infinite useEffect calls
42
+ // Returns a validator function array
43
43
  var getValidators = (0, _react.useCallback)(function () {
44
44
  return validators;
45
45
  }, [validators]);
46
46
 
47
- // Callback to reset error state
47
+ // Sets the form footer error message
48
48
  var setFormErrorMessage = (0, _react.useCallback)(function (errorMessage) {
49
49
  return setError(errorMessage);
50
50
  }, [setError]);
package/dist/cjs/index.js CHANGED
@@ -16,6 +16,12 @@ Object.defineProperty(exports, "CreateForm", {
16
16
  return _index.CreateForm;
17
17
  }
18
18
  });
19
+ Object.defineProperty(exports, "CreateFormLoader", {
20
+ enumerable: true,
21
+ get: function get() {
22
+ return _index.CreateFormLoader;
23
+ }
24
+ });
19
25
  Object.defineProperty(exports, "FormContextProvider", {
20
26
  enumerable: true,
21
27
  get: function get() {
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "CreateFormLoader", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _main.CreateFormLoader;
10
+ }
11
+ });
12
+ var _main = require("./main");
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.CreateFormLoader = CreateFormLoader;
8
+ var _react = require("@emotion/react");
9
+ var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
10
+ var _constants = require("../../../common/constants");
11
+ /** @jsx jsx */
12
+
13
+ var formLoaderStyles = (0, _react.css)({
14
+ display: "flex",
15
+ alignItems: "center",
16
+ justifyContent: "center",
17
+ minHeight: "".concat(_constants.CREATE_FORM_MIN_HEIGHT_IN_PX, "px")
18
+ });
19
+ function CreateFormLoader(_ref) {
20
+ var _ref$size = _ref.size,
21
+ size = _ref$size === void 0 ? 'large' : _ref$size;
22
+ return (0, _react.jsx)("div", {
23
+ css: formLoaderStyles
24
+ }, (0, _react.jsx)(_spinner.default, {
25
+ size: size,
26
+ interactionName: "load",
27
+ testId: "link-create-form-loader"
28
+ }));
29
+ }
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "CreateForm", {
15
15
  return _main.CreateForm;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "CreateFormLoader", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _formLoader.CreateFormLoader;
22
+ }
23
+ });
18
24
  Object.defineProperty(exports, "TextField", {
19
25
  enumerable: true,
20
26
  get: function get() {
@@ -23,4 +29,5 @@ Object.defineProperty(exports, "TextField", {
23
29
  });
24
30
  var _main = require("./main");
25
31
  var _asyncSelect = require("./async-select");
32
+ var _formLoader = require("./form-loader");
26
33
  var _textfield = require("./textfield");
@@ -21,6 +21,7 @@ var _error = _interopRequireDefault(require("@atlaskit/icon/glyph/error"));
21
21
  var _constants = require("../../common/constants");
22
22
  var _analytics = _interopRequireDefault(require("../../common/utils/analytics/analytics.codegen"));
23
23
  var _formContext = require("../../controllers/form-context");
24
+ var _formLoader = require("./form-loader");
24
25
  var _messages = require("./messages");
25
26
  var _utils = require("./utils");
26
27
  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); }
@@ -40,14 +41,16 @@ var errorStyles = (0, _react2.css)({
40
41
  var CreateForm = function CreateForm(_ref) {
41
42
  var children = _ref.children,
42
43
  testId = _ref.testId,
44
+ onSubmit = _ref.onSubmit,
43
45
  onCancel = _ref.onCancel,
44
- onSubmit = _ref.onSubmit;
46
+ isLoading = _ref.isLoading,
47
+ hideFooter = _ref.hideFooter;
48
+ var intl = (0, _reactIntlNext.useIntl)();
45
49
  var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
46
50
  createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
47
51
  var _useFormContext = (0, _formContext.useFormContext)(),
48
52
  getValidators = _useFormContext.getValidators,
49
53
  formErrorMessage = _useFormContext.formErrorMessage;
50
- var intl = (0, _reactIntlNext.useIntl)();
51
54
  var handleSubmit = (0, _react.useCallback)( /*#__PURE__*/function () {
52
55
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(data) {
53
56
  var validators, errors;
@@ -81,22 +84,26 @@ var CreateForm = function CreateForm(_ref) {
81
84
  createAnalyticsEvent((0, _analytics.default)('ui.button.clicked.cancel', {})).fire(_constants.ANALYTICS_CHANNEL);
82
85
  onCancel && onCancel();
83
86
  }, [createAnalyticsEvent, onCancel]);
87
+ if (isLoading) {
88
+ return (0, _react2.jsx)(_formLoader.CreateFormLoader, null);
89
+ }
84
90
  return (0, _react2.jsx)(_form.default, {
85
91
  onSubmit: handleSubmit
86
92
  }, function (_ref3) {
87
- var submitting = _ref3.submitting,
88
- formProps = _ref3.formProps;
93
+ var formProps = _ref3.formProps,
94
+ submitting = _ref3.submitting;
89
95
  return (0, _react2.jsx)("form", (0, _extends2.default)({}, formProps, {
90
96
  name: "confluence-creation-form",
91
97
  "data-testid": testId,
92
98
  css: formStyles
93
- }), (0, _react2.jsx)(_form.FormSection, null, children), (0, _react2.jsx)(_form.FormFooter, null, formErrorMessage && (0, _react2.jsx)("div", {
99
+ }), (0, _react2.jsx)(_form.FormSection, null, children), !hideFooter && (0, _react2.jsx)(_form.FormFooter, null, formErrorMessage && (0, _react2.jsx)("div", {
94
100
  css: errorStyles,
95
- "data-testid": "link-create-confluence-form-error"
101
+ "data-testid": "link-create-form-error"
96
102
  }, (0, _react2.jsx)(_error.default, {
97
103
  label: formErrorMessage,
98
104
  primaryColor: "var(--ds-icon-danger, #E34935)"
99
105
  }), formErrorMessage), (0, _react2.jsx)(_button.ButtonGroup, null, (0, _react2.jsx)(_standardButton.default, {
106
+ type: "button",
100
107
  appearance: "subtle",
101
108
  onClick: handleCancel,
102
109
  testId: 'cancel-button'
@@ -16,6 +16,12 @@ Object.defineProperty(exports, "CreateForm", {
16
16
  return _main2.CreateForm;
17
17
  }
18
18
  });
19
+ Object.defineProperty(exports, "CreateFormLoader", {
20
+ enumerable: true,
21
+ get: function get() {
22
+ return _formLoader.CreateFormLoader;
23
+ }
24
+ });
19
25
  Object.defineProperty(exports, "TextField", {
20
26
  enumerable: true,
21
27
  get: function get() {
@@ -31,4 +37,5 @@ Object.defineProperty(exports, "default", {
31
37
  var _main = _interopRequireDefault(require("./main"));
32
38
  var _textfield = require("./create-form/textfield");
33
39
  var _main2 = require("./create-form/main");
40
+ var _formLoader = require("./create-form/form-loader");
34
41
  var _asyncSelect = require("./create-form/async-select");
@@ -25,12 +25,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
25
25
  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; }
26
26
  /** @jsx jsx */
27
27
 
28
- var withFormContext = function withFormContext(Component) {
29
- return function (props) {
30
- return (0, _react2.jsx)(_formContext.FormContextProvider, null, (0, _react2.jsx)(Component, props));
31
- };
32
- };
33
- var LinkCreate = withFormContext(function (_ref) {
28
+ var LinkCreate = function LinkCreate(_ref) {
34
29
  var plugins = _ref.plugins,
35
30
  entityKey = _ref.entityKey,
36
31
  onCreate = _ref.onCreate,
@@ -59,7 +54,7 @@ var LinkCreate = withFormContext(function (_ref) {
59
54
  onFailure: handleFailure,
60
55
  onCancel: onCancel
61
56
  }, chosenOne.form);
62
- });
57
+ };
63
58
  var LinkCreateWithModal = function LinkCreateWithModal(props) {
64
59
  var testId = props.testId,
65
60
  onCancel = props.onCancel,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-create",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "sideEffects": false
5
5
  }
@@ -1,3 +1,4 @@
1
1
  export const ANALYTICS_CHANNEL = 'media';
2
2
  export const COMPONENT_NAME = 'linkCreate';
3
- export const CREATE_FORM_MAX_WIDTH_IN_PX = '600';
3
+ export const CREATE_FORM_MAX_WIDTH_IN_PX = '600';
4
+ export const CREATE_FORM_MIN_HEIGHT_IN_PX = '200';
@@ -10,7 +10,7 @@ const FormContextProvider = ({
10
10
  const [error, setError] = useState();
11
11
  const [validators, setValidators] = useState({});
12
12
 
13
- // Use useCallback to prevent infinite useEffect calls
13
+ // Add validators to the form
14
14
  const assignValidator = useCallback((name, fieldValidators) => {
15
15
  setValidators(prevValidators => ({
16
16
  ...prevValidators,
@@ -18,12 +18,12 @@ const FormContextProvider = ({
18
18
  }));
19
19
  }, []);
20
20
 
21
- // Use useCallback to prevent infinite useEffect calls
21
+ // Returns a validator function array
22
22
  const getValidators = useCallback(() => {
23
23
  return validators;
24
24
  }, [validators]);
25
25
 
26
- // Callback to reset error state
26
+ // Sets the form footer error message
27
27
  const setFormErrorMessage = useCallback(errorMessage => {
28
28
  return setError(errorMessage);
29
29
  }, [setError]);
@@ -1,3 +1,3 @@
1
- export { default, TextField, CreateForm, AsyncSelect } from './ui/index';
1
+ export { default, TextField, CreateForm, AsyncSelect, CreateFormLoader } from './ui/index';
2
2
  export { useLinkCreateCallback, LinkCreateCallbackProvider } from './controllers/callback-context';
3
3
  export { FormContextProvider, useFormContext } from './controllers/form-context';
@@ -0,0 +1 @@
1
+ export { CreateFormLoader } from './main';
@@ -0,0 +1,21 @@
1
+ /** @jsx jsx */
2
+ import { css, jsx } from '@emotion/react';
3
+ import Spinner from '@atlaskit/spinner';
4
+ import { CREATE_FORM_MIN_HEIGHT_IN_PX } from '../../../common/constants';
5
+ const formLoaderStyles = css({
6
+ display: `flex`,
7
+ alignItems: `center`,
8
+ justifyContent: `center`,
9
+ minHeight: `${CREATE_FORM_MIN_HEIGHT_IN_PX}px`
10
+ });
11
+ export function CreateFormLoader({
12
+ size = 'large'
13
+ }) {
14
+ return jsx("div", {
15
+ css: formLoaderStyles
16
+ }, jsx(Spinner, {
17
+ size: size,
18
+ interactionName: "load",
19
+ testId: "link-create-form-loader"
20
+ }));
21
+ }
@@ -1,3 +1,4 @@
1
1
  export { CreateForm } from './main';
2
2
  export { AsyncSelect } from './async-select';
3
+ export { CreateFormLoader } from './form-loader';
3
4
  export { TextField } from './textfield';
@@ -12,6 +12,7 @@ import ErrorIcon from '@atlaskit/icon/glyph/error';
12
12
  import { ANALYTICS_CHANNEL, CREATE_FORM_MAX_WIDTH_IN_PX } from '../../common/constants';
13
13
  import createEventPayload from '../../common/utils/analytics/analytics.codegen';
14
14
  import { useFormContext } from '../../controllers/form-context';
15
+ import { CreateFormLoader } from './form-loader';
15
16
  import { messages } from './messages';
16
17
  import { validateFormData } from './utils';
17
18
  const formStyles = css({
@@ -27,9 +28,12 @@ const errorStyles = css({
27
28
  export const CreateForm = ({
28
29
  children,
29
30
  testId,
31
+ onSubmit,
30
32
  onCancel,
31
- onSubmit
33
+ isLoading,
34
+ hideFooter
32
35
  }) => {
36
+ const intl = useIntl();
33
37
  const {
34
38
  createAnalyticsEvent
35
39
  } = useAnalyticsEvents();
@@ -37,7 +41,6 @@ export const CreateForm = ({
37
41
  getValidators,
38
42
  formErrorMessage
39
43
  } = useFormContext();
40
- const intl = useIntl();
41
44
  const handleSubmit = useCallback(async data => {
42
45
  createAnalyticsEvent(createEventPayload('ui.button.clicked.create', {})).fire(ANALYTICS_CHANNEL);
43
46
  const validators = getValidators();
@@ -54,22 +57,26 @@ export const CreateForm = ({
54
57
  createAnalyticsEvent(createEventPayload('ui.button.clicked.cancel', {})).fire(ANALYTICS_CHANNEL);
55
58
  onCancel && onCancel();
56
59
  }, [createAnalyticsEvent, onCancel]);
60
+ if (isLoading) {
61
+ return jsx(CreateFormLoader, null);
62
+ }
57
63
  return jsx(Form, {
58
64
  onSubmit: handleSubmit
59
65
  }, ({
60
- submitting,
61
- formProps
66
+ formProps,
67
+ submitting
62
68
  }) => jsx("form", _extends({}, formProps, {
63
69
  name: "confluence-creation-form",
64
70
  "data-testid": testId,
65
71
  css: formStyles
66
- }), jsx(FormSection, null, children), jsx(FormFooter, null, formErrorMessage && jsx("div", {
72
+ }), jsx(FormSection, null, children), !hideFooter && jsx(FormFooter, null, formErrorMessage && jsx("div", {
67
73
  css: errorStyles,
68
- "data-testid": "link-create-confluence-form-error"
74
+ "data-testid": "link-create-form-error"
69
75
  }, jsx(ErrorIcon, {
70
76
  label: formErrorMessage,
71
77
  primaryColor: "var(--ds-icon-danger, #E34935)"
72
78
  }), formErrorMessage), jsx(ButtonGroup, null, jsx(Button, {
79
+ type: "button",
73
80
  appearance: "subtle",
74
81
  onClick: handleCancel,
75
82
  testId: 'cancel-button'
@@ -1,4 +1,5 @@
1
1
  export { default } from './main';
2
2
  export { TextField } from './create-form/textfield';
3
3
  export { CreateForm } from './create-form/main';
4
+ export { CreateFormLoader } from './create-form/form-loader';
4
5
  export { AsyncSelect } from './create-form/async-select';
@@ -12,8 +12,7 @@ import { FormContextProvider, useFormContext } from '../controllers/form-context
12
12
  import { name as packageName, version as packageVersion } from '../version.json';
13
13
  import { ErrorBoundary } from './error-boundary';
14
14
  import { messages } from './messages';
15
- const withFormContext = Component => props => jsx(FormContextProvider, null, jsx(Component, props));
16
- const LinkCreate = withFormContext(({
15
+ const LinkCreate = ({
17
16
  plugins,
18
17
  entityKey,
19
18
  onCreate,
@@ -42,7 +41,7 @@ const LinkCreate = withFormContext(({
42
41
  onFailure: handleFailure,
43
42
  onCancel: onCancel
44
43
  }, chosenOne.form);
45
- });
44
+ };
46
45
  const LinkCreateWithModal = props => {
47
46
  const {
48
47
  testId,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-create",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "sideEffects": false
5
5
  }
@@ -1,3 +1,4 @@
1
1
  export var ANALYTICS_CHANNEL = 'media';
2
2
  export var COMPONENT_NAME = 'linkCreate';
3
- export var CREATE_FORM_MAX_WIDTH_IN_PX = '600';
3
+ export var CREATE_FORM_MAX_WIDTH_IN_PX = '600';
4
+ export var CREATE_FORM_MIN_HEIGHT_IN_PX = '200';
@@ -21,19 +21,19 @@ var FormContextProvider = function FormContextProvider(_ref) {
21
21
  validators = _useState4[0],
22
22
  setValidators = _useState4[1];
23
23
 
24
- // Use useCallback to prevent infinite useEffect calls
24
+ // Add validators to the form
25
25
  var assignValidator = useCallback(function (name, fieldValidators) {
26
26
  setValidators(function (prevValidators) {
27
27
  return _objectSpread(_objectSpread({}, prevValidators), {}, _defineProperty({}, name, fieldValidators));
28
28
  });
29
29
  }, []);
30
30
 
31
- // Use useCallback to prevent infinite useEffect calls
31
+ // Returns a validator function array
32
32
  var getValidators = useCallback(function () {
33
33
  return validators;
34
34
  }, [validators]);
35
35
 
36
- // Callback to reset error state
36
+ // Sets the form footer error message
37
37
  var setFormErrorMessage = useCallback(function (errorMessage) {
38
38
  return setError(errorMessage);
39
39
  }, [setError]);
package/dist/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { default, TextField, CreateForm, AsyncSelect } from './ui/index';
1
+ export { default, TextField, CreateForm, AsyncSelect, CreateFormLoader } from './ui/index';
2
2
  export { useLinkCreateCallback, LinkCreateCallbackProvider } from './controllers/callback-context';
3
3
  export { FormContextProvider, useFormContext } from './controllers/form-context';
@@ -0,0 +1 @@
1
+ export { CreateFormLoader } from './main';
@@ -0,0 +1,21 @@
1
+ /** @jsx jsx */
2
+ import { css, jsx } from '@emotion/react';
3
+ import Spinner from '@atlaskit/spinner';
4
+ import { CREATE_FORM_MIN_HEIGHT_IN_PX } from '../../../common/constants';
5
+ var formLoaderStyles = css({
6
+ display: "flex",
7
+ alignItems: "center",
8
+ justifyContent: "center",
9
+ minHeight: "".concat(CREATE_FORM_MIN_HEIGHT_IN_PX, "px")
10
+ });
11
+ export function CreateFormLoader(_ref) {
12
+ var _ref$size = _ref.size,
13
+ size = _ref$size === void 0 ? 'large' : _ref$size;
14
+ return jsx("div", {
15
+ css: formLoaderStyles
16
+ }, jsx(Spinner, {
17
+ size: size,
18
+ interactionName: "load",
19
+ testId: "link-create-form-loader"
20
+ }));
21
+ }
@@ -1,3 +1,4 @@
1
1
  export { CreateForm } from './main';
2
2
  export { AsyncSelect } from './async-select';
3
+ export { CreateFormLoader } from './form-loader';
3
4
  export { TextField } from './textfield';
@@ -14,6 +14,7 @@ import ErrorIcon from '@atlaskit/icon/glyph/error';
14
14
  import { ANALYTICS_CHANNEL, CREATE_FORM_MAX_WIDTH_IN_PX } from '../../common/constants';
15
15
  import createEventPayload from '../../common/utils/analytics/analytics.codegen';
16
16
  import { useFormContext } from '../../controllers/form-context';
17
+ import { CreateFormLoader } from './form-loader';
17
18
  import { messages } from './messages';
18
19
  import { validateFormData } from './utils';
19
20
  var formStyles = css({
@@ -29,14 +30,16 @@ var errorStyles = css({
29
30
  export var CreateForm = function CreateForm(_ref) {
30
31
  var children = _ref.children,
31
32
  testId = _ref.testId,
33
+ onSubmit = _ref.onSubmit,
32
34
  onCancel = _ref.onCancel,
33
- onSubmit = _ref.onSubmit;
35
+ isLoading = _ref.isLoading,
36
+ hideFooter = _ref.hideFooter;
37
+ var intl = useIntl();
34
38
  var _useAnalyticsEvents = useAnalyticsEvents(),
35
39
  createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
36
40
  var _useFormContext = useFormContext(),
37
41
  getValidators = _useFormContext.getValidators,
38
42
  formErrorMessage = _useFormContext.formErrorMessage;
39
- var intl = useIntl();
40
43
  var handleSubmit = useCallback( /*#__PURE__*/function () {
41
44
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(data) {
42
45
  var validators, errors;
@@ -70,22 +73,26 @@ export var CreateForm = function CreateForm(_ref) {
70
73
  createAnalyticsEvent(createEventPayload('ui.button.clicked.cancel', {})).fire(ANALYTICS_CHANNEL);
71
74
  onCancel && onCancel();
72
75
  }, [createAnalyticsEvent, onCancel]);
76
+ if (isLoading) {
77
+ return jsx(CreateFormLoader, null);
78
+ }
73
79
  return jsx(Form, {
74
80
  onSubmit: handleSubmit
75
81
  }, function (_ref3) {
76
- var submitting = _ref3.submitting,
77
- formProps = _ref3.formProps;
82
+ var formProps = _ref3.formProps,
83
+ submitting = _ref3.submitting;
78
84
  return jsx("form", _extends({}, formProps, {
79
85
  name: "confluence-creation-form",
80
86
  "data-testid": testId,
81
87
  css: formStyles
82
- }), jsx(FormSection, null, children), jsx(FormFooter, null, formErrorMessage && jsx("div", {
88
+ }), jsx(FormSection, null, children), !hideFooter && jsx(FormFooter, null, formErrorMessage && jsx("div", {
83
89
  css: errorStyles,
84
- "data-testid": "link-create-confluence-form-error"
90
+ "data-testid": "link-create-form-error"
85
91
  }, jsx(ErrorIcon, {
86
92
  label: formErrorMessage,
87
93
  primaryColor: "var(--ds-icon-danger, #E34935)"
88
94
  }), formErrorMessage), jsx(ButtonGroup, null, jsx(Button, {
95
+ type: "button",
89
96
  appearance: "subtle",
90
97
  onClick: handleCancel,
91
98
  testId: 'cancel-button'
@@ -1,4 +1,5 @@
1
1
  export { default } from './main';
2
2
  export { TextField } from './create-form/textfield';
3
3
  export { CreateForm } from './create-form/main';
4
+ export { CreateFormLoader } from './create-form/form-loader';
4
5
  export { AsyncSelect } from './create-form/async-select';
@@ -14,12 +14,7 @@ import { FormContextProvider, useFormContext } from '../controllers/form-context
14
14
  import { name as packageName, version as packageVersion } from '../version.json';
15
15
  import { ErrorBoundary } from './error-boundary';
16
16
  import { messages } from './messages';
17
- var withFormContext = function withFormContext(Component) {
18
- return function (props) {
19
- return jsx(FormContextProvider, null, jsx(Component, props));
20
- };
21
- };
22
- var LinkCreate = withFormContext(function (_ref) {
17
+ var LinkCreate = function LinkCreate(_ref) {
23
18
  var plugins = _ref.plugins,
24
19
  entityKey = _ref.entityKey,
25
20
  onCreate = _ref.onCreate,
@@ -48,7 +43,7 @@ var LinkCreate = withFormContext(function (_ref) {
48
43
  onFailure: handleFailure,
49
44
  onCancel: onCancel
50
45
  }, chosenOne.form);
51
- });
46
+ };
52
47
  var LinkCreateWithModal = function LinkCreateWithModal(props) {
53
48
  var testId = props.testId,
54
49
  onCancel = props.onCancel,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-create",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "sideEffects": false
5
5
  }
@@ -1,3 +1,4 @@
1
1
  export declare const ANALYTICS_CHANNEL = "media";
2
2
  export declare const COMPONENT_NAME = "linkCreate";
3
3
  export declare const CREATE_FORM_MAX_WIDTH_IN_PX = "600";
4
+ export declare const CREATE_FORM_MIN_HEIGHT_IN_PX = "200";
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { Validator, ValidatorMap } from '../../common/types';
3
3
  interface FormContextType {
4
- assignValidator: (name: string, validators: Validator[]) => void;
5
4
  getValidators: () => ValidatorMap;
5
+ assignValidator: (name: string, validators: Validator[]) => void;
6
6
  setFormErrorMessage: (errorMessage?: string) => void;
7
7
  formErrorMessage?: string;
8
8
  }
@@ -1,7 +1,7 @@
1
1
  export type { Option } from './ui/types';
2
2
  export type { CreateFormProps } from './ui/index';
3
3
  export type { LinkCreateProps, LinkCreatePlugin } from './common/types';
4
- export { default, TextField, CreateForm, AsyncSelect } from './ui/index';
4
+ export { default, TextField, CreateForm, AsyncSelect, CreateFormLoader, } from './ui/index';
5
5
  export { useLinkCreateCallback, LinkCreateCallbackProvider, } from './controllers/callback-context';
6
6
  export { FormContextProvider, useFormContext, } from './controllers/form-context';
7
7
  export type { Validator, ValidatorMap } from './common/types';
@@ -0,0 +1 @@
1
+ export { CreateFormLoader } from './main';
@@ -0,0 +1,4 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/react';
3
+ import { SpinnerProps } from '@atlaskit/spinner';
4
+ export declare function CreateFormLoader({ size }: Partial<SpinnerProps>): jsx.JSX.Element;
@@ -1,3 +1,4 @@
1
1
  export { CreateForm } from './main';
2
2
  export { AsyncSelect } from './async-select';
3
+ export { CreateFormLoader } from './form-loader';
3
4
  export { TextField } from './textfield';
@@ -4,7 +4,9 @@ import { jsx } from '@emotion/react';
4
4
  export interface CreateFormProps<FormData> {
5
5
  children: ReactNode;
6
6
  testId?: string;
7
- onCancel?: () => void;
8
7
  onSubmit: (data: FormData) => void;
8
+ onCancel?: () => void;
9
+ isLoading?: boolean;
10
+ hideFooter?: boolean;
9
11
  }
10
- export declare const CreateForm: <FormData_1 extends Record<string, any> = {}>({ children, testId, onCancel, onSubmit, }: CreateFormProps<FormData_1>) => jsx.JSX.Element;
12
+ export declare const CreateForm: <FormData_1 extends Record<string, any> = {}>({ children, testId, onSubmit, onCancel, isLoading, hideFooter, }: CreateFormProps<FormData_1>) => jsx.JSX.Element;
@@ -1,5 +1,6 @@
1
1
  export { default } from './main';
2
2
  export { TextField } from './create-form/textfield';
3
3
  export { CreateForm } from './create-form/main';
4
+ export { CreateFormLoader } from './create-form/form-loader';
4
5
  export type { CreateFormProps } from './create-form/main';
5
6
  export { AsyncSelect } from './create-form/async-select';
@@ -1,3 +1,4 @@
1
1
  export declare const ANALYTICS_CHANNEL = "media";
2
2
  export declare const COMPONENT_NAME = "linkCreate";
3
3
  export declare const CREATE_FORM_MAX_WIDTH_IN_PX = "600";
4
+ export declare const CREATE_FORM_MIN_HEIGHT_IN_PX = "200";
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { Validator, ValidatorMap } from '../../common/types';
3
3
  interface FormContextType {
4
- assignValidator: (name: string, validators: Validator[]) => void;
5
4
  getValidators: () => ValidatorMap;
5
+ assignValidator: (name: string, validators: Validator[]) => void;
6
6
  setFormErrorMessage: (errorMessage?: string) => void;
7
7
  formErrorMessage?: string;
8
8
  }
@@ -1,7 +1,7 @@
1
1
  export type { Option } from './ui/types';
2
2
  export type { CreateFormProps } from './ui/index';
3
3
  export type { LinkCreateProps, LinkCreatePlugin } from './common/types';
4
- export { default, TextField, CreateForm, AsyncSelect } from './ui/index';
4
+ export { default, TextField, CreateForm, AsyncSelect, CreateFormLoader, } from './ui/index';
5
5
  export { useLinkCreateCallback, LinkCreateCallbackProvider, } from './controllers/callback-context';
6
6
  export { FormContextProvider, useFormContext, } from './controllers/form-context';
7
7
  export type { Validator, ValidatorMap } from './common/types';
@@ -0,0 +1 @@
1
+ export { CreateFormLoader } from './main';
@@ -0,0 +1,4 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/react';
3
+ import { SpinnerProps } from '@atlaskit/spinner';
4
+ export declare function CreateFormLoader({ size }: Partial<SpinnerProps>): jsx.JSX.Element;
@@ -1,3 +1,4 @@
1
1
  export { CreateForm } from './main';
2
2
  export { AsyncSelect } from './async-select';
3
+ export { CreateFormLoader } from './form-loader';
3
4
  export { TextField } from './textfield';
@@ -4,7 +4,9 @@ import { jsx } from '@emotion/react';
4
4
  export interface CreateFormProps<FormData> {
5
5
  children: ReactNode;
6
6
  testId?: string;
7
- onCancel?: () => void;
8
7
  onSubmit: (data: FormData) => void;
8
+ onCancel?: () => void;
9
+ isLoading?: boolean;
10
+ hideFooter?: boolean;
9
11
  }
10
- export declare const CreateForm: <FormData_1 extends Record<string, any> = {}>({ children, testId, onCancel, onSubmit, }: CreateFormProps<FormData_1>) => jsx.JSX.Element;
12
+ export declare const CreateForm: <FormData_1 extends Record<string, any> = {}>({ children, testId, onSubmit, onCancel, isLoading, hideFooter, }: CreateFormProps<FormData_1>) => jsx.JSX.Element;
@@ -1,5 +1,6 @@
1
1
  export { default } from './main';
2
2
  export { TextField } from './create-form/textfield';
3
3
  export { CreateForm } from './create-form/main';
4
+ export { CreateFormLoader } from './create-form/form-loader';
4
5
  export type { CreateFormProps } from './create-form/main';
5
6
  export { AsyncSelect } from './create-form/async-select';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-create",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "description": "The driver component of meta creation flow",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -41,6 +41,7 @@
41
41
  "@atlaskit/icon": "^21.12.0",
42
42
  "@atlaskit/modal-dialog": "^12.5.0",
43
43
  "@atlaskit/select": "^16.2.0",
44
+ "@atlaskit/spinner": "^15.4.0",
44
45
  "@atlaskit/textfield": "^5.4.0",
45
46
  "@atlaskit/tokens": "^1.4.0",
46
47
  "@babel/runtime": "^7.0.0",
@@ -60,8 +61,8 @@
60
61
  "@atlaskit/visual-regression": "*",
61
62
  "@atlaskit/webdriver-runner": "*",
62
63
  "@atlassian/atlassian-frontend-prettier-config-1.0.0": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.0",
63
- "@atlassian/link-create-confluence": "^5.0.0",
64
- "@atlassian/link-create-presets": "^3.0.0",
64
+ "@atlassian/link-create-confluence": "^6.0.0",
65
+ "@atlassian/link-create-presets": "^4.0.0",
65
66
  "@atlassian/link-picker-atlassian-plugin": "^30.1.0",
66
67
  "@atlassian/link-picker-plugins": "^20.1.0",
67
68
  "@atlassian/recent-work-client": "^1.8.0",
package/report.api.md CHANGED
@@ -23,6 +23,7 @@ import { MemoExoticComponent } from 'react';
23
23
  import { OptionType } from '@atlaskit/select';
24
24
  import { default as React_2 } from 'react';
25
25
  import { ReactNode } from 'react';
26
+ import { SpinnerProps } from '@atlaskit/spinner';
26
27
  import { TextFieldProps as TextFieldProps_2 } from '@atlaskit/textfield';
27
28
 
28
29
  // @public
@@ -56,15 +57,26 @@ export default ComposedLinkCreate;
56
57
  export const CreateForm: <FormData_1 extends Record<string, any> = {}>({
57
58
  children,
58
59
  testId,
59
- onCancel,
60
60
  onSubmit,
61
+ onCancel,
62
+ isLoading,
63
+ hideFooter,
61
64
  }: CreateFormProps<FormData_1>) => jsx.JSX.Element;
62
65
 
66
+ // @public (undocumented)
67
+ export function CreateFormLoader({
68
+ size,
69
+ }: Partial<SpinnerProps>): jsx.JSX.Element;
70
+
63
71
  // @public (undocumented)
64
72
  export interface CreateFormProps<FormData> {
65
73
  // (undocumented)
66
74
  children: ReactNode;
67
75
  // (undocumented)
76
+ hideFooter?: boolean;
77
+ // (undocumented)
78
+ isLoading?: boolean;
79
+ // (undocumented)
68
80
  onCancel?: () => void;
69
81
  // (undocumented)
70
82
  onSubmit: (data: FormData) => void;
@@ -12,6 +12,7 @@ import { MemoExoticComponent } from 'react';
12
12
  import { OptionType } from '@atlaskit/select';
13
13
  import { default as React_2 } from 'react';
14
14
  import { ReactNode } from 'react';
15
+ import { SpinnerProps } from '@atlaskit/spinner';
15
16
  import { TextFieldProps as TextFieldProps_2 } from '@atlaskit/textfield';
16
17
 
17
18
  // @public
@@ -32,13 +33,20 @@ const ComposedLinkCreate: MemoExoticComponent<(props: LinkCreateProps) => jsx.JS
32
33
  export default ComposedLinkCreate;
33
34
 
34
35
  // @public (undocumented)
35
- export const CreateForm: <FormData_1 extends Record<string, any> = {}>({ children, testId, onCancel, onSubmit, }: CreateFormProps<FormData_1>) => jsx.JSX.Element;
36
+ export const CreateForm: <FormData_1 extends Record<string, any> = {}>({ children, testId, onSubmit, onCancel, isLoading, hideFooter, }: CreateFormProps<FormData_1>) => jsx.JSX.Element;
37
+
38
+ // @public (undocumented)
39
+ export function CreateFormLoader({ size }: Partial<SpinnerProps>): jsx.JSX.Element;
36
40
 
37
41
  // @public (undocumented)
38
42
  export interface CreateFormProps<FormData> {
39
43
  // (undocumented)
40
44
  children: ReactNode;
41
45
  // (undocumented)
46
+ hideFooter?: boolean;
47
+ // (undocumented)
48
+ isLoading?: boolean;
49
+ // (undocumented)
42
50
  onCancel?: () => void;
43
51
  // (undocumented)
44
52
  onSubmit: (data: FormData) => void;