@wordpress/block-library
Version:
Block library for the WordPress editor.
153 lines (131 loc) • 4.34 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@wordpress/element");
var _reactNative = require("react-native");
var _blockEditor = require("@wordpress/block-editor");
var _data = require("@wordpress/data");
var _compose = require("@wordpress/compose");
var _editor = _interopRequireDefault(require("./editor.scss"));
var _variations = _interopRequireDefault(require("../social-link/variations"));
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
const ALLOWED_BLOCKS = _variations.default.map(v => `core/social-link-${v.name}`); // Template contains the links that show when start.
const TEMPLATE = [['core/social-link-wordpress', {
service: 'wordpress',
url: 'https://wordpress.org'
}], ['core/social-link-facebook', {
service: 'facebook'
}], ['core/social-link-twitter', {
service: 'twitter'
}], ['core/social-link-instagram', {
service: 'instagram'
}]];
function SocialLinksEdit(_ref) {
let {
shouldDelete,
onDelete,
isSelected,
isInnerIconSelected,
innerBlocks,
attributes,
activeInnerBlocks,
getBlock,
blockWidth
} = _ref;
const [initialCreation, setInitialCreation] = (0, _element.useState)(true);
const shouldRenderFooterAppender = isSelected || isInnerIconSelected;
const {
align
} = attributes;
const {
marginLeft: spacing
} = _editor.default.spacing;
(0, _element.useEffect)(() => {
if (!shouldRenderFooterAppender) {
setInitialCreation(false);
}
}, [shouldRenderFooterAppender]);
const renderFooterAppender = (0, _element.useRef)(() => (0, _element.createElement)(_reactNative.View, null, (0, _element.createElement)(_blockEditor.InnerBlocks.ButtonBlockAppender, {
isFloating: true
})));
const placeholderStyle = (0, _compose.usePreferredColorSchemeStyle)(_editor.default.placeholder, _editor.default.placeholderDark);
function renderPlaceholder() {
return [...new Array(innerBlocks.length || 1)].map((_, index) => (0, _element.createElement)(_reactNative.View, {
testID: "social-links-placeholder",
style: placeholderStyle,
key: index
}));
}
function filterInnerBlocks(blockIds) {
return blockIds.filter(blockId => getBlock(blockId).attributes.url);
}
if (!shouldRenderFooterAppender && activeInnerBlocks.length === 0) {
return (0, _element.createElement)(_reactNative.View, {
style: _editor.default.placeholderWrapper
}, renderPlaceholder());
}
return (0, _element.createElement)(_blockEditor.InnerBlocks, {
allowedBlocks: ALLOWED_BLOCKS,
templateLock: false,
template: initialCreation && TEMPLATE,
renderFooterAppender: shouldRenderFooterAppender && renderFooterAppender.current,
orientation: 'horizontal',
onDeleteBlock: shouldDelete ? onDelete : undefined,
marginVertical: spacing,
marginHorizontal: spacing,
horizontalAlignment: align,
filterInnerBlocks: !shouldRenderFooterAppender && filterInnerBlocks,
blockWidth: blockWidth
});
}
var _default = (0, _compose.compose)((0, _data.withSelect)((select, _ref2) => {
let {
clientId
} = _ref2;
const {
getBlockCount,
getBlockParents,
getSelectedBlockClientId,
getBlocks,
getBlock
} = select(_blockEditor.store);
const selectedBlockClientId = getSelectedBlockClientId();
const selectedBlockParents = getBlockParents(selectedBlockClientId, true);
const innerBlocks = getBlocks(clientId);
const activeInnerBlocks = innerBlocks.filter(block => {
var _block$attributes;
return (_block$attributes = block.attributes) === null || _block$attributes === void 0 ? void 0 : _block$attributes.url;
});
return {
shouldDelete: getBlockCount(clientId) === 1,
isInnerIconSelected: selectedBlockParents[0] === clientId,
innerBlocks,
activeInnerBlocks,
getBlock
};
}), (0, _data.withDispatch)((dispatch, _ref3) => {
let {
clientId
} = _ref3;
const {
removeBlock
} = dispatch(_blockEditor.store);
return {
onDelete: () => {
removeBlock(clientId, false);
}
};
}))(SocialLinksEdit);
exports.default = _default;
//# sourceMappingURL=edit.native.js.map
;