@wordpress/block-library
Version:
Block library for the WordPress editor.
263 lines (228 loc) • 9.13 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _lodash = require("lodash");
var _classnames2 = _interopRequireDefault(require("classnames"));
var _components = require("@wordpress/components");
var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
var _url = require("@wordpress/url");
var _i18n = require("@wordpress/i18n");
var _date = require("@wordpress/date");
var _blockEditor = require("@wordpress/block-editor");
var _data = require("@wordpress/data");
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Module Constants
*/
var CATEGORIES_LIST_QUERY = {
per_page: -1
};
var MAX_POSTS_COLUMNS = 6;
var LatestPostsEdit =
/*#__PURE__*/
function (_Component) {
(0, _inherits2.default)(LatestPostsEdit, _Component);
function LatestPostsEdit() {
var _this;
(0, _classCallCheck2.default)(this, LatestPostsEdit);
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(LatestPostsEdit).apply(this, arguments));
_this.state = {
categoriesList: []
};
_this.toggleDisplayPostDate = _this.toggleDisplayPostDate.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
return _this;
}
(0, _createClass2.default)(LatestPostsEdit, [{
key: "componentWillMount",
value: function componentWillMount() {
var _this2 = this;
this.isStillMounted = true;
this.fetchRequest = (0, _apiFetch.default)({
path: (0, _url.addQueryArgs)("/wp/v2/categories", CATEGORIES_LIST_QUERY)
}).then(function (categoriesList) {
if (_this2.isStillMounted) {
_this2.setState({
categoriesList: categoriesList
});
}
}).catch(function () {
if (_this2.isStillMounted) {
_this2.setState({
categoriesList: []
});
}
});
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.isStillMounted = false;
}
}, {
key: "toggleDisplayPostDate",
value: function toggleDisplayPostDate() {
var displayPostDate = this.props.attributes.displayPostDate;
var setAttributes = this.props.setAttributes;
setAttributes({
displayPostDate: !displayPostDate
});
}
}, {
key: "render",
value: function render() {
var _this$props = this.props,
attributes = _this$props.attributes,
setAttributes = _this$props.setAttributes,
latestPosts = _this$props.latestPosts;
var categoriesList = this.state.categoriesList;
var displayPostDate = attributes.displayPostDate,
align = attributes.align,
postLayout = attributes.postLayout,
columns = attributes.columns,
order = attributes.order,
orderBy = attributes.orderBy,
categories = attributes.categories,
postsToShow = attributes.postsToShow;
var inspectorControls = (0, _element.createElement)(_blockEditor.InspectorControls, null, (0, _element.createElement)(_components.PanelBody, {
title: (0, _i18n.__)('Latest Posts Settings')
}, (0, _element.createElement)(_components.QueryControls, (0, _extends2.default)({
order: order,
orderBy: orderBy
}, {
numberOfItems: postsToShow,
categoriesList: categoriesList,
selectedCategoryId: categories,
onOrderChange: function onOrderChange(value) {
return setAttributes({
order: value
});
},
onOrderByChange: function onOrderByChange(value) {
return setAttributes({
orderBy: value
});
},
onCategoryChange: function onCategoryChange(value) {
return setAttributes({
categories: '' !== value ? value : undefined
});
},
onNumberOfItemsChange: function onNumberOfItemsChange(value) {
return setAttributes({
postsToShow: value
});
}
})), (0, _element.createElement)(_components.ToggleControl, {
label: (0, _i18n.__)('Display post date'),
checked: displayPostDate,
onChange: this.toggleDisplayPostDate
}), postLayout === 'grid' && (0, _element.createElement)(_components.RangeControl, {
label: (0, _i18n.__)('Columns'),
value: columns,
onChange: function onChange(value) {
return setAttributes({
columns: value
});
},
min: 2,
max: !hasPosts ? MAX_POSTS_COLUMNS : Math.min(MAX_POSTS_COLUMNS, latestPosts.length),
required: true
})));
var hasPosts = Array.isArray(latestPosts) && latestPosts.length;
if (!hasPosts) {
return (0, _element.createElement)(_element.Fragment, null, inspectorControls, (0, _element.createElement)(_components.Placeholder, {
icon: "admin-post",
label: (0, _i18n.__)('Latest Posts')
}, !Array.isArray(latestPosts) ? (0, _element.createElement)(_components.Spinner, null) : (0, _i18n.__)('No posts found.')));
} // Removing posts from display should be instant.
var displayPosts = latestPosts.length > postsToShow ? latestPosts.slice(0, postsToShow) : latestPosts;
var layoutControls = [{
icon: 'list-view',
title: (0, _i18n.__)('List View'),
onClick: function onClick() {
return setAttributes({
postLayout: 'list'
});
},
isActive: postLayout === 'list'
}, {
icon: 'grid-view',
title: (0, _i18n.__)('Grid View'),
onClick: function onClick() {
return setAttributes({
postLayout: 'grid'
});
},
isActive: postLayout === 'grid'
}];
var dateFormat = (0, _date.__experimentalGetSettings)().formats.date;
return (0, _element.createElement)(_element.Fragment, null, inspectorControls, (0, _element.createElement)(_blockEditor.BlockControls, null, (0, _element.createElement)(_blockEditor.BlockAlignmentToolbar, {
value: align,
onChange: function onChange(nextAlign) {
setAttributes({
align: nextAlign
});
}
}), (0, _element.createElement)(_components.Toolbar, {
controls: layoutControls
})), (0, _element.createElement)("ul", {
className: (0, _classnames2.default)(this.props.className, (0, _defineProperty2.default)({
'is-grid': postLayout === 'grid',
'has-dates': displayPostDate
}, "columns-".concat(columns), postLayout === 'grid'))
}, displayPosts.map(function (post, i) {
var titleTrimmed = post.title.rendered.trim();
return (0, _element.createElement)("li", {
key: i
}, (0, _element.createElement)("a", {
href: post.link,
target: "_blank",
rel: "noreferrer noopener"
}, titleTrimmed ? (0, _element.createElement)(_element.RawHTML, null, titleTrimmed) : (0, _i18n.__)('(Untitled)')), displayPostDate && post.date_gmt && (0, _element.createElement)("time", {
dateTime: (0, _date.format)('c', post.date_gmt),
className: "wp-block-latest-posts__post-date"
}, (0, _date.dateI18n)(dateFormat, post.date_gmt)));
})));
}
}]);
return LatestPostsEdit;
}(_element.Component);
var _default = (0, _data.withSelect)(function (select, props) {
var _props$attributes = props.attributes,
postsToShow = _props$attributes.postsToShow,
order = _props$attributes.order,
orderBy = _props$attributes.orderBy,
categories = _props$attributes.categories;
var _select = select('core'),
getEntityRecords = _select.getEntityRecords;
var latestPostsQuery = (0, _lodash.pickBy)({
categories: categories,
order: order,
orderby: orderBy,
per_page: postsToShow
}, function (value) {
return !(0, _lodash.isUndefined)(value);
});
return {
latestPosts: getEntityRecords('postType', 'post', latestPostsQuery)
};
})(LatestPostsEdit);
exports.default = _default;
//# sourceMappingURL=edit.js.map