@plone/volto 18.0.0-alpha.2 → 18.0.0-alpha.4
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/.eslintrc +3 -3
- package/.prettierignore +8 -0
- package/.prettierrc +12 -0
- package/{packages/registry/.release-it.json → .release-it.json} +11 -6
- package/CHANGELOG.md +44 -4
- package/locales/ca/LC_MESSAGES/volto.po +1 -0
- package/locales/de/LC_MESSAGES/volto.po +1 -0
- package/locales/en/LC_MESSAGES/volto.po +1 -0
- package/locales/es/LC_MESSAGES/volto.po +1 -0
- package/locales/eu/LC_MESSAGES/volto.po +1 -0
- package/locales/fi/LC_MESSAGES/volto.po +1 -0
- package/locales/fr/LC_MESSAGES/volto.po +1 -0
- package/locales/it/LC_MESSAGES/volto.po +1 -0
- package/locales/ja/LC_MESSAGES/volto.po +1 -0
- package/locales/nl/LC_MESSAGES/volto.po +1 -0
- package/locales/pt/LC_MESSAGES/volto.po +1 -0
- package/locales/pt_BR/LC_MESSAGES/volto.po +1 -0
- package/locales/ro/LC_MESSAGES/volto.po +1 -0
- package/locales/volto.pot +2 -1
- package/locales/zh_CN/LC_MESSAGES/volto.po +1 -0
- package/package.json +57 -127
- package/razzle.config.js +4 -7
- package/src/components/manage/Blocks/Video/Body.jsx +52 -22
- package/src/components/manage/Blocks/Video/Body.test.jsx +167 -0
- package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.jsx +2 -2
- package/src/components/manage/Form/Form.jsx +5 -2
- package/src/components/theme/Breadcrumbs/Breadcrumbs.jsx +19 -2
- package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +46 -39
- package/src/config/index.js +0 -4
- package/src/icons/divide-horizontal.svg +0 -0
- package/src/icons/divide-vertical.svg +0 -0
- package/src/icons/hero.svg +0 -0
- package/src/icons/slider.svg +0 -0
- package/src/icons/summary.svg +0 -0
- package/src/middleware/api.js +1 -1
- package/theme/themes/default/elements/icon.overrides +0 -0
- package/theme/themes/default/globals/reset.overrides +0 -0
- package/theme/themes/default/globals/site.variables +0 -0
- package/theme/themes/default/modules/dropdown.overrides +0 -0
- package/theme/themes/default/modules/dropdown.variables +0 -0
- package/theme/themes/default/modules/modal.variables +0 -0
- package/theme/themes/default/modules/video.overrides +0 -0
- package/theme/themes/default/modules/video.variables +0 -0
- package/theme/themes/pastanaga/assets/fonts/icons.eot +0 -0
- package/theme/themes/pastanaga/assets/fonts/icons.svg +0 -0
- package/theme/themes/pastanaga/assets/fonts/icons.ttf +0 -0
- package/theme/themes/pastanaga/assets/fonts/icons.woff +0 -0
- package/theme/themes/pastanaga/globals/reset.overrides +0 -0
- package/theme/themes/pastanaga/globals/site.variables +0 -0
- package/theme/themes/pastanaga/modules/dropdown.variables +0 -0
- package/theme/themes/pastanaga/modules/modal.variables +0 -0
- package/theme/themes/pastanaga/modules/video.overrides +0 -0
- package/theme/themes/pastanaga/modules/video.variables +0 -0
- package/tsconfig.json +1 -4
- package/types/components/manage/Blocks/Video/Body.d.ts +5 -0
- package/types/config/RichTextEditor/index.d.ts +5 -8
- package/types/helpers/AsyncConnect/index.d.ts +2 -2
- package/types/helpers/Url/Url.d.ts +3 -3
- package/types/icons/load-icons.d.ts +1 -1
- package/webpack-plugins/webpack-less-plugin.js +1 -0
- package/CODE_OF_CONDUCT.md +0 -13
- package/CONTRIBUTING.md +0 -7
- package/README.md +0 -154
- package/RELEASING.md +0 -73
- package/ROADMAP.md +0 -30
- package/SECURITY.md +0 -14
- package/logos/Logo.png +0 -0
- package/logos/VoltoLogoEra2-dark-mode.png +0 -0
- package/logos/VoltoLogoEra2.png +0 -0
- package/logos/volto-colorful.png +0 -0
- package/logos/volto-colorful.svg +0 -35
- package/logos/volto-guide.png +0 -0
- package/logos/volto-h-transparent.svg +0 -6
- package/logos/volto-transparent.png +0 -0
- package/logos/volto-transparent.svg +0 -19
- package/logos/volto-transparent2.svg +0 -5
- package/logos/volto-yellow.svg +0 -29
- package/logos/volto.sketch +0 -0
- package/packages/README.md +0 -7
- package/packages/registry/.towncrier/towncrier_template.jinja +0 -10
- package/packages/registry/CHANGELOG.md +0 -16
- package/packages/registry/README.md +0 -207
- package/packages/registry/addon-registry.js +0 -603
- package/packages/registry/create-addons-loader.js +0 -116
- package/packages/registry/create-theme-addons-loader.js +0 -78
- package/packages/registry/news/.gitkeep +0 -0
- package/packages/registry/package.json +0 -76
- package/packages/registry/src/index.ts +0 -174
- package/packages/registry/src/registry.test.js +0 -111
- package/packages/registry/tsconfig.json +0 -32
- package/packages/scripts/CHANGELOG.md +0 -173
- package/packages/scripts/README.md +0 -128
- package/packages/scripts/addon/consolidate.js +0 -28
- package/packages/scripts/addon/generators.js +0 -213
- package/packages/scripts/addon/getAddonInfo.js +0 -65
- package/packages/scripts/addon/index.js +0 -88
- package/packages/scripts/addon/utils.js +0 -44
- package/packages/scripts/backportpr.js +0 -75
- package/packages/scripts/changelogupdater.cjs +0 -94
- package/packages/scripts/corepackagebump.js +0 -20
- package/packages/scripts/i18n.cjs +0 -310
- package/packages/scripts/package.json +0 -76
- package/packages/scripts/templates/towncrier_template.jinja +0 -10
- package/packages/types/Blocks/View.ts +0 -11
- package/packages/types/actions.ts +0 -15
- package/packages/types/breadcrumbs.ts +0 -10
- package/packages/types/config/Blocks.ts +0 -153
- package/packages/types/config/Content.ts +0 -62
- package/packages/types/config/Settings.ts +0 -86
- package/packages/types/config/Views.ts +0 -15
- package/packages/types/config/Widgets.ts +0 -7
- package/packages/types/config/index.ts +0 -21
- package/packages/types/content/common.ts +0 -60
- package/packages/types/content/get.ts +0 -66
- package/packages/types/index.ts +0 -0
- package/packages/types/navigation.ts +0 -12
- package/packages/types/package.json +0 -64
- package/packages/types/types.ts +0 -61
- package/packages/volto-slate/.i18n.babel.config.js +0 -1
- package/packages/volto-slate/README.md +0 -4
- package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +0 -90
- package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +0 -6
- package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +0 -6
- package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +0 -6
- package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +0 -10
- package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +0 -10
- package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +0 -30
- package/packages/volto-slate/build/messages/src/elementEditor/messages.json +0 -10
- package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +0 -6
- package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +0 -6
- package/packages/volto-slate/locales/de/LC_MESSAGES/volto.po +0 -148
- package/packages/volto-slate/locales/en/LC_MESSAGES/volto.po +0 -148
- package/packages/volto-slate/locales/volto.pot +0 -182
- package/packages/volto-slate/package.json +0 -43
- package/packages/volto-slate/src/actions/content.js +0 -30
- package/packages/volto-slate/src/actions/index.js +0 -3
- package/packages/volto-slate/src/actions/plugins.js +0 -9
- package/packages/volto-slate/src/actions/selection.js +0 -22
- package/packages/volto-slate/src/blocks/Table/Cell.jsx +0 -87
- package/packages/volto-slate/src/blocks/Table/Cell.test.js +0 -54
- package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +0 -694
- package/packages/volto-slate/src/blocks/Table/TableBlockEdit.test.js +0 -40
- package/packages/volto-slate/src/blocks/Table/TableBlockView.jsx +0 -150
- package/packages/volto-slate/src/blocks/Table/TableBlockView.test.js +0 -49
- package/packages/volto-slate/src/blocks/Table/deconstruct.js +0 -113
- package/packages/volto-slate/src/blocks/Table/extensions/normalizeTable.js +0 -5
- package/packages/volto-slate/src/blocks/Table/index.js +0 -60
- package/packages/volto-slate/src/blocks/Table/schema.js +0 -122
- package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +0 -304
- package/packages/volto-slate/src/blocks/Text/DetachedTextBlockEditor.jsx +0 -77
- package/packages/volto-slate/src/blocks/Text/MarkdownIntroduction.jsx +0 -59
- package/packages/volto-slate/src/blocks/Text/PluginSidebar.jsx +0 -18
- package/packages/volto-slate/src/blocks/Text/ShortcutListing.jsx +0 -28
- package/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +0 -203
- package/packages/volto-slate/src/blocks/Text/TextBlockEdit.jsx +0 -38
- package/packages/volto-slate/src/blocks/Text/TextBlockEdit.test.js +0 -107
- package/packages/volto-slate/src/blocks/Text/TextBlockSchema.js +0 -54
- package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +0 -31
- package/packages/volto-slate/src/blocks/Text/css/editor.css +0 -18
- package/packages/volto-slate/src/blocks/Text/extensions/Readme.md +0 -49
- package/packages/volto-slate/src/blocks/Text/extensions/breakList.js +0 -100
- package/packages/volto-slate/src/blocks/Text/extensions/index.js +0 -6
- package/packages/volto-slate/src/blocks/Text/extensions/insertBreak.js +0 -57
- package/packages/volto-slate/src/blocks/Text/extensions/isSelected.js +0 -7
- package/packages/volto-slate/src/blocks/Text/extensions/normalizeExternalData.js +0 -7
- package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +0 -87
- package/packages/volto-slate/src/blocks/Text/extensions/withLists.js +0 -5
- package/packages/volto-slate/src/blocks/Text/index.js +0 -171
- package/packages/volto-slate/src/blocks/Text/keyboard/backspaceInList.js +0 -58
- package/packages/volto-slate/src/blocks/Text/keyboard/breakBlocks.js +0 -3
- package/packages/volto-slate/src/blocks/Text/keyboard/cancelEsc.js +0 -7
- package/packages/volto-slate/src/blocks/Text/keyboard/indentListItems.js +0 -240
- package/packages/volto-slate/src/blocks/Text/keyboard/index.js +0 -52
- package/packages/volto-slate/src/blocks/Text/keyboard/joinBlocks.js +0 -180
- package/packages/volto-slate/src/blocks/Text/keyboard/moveListItems.js +0 -124
- package/packages/volto-slate/src/blocks/Text/keyboard/slashMenu.js +0 -19
- package/packages/volto-slate/src/blocks/Text/keyboard/softBreak.js +0 -7
- package/packages/volto-slate/src/blocks/Text/keyboard/traverseBlocks.js +0 -81
- package/packages/volto-slate/src/blocks/Text/keyboard/unwrapEmptyString.js +0 -26
- package/packages/volto-slate/src/blocks/Text/schema.js +0 -39
- package/packages/volto-slate/src/constants.js +0 -123
- package/packages/volto-slate/src/editor/EditorContext.jsx +0 -5
- package/packages/volto-slate/src/editor/EditorReference.jsx +0 -22
- package/packages/volto-slate/src/editor/SlateEditor.jsx +0 -375
- package/packages/volto-slate/src/editor/config.jsx +0 -344
- package/packages/volto-slate/src/editor/decorate.js +0 -68
- package/packages/volto-slate/src/editor/deserialize.js +0 -185
- package/packages/volto-slate/src/editor/extensions/index.js +0 -6
- package/packages/volto-slate/src/editor/extensions/insertBreak.js +0 -15
- package/packages/volto-slate/src/editor/extensions/insertData.js +0 -159
- package/packages/volto-slate/src/editor/extensions/isInline.js +0 -14
- package/packages/volto-slate/src/editor/extensions/normalizeExternalData.js +0 -8
- package/packages/volto-slate/src/editor/extensions/normalizeNode.js +0 -48
- package/packages/volto-slate/src/editor/extensions/withDeserializers.js +0 -15
- package/packages/volto-slate/src/editor/extensions/withTestingFeatures.jsx +0 -84
- package/packages/volto-slate/src/editor/index.js +0 -14
- package/packages/volto-slate/src/editor/less/editor.less +0 -173
- package/packages/volto-slate/src/editor/less/globals.less +0 -18
- package/packages/volto-slate/src/editor/less/slate.less +0 -28
- package/packages/volto-slate/src/editor/plugins/AdvancedLink/deserialize.js +0 -90
- package/packages/volto-slate/src/editor/plugins/AdvancedLink/extensions.js +0 -32
- package/packages/volto-slate/src/editor/plugins/AdvancedLink/index.js +0 -50
- package/packages/volto-slate/src/editor/plugins/AdvancedLink/render.jsx +0 -37
- package/packages/volto-slate/src/editor/plugins/AdvancedLink/schema.js +0 -114
- package/packages/volto-slate/src/editor/plugins/AdvancedLink/styles.less +0 -8
- package/packages/volto-slate/src/editor/plugins/Blockquote/index.js +0 -30
- package/packages/volto-slate/src/editor/plugins/Callout/index.js +0 -34
- package/packages/volto-slate/src/editor/plugins/Image/deconstruct.js +0 -30
- package/packages/volto-slate/src/editor/plugins/Image/extensions.js +0 -51
- package/packages/volto-slate/src/editor/plugins/Image/index.js +0 -11
- package/packages/volto-slate/src/editor/plugins/Image/render.jsx +0 -22
- package/packages/volto-slate/src/editor/plugins/Link/extensions.js +0 -58
- package/packages/volto-slate/src/editor/plugins/Link/index.js +0 -164
- package/packages/volto-slate/src/editor/plugins/Link/render.jsx +0 -54
- package/packages/volto-slate/src/editor/plugins/Markdown/constants.js +0 -81
- package/packages/volto-slate/src/editor/plugins/Markdown/extensions.js +0 -334
- package/packages/volto-slate/src/editor/plugins/Markdown/index.js +0 -28
- package/packages/volto-slate/src/editor/plugins/Markdown/utils.js +0 -198
- package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +0 -153
- package/packages/volto-slate/src/editor/plugins/StyleMenu/index.js +0 -19
- package/packages/volto-slate/src/editor/plugins/StyleMenu/style.less +0 -29
- package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +0 -168
- package/packages/volto-slate/src/editor/plugins/Table/TableButton.jsx +0 -142
- package/packages/volto-slate/src/editor/plugins/Table/TableCell.jsx +0 -44
- package/packages/volto-slate/src/editor/plugins/Table/TableContainer.jsx +0 -37
- package/packages/volto-slate/src/editor/plugins/Table/TableSizePicker.jsx +0 -83
- package/packages/volto-slate/src/editor/plugins/Table/extensions.js +0 -87
- package/packages/volto-slate/src/editor/plugins/Table/index.js +0 -390
- package/packages/volto-slate/src/editor/plugins/Table/less/public.less +0 -29
- package/packages/volto-slate/src/editor/plugins/Table/less/table.less +0 -28
- package/packages/volto-slate/src/editor/plugins/Table/render.jsx +0 -30
- package/packages/volto-slate/src/editor/plugins/index.js +0 -19
- package/packages/volto-slate/src/editor/render.jsx +0 -224
- package/packages/volto-slate/src/editor/ui/BasicToolbar.jsx +0 -11
- package/packages/volto-slate/src/editor/ui/BlockButton.jsx +0 -31
- package/packages/volto-slate/src/editor/ui/ClearFormattingButton.jsx +0 -21
- package/packages/volto-slate/src/editor/ui/ExpandedToolbar.jsx +0 -18
- package/packages/volto-slate/src/editor/ui/Expando.jsx +0 -5
- package/packages/volto-slate/src/editor/ui/InlineToolbar.jsx +0 -73
- package/packages/volto-slate/src/editor/ui/MarkButton.jsx +0 -23
- package/packages/volto-slate/src/editor/ui/MarkElementButton.jsx +0 -30
- package/packages/volto-slate/src/editor/ui/Menu.jsx +0 -13
- package/packages/volto-slate/src/editor/ui/PositionedToolbar.jsx +0 -32
- package/packages/volto-slate/src/editor/ui/Separator.jsx +0 -7
- package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +0 -13
- package/packages/volto-slate/src/editor/ui/SlateToolbar.jsx +0 -96
- package/packages/volto-slate/src/editor/ui/Toolbar.jsx +0 -103
- package/packages/volto-slate/src/editor/ui/ToolbarButton.jsx +0 -33
- package/packages/volto-slate/src/editor/ui/ToolbarButton.test.js +0 -25
- package/packages/volto-slate/src/editor/ui/index.js +0 -15
- package/packages/volto-slate/src/editor/utils.js +0 -248
- package/packages/volto-slate/src/elementEditor/ContextButtons.jsx +0 -56
- package/packages/volto-slate/src/elementEditor/PluginEditor.jsx +0 -124
- package/packages/volto-slate/src/elementEditor/Readme.md +0 -6
- package/packages/volto-slate/src/elementEditor/SchemaProvider.jsx +0 -3
- package/packages/volto-slate/src/elementEditor/SidebarEditor.jsx +0 -46
- package/packages/volto-slate/src/elementEditor/ToolbarButton.jsx +0 -44
- package/packages/volto-slate/src/elementEditor/index.js +0 -5
- package/packages/volto-slate/src/elementEditor/makeInlineElementPlugin.js +0 -100
- package/packages/volto-slate/src/elementEditor/messages.js +0 -14
- package/packages/volto-slate/src/elementEditor/utils.js +0 -226
- package/packages/volto-slate/src/hooks/index.js +0 -3
- package/packages/volto-slate/src/hooks/useEditorContext.js +0 -6
- package/packages/volto-slate/src/hooks/useIsomorphicLayoutEffect.js +0 -7
- package/packages/volto-slate/src/hooks/useSelectionPosition.js +0 -25
- package/packages/volto-slate/src/i18n.js +0 -180
- package/packages/volto-slate/src/icons/hashlink.svg +0 -57
- package/packages/volto-slate/src/index.js +0 -61
- package/packages/volto-slate/src/reducers/content.js +0 -74
- package/packages/volto-slate/src/reducers/index.js +0 -3
- package/packages/volto-slate/src/reducers/plugins.js +0 -17
- package/packages/volto-slate/src/reducers/selection.js +0 -16
- package/packages/volto-slate/src/utils/blocks.js +0 -375
- package/packages/volto-slate/src/utils/blocks.test.js +0 -138
- package/packages/volto-slate/src/utils/editor.js +0 -31
- package/packages/volto-slate/src/utils/image.js +0 -25
- package/packages/volto-slate/src/utils/index.js +0 -11
- package/packages/volto-slate/src/utils/internals.js +0 -46
- package/packages/volto-slate/src/utils/lists.js +0 -92
- package/packages/volto-slate/src/utils/marks.js +0 -104
- package/packages/volto-slate/src/utils/mime-types.js +0 -24
- package/packages/volto-slate/src/utils/nodes.js +0 -4
- package/packages/volto-slate/src/utils/ops.js +0 -20
- package/packages/volto-slate/src/utils/random.js +0 -17
- package/packages/volto-slate/src/utils/selection.js +0 -236
- package/packages/volto-slate/src/utils/slate-string-utils.js +0 -408
- package/packages/volto-slate/src/utils/volto-blocks.js +0 -314
- package/packages/volto-slate/src/widgets/ErrorBoundary.jsx +0 -27
- package/packages/volto-slate/src/widgets/HtmlSlateWidget.jsx +0 -139
- package/packages/volto-slate/src/widgets/ObjectByTypeWidget.jsx +0 -49
- package/packages/volto-slate/src/widgets/RichTextWidget.jsx +0 -72
- package/packages/volto-slate/src/widgets/RichTextWidgetView.jsx +0 -37
- package/packages/volto-slate/src/widgets/style.css +0 -21
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import renderer from 'react-test-renderer';
|
|
3
|
-
import configureStore from 'redux-mock-store';
|
|
4
|
-
import { Provider } from 'react-intl-redux';
|
|
5
|
-
|
|
6
|
-
import Edit from './TableBlockEdit';
|
|
7
|
-
|
|
8
|
-
const mockStore = configureStore();
|
|
9
|
-
|
|
10
|
-
global.__SERVER__ = true; // eslint-disable-line no-underscore-dangle
|
|
11
|
-
|
|
12
|
-
test('renders an edit table block component', () => {
|
|
13
|
-
const store = mockStore({
|
|
14
|
-
intl: {
|
|
15
|
-
locale: 'en',
|
|
16
|
-
messages: {},
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
const component = renderer.create(
|
|
20
|
-
<Provider store={store}>
|
|
21
|
-
<Edit
|
|
22
|
-
data={{ table: { rows: [] } }}
|
|
23
|
-
selected={false}
|
|
24
|
-
block="1234"
|
|
25
|
-
onAddBlock={() => {}}
|
|
26
|
-
onChangeBlock={() => {}}
|
|
27
|
-
onSelectBlock={() => {}}
|
|
28
|
-
onDeleteBlock={() => {}}
|
|
29
|
-
onInsertBlock={() => {}}
|
|
30
|
-
onFocusPreviousBlock={() => {}}
|
|
31
|
-
onFocusNextBlock={() => {}}
|
|
32
|
-
handleKeyDown={() => {}}
|
|
33
|
-
onMutateBlock={() => {}}
|
|
34
|
-
index={1}
|
|
35
|
-
/>
|
|
36
|
-
</Provider>,
|
|
37
|
-
);
|
|
38
|
-
const json = component.toJSON();
|
|
39
|
-
expect(json).toMatchSnapshot();
|
|
40
|
-
});
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Slate Table block's View component.
|
|
3
|
-
* @module volto-slate/blocks/Table/View
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import React, { useState, useMemo } from 'react';
|
|
7
|
-
import PropTypes from 'prop-types';
|
|
8
|
-
import { Table } from 'semantic-ui-react';
|
|
9
|
-
import { map } from 'lodash';
|
|
10
|
-
import {
|
|
11
|
-
serializeNodes,
|
|
12
|
-
serializeNodesToText,
|
|
13
|
-
} from '@plone/volto-slate/editor/render';
|
|
14
|
-
import { Node } from 'slate';
|
|
15
|
-
|
|
16
|
-
// TODO: loading LESS files with `volto-slate/...` paths does not work currently
|
|
17
|
-
import '../../editor/plugins/Table/less/public.less';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Slate Table block's View class.
|
|
21
|
-
* @class View
|
|
22
|
-
* @extends Component
|
|
23
|
-
* @param {object} data The table data to render as a table.
|
|
24
|
-
*/
|
|
25
|
-
const View = ({ data }) => {
|
|
26
|
-
const [state, setState] = useState({
|
|
27
|
-
column: null,
|
|
28
|
-
direction: null,
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
const headers = useMemo(() => {
|
|
32
|
-
return data.table.rows?.[0]?.cells;
|
|
33
|
-
}, [data.table.rows]);
|
|
34
|
-
|
|
35
|
-
const rows = useMemo(() => {
|
|
36
|
-
const items = [];
|
|
37
|
-
if (!data.table.rows) return [];
|
|
38
|
-
data.table.rows.forEach((row, index) => {
|
|
39
|
-
if (index > 0) {
|
|
40
|
-
items[index] = [];
|
|
41
|
-
row.cells.forEach((cell, cellIndex) => {
|
|
42
|
-
items[index][cellIndex] = {
|
|
43
|
-
...cell,
|
|
44
|
-
value:
|
|
45
|
-
cell.value && Node.string({ children: cell.value }).length > 0
|
|
46
|
-
? serializeNodes(cell.value)
|
|
47
|
-
: '\u00A0',
|
|
48
|
-
valueText:
|
|
49
|
-
cell.value && Node.string({ children: cell.value }).length > 0
|
|
50
|
-
? serializeNodesToText(cell.value)
|
|
51
|
-
: '\u00A0',
|
|
52
|
-
};
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
return items;
|
|
57
|
-
}, [data.table.rows]);
|
|
58
|
-
|
|
59
|
-
const sortedRows = useMemo(() => {
|
|
60
|
-
if (state.column === null) return Object.keys(rows);
|
|
61
|
-
return Object.keys(rows).sort((a, b) => {
|
|
62
|
-
const a_text = rows[a][state.column].valueText;
|
|
63
|
-
const b_text = rows[b][state.column].valueText;
|
|
64
|
-
if (state.direction === 'ascending' ? a_text < b_text : a_text > b_text) {
|
|
65
|
-
return -1;
|
|
66
|
-
}
|
|
67
|
-
if (state.direction === 'ascending' ? a_text > b_text : a_text < b_text) {
|
|
68
|
-
return 1;
|
|
69
|
-
}
|
|
70
|
-
return 0;
|
|
71
|
-
});
|
|
72
|
-
}, [state, rows]);
|
|
73
|
-
|
|
74
|
-
return (
|
|
75
|
-
<>
|
|
76
|
-
{data && data.table && (
|
|
77
|
-
<Table
|
|
78
|
-
fixed={data.table.fixed}
|
|
79
|
-
compact={data.table.compact}
|
|
80
|
-
basic={data.table.basic ? 'very' : false}
|
|
81
|
-
celled={data.table.celled}
|
|
82
|
-
inverted={data.table.inverted}
|
|
83
|
-
striped={data.table.striped}
|
|
84
|
-
sortable={data.table.sortable}
|
|
85
|
-
className="slate-table-block"
|
|
86
|
-
>
|
|
87
|
-
{!data.table.hideHeaders ? (
|
|
88
|
-
<Table.Header>
|
|
89
|
-
<Table.Row>
|
|
90
|
-
{headers.map((cell, index) => (
|
|
91
|
-
<Table.HeaderCell
|
|
92
|
-
key={cell.key}
|
|
93
|
-
textAlign="left"
|
|
94
|
-
verticalAlign="middle"
|
|
95
|
-
sorted={state.column === index ? state.direction : null}
|
|
96
|
-
onClick={() => {
|
|
97
|
-
if (!data.table.sortable) return;
|
|
98
|
-
setState({
|
|
99
|
-
column: index,
|
|
100
|
-
direction:
|
|
101
|
-
state.column !== index
|
|
102
|
-
? 'ascending'
|
|
103
|
-
: state.direction === 'ascending'
|
|
104
|
-
? 'descending'
|
|
105
|
-
: 'ascending',
|
|
106
|
-
});
|
|
107
|
-
}}
|
|
108
|
-
>
|
|
109
|
-
{cell.value &&
|
|
110
|
-
Node.string({ children: cell.value }).length > 0
|
|
111
|
-
? serializeNodes(cell.value)
|
|
112
|
-
: '\u00A0'}
|
|
113
|
-
</Table.HeaderCell>
|
|
114
|
-
))}
|
|
115
|
-
</Table.Row>
|
|
116
|
-
</Table.Header>
|
|
117
|
-
) : (
|
|
118
|
-
''
|
|
119
|
-
)}
|
|
120
|
-
<Table.Body>
|
|
121
|
-
{map(sortedRows, (row) => (
|
|
122
|
-
<Table.Row key={row}>
|
|
123
|
-
{map(rows[row], (cell) => (
|
|
124
|
-
<Table.Cell
|
|
125
|
-
key={cell.key}
|
|
126
|
-
textAlign="left"
|
|
127
|
-
verticalAlign="middle"
|
|
128
|
-
>
|
|
129
|
-
{cell.value}
|
|
130
|
-
</Table.Cell>
|
|
131
|
-
))}
|
|
132
|
-
</Table.Row>
|
|
133
|
-
))}
|
|
134
|
-
</Table.Body>
|
|
135
|
-
</Table>
|
|
136
|
-
)}
|
|
137
|
-
</>
|
|
138
|
-
);
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Property types.
|
|
143
|
-
* @property {Object} propTypes Property types.
|
|
144
|
-
* @static
|
|
145
|
-
*/
|
|
146
|
-
View.propTypes = {
|
|
147
|
-
data: PropTypes.objectOf(PropTypes.any).isRequired,
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
export default View;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import renderer from 'react-test-renderer';
|
|
3
|
-
import View from './TableBlockView';
|
|
4
|
-
import config from '@plone/volto/registry';
|
|
5
|
-
|
|
6
|
-
beforeAll(() => {
|
|
7
|
-
config.settings = {
|
|
8
|
-
slate: {
|
|
9
|
-
elements: {
|
|
10
|
-
default: ({ attributes, children }) => (
|
|
11
|
-
<p {...attributes}>{children}</p>
|
|
12
|
-
),
|
|
13
|
-
h2: ({ attributes, children }) => <h2 {...attributes}>{children}</h2>,
|
|
14
|
-
},
|
|
15
|
-
leafs: {},
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
test('renders a view table component', () => {
|
|
21
|
-
const component = renderer.create(
|
|
22
|
-
<View
|
|
23
|
-
data={{
|
|
24
|
-
table: {
|
|
25
|
-
rows: [
|
|
26
|
-
{
|
|
27
|
-
key: 'a',
|
|
28
|
-
cells: [
|
|
29
|
-
{
|
|
30
|
-
type: 'data',
|
|
31
|
-
key: 'b',
|
|
32
|
-
value: [
|
|
33
|
-
{
|
|
34
|
-
type: 'h2',
|
|
35
|
-
children: [{ text: 'My header' }],
|
|
36
|
-
},
|
|
37
|
-
],
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
|
-
],
|
|
42
|
-
hideHeaders: false,
|
|
43
|
-
},
|
|
44
|
-
}}
|
|
45
|
-
/>,
|
|
46
|
-
);
|
|
47
|
-
const json = component.toJSON();
|
|
48
|
-
expect(json).toMatchSnapshot();
|
|
49
|
-
});
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { v4 as uuid } from 'uuid';
|
|
2
|
-
import { Editor, Transforms } from 'slate';
|
|
3
|
-
import {
|
|
4
|
-
TABLE,
|
|
5
|
-
THEAD,
|
|
6
|
-
TBODY,
|
|
7
|
-
TFOOT,
|
|
8
|
-
TD,
|
|
9
|
-
TH,
|
|
10
|
-
TR,
|
|
11
|
-
} from '@plone/volto-slate/constants';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @param {Array} rows The array of rows that almost completely defines a
|
|
15
|
-
* `table`-typed block.
|
|
16
|
-
* @returns {Array} A tuple `[id, block]` where `id` is the new block's ID and
|
|
17
|
-
* the `block` is all the block's data.
|
|
18
|
-
*/
|
|
19
|
-
export function syncCreateTableBlock(rows) {
|
|
20
|
-
const id = uuid();
|
|
21
|
-
const block = {
|
|
22
|
-
'@type': 'table',
|
|
23
|
-
table: {
|
|
24
|
-
rows,
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
return [id, block];
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @param {Editor} editor The Slate Editor from which to extract tables.
|
|
32
|
-
* @param {PathRef} pathRef Has the current value a `Path` so that the search is
|
|
33
|
-
* done just inside nodes in that `Path`.
|
|
34
|
-
* @returns Extracts tables from a Slate `Editor` into an array of detached
|
|
35
|
-
* `table` blocks.
|
|
36
|
-
*/
|
|
37
|
-
export const extractTables = (editor, pathRef) => {
|
|
38
|
-
const tableNodes = Array.from(
|
|
39
|
-
Editor.nodes(editor, {
|
|
40
|
-
at: pathRef.current,
|
|
41
|
-
match: (node) => node.type === TABLE,
|
|
42
|
-
}),
|
|
43
|
-
);
|
|
44
|
-
const tables = tableNodes.map(([node]) => extractVoltoTable(node));
|
|
45
|
-
|
|
46
|
-
Transforms.removeNodes(editor, {
|
|
47
|
-
at: pathRef.current,
|
|
48
|
-
match: (node) => node.type === TABLE,
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
return tables.map((el) => syncCreateTableBlock(el));
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* @param {Node[]} fragment A Slate document fragment.
|
|
56
|
-
* @returns {Array} An array of rows in the format requested by `table`
|
|
57
|
-
* blocks.
|
|
58
|
-
*/
|
|
59
|
-
function collectRowsFrom(fragment) {
|
|
60
|
-
let rows = [];
|
|
61
|
-
fragment.children.forEach((y) => {
|
|
62
|
-
if (y.type === TR) {
|
|
63
|
-
let row = { key: uuid(), cells: [] };
|
|
64
|
-
|
|
65
|
-
y.children.forEach((z) => {
|
|
66
|
-
let val = JSON.parse(JSON.stringify(z.children));
|
|
67
|
-
if (z.type === TD) {
|
|
68
|
-
row.cells.push({
|
|
69
|
-
key: uuid(),
|
|
70
|
-
type: 'data',
|
|
71
|
-
value: val,
|
|
72
|
-
});
|
|
73
|
-
} else if (z.type === TH) {
|
|
74
|
-
row.cells.push({
|
|
75
|
-
key: uuid(),
|
|
76
|
-
type: 'header',
|
|
77
|
-
value: val,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
rows.push(row);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
return rows;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* @param {HTMLElement} el The <table> element from which to extract rows.
|
|
90
|
-
* @returns {Array} A rows array that contains rows in the format required by
|
|
91
|
-
* `table` blocks.
|
|
92
|
-
*/
|
|
93
|
-
function extractVoltoTable(el) {
|
|
94
|
-
let thead = [],
|
|
95
|
-
tfoot = [],
|
|
96
|
-
tbody = [];
|
|
97
|
-
|
|
98
|
-
el.children.forEach((fragment) => {
|
|
99
|
-
if (fragment.type === THEAD) {
|
|
100
|
-
// not supported by View fully, so prepend this to tbody below
|
|
101
|
-
thead = collectRowsFrom(fragment);
|
|
102
|
-
} else if (fragment.type === TBODY) {
|
|
103
|
-
tbody = collectRowsFrom(fragment);
|
|
104
|
-
} else if (fragment.type === TFOOT) {
|
|
105
|
-
// not supported by View fully, so append this to tbody below
|
|
106
|
-
tfoot = collectRowsFrom(fragment);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
const rows = [...thead, ...tbody, ...tfoot];
|
|
111
|
-
|
|
112
|
-
return rows;
|
|
113
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import TableBlockEdit from './TableBlockEdit';
|
|
2
|
-
import TableBlockView from './TableBlockView';
|
|
3
|
-
import { extractTables } from './deconstruct';
|
|
4
|
-
import { normalizeTable } from './extensions/normalizeTable';
|
|
5
|
-
import { normalizeExternalData } from '../Text/extensions';
|
|
6
|
-
|
|
7
|
-
import tableSVG from '@plone/volto/icons/table.svg';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @summary Called from Volto to configure new or existing Volto block types.
|
|
11
|
-
* @param {object} config The object received from Volto containing the
|
|
12
|
-
* configuration for all the blocks.
|
|
13
|
-
*/
|
|
14
|
-
export default function install(config) {
|
|
15
|
-
config.settings.slate = {
|
|
16
|
-
...config.settings.slate,
|
|
17
|
-
voltoBlockEmiters: [
|
|
18
|
-
...(config.settings.slate.voltoBlockEmiters || []),
|
|
19
|
-
extractTables,
|
|
20
|
-
],
|
|
21
|
-
tableblockExtensions: [
|
|
22
|
-
// First here gets executed last
|
|
23
|
-
// withLists,
|
|
24
|
-
// withSplitBlocksOnBreak,
|
|
25
|
-
// withDeleteSelectionOnEnter,
|
|
26
|
-
// withDeserializers,
|
|
27
|
-
// breakList,
|
|
28
|
-
normalizeTable,
|
|
29
|
-
normalizeExternalData,
|
|
30
|
-
],
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const tableBlockConfig = {
|
|
34
|
-
id: 'table',
|
|
35
|
-
title: 'Table',
|
|
36
|
-
icon: tableSVG,
|
|
37
|
-
group: 'common',
|
|
38
|
-
view: TableBlockView,
|
|
39
|
-
edit: TableBlockEdit,
|
|
40
|
-
restricted: false,
|
|
41
|
-
mostUsed: false,
|
|
42
|
-
blockHasOwnFocusManagement: true,
|
|
43
|
-
sidebarTab: 1,
|
|
44
|
-
security: {
|
|
45
|
-
addPermission: [],
|
|
46
|
-
view: [],
|
|
47
|
-
},
|
|
48
|
-
// blockHasValue: (data) => {
|
|
49
|
-
// return true;
|
|
50
|
-
// },
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
config.blocks.blocksConfig.table.restricted = true;
|
|
54
|
-
config.blocks.blocksConfig.slateTable = {
|
|
55
|
-
...tableBlockConfig,
|
|
56
|
-
id: 'slateTable',
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
return config;
|
|
60
|
-
}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { defineMessages } from 'react-intl';
|
|
2
|
-
|
|
3
|
-
const messages = defineMessages({
|
|
4
|
-
hideHeaders: {
|
|
5
|
-
id: 'Hide headers',
|
|
6
|
-
defaultMessage: 'Hide headers',
|
|
7
|
-
},
|
|
8
|
-
sortable: {
|
|
9
|
-
id: 'Make the table sortable',
|
|
10
|
-
defaultMessage: 'Make the table sortable',
|
|
11
|
-
},
|
|
12
|
-
sortableDescription: {
|
|
13
|
-
id: 'Visible only in view mode',
|
|
14
|
-
defaultMessage: 'Visible only in view mode',
|
|
15
|
-
},
|
|
16
|
-
fixed: {
|
|
17
|
-
id: 'Fixed width table cells',
|
|
18
|
-
defaultMessage: 'Fixed width table cells',
|
|
19
|
-
},
|
|
20
|
-
compact: {
|
|
21
|
-
id: 'Make the table compact',
|
|
22
|
-
defaultMessage: 'Make the table compact',
|
|
23
|
-
},
|
|
24
|
-
basic: {
|
|
25
|
-
id: 'Reduce complexity',
|
|
26
|
-
defaultMessage: 'Reduce complexity',
|
|
27
|
-
},
|
|
28
|
-
celled: {
|
|
29
|
-
id: 'Divide each row into separate cells',
|
|
30
|
-
defaultMessage: 'Divide each row into separate cells',
|
|
31
|
-
},
|
|
32
|
-
inverted: {
|
|
33
|
-
id: 'Table color inverted',
|
|
34
|
-
defaultMessage: 'Table color inverted',
|
|
35
|
-
},
|
|
36
|
-
striped: {
|
|
37
|
-
id: 'Stripe alternate rows with color',
|
|
38
|
-
defaultMessage: 'Stripe alternate rows with color',
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
function TableSchema(props) {
|
|
43
|
-
const { intl } = props;
|
|
44
|
-
return {
|
|
45
|
-
title: 'Table block',
|
|
46
|
-
fieldsets: [
|
|
47
|
-
{
|
|
48
|
-
id: 'default',
|
|
49
|
-
title: 'Default',
|
|
50
|
-
fields: [
|
|
51
|
-
'hideHeaders',
|
|
52
|
-
'sortable',
|
|
53
|
-
'fixed',
|
|
54
|
-
'celled',
|
|
55
|
-
'striped',
|
|
56
|
-
'compact',
|
|
57
|
-
'basic',
|
|
58
|
-
'inverted',
|
|
59
|
-
],
|
|
60
|
-
},
|
|
61
|
-
],
|
|
62
|
-
properties: {
|
|
63
|
-
hideHeaders: {
|
|
64
|
-
title: intl.formatMessage(messages.hideHeaders),
|
|
65
|
-
type: 'boolean',
|
|
66
|
-
},
|
|
67
|
-
sortable: {
|
|
68
|
-
title: intl.formatMessage(messages.sortable),
|
|
69
|
-
type: 'boolean',
|
|
70
|
-
},
|
|
71
|
-
fixed: {
|
|
72
|
-
title: intl.formatMessage(messages.fixed),
|
|
73
|
-
type: 'boolean',
|
|
74
|
-
},
|
|
75
|
-
celled: {
|
|
76
|
-
title: intl.formatMessage(messages.celled),
|
|
77
|
-
type: 'boolean',
|
|
78
|
-
},
|
|
79
|
-
striped: {
|
|
80
|
-
title: intl.formatMessage(messages.striped),
|
|
81
|
-
type: 'boolean',
|
|
82
|
-
},
|
|
83
|
-
compact: {
|
|
84
|
-
title: intl.formatMessage(messages.compact),
|
|
85
|
-
type: 'boolean',
|
|
86
|
-
},
|
|
87
|
-
basic: {
|
|
88
|
-
title: intl.formatMessage(messages.basic),
|
|
89
|
-
type: 'boolean',
|
|
90
|
-
},
|
|
91
|
-
inverted: {
|
|
92
|
-
title: intl.formatMessage(messages.inverted),
|
|
93
|
-
type: 'boolean',
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
required: [],
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export function TableBlockSchema(props) {
|
|
101
|
-
return {
|
|
102
|
-
title: 'Table block',
|
|
103
|
-
fieldsets: [
|
|
104
|
-
{
|
|
105
|
-
id: 'default',
|
|
106
|
-
title: 'Default',
|
|
107
|
-
fields: ['table'],
|
|
108
|
-
},
|
|
109
|
-
],
|
|
110
|
-
properties: {
|
|
111
|
-
table: {
|
|
112
|
-
title: 'Table block',
|
|
113
|
-
widget: 'object',
|
|
114
|
-
schema: TableSchema(props),
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
|
|
118
|
-
required: [],
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export default TableBlockSchema;
|