@atlaskit/editor-core 151.1.2 → 151.3.1
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.
- package/CHANGELOG.md +22 -0
- package/dist/cjs/create-editor/ReactEditorView.js +22 -8
- package/dist/cjs/create-editor/create-plugins-list.js +30 -11
- package/dist/cjs/labs/next/presets/cxhtml.js +1 -2
- package/dist/cjs/labs/next/presets/default.js +3 -1
- package/dist/cjs/nodeviews/ReactNodeView.js +2 -2
- package/dist/cjs/nodeviews/SelectionBasedNodeView.js +6 -0
- package/dist/cjs/plugins/analytics/types/enums.js +1 -0
- package/dist/cjs/plugins/annotation/utils.js +19 -8
- package/dist/cjs/plugins/avatar-group/index.js +2 -1
- package/dist/cjs/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +5 -2
- package/dist/cjs/plugins/before-primaryToolbar/index.js +26 -0
- package/dist/cjs/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +28 -0
- package/dist/cjs/plugins/code-bidi-warning/index.js +5 -2
- package/dist/cjs/plugins/code-bidi-warning/pm-plugins/main.js +12 -3
- package/dist/cjs/plugins/code-bidi-warning/pm-plugins/plugin-factory.js +15 -5
- package/dist/cjs/plugins/code-block/index.js +3 -3
- package/dist/cjs/plugins/code-block/nodeviews/highlighting-code-block.js +6 -3
- package/dist/cjs/plugins/code-block/pm-plugins/main.js +11 -3
- package/dist/cjs/plugins/extension/extension-api.js +10 -2
- package/dist/cjs/plugins/extension/ui/styles.js +1 -1
- package/dist/cjs/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
- package/dist/cjs/plugins/find-replace/FindReplaceToolbarButtonWithState.js +172 -0
- package/dist/cjs/plugins/find-replace/index.js +14 -137
- package/dist/cjs/plugins/find-replace/ui/Find.js +16 -9
- package/dist/cjs/plugins/find-replace/ui/FindReplace.js +9 -2
- package/dist/cjs/plugins/find-replace/ui/Replace.js +11 -3
- package/dist/cjs/plugins/find-replace/ui/styles.js +44 -35
- package/dist/cjs/plugins/floating-toolbar/ui/EmojiPickerButton.js +10 -4
- package/dist/cjs/plugins/floating-toolbar/ui/Toolbar.js +1 -1
- package/dist/cjs/plugins/fragment/index.js +34 -0
- package/dist/cjs/plugins/fragment/plugin-key.js +11 -0
- package/dist/cjs/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +1 -1
- package/dist/cjs/plugins/index.js +16 -0
- package/dist/cjs/plugins/list/actions/conversions.js +39 -71
- package/dist/cjs/plugins/list/transforms.js +7 -1
- package/dist/cjs/plugins/media/index.js +2 -3
- package/dist/cjs/plugins/media/nodeviews/mediaGroup.js +3 -1
- package/dist/cjs/plugins/media/nodeviews/mediaInline.js +12 -5
- package/dist/cjs/plugins/media/nodeviews/mediaNodeUpdater.js +3 -3
- package/dist/cjs/plugins/media/nodeviews/mediaSingle.js +6 -4
- package/dist/cjs/plugins/media/nodeviews/styles.js +6 -1
- package/dist/cjs/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
- package/dist/cjs/plugins/media/pm-plugins/main.js +49 -15
- package/dist/cjs/plugins/media/toolbar/commands.js +59 -0
- package/dist/cjs/plugins/media/toolbar/filePreviewItem.js +7 -2
- package/dist/cjs/plugins/media/toolbar/index.js +90 -3
- package/dist/cjs/plugins/media/ui/ResizableMediaSingle/index.js +9 -1
- package/dist/cjs/plugins/media/utils/media-common.js +1 -1
- package/dist/cjs/plugins/media/utils/media-files.js +5 -1
- package/dist/cjs/plugins/panel/actions.js +2 -2
- package/dist/cjs/plugins/panel/index.js +3 -3
- package/dist/cjs/plugins/panel/nodeviews/panel.js +2 -2
- package/dist/cjs/plugins/panel/toolbar.js +10 -5
- package/dist/cjs/plugins/panel/utils.js +15 -0
- package/dist/cjs/plugins/rank.js +3 -2
- package/dist/cjs/plugins/selection/pm-plugins/selection-main.js +49 -1
- package/dist/cjs/plugins/status/ui/statusPicker.js +4 -2
- package/dist/cjs/plugins/table/commands/insert.js +1 -0
- package/dist/cjs/plugins/table/index.js +3 -2
- package/dist/cjs/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -3
- package/dist/cjs/plugins/table/pm-plugins/main.js +26 -3
- package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
- package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
- package/dist/cjs/plugins/table/transforms/column-width.js +14 -5
- package/dist/cjs/plugins/table/transforms/fix-tables.js +43 -6
- package/dist/cjs/plugins/table/ui/FloatingContextualButton/index.js +3 -2
- package/dist/cjs/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
- package/dist/cjs/plugins/table/ui/common-styles.css.js +1 -1
- package/dist/cjs/plugins/table/ui/consts.js +1 -1
- package/dist/cjs/plugins/table/ui/messages.js +1 -1
- package/dist/cjs/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
- package/dist/cjs/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
- package/dist/cjs/plugins/tasks-and-decisions/pm-plugins/main.js +2 -2
- package/dist/cjs/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
- package/dist/cjs/plugins/text-formatting/index.js +2 -1
- package/dist/cjs/plugins/type-ahead/ui/TypeAheadList.js +1 -0
- package/dist/cjs/ui/Appearance/FullPage/FullPageToolbar.js +77 -26
- package/dist/cjs/ui/Appearance/FullPage/MainToolbar.js +32 -9
- package/dist/cjs/ui/ColorPalette/Color/index.js +8 -18
- package/dist/cjs/ui/ColorPalette/index.js +7 -4
- package/dist/cjs/ui/ColorPickerButton/index.js +1 -1
- package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +114 -61
- package/dist/cjs/ui/ConfigPanel/FormContent.js +39 -26
- package/dist/cjs/ui/ConfigPanel/transformers.js +490 -248
- package/dist/cjs/ui/ConfigPanel/utils.js +2 -10
- package/dist/cjs/ui/DropdownMenu/index.js +3 -1
- package/dist/cjs/ui/LinkSearch/LinkSearchListItem.js +1 -1
- package/dist/cjs/ui/Resizer/index.js +9 -1
- package/dist/cjs/version-wrapper.js +1 -1
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/create-editor/ReactEditorView.js +19 -8
- package/dist/es2019/create-editor/create-plugins-list.js +31 -12
- package/dist/es2019/labs/next/presets/cxhtml.js +1 -2
- package/dist/es2019/labs/next/presets/default.js +3 -1
- package/dist/es2019/nodeviews/ReactNodeView.js +1 -1
- package/dist/es2019/nodeviews/SelectionBasedNodeView.js +11 -0
- package/dist/es2019/plugins/analytics/types/enums.js +1 -0
- package/dist/es2019/plugins/annotation/utils.js +18 -7
- package/dist/es2019/plugins/avatar-group/index.js +2 -1
- package/dist/es2019/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +3 -2
- package/dist/es2019/plugins/before-primaryToolbar/index.js +15 -0
- package/dist/es2019/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +12 -0
- package/dist/es2019/plugins/code-bidi-warning/index.js +8 -2
- package/dist/es2019/plugins/code-bidi-warning/pm-plugins/main.js +12 -2
- package/dist/es2019/plugins/code-bidi-warning/pm-plugins/plugin-factory.js +16 -5
- package/dist/es2019/plugins/code-block/index.js +3 -2
- package/dist/es2019/plugins/code-block/nodeviews/highlighting-code-block.js +6 -3
- package/dist/es2019/plugins/code-block/pm-plugins/main.js +11 -3
- package/dist/es2019/plugins/extension/extension-api.js +9 -2
- package/dist/es2019/plugins/extension/ui/styles.js +6 -0
- package/dist/es2019/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
- package/dist/es2019/plugins/find-replace/FindReplaceToolbarButtonWithState.js +152 -0
- package/dist/es2019/plugins/find-replace/index.js +15 -128
- package/dist/es2019/plugins/find-replace/ui/Find.js +18 -10
- package/dist/es2019/plugins/find-replace/ui/FindReplace.js +11 -3
- package/dist/es2019/plugins/find-replace/ui/Replace.js +12 -4
- package/dist/es2019/plugins/find-replace/ui/styles.js +37 -47
- package/dist/es2019/plugins/floating-toolbar/ui/DropdownMenu.js +2 -1
- package/dist/es2019/plugins/floating-toolbar/ui/EmojiPickerButton.js +10 -2
- package/dist/es2019/plugins/floating-toolbar/ui/Toolbar.js +1 -1
- package/dist/es2019/plugins/fragment/index.js +22 -0
- package/dist/es2019/plugins/fragment/plugin-key.js +2 -0
- package/dist/es2019/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -2
- package/dist/es2019/plugins/index.js +2 -0
- package/dist/es2019/plugins/list/actions/conversions.js +38 -69
- package/dist/es2019/plugins/list/transforms.js +5 -1
- package/dist/es2019/plugins/media/index.js +2 -2
- package/dist/es2019/plugins/media/nodeviews/mediaGroup.js +2 -1
- package/dist/es2019/plugins/media/nodeviews/mediaInline.js +8 -4
- package/dist/es2019/plugins/media/nodeviews/mediaNodeUpdater.js +3 -3
- package/dist/es2019/plugins/media/nodeviews/mediaSingle.js +7 -5
- package/dist/es2019/plugins/media/nodeviews/styles.js +2 -0
- package/dist/es2019/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
- package/dist/es2019/plugins/media/pm-plugins/main.js +32 -17
- package/dist/es2019/plugins/media/toolbar/commands.js +47 -0
- package/dist/es2019/plugins/media/toolbar/filePreviewItem.js +6 -2
- package/dist/es2019/plugins/media/toolbar/index.js +90 -3
- package/dist/es2019/plugins/media/ui/ResizableMediaSingle/index.js +7 -1
- package/dist/es2019/plugins/media/utils/media-common.js +1 -1
- package/dist/es2019/plugins/media/utils/media-files.js +6 -1
- package/dist/es2019/plugins/panel/actions.js +2 -2
- package/dist/es2019/plugins/panel/index.js +5 -5
- package/dist/es2019/plugins/panel/nodeviews/panel.js +2 -2
- package/dist/es2019/plugins/panel/toolbar.js +10 -5
- package/dist/es2019/plugins/panel/utils.js +8 -1
- package/dist/es2019/plugins/rank.js +3 -2
- package/dist/es2019/plugins/selection/pm-plugins/selection-main.js +48 -1
- package/dist/es2019/plugins/status/ui/statusPicker.js +4 -2
- package/dist/es2019/plugins/table/commands/insert.js +1 -2
- package/dist/es2019/plugins/table/index.js +2 -1
- package/dist/es2019/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -2
- package/dist/es2019/plugins/table/pm-plugins/main.js +25 -4
- package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
- package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
- package/dist/es2019/plugins/table/transforms/column-width.js +13 -3
- package/dist/es2019/plugins/table/transforms/fix-tables.js +43 -5
- package/dist/es2019/plugins/table/ui/FloatingContextualButton/index.js +3 -2
- package/dist/es2019/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
- package/dist/es2019/plugins/table/ui/common-styles.css.js +5 -1
- package/dist/es2019/plugins/table/ui/consts.js +2 -2
- package/dist/es2019/plugins/table/ui/messages.js +1 -1
- package/dist/es2019/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
- package/dist/es2019/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
- package/dist/es2019/plugins/tasks-and-decisions/pm-plugins/main.js +3 -3
- package/dist/es2019/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
- package/dist/es2019/plugins/text-formatting/index.js +3 -2
- package/dist/es2019/plugins/type-ahead/ui/TypeAheadList.js +2 -1
- package/dist/es2019/plugins/type-ahead/ui/TypeAheadListItem.js +2 -1
- package/dist/es2019/ui/Appearance/FullPage/FullPageToolbar.js +60 -27
- package/dist/es2019/ui/Appearance/FullPage/MainToolbar.js +51 -7
- package/dist/es2019/ui/ColorPalette/Color/index.js +9 -18
- package/dist/es2019/ui/ColorPalette/index.js +7 -4
- package/dist/es2019/ui/ColorPickerButton/index.js +1 -1
- package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +101 -49
- package/dist/es2019/ui/ConfigPanel/FormContent.js +35 -26
- package/dist/es2019/ui/ConfigPanel/transformers.js +243 -72
- package/dist/es2019/ui/ConfigPanel/utils.js +1 -2
- package/dist/es2019/ui/Dropdown/index.js +2 -1
- package/dist/es2019/ui/DropdownMenu/index.js +7 -3
- package/dist/es2019/ui/ElementBrowser/InsertMenu.js +1 -0
- package/dist/es2019/ui/ElementBrowser/components/ElementList/ElementList.js +1 -0
- package/dist/es2019/ui/LinkSearch/LinkSearchListItem.js +2 -2
- package/dist/es2019/ui/Resizer/index.js +9 -1
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/create-editor/ReactEditorView.js +22 -8
- package/dist/esm/create-editor/create-plugins-list.js +31 -12
- package/dist/esm/labs/next/presets/cxhtml.js +1 -2
- package/dist/esm/labs/next/presets/default.js +3 -1
- package/dist/esm/nodeviews/ReactNodeView.js +2 -2
- package/dist/esm/nodeviews/SelectionBasedNodeView.js +7 -0
- package/dist/esm/plugins/analytics/types/enums.js +1 -0
- package/dist/esm/plugins/annotation/utils.js +18 -7
- package/dist/esm/plugins/avatar-group/index.js +2 -1
- package/dist/esm/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +5 -2
- package/dist/esm/plugins/before-primaryToolbar/index.js +15 -0
- package/dist/esm/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +12 -0
- package/dist/esm/plugins/code-bidi-warning/index.js +5 -2
- package/dist/esm/plugins/code-bidi-warning/pm-plugins/main.js +12 -3
- package/dist/esm/plugins/code-bidi-warning/pm-plugins/plugin-factory.js +15 -5
- package/dist/esm/plugins/code-block/index.js +3 -3
- package/dist/esm/plugins/code-block/nodeviews/highlighting-code-block.js +6 -3
- package/dist/esm/plugins/code-block/pm-plugins/main.js +11 -3
- package/dist/esm/plugins/extension/extension-api.js +9 -2
- package/dist/esm/plugins/extension/ui/styles.js +1 -1
- package/dist/esm/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
- package/dist/esm/plugins/find-replace/FindReplaceToolbarButtonWithState.js +155 -0
- package/dist/esm/plugins/find-replace/index.js +14 -131
- package/dist/esm/plugins/find-replace/ui/Find.js +17 -10
- package/dist/esm/plugins/find-replace/ui/FindReplace.js +10 -3
- package/dist/esm/plugins/find-replace/ui/Replace.js +11 -4
- package/dist/esm/plugins/find-replace/ui/styles.js +39 -18
- package/dist/esm/plugins/floating-toolbar/ui/DropdownMenu.js +2 -1
- package/dist/esm/plugins/floating-toolbar/ui/EmojiPickerButton.js +9 -4
- package/dist/esm/plugins/floating-toolbar/ui/Toolbar.js +1 -1
- package/dist/esm/plugins/fragment/index.js +22 -0
- package/dist/esm/plugins/fragment/plugin-key.js +2 -0
- package/dist/esm/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -2
- package/dist/esm/plugins/index.js +2 -0
- package/dist/esm/plugins/list/actions/conversions.js +38 -71
- package/dist/esm/plugins/list/transforms.js +7 -1
- package/dist/esm/plugins/media/index.js +2 -3
- package/dist/esm/plugins/media/nodeviews/mediaGroup.js +2 -1
- package/dist/esm/plugins/media/nodeviews/mediaInline.js +11 -6
- package/dist/esm/plugins/media/nodeviews/mediaNodeUpdater.js +3 -3
- package/dist/esm/plugins/media/nodeviews/mediaSingle.js +7 -5
- package/dist/esm/plugins/media/nodeviews/styles.js +2 -0
- package/dist/esm/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
- package/dist/esm/plugins/media/pm-plugins/main.js +47 -16
- package/dist/esm/plugins/media/toolbar/commands.js +45 -0
- package/dist/esm/plugins/media/toolbar/filePreviewItem.js +6 -2
- package/dist/esm/plugins/media/toolbar/index.js +88 -3
- package/dist/esm/plugins/media/ui/ResizableMediaSingle/index.js +9 -1
- package/dist/esm/plugins/media/utils/media-common.js +1 -1
- package/dist/esm/plugins/media/utils/media-files.js +6 -1
- package/dist/esm/plugins/panel/actions.js +2 -2
- package/dist/esm/plugins/panel/index.js +5 -5
- package/dist/esm/plugins/panel/nodeviews/panel.js +2 -2
- package/dist/esm/plugins/panel/toolbar.js +9 -4
- package/dist/esm/plugins/panel/utils.js +13 -0
- package/dist/esm/plugins/rank.js +3 -2
- package/dist/esm/plugins/selection/pm-plugins/selection-main.js +50 -1
- package/dist/esm/plugins/status/ui/statusPicker.js +4 -2
- package/dist/esm/plugins/table/commands/insert.js +1 -2
- package/dist/esm/plugins/table/index.js +3 -2
- package/dist/esm/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -2
- package/dist/esm/plugins/table/pm-plugins/main.js +27 -4
- package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
- package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
- package/dist/esm/plugins/table/transforms/column-width.js +13 -3
- package/dist/esm/plugins/table/transforms/fix-tables.js +42 -4
- package/dist/esm/plugins/table/ui/FloatingContextualButton/index.js +3 -2
- package/dist/esm/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
- package/dist/esm/plugins/table/ui/common-styles.css.js +1 -1
- package/dist/esm/plugins/table/ui/consts.js +2 -2
- package/dist/esm/plugins/table/ui/messages.js +1 -1
- package/dist/esm/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
- package/dist/esm/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
- package/dist/esm/plugins/tasks-and-decisions/pm-plugins/main.js +3 -3
- package/dist/esm/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
- package/dist/esm/plugins/text-formatting/index.js +3 -2
- package/dist/esm/plugins/type-ahead/ui/TypeAheadList.js +2 -1
- package/dist/esm/plugins/type-ahead/ui/TypeAheadListItem.js +2 -1
- package/dist/esm/ui/Appearance/FullPage/FullPageToolbar.js +67 -27
- package/dist/esm/ui/Appearance/FullPage/MainToolbar.js +20 -7
- package/dist/esm/ui/ColorPalette/Color/index.js +9 -16
- package/dist/esm/ui/ColorPalette/index.js +7 -4
- package/dist/esm/ui/ColorPickerButton/index.js +1 -1
- package/dist/esm/ui/ConfigPanel/ConfigPanel.js +113 -62
- package/dist/esm/ui/ConfigPanel/FormContent.js +39 -26
- package/dist/esm/ui/ConfigPanel/transformers.js +488 -248
- package/dist/esm/ui/ConfigPanel/utils.js +1 -6
- package/dist/esm/ui/Dropdown/index.js +2 -1
- package/dist/esm/ui/DropdownMenu/index.js +7 -3
- package/dist/esm/ui/ElementBrowser/InsertMenu.js +1 -0
- package/dist/esm/ui/ElementBrowser/components/ElementList/ElementList.js +1 -0
- package/dist/esm/ui/LinkSearch/LinkSearchListItem.js +2 -2
- package/dist/esm/ui/Resizer/index.js +9 -1
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/esm/version.json +1 -1
- package/dist/types/labs/next/full-page.d.ts +1 -1
- package/dist/types/nodeviews/ReactNodeView.d.ts +1 -1
- package/dist/types/nodeviews/SelectionBasedNodeView.d.ts +1 -0
- package/dist/types/plugins/analytics/types/enums.d.ts +1 -0
- package/dist/types/plugins/analytics/types/events.d.ts +7 -1
- package/dist/types/plugins/annotation/utils.d.ts +1 -1
- package/dist/types/plugins/avatar-group/index.d.ts +1 -0
- package/dist/types/plugins/avatar-group/ui/AvatarGroupPluginWrapper.d.ts +1 -0
- package/dist/types/plugins/before-primaryToolbar/index.d.ts +5 -0
- package/dist/types/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.d.ts +5 -0
- package/dist/types/plugins/code-bidi-warning/index.d.ts +4 -2
- package/dist/types/plugins/code-bidi-warning/pm-plugins/main.d.ts +4 -2
- package/dist/types/plugins/code-bidi-warning/pm-plugins/plugin-factory.d.ts +2 -1
- package/dist/types/plugins/code-bidi-warning/pm-plugins/types.d.ts +1 -0
- package/dist/types/plugins/code-block/index.d.ts +1 -1
- package/dist/types/plugins/code-block/nodeviews/highlighting-code-block.d.ts +12 -1
- package/dist/types/plugins/code-block/pm-plugins/main.d.ts +3 -1
- package/dist/types/plugins/code-block/types.d.ts +2 -0
- package/dist/types/plugins/feature-flags-context/get-enabled-feature-flag-keys.d.ts +1 -1
- package/dist/types/plugins/find-replace/FindReplaceToolbarButtonWithState.d.ts +15 -0
- package/dist/types/plugins/find-replace/index.d.ts +1 -0
- package/dist/types/plugins/find-replace/ui/Find.d.ts +1 -0
- package/dist/types/plugins/find-replace/ui/FindReplace.d.ts +1 -0
- package/dist/types/plugins/find-replace/ui/Replace.d.ts +1 -0
- package/dist/types/plugins/find-replace/ui/styles.d.ts +5 -14
- package/dist/types/plugins/floating-toolbar/ui/EmojiPickerButton.d.ts +1 -1
- package/dist/types/plugins/fragment/index.d.ts +5 -0
- package/dist/types/plugins/fragment/plugin-key.d.ts +2 -0
- package/dist/types/plugins/index.d.ts +2 -0
- package/dist/types/plugins/media/nodeviews/mediaInline.d.ts +3 -2
- package/dist/types/plugins/media/nodeviews/mediaNodeUpdater.d.ts +2 -2
- package/dist/types/plugins/media/nodeviews/mediaSingle.d.ts +1 -1
- package/dist/types/plugins/media/nodeviews/styles.d.ts +2 -0
- package/dist/types/plugins/media/toolbar/commands.d.ts +3 -0
- package/dist/types/plugins/media/toolbar/filePreviewItem.d.ts +2 -0
- package/dist/types/plugins/media/types.d.ts +0 -1
- package/dist/types/plugins/panel/actions.d.ts +1 -1
- package/dist/types/plugins/panel/types.d.ts +8 -2
- package/dist/types/plugins/quick-insert/index.d.ts +2 -1
- package/dist/types/plugins/table/commands/insert.d.ts +3 -0
- package/dist/types/plugins/table/pm-plugins/main.d.ts +2 -1
- package/dist/types/plugins/table/pm-plugins/table-resizing/utils/types.d.ts +1 -0
- package/dist/types/plugins/table/transforms/column-width.d.ts +4 -1
- package/dist/types/plugins/table/transforms/fix-tables.d.ts +3 -2
- package/dist/types/plugins/table/types.d.ts +8 -0
- package/dist/types/plugins/table/ui/consts.d.ts +1 -1
- package/dist/types/types/editor-appearance-component.d.ts +2 -2
- package/dist/types/types/editor-props.d.ts +11 -1
- package/dist/types/types/feature-flags.d.ts +13 -0
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/ui/Appearance/FullPage/FullPageToolbar.d.ts +2 -2
- package/dist/types/ui/Appearance/FullPage/MainToolbar.d.ts +10 -1
- package/dist/types/ui/ColorPalette/Color/index.d.ts +8 -5
- package/dist/types/ui/ColorPalette/index.d.ts +1 -0
- package/dist/types/ui/ConfigPanel/transformers.d.ts +7 -1
- package/dist/types/ui/ConfigPanel/utils.d.ts +0 -1
- package/dist/types/ui/Resizer/index.d.ts +1 -0
- package/package.json +14 -10
- package/dist/cjs/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -38
- package/dist/es2019/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -28
- package/dist/esm/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -28
- package/dist/types/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.d.ts +0 -1
|
@@ -6,11 +6,12 @@ import { withAnalyticsContext, withAnalyticsEvents } from '@atlaskit/analytics-n
|
|
|
6
6
|
import Form from '@atlaskit/form';
|
|
7
7
|
import { isTabGroup } from '@atlaskit/editor-common/extensions';
|
|
8
8
|
import _isEqual from 'lodash/isEqual';
|
|
9
|
+
import _mergeRecursive from 'lodash/merge';
|
|
9
10
|
import { fireAnalyticsEvent, EVENT_TYPE, ACTION_SUBJECT, ACTION } from '../../plugins/analytics';
|
|
10
11
|
import LoadingState from './LoadingState';
|
|
11
12
|
import Header from './Header';
|
|
12
13
|
import ErrorMessage from './ErrorMessage';
|
|
13
|
-
import { serialize, deserialize } from './transformers';
|
|
14
|
+
import { serialize, deserialize, findDuplicateFields } from './transformers';
|
|
14
15
|
import { injectIntl } from 'react-intl';
|
|
15
16
|
import ButtonGroup from '@atlaskit/button/button-group';
|
|
16
17
|
import Button from '@atlaskit/button/custom-theme-button';
|
|
@@ -19,6 +20,7 @@ import { pluginKey as extensionPluginKey } from '../../plugins/extension/plugin-
|
|
|
19
20
|
import WithPluginState from '../WithPluginState';
|
|
20
21
|
import FormContent from './FormContent';
|
|
21
22
|
import { messages } from './messages';
|
|
23
|
+
import { FormErrorBoundary } from './FormErrorBoundary';
|
|
22
24
|
|
|
23
25
|
function ConfigForm({
|
|
24
26
|
canSave,
|
|
@@ -32,8 +34,19 @@ function ConfigForm({
|
|
|
32
34
|
onCancel,
|
|
33
35
|
onFieldChange,
|
|
34
36
|
parameters,
|
|
35
|
-
submitting
|
|
37
|
+
submitting,
|
|
38
|
+
contextIdentifierProvider
|
|
36
39
|
}) {
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (fields) {
|
|
42
|
+
const firstDuplicateField = findDuplicateFields(fields);
|
|
43
|
+
|
|
44
|
+
if (firstDuplicateField) {
|
|
45
|
+
throw new Error(`Possible duplicate field name: \`${firstDuplicateField.name}\`.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, [fields]);
|
|
49
|
+
|
|
37
50
|
if (isLoading || !hasParsedParameters && errorMessage === null) {
|
|
38
51
|
return /*#__PURE__*/React.createElement(LoadingState, null);
|
|
39
52
|
}
|
|
@@ -44,34 +57,27 @@ function ConfigForm({
|
|
|
44
57
|
});
|
|
45
58
|
}
|
|
46
59
|
|
|
47
|
-
return /*#__PURE__*/React.createElement(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
appearance: "primary"
|
|
69
|
-
}, intl.formatMessage(messages.submit)), /*#__PURE__*/React.createElement(Button, {
|
|
70
|
-
appearance: "default",
|
|
71
|
-
isDisabled: submitting,
|
|
72
|
-
onClick: onCancel
|
|
73
|
-
}, intl.formatMessage(messages.cancel))))))
|
|
74
|
-
});
|
|
60
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormContent, {
|
|
61
|
+
fields: fields,
|
|
62
|
+
parameters: parameters,
|
|
63
|
+
extensionManifest: extensionManifest,
|
|
64
|
+
onFieldChange: onFieldChange,
|
|
65
|
+
firstVisibleFieldName: firstVisibleFieldName,
|
|
66
|
+
contextIdentifierProvider: contextIdentifierProvider
|
|
67
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
68
|
+
style: canSave ? {} : {
|
|
69
|
+
display: 'none'
|
|
70
|
+
}
|
|
71
|
+
}, /*#__PURE__*/React.createElement(FormFooter, {
|
|
72
|
+
align: "start"
|
|
73
|
+
}, /*#__PURE__*/React.createElement(ButtonGroup, null, /*#__PURE__*/React.createElement(Button, {
|
|
74
|
+
type: "submit",
|
|
75
|
+
appearance: "primary"
|
|
76
|
+
}, intl.formatMessage(messages.submit)), /*#__PURE__*/React.createElement(Button, {
|
|
77
|
+
appearance: "default",
|
|
78
|
+
isDisabled: submitting,
|
|
79
|
+
onClick: onCancel
|
|
80
|
+
}, intl.formatMessage(messages.cancel))))));
|
|
75
81
|
}
|
|
76
82
|
|
|
77
83
|
const ConfigFormIntl = injectIntl(ConfigForm);
|
|
@@ -126,14 +132,48 @@ class ConfigPanel extends React.Component {
|
|
|
126
132
|
});
|
|
127
133
|
|
|
128
134
|
_defineProperty(this, "backfillTabFormData", (fields, formData, currentParameters) => {
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
135
|
+
const getRelevantData = (field, formParams, currentParams, backfill) => {
|
|
136
|
+
if (field.hasGroupedValues && !(field.name in backfill)) {
|
|
137
|
+
backfill[field.name] = {};
|
|
132
138
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
|
|
140
|
+
const actualFormParams = field.hasGroupedValues ? formParams[field.name] || {} : formParams;
|
|
141
|
+
const actualCurrentParams = field.hasGroupedValues ? currentParams[field.name] || {} : currentParams;
|
|
142
|
+
const actualBackfillParams = field.hasGroupedValues ? backfill[field.name] : backfill;
|
|
143
|
+
return {
|
|
144
|
+
formParams: actualFormParams,
|
|
145
|
+
currentParams: actualCurrentParams,
|
|
146
|
+
backfillParams: actualBackfillParams
|
|
147
|
+
};
|
|
148
|
+
}; // Traverse any tab structures and backfill field values on tabs
|
|
149
|
+
// which aren't shown. This filter should be ok because tabs are
|
|
150
|
+
// currently only allowed on top level
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
const mergedTabGroups = fields.filter(isTabGroup).reduce((missingBackfill, tabGroup) => {
|
|
154
|
+
const {
|
|
155
|
+
formParams: tabGroupFormData,
|
|
156
|
+
currentParams: tabGroupCurrentData,
|
|
157
|
+
backfillParams: tabGroupParams
|
|
158
|
+
} = getRelevantData(tabGroup, formData, currentParameters, missingBackfill); // Loop through tabs and see what fields are missing from current data
|
|
159
|
+
|
|
160
|
+
tabGroup.fields.forEach(tabField => {
|
|
161
|
+
const {
|
|
162
|
+
formParams: tabFormData,
|
|
163
|
+
currentParams: tabCurrentData,
|
|
164
|
+
backfillParams: tabParams
|
|
165
|
+
} = getRelevantData(tabField, tabGroupFormData, tabGroupCurrentData, tabGroupParams);
|
|
166
|
+
tabField.fields.forEach(field => {
|
|
167
|
+
if (field.name in tabFormData || !(field.name in tabCurrentData)) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
tabParams[field.name] = tabCurrentData[field.name];
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
return missingBackfill;
|
|
175
|
+
}, {});
|
|
176
|
+
return _mergeRecursive({}, mergedTabGroups, formData);
|
|
137
177
|
});
|
|
138
178
|
|
|
139
179
|
_defineProperty(this, "handleSubmit", async formData => {
|
|
@@ -352,18 +392,30 @@ class ConfigPanel extends React.Component {
|
|
|
352
392
|
noValidate: true,
|
|
353
393
|
onKeyDown: handleKeyDown,
|
|
354
394
|
"data-testid": "extension-config-panel"
|
|
355
|
-
}), this.renderHeader(extensionManifest), /*#__PURE__*/React.createElement(
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
395
|
+
}), this.renderHeader(extensionManifest), /*#__PURE__*/React.createElement(WithPluginState, {
|
|
396
|
+
plugins: {
|
|
397
|
+
extension: extensionPluginKey
|
|
398
|
+
},
|
|
399
|
+
render: ({
|
|
400
|
+
extension
|
|
401
|
+
}) => /*#__PURE__*/React.createElement(FormErrorBoundary, {
|
|
402
|
+
contextIdentifierProvider: extension === null || extension === void 0 ? void 0 : extension.contextIdentifierProvider,
|
|
403
|
+
extensionKey: extensionManifest.key,
|
|
404
|
+
fields: fields || []
|
|
405
|
+
}, /*#__PURE__*/React.createElement(ConfigFormIntl, {
|
|
406
|
+
canSave: !autoSave,
|
|
407
|
+
errorMessage: errorMessage,
|
|
408
|
+
extensionManifest: extensionManifest,
|
|
409
|
+
fields: fields,
|
|
410
|
+
firstVisibleFieldName: firstVisibleFieldName,
|
|
411
|
+
hasParsedParameters: hasParsedParameters,
|
|
412
|
+
isLoading: isLoading || false,
|
|
413
|
+
onCancel: onCancel,
|
|
414
|
+
onFieldChange: onFieldChange,
|
|
415
|
+
parameters: currentParameters,
|
|
416
|
+
submitting: submitting,
|
|
417
|
+
contextIdentifierProvider: extension === null || extension === void 0 ? void 0 : extension.contextIdentifierProvider
|
|
418
|
+
}))
|
|
367
419
|
}));
|
|
368
420
|
});
|
|
369
421
|
});
|
|
@@ -134,35 +134,44 @@ export function FieldComponent({
|
|
|
134
134
|
});
|
|
135
135
|
|
|
136
136
|
case 'expand':
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
field: field
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}));
|
|
149
|
-
|
|
150
|
-
case 'tab-group':
|
|
151
|
-
const renderPanel = tabField => {
|
|
152
|
-
const tabParameters = parameters[field.name] || {};
|
|
153
|
-
return /*#__PURE__*/React.createElement(FormContent, {
|
|
154
|
-
parentName: `${field.name}.${tabField.name}`,
|
|
155
|
-
fields: tabField.fields,
|
|
156
|
-
parameters: tabParameters[tabField.name] || {},
|
|
137
|
+
{
|
|
138
|
+
// if expand is under a tab with hasGroupedValues=true
|
|
139
|
+
const resolvedParentName = [parentName, field.hasGroupedValues ? field.name : undefined].filter(val => !!val).join('.') || undefined;
|
|
140
|
+
const resolvedParameters = !field.hasGroupedValues ? parameters : parameters[field.name] || {};
|
|
141
|
+
return /*#__PURE__*/React.createElement(Expand, {
|
|
142
|
+
field: field,
|
|
143
|
+
isExpanded: field.isExpanded
|
|
144
|
+
}, /*#__PURE__*/React.createElement(FormContent, {
|
|
145
|
+
parentName: resolvedParentName,
|
|
146
|
+
fields: field.fields,
|
|
147
|
+
parameters: resolvedParameters,
|
|
157
148
|
onFieldChange: onFieldChange,
|
|
158
149
|
extensionManifest: extensionManifest
|
|
159
|
-
});
|
|
160
|
-
}
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
161
152
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
153
|
+
case 'tab-group':
|
|
154
|
+
{
|
|
155
|
+
const tabGroupField = field;
|
|
156
|
+
const tabGroupParams = tabGroupField.hasGroupedValues ? parameters[tabGroupField.name] || {} : parameters;
|
|
157
|
+
|
|
158
|
+
const renderPanel = tabField => {
|
|
159
|
+
const parentName = [tabGroupField.hasGroupedValues ? tabGroupField.name : undefined, tabField.hasGroupedValues ? tabField.name : undefined].filter(val => !!val).join('.') || undefined;
|
|
160
|
+
const tabParameters = tabField.hasGroupedValues ? tabGroupParams[tabField.name] || {} : tabGroupParams;
|
|
161
|
+
return /*#__PURE__*/React.createElement(FormContent, {
|
|
162
|
+
parentName: parentName,
|
|
163
|
+
fields: tabField.fields,
|
|
164
|
+
parameters: tabParameters,
|
|
165
|
+
onFieldChange: onFieldChange,
|
|
166
|
+
extensionManifest: extensionManifest
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
return /*#__PURE__*/React.createElement(TabGroup, {
|
|
171
|
+
field: tabGroupField,
|
|
172
|
+
renderPanel: renderPanel
|
|
173
|
+
});
|
|
174
|
+
}
|
|
166
175
|
|
|
167
176
|
default:
|
|
168
177
|
return /*#__PURE__*/React.createElement(UnhandledType, {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isFieldset, isDateRange, isTabGroup, isExpand, getFieldSerializer, getFieldDeserializer } from '@atlaskit/editor-common/extensions';
|
|
1
|
+
import { isFieldset, isDateRange, isTabGroup, isTabField, isExpand, getFieldSerializer, getFieldDeserializer } from '@atlaskit/editor-common/extensions';
|
|
2
2
|
import { getNameFromDuplicateField, isDuplicateField } from './utils';
|
|
3
3
|
|
|
4
4
|
const isOption = option => {
|
|
@@ -8,10 +8,9 @@ const isOption = option => {
|
|
|
8
8
|
const isOptions = options => {
|
|
9
9
|
return Array.isArray(options) && options.every(isOption);
|
|
10
10
|
};
|
|
11
|
-
/** maps the typed-values from the Form values object */
|
|
12
|
-
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
/** maps the typed-values from the Form values object */
|
|
13
|
+
function extract(value, field, options) {
|
|
15
14
|
if (isOptions(value)) {
|
|
16
15
|
return value.map(item => item.value);
|
|
17
16
|
} else if (isOption(value)) {
|
|
@@ -24,79 +23,235 @@ function extract(value, field) {
|
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
return Number(value);
|
|
26
|
+
} // Workaround for https://product-fabric.atlassian.net/browse/DST-2701
|
|
27
|
+
else if (options !== null && options !== void 0 && options.useDefaultValue && value === undefined && 'defaultValue' in field) {
|
|
28
|
+
return field.defaultValue;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
return value;
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
export const
|
|
34
|
+
export const findDuplicateFields = fields => findDuplicateFieldsInternal(flattenFields(fields));
|
|
35
|
+
|
|
36
|
+
const findDuplicateFieldsInternal = fields => {
|
|
37
|
+
const allowDuplicatesMap = {};
|
|
38
|
+
return fields.find(field => {
|
|
39
|
+
if (isExpand(field)) {
|
|
40
|
+
return findDuplicateFieldsInternal(field.fields);
|
|
41
|
+
} else if (isTabGroup(field)) {
|
|
42
|
+
return field.fields.find(tabField => findDuplicateFieldsInternal(tabField.fields));
|
|
43
|
+
} else if (allowDuplicatesMap[field.name] === undefined) {
|
|
44
|
+
allowDuplicatesMap[field.name] = !!field.allowDuplicates;
|
|
45
|
+
return;
|
|
46
|
+
} else if (!field.allowDuplicates || !allowDuplicatesMap[field.name]) {
|
|
47
|
+
return field;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return;
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const serialize = async (manifest, data, fields, options = {}) => {
|
|
33
55
|
const result = [];
|
|
56
|
+
const {
|
|
57
|
+
depth = 0,
|
|
58
|
+
parentType
|
|
59
|
+
} = options;
|
|
60
|
+
const flattenedFields = flattenFields(fields);
|
|
61
|
+
const fillResults = flattenedFields.map(async field => {
|
|
62
|
+
if (isTabGroup(field)) {
|
|
63
|
+
const tabGroupData = await serializeTabGroupField(manifest, field, data);
|
|
64
|
+
result.push(...tabGroupData);
|
|
65
|
+
} else if (isTabField(field)) {
|
|
66
|
+
const tabData = await serializeTabField(manifest, field, data);
|
|
67
|
+
result.push(...tabData);
|
|
68
|
+
} else if (isExpand(field)) {
|
|
69
|
+
const expandData = await serializeExpandField(manifest, field, data);
|
|
70
|
+
result.push(...expandData);
|
|
71
|
+
} // WARNING: don't recursively serialize, limit to depth < 1
|
|
72
|
+
// serializable?
|
|
73
|
+
else if (isFieldset(field) && depth === 0) {
|
|
74
|
+
const fieldsetData = await serializeFieldset(manifest, field, data, depth);
|
|
34
75
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
76
|
+
if (fieldsetData) {
|
|
77
|
+
result.push(fieldsetData);
|
|
78
|
+
}
|
|
79
|
+
} else {
|
|
80
|
+
const value = extract(data[field.name], field, {
|
|
81
|
+
useDefaultValue: true
|
|
82
|
+
}); // ignore undefined values
|
|
83
|
+
|
|
84
|
+
if (value !== undefined) {
|
|
85
|
+
result.push({
|
|
86
|
+
[field.name]: value
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
await Promise.all(fillResults); // Crunch fields down to parameters
|
|
38
92
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
93
|
+
const parameters = result.reduce((obj, current) => {
|
|
94
|
+
for (const key in current) {
|
|
95
|
+
obj[key] = current[key];
|
|
96
|
+
}
|
|
42
97
|
|
|
98
|
+
return obj;
|
|
99
|
+
}, {}); // Fix up duplicate values (currently only for fieldsets)
|
|
43
100
|
|
|
44
|
-
|
|
101
|
+
const hasDuplicateFields = parentType === 'fieldset' && !!flattenedFields.find(field => field.allowDuplicates);
|
|
45
102
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
103
|
+
if (hasDuplicateFields) {
|
|
104
|
+
return serializeMergeDuplicateFieldData(parameters, data, flattenedFields);
|
|
105
|
+
}
|
|
49
106
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
fields: tabs
|
|
53
|
-
} = field;
|
|
54
|
-
value = {};
|
|
107
|
+
return parameters;
|
|
108
|
+
};
|
|
55
109
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
};
|
|
110
|
+
const serializeFieldset = async (manifest, field, data, depth) => {
|
|
111
|
+
let fieldSerializer;
|
|
59
112
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
113
|
+
try {
|
|
114
|
+
fieldSerializer = await getFieldSerializer(manifest, field.options.transformer);
|
|
115
|
+
} catch (ex) {
|
|
116
|
+
// We only throw if there is data that may be lost
|
|
117
|
+
if (data[field.name] !== undefined) {
|
|
118
|
+
throw ex;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (!fieldSerializer) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const {
|
|
127
|
+
fields: fieldsetFields
|
|
128
|
+
} = field;
|
|
129
|
+
const fieldParams = extract(data[field.name], field, {
|
|
130
|
+
useDefaultValue: true
|
|
131
|
+
}) || {};
|
|
132
|
+
const extracted = await serialize(manifest, fieldParams, fieldsetFields, {
|
|
133
|
+
depth: depth + 1,
|
|
134
|
+
parentType: 'fieldset'
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
137
|
+
[field.name]: fieldSerializer(extracted)
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const serializeExpandField = async (manifest, field, data) => {
|
|
142
|
+
const expandData = field.hasGroupedValues ? data[field.name] || {} : data;
|
|
143
|
+
const value = await serialize(manifest, expandData, field.fields, {
|
|
144
|
+
parentType: 'expand'
|
|
145
|
+
});
|
|
146
|
+
const results = [];
|
|
147
|
+
|
|
148
|
+
if (!field.hasGroupedValues) {
|
|
149
|
+
for (const fieldName in value) {
|
|
150
|
+
results.push({
|
|
151
|
+
[fieldName]: value[fieldName]
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
} else {
|
|
155
|
+
results.push({
|
|
156
|
+
[field.name]: value
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return results;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const resolveTabValues = async (manifest, tabField, groupData) => {
|
|
164
|
+
const tabFieldParams = tabField.hasGroupedValues ? groupData[tabField.name] || {} : groupData;
|
|
165
|
+
return await serialize(manifest, tabFieldParams, tabField.fields, {
|
|
166
|
+
parentType: 'tab'
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const serializeTabGroupField = async (manifest, field, data) => {
|
|
171
|
+
const {
|
|
172
|
+
fields: tabs
|
|
173
|
+
} = field;
|
|
174
|
+
const results = [];
|
|
175
|
+
const value = {};
|
|
176
|
+
|
|
177
|
+
for (let i = 0; i < tabs.length; i++) {
|
|
178
|
+
const tabField = tabs[i];
|
|
179
|
+
const tabFieldParameters = await resolveTabValues(manifest, tabField, field.hasGroupedValues ? data[field.name] || {} : data);
|
|
180
|
+
|
|
181
|
+
if (tabField.hasGroupedValues) {
|
|
182
|
+
// Keep namespaced by tab
|
|
183
|
+
value[tabField.name] = tabFieldParameters;
|
|
184
|
+
} else {
|
|
185
|
+
// Copy into tabGroup value
|
|
186
|
+
for (const fieldName in tabFieldParameters) {
|
|
187
|
+
value[fieldName] = tabFieldParameters[fieldName];
|
|
78
188
|
}
|
|
189
|
+
}
|
|
190
|
+
} // Now for tabGroup...
|
|
191
|
+
|
|
79
192
|
|
|
80
|
-
|
|
81
|
-
|
|
193
|
+
if (field.hasGroupedValues) {
|
|
194
|
+
results.push({
|
|
195
|
+
[field.name]: value
|
|
196
|
+
});
|
|
197
|
+
} else {
|
|
198
|
+
for (const fieldName in value) {
|
|
199
|
+
results.push({
|
|
200
|
+
[fieldName]: value
|
|
82
201
|
});
|
|
83
202
|
}
|
|
84
|
-
}
|
|
85
|
-
// when there aren't we return an object eg. { title: 'one' }
|
|
203
|
+
}
|
|
86
204
|
|
|
205
|
+
return results;
|
|
206
|
+
};
|
|
87
207
|
|
|
88
|
-
|
|
208
|
+
const serializeTabField = async (manifest, field, data) => {
|
|
209
|
+
const results = [];
|
|
210
|
+
const tabField = field;
|
|
211
|
+
const tabFieldParameters = await resolveTabValues(manifest, tabField, data);
|
|
89
212
|
|
|
90
|
-
if (
|
|
91
|
-
|
|
213
|
+
if (tabField.hasGroupedValues) {
|
|
214
|
+
// Keep namespaced by tab
|
|
215
|
+
results.push({
|
|
216
|
+
[tabField.name]: tabFieldParameters
|
|
217
|
+
});
|
|
218
|
+
} else {
|
|
219
|
+
// Copy into tabGroup value
|
|
220
|
+
for (const fieldName in tabFieldParameters) {
|
|
221
|
+
results.push({
|
|
222
|
+
[fieldName]: tabFieldParameters[fieldName]
|
|
223
|
+
});
|
|
224
|
+
}
|
|
92
225
|
}
|
|
93
226
|
|
|
94
|
-
return
|
|
95
|
-
|
|
96
|
-
|
|
227
|
+
return results;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const serializeMergeDuplicateFieldData = (parameters, formData, flattenedFields) => {
|
|
231
|
+
// Weed out all the non-duplicate field names
|
|
232
|
+
const allDuplicateFieldNames = Object.keys(formData).filter(key => isDuplicateField(key));
|
|
233
|
+
return flattenedFields.reduce((newParams, field) => {
|
|
234
|
+
const paramValue = parameters[field.name];
|
|
235
|
+
|
|
236
|
+
if (!field.allowDuplicates && paramValue !== undefined) {
|
|
237
|
+
newParams[field.name] = paramValue;
|
|
238
|
+
} else {
|
|
239
|
+
// extract the given duplicate values through the field
|
|
240
|
+
const duplicateValues = allDuplicateFieldNames.filter(name => getNameFromDuplicateField(name) === field.name).map(duplicateFieldName => extract(formData[duplicateFieldName], field, {
|
|
241
|
+
useDefaultValue: true
|
|
242
|
+
})); // Merge and ensure that all values are worth serializing
|
|
243
|
+
|
|
244
|
+
const mergedValues = [paramValue, // first value
|
|
245
|
+
...duplicateValues].filter(value => value !== undefined);
|
|
246
|
+
|
|
247
|
+
if (mergedValues.length > 0) {
|
|
248
|
+
// Replace so the duplicate field values are saved under the
|
|
249
|
+
// fieldName as an array
|
|
250
|
+
newParams[field.name] = mergedValues;
|
|
251
|
+
}
|
|
97
252
|
}
|
|
98
253
|
|
|
99
|
-
return
|
|
254
|
+
return newParams;
|
|
100
255
|
}, {});
|
|
101
256
|
};
|
|
102
257
|
|
|
@@ -137,21 +292,51 @@ function injectDefaultValues(data, fields) {
|
|
|
137
292
|
}
|
|
138
293
|
}
|
|
139
294
|
|
|
140
|
-
if (doParametersContainDuplicateFields(copy)) {
|
|
141
|
-
return copy;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
295
|
return convertToParametersObject(copy);
|
|
145
296
|
}
|
|
297
|
+
/**
|
|
298
|
+
* Flattens the given FieldDefinition[] so it resembles the expected data
|
|
299
|
+
* structure in result Parameters.
|
|
300
|
+
*/
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
const flattenFields = fields => {
|
|
304
|
+
const flattenAccumulator = (accumulator, field) => {
|
|
305
|
+
if (isTabGroup(field)) {
|
|
306
|
+
if (field.hasGroupedValues) {
|
|
307
|
+
accumulator.push(field);
|
|
308
|
+
} else {
|
|
309
|
+
const flattenedTabs = field.fields.reduce((tabAccumulator, tab) => {
|
|
310
|
+
return tabAccumulator.concat(tab.hasGroupedValues ? tab : tab.fields.reduce(flattenAccumulator, []));
|
|
311
|
+
}, []);
|
|
312
|
+
accumulator.push(...flattenedTabs);
|
|
313
|
+
}
|
|
314
|
+
} else if (isExpand(field)) {
|
|
315
|
+
if (field.hasGroupedValues) {
|
|
316
|
+
accumulator.push(field);
|
|
317
|
+
} else {
|
|
318
|
+
const flattenedExpand = field.fields.reduce(flattenAccumulator, []);
|
|
319
|
+
accumulator.push(...flattenedExpand);
|
|
320
|
+
}
|
|
321
|
+
} else {
|
|
322
|
+
accumulator.push(field);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return accumulator;
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
return fields.reduce(flattenAccumulator, []);
|
|
329
|
+
};
|
|
146
330
|
|
|
147
331
|
export const deserialize = async (manifest, data, fields, depth = 0) => {
|
|
148
332
|
const dataArray = convertToParametersArray(data);
|
|
149
333
|
let result = [];
|
|
150
334
|
const errors = [];
|
|
335
|
+
const flattenedFields = flattenFields(fields);
|
|
151
336
|
|
|
152
337
|
for (const item of dataArray) {
|
|
153
338
|
const [name, originalValue] = Object.entries(item)[0];
|
|
154
|
-
const field =
|
|
339
|
+
const field = flattenedFields.find(field => field.name === getNameFromDuplicateField(name));
|
|
155
340
|
|
|
156
341
|
if (field === undefined) {
|
|
157
342
|
continue;
|
|
@@ -193,21 +378,7 @@ export const deserialize = async (manifest, data, fields, depth = 0) => {
|
|
|
193
378
|
result.errors = convertToParametersObject(errors);
|
|
194
379
|
}
|
|
195
380
|
|
|
196
|
-
return injectDefaultValues(result,
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
const doParametersContainDuplicateFields = parameters => {
|
|
200
|
-
const keyMap = new Set();
|
|
201
|
-
|
|
202
|
-
for (const param of parameters) {
|
|
203
|
-
const key = Object.keys(param)[0];
|
|
204
|
-
|
|
205
|
-
if (keyMap.has(key)) {
|
|
206
|
-
return true;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
keyMap.add(key);
|
|
210
|
-
}
|
|
381
|
+
return injectDefaultValues(result, flattenedFields);
|
|
211
382
|
};
|
|
212
383
|
|
|
213
384
|
const convertToParametersObject = (parameters = []) => {
|
|
@@ -8,7 +8,6 @@ export const fromEntries = iterable => {
|
|
|
8
8
|
return obj;
|
|
9
9
|
}, {});
|
|
10
10
|
};
|
|
11
|
-
export const toEntries = parameters => Array.isArray(parameters) ? parameters.reduce((prev, curr) => [...prev, ...Object.entries(curr)], []) : Object.entries(parameters);
|
|
12
11
|
|
|
13
12
|
const isEmptyString = value => typeof value === 'string' && value === '';
|
|
14
13
|
|
|
@@ -50,7 +49,7 @@ export const getSafeParentedName = (name, parentName) => {
|
|
|
50
49
|
const duplicateFieldRegex = /:[0-9]+$/;
|
|
51
50
|
export const isDuplicateField = key => duplicateFieldRegex.test(key);
|
|
52
51
|
export const getNameFromDuplicateField = key => key.replace(duplicateFieldRegex, '');
|
|
53
|
-
/*
|
|
52
|
+
/*
|
|
54
53
|
ColorPickerButton only accepts 8 digit hex alpha values, for example:
|
|
55
54
|
#123fffaa (8 digits, hex alpha)
|
|
56
55
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { PureComponent } from 'react';
|
|
3
|
+
import { PureComponent } from 'react'; // eslint-disable-next-line @atlaskit/design-system/no-deprecated-imports
|
|
4
|
+
|
|
4
5
|
import DropdownList from '@atlaskit/droplist';
|
|
5
6
|
import { Popup } from '@atlaskit/editor-common';
|
|
6
7
|
import withOuterListeners from '../with-outer-listeners';
|