decap-cms-widget-datetime 2.8.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +386 -0
- package/LICENSE +22 -0
- package/README.md +9 -0
- package/dist/decap-cms-widget-datetime.js +11 -0
- package/dist/decap-cms-widget-datetime.js.LICENSE.txt +25 -0
- package/dist/decap-cms-widget-datetime.js.map +1 -0
- package/dist/esm/DateTimeControl.js +183 -0
- package/dist/esm/DateTimePreview.js +21 -0
- package/dist/esm/index.js +31 -0
- package/dist/esm/schema.js +31 -0
- package/package.json +33 -0
- package/src/DateTimeControl.js +167 -0
- package/src/DateTimePreview.js +13 -0
- package/src/index.js +16 -0
- package/src/schema.js +8 -0
- package/webpack.config.js +3 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _core = require("@emotion/core");
|
|
10
|
+
var _reactDatetime = _interopRequireDefault(require("react-datetime/css/react-datetime.css"));
|
|
11
|
+
var _reactDatetime2 = _interopRequireDefault(require("react-datetime"));
|
|
12
|
+
var _moment = _interopRequireDefault(require("moment"));
|
|
13
|
+
var _decapCmsUiDefault = require("decap-cms-ui-default");
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
16
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
17
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
18
|
+
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /** @jsx jsx */
|
|
19
|
+
var _ref = process.env.NODE_ENV === "production" ? {
|
|
20
|
+
name: "6zq5jn-NowButton",
|
|
21
|
+
styles: "position:absolute;right:20px;transform:translateY(-40px);width:fit-content;z-index:1;;label:NowButton;"
|
|
22
|
+
} : {
|
|
23
|
+
name: "6zq5jn-NowButton",
|
|
24
|
+
styles: "position:absolute;right:20px;transform:translateY(-40px);width:fit-content;z-index:1;;label:NowButton;",
|
|
25
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EYXRlVGltZUNvbnRyb2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWWMiLCJmaWxlIjoiLi4vLi4vc3JjL0RhdGVUaW1lQ29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBqc3gsIGNzcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHJlYWN0RGF0ZVRpbWVTdHlsZXMgZnJvbSAncmVhY3QtZGF0ZXRpbWUvY3NzL3JlYWN0LWRhdGV0aW1lLmNzcyc7XG5pbXBvcnQgRGF0ZVRpbWUgZnJvbSAncmVhY3QtZGF0ZXRpbWUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgYnV0dG9ucyB9IGZyb20gJ2RlY2FwLWNtcy11aS1kZWZhdWx0JztcblxuZnVuY3Rpb24gTm93QnV0dG9uKHsgdCwgaGFuZGxlQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2Nzc2BcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTtcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgYH1cbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICR7YnV0dG9ucy5idXR0b259XG4gICAgICAgICAgJHtidXR0b25zLndpZGdldH1cbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNoYW5nZShtb21lbnQoKSk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0KCdlZGl0b3IuZWRpdG9yV2lkZ2V0cy5kYXRldGltZS5ub3cnKX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlVGltZUNvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgfTtcblxuICBnZXRGb3JtYXRzKCkge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZm9ybWF0ID0gZmllbGQuZ2V0KCdmb3JtYXQnKTtcblxuICAgIC8vIGRhdGVGb3JtYXQgYW5kIHRpbWVGb3JtYXQgYXJlIHN0cmljdGx5IGZvciBtb2RpZnlpbmdcbiAgICAvLyBpbnB1dCBmaWVsZCB3aXRoIHRoZSBkYXRlL3RpbWUgcGlja2Vyc1xuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBmaWVsZC5nZXQoJ2RhdGVfZm9ybWF0Jyk7XG4gICAgLy8gc2hvdyB0aW1lLXBpY2tlcj8gZmFsc2UgaGlkZXMgaXQsIHRydWUgc2hvd3MgaXQgdXNpbmcgZGVmYXVsdCBmb3JtYXRcbiAgICBsZXQgdGltZUZvcm1hdCA9IGZpZWxkLmdldCgndGltZV9mb3JtYXQnKTtcbiAgICBpZiAodHlwZW9mIHRpbWVGb3JtYXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aW1lRm9ybWF0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0LFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgIHRpbWVGb3JtYXQsXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGZpZWxkLmdldCgnZGVmYXVsdCcpO1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXRQaWNrZXJVdGMoKSB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwaWNrZXJVdGMgPSBmaWVsZC5nZXQoJ3BpY2tlcl91dGMnKTtcbiAgICByZXR1cm4gcGlja2VyVXRjO1xuICB9XG5cbiAgZm9ybWF0cyA9IHRoaXMuZ2V0Rm9ybWF0cygpO1xuICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZSgpO1xuICBwaWNrZXJVdGMgPSB0aGlzLmdldFBpY2tlclV0YygpO1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZGF0ZSBhcyBkZWZhdWx0IHZhbHVlIGlmIG5vIHZhbHVlIGlzIHByb3ZpZGVkIGFuZCBkZWZhdWx0IGlzIGFic2VudC4gQW5cbiAgICAgKiBlbXB0eSBkZWZhdWx0IHN0cmluZyBtZWFucyB0aGUgdmFsdWUgaXMgaW50ZW50aW9uYWxseSBibGFuay5cbiAgICAgKi9cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgPyBuZXcgRGF0ZSgpIDogdGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRGF0ZSBpcyB2YWxpZCBpZiBkYXRldGltZSBpcyBhIG1vbWVudCBvciBEYXRlIG9iamVjdCBvdGhlcndpc2UgaXQncyBhIHN0cmluZy5cbiAgLy8gSGFuZGxlIHRoZSBlbXB0eSBjYXNlLCBpZiB0aGUgdXNlciB3YW50cyB0byBlbXB0eSB0aGUgZmllbGQuXG4gIGlzVmFsaWREYXRlID0gZGF0ZXRpbWUgPT5cbiAgICBtb21lbnQuaXNNb21lbnQoZGF0ZXRpbWUpIHx8IGRhdGV0aW1lIGluc3RhbmNlb2YgRGF0ZSB8fCBkYXRldGltZSA9PT0gJyc7XG5cbiAgaGFuZGxlQ2hhbmdlID0gZGF0ZXRpbWUgPT4ge1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGF0ZSBvbmx5IGlmIGl0IGlzIHZhbGlkLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShkYXRldGltZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLmZvcm1hdHM7XG5cbiAgICAvKipcbiAgICAgKiBQcm9kdWNlIGEgZm9ybWF0dGVkIHN0cmluZyBvbmx5IGlmIGEgZm9ybWF0IGlzIHNldCBpbiB0aGUgY29uZmlnLlxuICAgICAqIE90aGVyd2lzZSBwcm9kdWNlIGEgZGF0ZSBvYmplY3QuXG4gICAgICovXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBkYXRldGltZSA/IG1vbWVudChkYXRldGltZSkuZm9ybWF0KGZvcm1hdCkgOiAnJztcbiAgICAgIG9uQ2hhbmdlKGZvcm1hdHRlZFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWUgPSBtb21lbnQuaXNNb21lbnQoZGF0ZXRpbWUpID8gZGF0ZXRpbWUudG9EYXRlKCkgOiBkYXRldGltZTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb25DbG9zZSA9IGRhdGV0aW1lID0+IHtcbiAgICBjb25zdCB7IHNldEluYWN0aXZlU3R5bGUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZERhdGUoZGF0ZXRpbWUpKSB7XG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gbW9tZW50KGRhdGV0aW1lKTtcblxuICAgICAgaWYgKHBhcnNlZERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKGRhdGV0aW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5hbGVydCgnVGhlIGRhdGUgeW91IGVudGVyZWQgaXMgaW52YWxpZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIHZhbHVlLCBjbGFzc05hbWVXcmFwcGVyLCBzZXRBY3RpdmVTdHlsZSwgdCwgaXNEaXNhYmxlZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGZvcm1hdCwgZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCB9ID0gdGhpcy5mb3JtYXRzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgJHtyZWFjdERhdGVUaW1lU3R5bGVzfTtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxEYXRlVGltZVxuICAgICAgICAgIGRhdGVGb3JtYXQ9e2RhdGVGb3JtYXR9XG4gICAgICAgICAgdGltZUZvcm1hdD17dGltZUZvcm1hdH1cbiAgICAgICAgICB2YWx1ZT17bW9tZW50KHZhbHVlLCBmb3JtYXQpfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICBvbk9wZW49e3NldEFjdGl2ZVN0eWxlfVxuICAgICAgICAgIG9uQ2xvc2U9e3RoaXMub25DbG9zZX1cbiAgICAgICAgICBpbnB1dFByb3BzPXt7IGNsYXNzTmFtZTogY2xhc3NOYW1lV3JhcHBlciwgaWQ6IGZvcklEIH19XG4gICAgICAgICAgdXRjPXt0aGlzLnBpY2tlclV0Y31cbiAgICAgICAgLz5cbiAgICAgICAgeyFpc0Rpc2FibGVkICYmIDxOb3dCdXR0b24gdD17dH0gaGFuZGxlQ2hhbmdlPXt2ID0+IHRoaXMuaGFuZGxlQ2hhbmdlKHYpfSAvPn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiJdfQ== */",
|
|
26
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
27
|
+
};
|
|
28
|
+
function NowButton({
|
|
29
|
+
t,
|
|
30
|
+
handleChange
|
|
31
|
+
}) {
|
|
32
|
+
return (0, _core.jsx)("div", {
|
|
33
|
+
css: _ref
|
|
34
|
+
}, (0, _core.jsx)("button", {
|
|
35
|
+
css: /*#__PURE__*/(0, _core.css)(_decapCmsUiDefault.buttons.button, " ", _decapCmsUiDefault.buttons.widget, ";label:NowButton;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EYXRlVGltZUNvbnRyb2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJnQiIsImZpbGUiOiIuLi8uLi9zcmMvRGF0ZVRpbWVDb250cm9sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBqc3gganN4ICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGpzeCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY29yZSc7XG5pbXBvcnQgcmVhY3REYXRlVGltZVN0eWxlcyBmcm9tICdyZWFjdC1kYXRldGltZS9jc3MvcmVhY3QtZGF0ZXRpbWUuY3NzJztcbmltcG9ydCBEYXRlVGltZSBmcm9tICdyZWFjdC1kYXRldGltZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBidXR0b25zIH0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuXG5mdW5jdGlvbiBOb3dCdXR0b24oeyB0LCBoYW5kbGVDaGFuZ2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICBgfVxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgJHtidXR0b25zLmJ1dHRvbn1cbiAgICAgICAgICAke2J1dHRvbnMud2lkZ2V0fVxuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlQ2hhbmdlKG1vbWVudCgpKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3QoJ2VkaXRvci5lZGl0b3JXaWRnZXRzLmRhdGV0aW1lLm5vdycpfVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVUaW1lQ29udHJvbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICB9O1xuXG4gIGdldEZvcm1hdHMoKSB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBmb3JtYXQgPSBmaWVsZC5nZXQoJ2Zvcm1hdCcpO1xuXG4gICAgLy8gZGF0ZUZvcm1hdCBhbmQgdGltZUZvcm1hdCBhcmUgc3RyaWN0bHkgZm9yIG1vZGlmeWluZ1xuICAgIC8vIGlucHV0IGZpZWxkIHdpdGggdGhlIGRhdGUvdGltZSBwaWNrZXJzXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IGZpZWxkLmdldCgnZGF0ZV9mb3JtYXQnKTtcbiAgICAvLyBzaG93IHRpbWUtcGlja2VyPyBmYWxzZSBoaWRlcyBpdCwgdHJ1ZSBzaG93cyBpdCB1c2luZyBkZWZhdWx0IGZvcm1hdFxuICAgIGxldCB0aW1lRm9ybWF0ID0gZmllbGQuZ2V0KCd0aW1lX2Zvcm1hdCcpO1xuICAgIGlmICh0eXBlb2YgdGltZUZvcm1hdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRpbWVGb3JtYXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXQsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICAgdGltZUZvcm1hdCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZmllbGQuZ2V0KCdkZWZhdWx0Jyk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIGdldFBpY2tlclV0YygpIHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBpY2tlclV0YyA9IGZpZWxkLmdldCgncGlja2VyX3V0YycpO1xuICAgIHJldHVybiBwaWNrZXJVdGM7XG4gIH1cblxuICBmb3JtYXRzID0gdGhpcy5nZXRGb3JtYXRzKCk7XG4gIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XG4gIHBpY2tlclV0YyA9IHRoaXMuZ2V0UGlja2VyVXRjKCk7XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY3VycmVudCBkYXRlIGFzIGRlZmF1bHQgdmFsdWUgaWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgYW5kIGRlZmF1bHQgaXMgYWJzZW50LiBBblxuICAgICAqIGVtcHR5IGRlZmF1bHQgc3RyaW5nIG1lYW5zIHRoZSB2YWx1ZSBpcyBpbnRlbnRpb25hbGx5IGJsYW5rLlxuICAgICAqL1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKCkgOiB0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBEYXRlIGlzIHZhbGlkIGlmIGRhdGV0aW1lIGlzIGEgbW9tZW50IG9yIERhdGUgb2JqZWN0IG90aGVyd2lzZSBpdCdzIGEgc3RyaW5nLlxuICAvLyBIYW5kbGUgdGhlIGVtcHR5IGNhc2UsIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGVtcHR5IHRoZSBmaWVsZC5cbiAgaXNWYWxpZERhdGUgPSBkYXRldGltZSA9PlxuICAgIG1vbWVudC5pc01vbWVudChkYXRldGltZSkgfHwgZGF0ZXRpbWUgaW5zdGFuY2VvZiBEYXRlIHx8IGRhdGV0aW1lID09PSAnJztcblxuICBoYW5kbGVDaGFuZ2UgPSBkYXRldGltZSA9PiB7XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkYXRlIG9ubHkgaWYgaXQgaXMgdmFsaWQuXG4gICAgICovXG4gICAgaWYgKCF0aGlzLmlzVmFsaWREYXRlKGRhdGV0aW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuZm9ybWF0cztcblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2UgYSBmb3JtYXR0ZWQgc3RyaW5nIG9ubHkgaWYgYSBmb3JtYXQgaXMgc2V0IGluIHRoZSBjb25maWcuXG4gICAgICogT3RoZXJ3aXNlIHByb2R1Y2UgYSBkYXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGRhdGV0aW1lID8gbW9tZW50KGRhdGV0aW1lKS5mb3JtYXQoZm9ybWF0KSA6ICcnO1xuICAgICAgb25DaGFuZ2UoZm9ybWF0dGVkVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG1vbWVudC5pc01vbWVudChkYXRldGltZSkgPyBkYXRldGltZS50b0RhdGUoKSA6IGRhdGV0aW1lO1xuICAgICAgb25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICBvbkNsb3NlID0gZGF0ZXRpbWUgPT4ge1xuICAgIGNvbnN0IHsgc2V0SW5hY3RpdmVTdHlsZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShkYXRldGltZSkpIHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSBtb21lbnQoZGF0ZXRpbWUpO1xuXG4gICAgICBpZiAocGFyc2VkRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoZGF0ZXRpbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmFsZXJ0KCdUaGUgZGF0ZSB5b3UgZW50ZXJlZCBpcyBpbnZhbGlkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgdmFsdWUsIGNsYXNzTmFtZVdyYXBwZXIsIHNldEFjdGl2ZVN0eWxlLCB0LCBpc0Rpc2FibGVkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZm9ybWF0LCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0IH0gPSB0aGlzLmZvcm1hdHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAke3JlYWN0RGF0ZVRpbWVTdHlsZXN9O1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgYH1cbiAgICAgID5cbiAgICAgICAgPERhdGVUaW1lXG4gICAgICAgICAgZGF0ZUZvcm1hdD17ZGF0ZUZvcm1hdH1cbiAgICAgICAgICB0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuICAgICAgICAgIHZhbHVlPXttb21lbnQodmFsdWUsIGZvcm1hdCl9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgIG9uT3Blbj17c2V0QWN0aXZlU3R5bGV9XG4gICAgICAgICAgb25DbG9zZT17dGhpcy5vbkNsb3NlfVxuICAgICAgICAgIGlucHV0UHJvcHM9e3sgY2xhc3NOYW1lOiBjbGFzc05hbWVXcmFwcGVyLCBpZDogZm9ySUQgfX1cbiAgICAgICAgICB1dGM9e3RoaXMucGlja2VyVXRjfVxuICAgICAgICAvPlxuICAgICAgICB7IWlzRGlzYWJsZWQgJiYgPE5vd0J1dHRvbiB0PXt0fSBoYW5kbGVDaGFuZ2U9e3YgPT4gdGhpcy5oYW5kbGVDaGFuZ2Uodil9IC8+fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIl19 */")),
|
|
36
|
+
onClick: () => {
|
|
37
|
+
handleChange((0, _moment.default)());
|
|
38
|
+
}
|
|
39
|
+
}, t('editor.editorWidgets.datetime.now')));
|
|
40
|
+
}
|
|
41
|
+
class DateTimeControl extends _react.default.Component {
|
|
42
|
+
constructor(...args) {
|
|
43
|
+
super(...args);
|
|
44
|
+
_defineProperty(this, "formats", this.getFormats());
|
|
45
|
+
_defineProperty(this, "defaultValue", this.getDefaultValue());
|
|
46
|
+
_defineProperty(this, "pickerUtc", this.getPickerUtc());
|
|
47
|
+
// Date is valid if datetime is a moment or Date object otherwise it's a string.
|
|
48
|
+
// Handle the empty case, if the user wants to empty the field.
|
|
49
|
+
_defineProperty(this, "isValidDate", datetime => _moment.default.isMoment(datetime) || datetime instanceof Date || datetime === '');
|
|
50
|
+
_defineProperty(this, "handleChange", datetime => {
|
|
51
|
+
/**
|
|
52
|
+
* Set the date only if it is valid.
|
|
53
|
+
*/
|
|
54
|
+
if (!this.isValidDate(datetime)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const {
|
|
58
|
+
onChange
|
|
59
|
+
} = this.props;
|
|
60
|
+
const {
|
|
61
|
+
format
|
|
62
|
+
} = this.formats;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Produce a formatted string only if a format is set in the config.
|
|
66
|
+
* Otherwise produce a date object.
|
|
67
|
+
*/
|
|
68
|
+
if (format) {
|
|
69
|
+
const formattedValue = datetime ? (0, _moment.default)(datetime).format(format) : '';
|
|
70
|
+
onChange(formattedValue);
|
|
71
|
+
} else {
|
|
72
|
+
const value = _moment.default.isMoment(datetime) ? datetime.toDate() : datetime;
|
|
73
|
+
onChange(value);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
_defineProperty(this, "onClose", datetime => {
|
|
77
|
+
const {
|
|
78
|
+
setInactiveStyle
|
|
79
|
+
} = this.props;
|
|
80
|
+
if (!this.isValidDate(datetime)) {
|
|
81
|
+
const parsedDate = (0, _moment.default)(datetime);
|
|
82
|
+
if (parsedDate.isValid()) {
|
|
83
|
+
this.handleChange(datetime);
|
|
84
|
+
} else {
|
|
85
|
+
window.alert('The date you entered is invalid.');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
setInactiveStyle();
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
getFormats() {
|
|
92
|
+
const {
|
|
93
|
+
field
|
|
94
|
+
} = this.props;
|
|
95
|
+
const format = field.get('format');
|
|
96
|
+
|
|
97
|
+
// dateFormat and timeFormat are strictly for modifying
|
|
98
|
+
// input field with the date/time pickers
|
|
99
|
+
const dateFormat = field.get('date_format');
|
|
100
|
+
// show time-picker? false hides it, true shows it using default format
|
|
101
|
+
let timeFormat = field.get('time_format');
|
|
102
|
+
if (typeof timeFormat === 'undefined') {
|
|
103
|
+
timeFormat = true;
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
format,
|
|
107
|
+
dateFormat,
|
|
108
|
+
timeFormat
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
getDefaultValue() {
|
|
112
|
+
const {
|
|
113
|
+
field
|
|
114
|
+
} = this.props;
|
|
115
|
+
const defaultValue = field.get('default');
|
|
116
|
+
return defaultValue;
|
|
117
|
+
}
|
|
118
|
+
getPickerUtc() {
|
|
119
|
+
const {
|
|
120
|
+
field
|
|
121
|
+
} = this.props;
|
|
122
|
+
const pickerUtc = field.get('picker_utc');
|
|
123
|
+
return pickerUtc;
|
|
124
|
+
}
|
|
125
|
+
componentDidMount() {
|
|
126
|
+
const {
|
|
127
|
+
value
|
|
128
|
+
} = this.props;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Set the current date as default value if no value is provided and default is absent. An
|
|
132
|
+
* empty default string means the value is intentionally blank.
|
|
133
|
+
*/
|
|
134
|
+
if (value === undefined) {
|
|
135
|
+
setTimeout(() => {
|
|
136
|
+
this.handleChange(this.defaultValue === undefined ? new Date() : this.defaultValue);
|
|
137
|
+
}, 0);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
render() {
|
|
141
|
+
const {
|
|
142
|
+
forID,
|
|
143
|
+
value,
|
|
144
|
+
classNameWrapper,
|
|
145
|
+
setActiveStyle,
|
|
146
|
+
t,
|
|
147
|
+
isDisabled
|
|
148
|
+
} = this.props;
|
|
149
|
+
const {
|
|
150
|
+
format,
|
|
151
|
+
dateFormat,
|
|
152
|
+
timeFormat
|
|
153
|
+
} = this.formats;
|
|
154
|
+
return (0, _core.jsx)("div", {
|
|
155
|
+
css: /*#__PURE__*/(0, _core.css)(_reactDatetime.default, ";position:relative;;label:DateTimeControl;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EYXRlVGltZUNvbnRyb2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUpnQiIsImZpbGUiOiIuLi8uLi9zcmMvRGF0ZVRpbWVDb250cm9sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBqc3gganN4ICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGpzeCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY29yZSc7XG5pbXBvcnQgcmVhY3REYXRlVGltZVN0eWxlcyBmcm9tICdyZWFjdC1kYXRldGltZS9jc3MvcmVhY3QtZGF0ZXRpbWUuY3NzJztcbmltcG9ydCBEYXRlVGltZSBmcm9tICdyZWFjdC1kYXRldGltZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBidXR0b25zIH0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuXG5mdW5jdGlvbiBOb3dCdXR0b24oeyB0LCBoYW5kbGVDaGFuZ2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICBgfVxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgJHtidXR0b25zLmJ1dHRvbn1cbiAgICAgICAgICAke2J1dHRvbnMud2lkZ2V0fVxuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlQ2hhbmdlKG1vbWVudCgpKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3QoJ2VkaXRvci5lZGl0b3JXaWRnZXRzLmRhdGV0aW1lLm5vdycpfVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVUaW1lQ29udHJvbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICB9O1xuXG4gIGdldEZvcm1hdHMoKSB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBmb3JtYXQgPSBmaWVsZC5nZXQoJ2Zvcm1hdCcpO1xuXG4gICAgLy8gZGF0ZUZvcm1hdCBhbmQgdGltZUZvcm1hdCBhcmUgc3RyaWN0bHkgZm9yIG1vZGlmeWluZ1xuICAgIC8vIGlucHV0IGZpZWxkIHdpdGggdGhlIGRhdGUvdGltZSBwaWNrZXJzXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IGZpZWxkLmdldCgnZGF0ZV9mb3JtYXQnKTtcbiAgICAvLyBzaG93IHRpbWUtcGlja2VyPyBmYWxzZSBoaWRlcyBpdCwgdHJ1ZSBzaG93cyBpdCB1c2luZyBkZWZhdWx0IGZvcm1hdFxuICAgIGxldCB0aW1lRm9ybWF0ID0gZmllbGQuZ2V0KCd0aW1lX2Zvcm1hdCcpO1xuICAgIGlmICh0eXBlb2YgdGltZUZvcm1hdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRpbWVGb3JtYXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXQsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICAgdGltZUZvcm1hdCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZmllbGQuZ2V0KCdkZWZhdWx0Jyk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIGdldFBpY2tlclV0YygpIHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBpY2tlclV0YyA9IGZpZWxkLmdldCgncGlja2VyX3V0YycpO1xuICAgIHJldHVybiBwaWNrZXJVdGM7XG4gIH1cblxuICBmb3JtYXRzID0gdGhpcy5nZXRGb3JtYXRzKCk7XG4gIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XG4gIHBpY2tlclV0YyA9IHRoaXMuZ2V0UGlja2VyVXRjKCk7XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY3VycmVudCBkYXRlIGFzIGRlZmF1bHQgdmFsdWUgaWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgYW5kIGRlZmF1bHQgaXMgYWJzZW50LiBBblxuICAgICAqIGVtcHR5IGRlZmF1bHQgc3RyaW5nIG1lYW5zIHRoZSB2YWx1ZSBpcyBpbnRlbnRpb25hbGx5IGJsYW5rLlxuICAgICAqL1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKCkgOiB0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBEYXRlIGlzIHZhbGlkIGlmIGRhdGV0aW1lIGlzIGEgbW9tZW50IG9yIERhdGUgb2JqZWN0IG90aGVyd2lzZSBpdCdzIGEgc3RyaW5nLlxuICAvLyBIYW5kbGUgdGhlIGVtcHR5IGNhc2UsIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGVtcHR5IHRoZSBmaWVsZC5cbiAgaXNWYWxpZERhdGUgPSBkYXRldGltZSA9PlxuICAgIG1vbWVudC5pc01vbWVudChkYXRldGltZSkgfHwgZGF0ZXRpbWUgaW5zdGFuY2VvZiBEYXRlIHx8IGRhdGV0aW1lID09PSAnJztcblxuICBoYW5kbGVDaGFuZ2UgPSBkYXRldGltZSA9PiB7XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkYXRlIG9ubHkgaWYgaXQgaXMgdmFsaWQuXG4gICAgICovXG4gICAgaWYgKCF0aGlzLmlzVmFsaWREYXRlKGRhdGV0aW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuZm9ybWF0cztcblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2UgYSBmb3JtYXR0ZWQgc3RyaW5nIG9ubHkgaWYgYSBmb3JtYXQgaXMgc2V0IGluIHRoZSBjb25maWcuXG4gICAgICogT3RoZXJ3aXNlIHByb2R1Y2UgYSBkYXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGRhdGV0aW1lID8gbW9tZW50KGRhdGV0aW1lKS5mb3JtYXQoZm9ybWF0KSA6ICcnO1xuICAgICAgb25DaGFuZ2UoZm9ybWF0dGVkVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG1vbWVudC5pc01vbWVudChkYXRldGltZSkgPyBkYXRldGltZS50b0RhdGUoKSA6IGRhdGV0aW1lO1xuICAgICAgb25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICBvbkNsb3NlID0gZGF0ZXRpbWUgPT4ge1xuICAgIGNvbnN0IHsgc2V0SW5hY3RpdmVTdHlsZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShkYXRldGltZSkpIHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSBtb21lbnQoZGF0ZXRpbWUpO1xuXG4gICAgICBpZiAocGFyc2VkRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoZGF0ZXRpbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmFsZXJ0KCdUaGUgZGF0ZSB5b3UgZW50ZXJlZCBpcyBpbnZhbGlkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgdmFsdWUsIGNsYXNzTmFtZVdyYXBwZXIsIHNldEFjdGl2ZVN0eWxlLCB0LCBpc0Rpc2FibGVkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZm9ybWF0LCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0IH0gPSB0aGlzLmZvcm1hdHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAke3JlYWN0RGF0ZVRpbWVTdHlsZXN9O1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgYH1cbiAgICAgID5cbiAgICAgICAgPERhdGVUaW1lXG4gICAgICAgICAgZGF0ZUZvcm1hdD17ZGF0ZUZvcm1hdH1cbiAgICAgICAgICB0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuICAgICAgICAgIHZhbHVlPXttb21lbnQodmFsdWUsIGZvcm1hdCl9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgIG9uT3Blbj17c2V0QWN0aXZlU3R5bGV9XG4gICAgICAgICAgb25DbG9zZT17dGhpcy5vbkNsb3NlfVxuICAgICAgICAgIGlucHV0UHJvcHM9e3sgY2xhc3NOYW1lOiBjbGFzc05hbWVXcmFwcGVyLCBpZDogZm9ySUQgfX1cbiAgICAgICAgICB1dGM9e3RoaXMucGlja2VyVXRjfVxuICAgICAgICAvPlxuICAgICAgICB7IWlzRGlzYWJsZWQgJiYgPE5vd0J1dHRvbiB0PXt0fSBoYW5kbGVDaGFuZ2U9e3YgPT4gdGhpcy5oYW5kbGVDaGFuZ2Uodil9IC8+fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIl19 */"))
|
|
156
|
+
}, (0, _core.jsx)(_reactDatetime2.default, {
|
|
157
|
+
dateFormat: dateFormat,
|
|
158
|
+
timeFormat: timeFormat,
|
|
159
|
+
value: (0, _moment.default)(value, format),
|
|
160
|
+
onChange: this.handleChange,
|
|
161
|
+
onOpen: setActiveStyle,
|
|
162
|
+
onClose: this.onClose,
|
|
163
|
+
inputProps: {
|
|
164
|
+
className: classNameWrapper,
|
|
165
|
+
id: forID
|
|
166
|
+
},
|
|
167
|
+
utc: this.pickerUtc
|
|
168
|
+
}), !isDisabled && (0, _core.jsx)(NowButton, {
|
|
169
|
+
t: t,
|
|
170
|
+
handleChange: v => this.handleChange(v)
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.default = DateTimeControl;
|
|
175
|
+
_defineProperty(DateTimeControl, "propTypes", {
|
|
176
|
+
field: _propTypes.default.object.isRequired,
|
|
177
|
+
forID: _propTypes.default.string,
|
|
178
|
+
onChange: _propTypes.default.func.isRequired,
|
|
179
|
+
classNameWrapper: _propTypes.default.string.isRequired,
|
|
180
|
+
setActiveStyle: _propTypes.default.func.isRequired,
|
|
181
|
+
setInactiveStyle: _propTypes.default.func.isRequired,
|
|
182
|
+
value: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.string])
|
|
183
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _decapCmsUiDefault = require("decap-cms-ui-default");
|
|
10
|
+
var _core = require("@emotion/core");
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
function DatePreview({
|
|
13
|
+
value
|
|
14
|
+
}) {
|
|
15
|
+
return (0, _core.jsx)(_decapCmsUiDefault.WidgetPreviewContainer, null, value ? value.toString() : null);
|
|
16
|
+
}
|
|
17
|
+
DatePreview.propTypes = {
|
|
18
|
+
value: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.string])
|
|
19
|
+
};
|
|
20
|
+
var _default = DatePreview;
|
|
21
|
+
exports.default = _default;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.DecapCmsWidgetDatetime = void 0;
|
|
7
|
+
var _DateTimeControl = _interopRequireDefault(require("./DateTimeControl"));
|
|
8
|
+
var _DateTimePreview = _interopRequireDefault(require("./DateTimePreview"));
|
|
9
|
+
var _schema = _interopRequireDefault(require("./schema"));
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
12
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
13
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
14
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
15
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
16
|
+
function Widget(opts = {}) {
|
|
17
|
+
return _objectSpread({
|
|
18
|
+
name: 'datetime',
|
|
19
|
+
controlComponent: _DateTimeControl.default,
|
|
20
|
+
previewComponent: _DateTimePreview.default,
|
|
21
|
+
schema: _schema.default
|
|
22
|
+
}, opts);
|
|
23
|
+
}
|
|
24
|
+
const DecapCmsWidgetDatetime = {
|
|
25
|
+
Widget,
|
|
26
|
+
controlComponent: _DateTimeControl.default,
|
|
27
|
+
previewComponent: _DateTimePreview.default
|
|
28
|
+
};
|
|
29
|
+
exports.DecapCmsWidgetDatetime = DecapCmsWidgetDatetime;
|
|
30
|
+
var _default = DecapCmsWidgetDatetime;
|
|
31
|
+
exports.default = _default;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = {
|
|
8
|
+
properties: {
|
|
9
|
+
format: {
|
|
10
|
+
type: 'string'
|
|
11
|
+
},
|
|
12
|
+
date_format: {
|
|
13
|
+
oneOf: [{
|
|
14
|
+
type: 'string'
|
|
15
|
+
}, {
|
|
16
|
+
type: 'boolean'
|
|
17
|
+
}]
|
|
18
|
+
},
|
|
19
|
+
time_format: {
|
|
20
|
+
oneOf: [{
|
|
21
|
+
type: 'string'
|
|
22
|
+
}, {
|
|
23
|
+
type: 'boolean'
|
|
24
|
+
}]
|
|
25
|
+
},
|
|
26
|
+
picker_utc: {
|
|
27
|
+
type: 'boolean'
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.default = _default;
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "decap-cms-widget-datetime",
|
|
3
|
+
"description": "Widget for editing dates and times in Decap CMS.",
|
|
4
|
+
"version": "2.8.0-beta.0",
|
|
5
|
+
"homepage": "https://www.decapcms.org/docs/widgets/#datetime",
|
|
6
|
+
"repository": "https://github.com/decaporg/decap-cms/tree/master/packages/decap-cms-widget-datetime",
|
|
7
|
+
"bugs": "https://github.com/decaporg/decap-cms/issues",
|
|
8
|
+
"module": "dist/esm/index.js",
|
|
9
|
+
"main": "dist/decap-cms-widget-datetime.js",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"decap-cms",
|
|
13
|
+
"widget",
|
|
14
|
+
"date",
|
|
15
|
+
"time",
|
|
16
|
+
"datetime"
|
|
17
|
+
],
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"scripts": {
|
|
20
|
+
"develop": "yarn build:esm --watch",
|
|
21
|
+
"build": "cross-env NODE_ENV=production webpack",
|
|
22
|
+
"build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"@emotion/core": "^10.0.35",
|
|
26
|
+
"decap-cms-widget-date": "^2.5.7",
|
|
27
|
+
"react": "^16.8.4 || ^17.0.0"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"react-datetime": "^3.1.1"
|
|
31
|
+
},
|
|
32
|
+
"gitHead": "1bdf716e5655bf088a343cd90210a2d361a9db52"
|
|
33
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { jsx, css } from '@emotion/core';
|
|
5
|
+
import reactDateTimeStyles from 'react-datetime/css/react-datetime.css';
|
|
6
|
+
import DateTime from 'react-datetime';
|
|
7
|
+
import moment from 'moment';
|
|
8
|
+
import { buttons } from 'decap-cms-ui-default';
|
|
9
|
+
|
|
10
|
+
function NowButton({ t, handleChange }) {
|
|
11
|
+
return (
|
|
12
|
+
<div
|
|
13
|
+
css={css`
|
|
14
|
+
position: absolute;
|
|
15
|
+
right: 20px;
|
|
16
|
+
transform: translateY(-40px);
|
|
17
|
+
width: fit-content;
|
|
18
|
+
z-index: 1;
|
|
19
|
+
`}
|
|
20
|
+
>
|
|
21
|
+
<button
|
|
22
|
+
css={css`
|
|
23
|
+
${buttons.button}
|
|
24
|
+
${buttons.widget}
|
|
25
|
+
`}
|
|
26
|
+
onClick={() => {
|
|
27
|
+
handleChange(moment());
|
|
28
|
+
}}
|
|
29
|
+
>
|
|
30
|
+
{t('editor.editorWidgets.datetime.now')}
|
|
31
|
+
</button>
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default class DateTimeControl extends React.Component {
|
|
37
|
+
static propTypes = {
|
|
38
|
+
field: PropTypes.object.isRequired,
|
|
39
|
+
forID: PropTypes.string,
|
|
40
|
+
onChange: PropTypes.func.isRequired,
|
|
41
|
+
classNameWrapper: PropTypes.string.isRequired,
|
|
42
|
+
setActiveStyle: PropTypes.func.isRequired,
|
|
43
|
+
setInactiveStyle: PropTypes.func.isRequired,
|
|
44
|
+
value: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
getFormats() {
|
|
48
|
+
const { field } = this.props;
|
|
49
|
+
const format = field.get('format');
|
|
50
|
+
|
|
51
|
+
// dateFormat and timeFormat are strictly for modifying
|
|
52
|
+
// input field with the date/time pickers
|
|
53
|
+
const dateFormat = field.get('date_format');
|
|
54
|
+
// show time-picker? false hides it, true shows it using default format
|
|
55
|
+
let timeFormat = field.get('time_format');
|
|
56
|
+
if (typeof timeFormat === 'undefined') {
|
|
57
|
+
timeFormat = true;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
format,
|
|
62
|
+
dateFormat,
|
|
63
|
+
timeFormat,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
getDefaultValue() {
|
|
68
|
+
const { field } = this.props;
|
|
69
|
+
const defaultValue = field.get('default');
|
|
70
|
+
return defaultValue;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
getPickerUtc() {
|
|
74
|
+
const { field } = this.props;
|
|
75
|
+
const pickerUtc = field.get('picker_utc');
|
|
76
|
+
return pickerUtc;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
formats = this.getFormats();
|
|
80
|
+
defaultValue = this.getDefaultValue();
|
|
81
|
+
pickerUtc = this.getPickerUtc();
|
|
82
|
+
|
|
83
|
+
componentDidMount() {
|
|
84
|
+
const { value } = this.props;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Set the current date as default value if no value is provided and default is absent. An
|
|
88
|
+
* empty default string means the value is intentionally blank.
|
|
89
|
+
*/
|
|
90
|
+
if (value === undefined) {
|
|
91
|
+
setTimeout(() => {
|
|
92
|
+
this.handleChange(this.defaultValue === undefined ? new Date() : this.defaultValue);
|
|
93
|
+
}, 0);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Date is valid if datetime is a moment or Date object otherwise it's a string.
|
|
98
|
+
// Handle the empty case, if the user wants to empty the field.
|
|
99
|
+
isValidDate = datetime =>
|
|
100
|
+
moment.isMoment(datetime) || datetime instanceof Date || datetime === '';
|
|
101
|
+
|
|
102
|
+
handleChange = datetime => {
|
|
103
|
+
/**
|
|
104
|
+
* Set the date only if it is valid.
|
|
105
|
+
*/
|
|
106
|
+
if (!this.isValidDate(datetime)) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const { onChange } = this.props;
|
|
111
|
+
const { format } = this.formats;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Produce a formatted string only if a format is set in the config.
|
|
115
|
+
* Otherwise produce a date object.
|
|
116
|
+
*/
|
|
117
|
+
if (format) {
|
|
118
|
+
const formattedValue = datetime ? moment(datetime).format(format) : '';
|
|
119
|
+
onChange(formattedValue);
|
|
120
|
+
} else {
|
|
121
|
+
const value = moment.isMoment(datetime) ? datetime.toDate() : datetime;
|
|
122
|
+
onChange(value);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
onClose = datetime => {
|
|
127
|
+
const { setInactiveStyle } = this.props;
|
|
128
|
+
|
|
129
|
+
if (!this.isValidDate(datetime)) {
|
|
130
|
+
const parsedDate = moment(datetime);
|
|
131
|
+
|
|
132
|
+
if (parsedDate.isValid()) {
|
|
133
|
+
this.handleChange(datetime);
|
|
134
|
+
} else {
|
|
135
|
+
window.alert('The date you entered is invalid.');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
setInactiveStyle();
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
render() {
|
|
143
|
+
const { forID, value, classNameWrapper, setActiveStyle, t, isDisabled } = this.props;
|
|
144
|
+
const { format, dateFormat, timeFormat } = this.formats;
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
<div
|
|
148
|
+
css={css`
|
|
149
|
+
${reactDateTimeStyles};
|
|
150
|
+
position: relative;
|
|
151
|
+
`}
|
|
152
|
+
>
|
|
153
|
+
<DateTime
|
|
154
|
+
dateFormat={dateFormat}
|
|
155
|
+
timeFormat={timeFormat}
|
|
156
|
+
value={moment(value, format)}
|
|
157
|
+
onChange={this.handleChange}
|
|
158
|
+
onOpen={setActiveStyle}
|
|
159
|
+
onClose={this.onClose}
|
|
160
|
+
inputProps={{ className: classNameWrapper, id: forID }}
|
|
161
|
+
utc={this.pickerUtc}
|
|
162
|
+
/>
|
|
163
|
+
{!isDisabled && <NowButton t={t} handleChange={v => this.handleChange(v)} />}
|
|
164
|
+
</div>
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { WidgetPreviewContainer } from 'decap-cms-ui-default';
|
|
4
|
+
|
|
5
|
+
function DatePreview({ value }) {
|
|
6
|
+
return <WidgetPreviewContainer>{value ? value.toString() : null}</WidgetPreviewContainer>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
DatePreview.propTypes = {
|
|
10
|
+
value: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default DatePreview;
|
package/src/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import controlComponent from './DateTimeControl';
|
|
2
|
+
import previewComponent from './DateTimePreview';
|
|
3
|
+
import schema from './schema';
|
|
4
|
+
|
|
5
|
+
function Widget(opts = {}) {
|
|
6
|
+
return {
|
|
7
|
+
name: 'datetime',
|
|
8
|
+
controlComponent,
|
|
9
|
+
previewComponent,
|
|
10
|
+
schema,
|
|
11
|
+
...opts,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const DecapCmsWidgetDatetime = { Widget, controlComponent, previewComponent };
|
|
16
|
+
export default DecapCmsWidgetDatetime;
|
package/src/schema.js
ADDED