@twreporter/react-components 8.17.0-rc.2 → 8.17.0-rc.3
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 +28 -0
- package/lib/button/components/pillButton.js +2 -2
- package/lib/button/components/textButton.js +5 -3
- package/lib/button/constants/index.js +2 -15
- package/lib/button/stories/pillButton.stories.js +2 -2
- package/lib/button/stories/textButton.stories.js +50 -15
- package/lib/button/utils/theme.js +24 -26
- package/lib/card/components/article-card.js +173 -0
- package/lib/card/components/dialog.js +5 -3
- package/lib/card/index.js +10 -1
- package/lib/card/stories/articleCard.stories.js +55 -0
- package/lib/card/stories/dialog.stories.js +7 -2
- package/lib/image-with-fallback.js +141 -0
- package/lib/listing-page/components/card-list.js +171 -0
- package/lib/listing-page/components/image.js +3 -0
- package/lib/listing-page/components/list.js +6 -4
- package/lib/listing-page/constants/prop-types.js +25 -0
- package/lib/listing-page/index.js +10 -1
- package/lib/listing-page/stories/cardList.stories.js +72 -0
- package/lib/logo/components/logo-loading-fallback.js +43 -0
- package/lib/logo/index.js +10 -1
- package/lib/logo/stories/logoLoadingFallback.stories.js +29 -0
- package/lib/logo/utils/path.js +5 -0
- package/lib/pagination/index.js +8 -5
- package/package.json +4 -4
- package/lib/button/constants/size.js +0 -28
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.article = exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _articleCard = _interopRequireDefault(require("../components/article-card"));
|
|
13
|
+
|
|
14
|
+
var _size = require("@twreporter/core/lib/constants/size");
|
|
15
|
+
|
|
16
|
+
var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
19
|
+
|
|
20
|
+
var _default = {
|
|
21
|
+
title: 'Card/Article',
|
|
22
|
+
component: _articleCard["default"],
|
|
23
|
+
argTypes: {
|
|
24
|
+
releaseBranch: _releaseBranch.BRANCH_STORYBOOK_ARG_TYPE,
|
|
25
|
+
size: _size.SIZE_STORYBOOK_ARG_TYPE
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
exports["default"] = _default;
|
|
29
|
+
|
|
30
|
+
var Container = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
31
|
+
displayName: "articleCardstories__Container",
|
|
32
|
+
componentId: "q36nxb-0"
|
|
33
|
+
})(["width:", "px;"], function (props) {
|
|
34
|
+
return props.size === _size.SIZE.S ? '343' : '878';
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
var article = function article(args) {
|
|
38
|
+
return /*#__PURE__*/_react["default"].createElement(Container, {
|
|
39
|
+
size: args.size
|
|
40
|
+
}, /*#__PURE__*/_react["default"].createElement(_articleCard["default"], args));
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
exports.article = article;
|
|
44
|
+
article.args = {
|
|
45
|
+
size: _size.SIZE.L,
|
|
46
|
+
title: '文章標題文章標題文章標題文章標題文章標題文章標題文章標題文章標題',
|
|
47
|
+
description: '文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述',
|
|
48
|
+
category: '主分類',
|
|
49
|
+
date: '2022/01/01',
|
|
50
|
+
image: {
|
|
51
|
+
src: 'https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Google_Images_2015_logo.svg/220px-Google_Images_2015_logo.svg.png',
|
|
52
|
+
alt: 'test'
|
|
53
|
+
},
|
|
54
|
+
releaseBranch: _releaseBranch.BRANCH.master
|
|
55
|
+
};
|
|
@@ -11,11 +11,16 @@ var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
|
11
11
|
|
|
12
12
|
var _dialog = _interopRequireDefault(require("../components/dialog"));
|
|
13
13
|
|
|
14
|
+
var _size = require("@twreporter/core/lib/constants/size");
|
|
15
|
+
|
|
14
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
15
17
|
|
|
16
18
|
var _default = {
|
|
17
19
|
title: 'Card/Dialog',
|
|
18
|
-
component: _dialog["default"]
|
|
20
|
+
component: _dialog["default"],
|
|
21
|
+
argTypes: {
|
|
22
|
+
size: _size.SIZE_STORYBOOK_ARG_TYPE
|
|
23
|
+
}
|
|
19
24
|
};
|
|
20
25
|
exports["default"] = _default;
|
|
21
26
|
var StyledDialog = /*#__PURE__*/(0, _styledComponents["default"])(_dialog["default"]).withConfig({
|
|
@@ -30,7 +35,7 @@ var dialog = function dialog(args) {
|
|
|
30
35
|
exports.dialog = dialog;
|
|
31
36
|
dialog.args = {
|
|
32
37
|
text: '登出',
|
|
33
|
-
size:
|
|
38
|
+
size: _size.SIZE.S
|
|
34
39
|
};
|
|
35
40
|
dialog.parameters = {
|
|
36
41
|
backgrounds: {
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
|
|
14
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
15
|
+
|
|
16
|
+
var _logo = require("./logo");
|
|
17
|
+
|
|
18
|
+
var _storageUrlProcessor = require("@twreporter/core/lib/utils/storage-url-processor");
|
|
19
|
+
|
|
20
|
+
var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
|
|
21
|
+
|
|
22
|
+
var _get = _interopRequireDefault(require("lodash/get"));
|
|
23
|
+
|
|
24
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
25
|
+
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
+
|
|
28
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
+
|
|
30
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
31
|
+
|
|
32
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
33
|
+
|
|
34
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
35
|
+
|
|
36
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
37
|
+
|
|
38
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
39
|
+
|
|
40
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
41
|
+
|
|
42
|
+
var _ = {
|
|
43
|
+
get: _get["default"]
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
var ImgContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
47
|
+
displayName: "image-with-fallback__ImgContainer",
|
|
48
|
+
componentId: "qk0kiz-0"
|
|
49
|
+
})(["width:100%;height:100%;position:relative;"]);
|
|
50
|
+
|
|
51
|
+
var ImgObjectFit = /*#__PURE__*/(0, _styledComponents["default"])(ImgContainer).withConfig({
|
|
52
|
+
displayName: "image-with-fallback__ImgObjectFit",
|
|
53
|
+
componentId: "qk0kiz-1"
|
|
54
|
+
})(["opacity:", ";transition:opacity 1s ease;> img{width:100%;height:100%;object-fit:cover;}"], function (props) {
|
|
55
|
+
return props.opacity;
|
|
56
|
+
});
|
|
57
|
+
var ImgFallback = /*#__PURE__*/(0, _styledComponents["default"])(ImgContainer).withConfig({
|
|
58
|
+
displayName: "image-with-fallback__ImgFallback",
|
|
59
|
+
componentId: "qk0kiz-2"
|
|
60
|
+
})(["background-size:cover;background-image:", ";background-position:center center;"], function (props) {
|
|
61
|
+
return "url(".concat((0, _storageUrlProcessor.replaceGCSUrlOrigin)(_.get(props, 'url')), ")");
|
|
62
|
+
});
|
|
63
|
+
var LogoCenteringBlock = /*#__PURE__*/(0, _styledComponents["default"])(ImgContainer).withConfig({
|
|
64
|
+
displayName: "image-with-fallback__LogoCenteringBlock",
|
|
65
|
+
componentId: "qk0kiz-3"
|
|
66
|
+
})(["position:absolute;justify-content:center;align-items:center;background-color:white;display:", ";> img{width:65%;height:65%;}"], function (props) {
|
|
67
|
+
return props.display;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
var Image = function Image(_ref) {
|
|
71
|
+
var src = _ref.src,
|
|
72
|
+
_ref$alt = _ref.alt,
|
|
73
|
+
alt = _ref$alt === void 0 ? '' : _ref$alt,
|
|
74
|
+
_ref$srcSet = _ref.srcSet,
|
|
75
|
+
srcSet = _ref$srcSet === void 0 ? '' : _ref$srcSet,
|
|
76
|
+
_ref$releaseBranch = _ref.releaseBranch,
|
|
77
|
+
releaseBranch = _ref$releaseBranch === void 0 ? _releaseBranch.BRANCH.master : _ref$releaseBranch;
|
|
78
|
+
|
|
79
|
+
var _useState = (0, _react.useState)(false),
|
|
80
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
81
|
+
isObjectFit = _useState2[0],
|
|
82
|
+
setIsObjectFit = _useState2[1];
|
|
83
|
+
|
|
84
|
+
var _useState3 = (0, _react.useState)(false),
|
|
85
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
86
|
+
isImgOnLoad = _useState4[0],
|
|
87
|
+
setIsImgOnLoad = _useState4[1];
|
|
88
|
+
|
|
89
|
+
var imgNode = (0, _react.useRef)(null);
|
|
90
|
+
(0, _react.useEffect)(function () {
|
|
91
|
+
setIsObjectFit('objectFit' in _.get(document, 'documentElement.style'));
|
|
92
|
+
}, []); // Check if img is already loaded, and cached on the browser.
|
|
93
|
+
// If cached, React.img won't trigger onLoad event.
|
|
94
|
+
// Hence, we need to trigger re-rendering.
|
|
95
|
+
|
|
96
|
+
(0, _react.useEffect)(function () {
|
|
97
|
+
if (!imgNode.current) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
setIsImgOnLoad(imgNode.current.complete);
|
|
102
|
+
}, [imgNode]);
|
|
103
|
+
|
|
104
|
+
var handleImgOnLoad = function handleImgOnLoad() {
|
|
105
|
+
setIsImgOnLoad(true);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
var logoDisplay = 'flex';
|
|
109
|
+
|
|
110
|
+
if (!isObjectFit) {
|
|
111
|
+
logoDisplay = 'none';
|
|
112
|
+
} else if (isImgOnLoad) {
|
|
113
|
+
logoDisplay = 'none';
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
var ImgJSX = isObjectFit ? /*#__PURE__*/_react["default"].createElement(ImgObjectFit, {
|
|
117
|
+
opacity: isImgOnLoad ? 1 : 0
|
|
118
|
+
}, /*#__PURE__*/_react["default"].createElement("img", {
|
|
119
|
+
ref: imgNode,
|
|
120
|
+
alt: alt,
|
|
121
|
+
src: (0, _storageUrlProcessor.replaceGCSUrlOrigin)(src),
|
|
122
|
+
srcSet: srcSet,
|
|
123
|
+
onLoad: handleImgOnLoad
|
|
124
|
+
})) : /*#__PURE__*/_react["default"].createElement(ImgFallback, {
|
|
125
|
+
url: (0, _storageUrlProcessor.replaceGCSUrlOrigin)(src)
|
|
126
|
+
});
|
|
127
|
+
return /*#__PURE__*/_react["default"].createElement(ImgContainer, null, /*#__PURE__*/_react["default"].createElement(LogoCenteringBlock, {
|
|
128
|
+
display: logoDisplay
|
|
129
|
+
}, /*#__PURE__*/_react["default"].createElement(_logo.LogoFallback, {
|
|
130
|
+
releaseBranch: releaseBranch
|
|
131
|
+
})), ImgJSX);
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
Image.propTypes = {
|
|
135
|
+
alt: _propTypes["default"].string,
|
|
136
|
+
src: _propTypes["default"].string.isRequired,
|
|
137
|
+
srcSet: _propTypes["default"].string,
|
|
138
|
+
releaseBranch: _releaseBranch.BRANCH_PROP_TYPES
|
|
139
|
+
};
|
|
140
|
+
var _default = Image;
|
|
141
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _card = require("../../card");
|
|
15
|
+
|
|
16
|
+
var _isFetchingWrapper = _interopRequireDefault(require("../../is-fetching-wrapper"));
|
|
17
|
+
|
|
18
|
+
var _divider = _interopRequireDefault(require("../../divider"));
|
|
19
|
+
|
|
20
|
+
var _customizedLink = _interopRequireDefault(require("../../customized-link"));
|
|
21
|
+
|
|
22
|
+
var _mockupSpec = _interopRequireDefault(require("../constants/mockup-spec"));
|
|
23
|
+
|
|
24
|
+
var _entityPath = _interopRequireDefault(require("@twreporter/core/lib/constants/entity-path"));
|
|
25
|
+
|
|
26
|
+
var _mediaQuery = _interopRequireDefault(require("@twreporter/core/lib/utils/media-query"));
|
|
27
|
+
|
|
28
|
+
var _date = require("@twreporter/core/lib/utils/date");
|
|
29
|
+
|
|
30
|
+
var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
|
|
31
|
+
|
|
32
|
+
var _theme = require("@twreporter/core/lib/constants/theme");
|
|
33
|
+
|
|
34
|
+
var _size = require("@twreporter/core/lib/constants/size");
|
|
35
|
+
|
|
36
|
+
var _forEach = _interopRequireDefault(require("lodash/forEach"));
|
|
37
|
+
|
|
38
|
+
var _get = _interopRequireDefault(require("lodash/get"));
|
|
39
|
+
|
|
40
|
+
var _map = _interopRequireDefault(require("lodash/map"));
|
|
41
|
+
|
|
42
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
|
43
|
+
|
|
44
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
45
|
+
|
|
46
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
47
|
+
|
|
48
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
49
|
+
|
|
50
|
+
var _ = {
|
|
51
|
+
forEach: _forEach["default"],
|
|
52
|
+
get: _get["default"],
|
|
53
|
+
map: _map["default"]
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
var DesktopOnly = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
57
|
+
displayName: "card-list__DesktopOnly",
|
|
58
|
+
componentId: "yvf001-0"
|
|
59
|
+
})(["display:none;", ""], _mediaQuery["default"].desktopAndAbove(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n "]))));
|
|
60
|
+
|
|
61
|
+
var MobileOnly = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
62
|
+
displayName: "card-list__MobileOnly",
|
|
63
|
+
componentId: "yvf001-1"
|
|
64
|
+
})(["display:none;", ""], _mediaQuery["default"].tabletAndBelow(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n "]))));
|
|
65
|
+
|
|
66
|
+
var Container = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
67
|
+
displayName: "card-list__Container",
|
|
68
|
+
componentId: "yvf001-2"
|
|
69
|
+
})(["display:flex;flex-direction:column;a{color:inherit;text-decoration:none;}"]);
|
|
70
|
+
|
|
71
|
+
var Item = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
72
|
+
displayName: "card-list__Item",
|
|
73
|
+
componentId: "yvf001-3"
|
|
74
|
+
})(["margin-bottom:24px;&:hover{opacity:0.7;}&:last-child{margin-bottom:0;}width:100%;", ""], _mediaQuery["default"].mobileOnly(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n width: ", "%;\n "])), _mockupSpec["default"].mobile.cardWidth / _mockupSpec["default"].mobile.maxWidth * 100));
|
|
75
|
+
|
|
76
|
+
var StyledDivider = /*#__PURE__*/(0, _styledComponents["default"])(_divider["default"]).withConfig({
|
|
77
|
+
displayName: "card-list__StyledDivider",
|
|
78
|
+
componentId: "yvf001-4"
|
|
79
|
+
})(["margin-top:24px;"]);
|
|
80
|
+
|
|
81
|
+
var FlexItem = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
82
|
+
displayName: "card-list__FlexItem",
|
|
83
|
+
componentId: "yvf001-5"
|
|
84
|
+
})(["width:", "px;margin:0 auto;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;", " ", " ", ""], _mockupSpec["default"].hd.maxWidth, _mediaQuery["default"].desktopOnly(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n width: ", "px;\n "])), _mockupSpec["default"].desktop.maxWidth), _mediaQuery["default"].tabletOnly(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n width: ", "px;\n "])), _mockupSpec["default"].tablet.maxWidth), _mediaQuery["default"].mobileOnly(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n width: 100%;\n justify-content: center;\n "]))));
|
|
85
|
+
|
|
86
|
+
var Content = (0, _isFetchingWrapper["default"])(FlexItem);
|
|
87
|
+
|
|
88
|
+
var CardList = function CardList(_ref) {
|
|
89
|
+
var _ref$data = _ref.data,
|
|
90
|
+
data = _ref$data === void 0 ? [] : _ref$data,
|
|
91
|
+
_ref$isFetching = _ref.isFetching,
|
|
92
|
+
isFetching = _ref$isFetching === void 0 ? false : _ref$isFetching,
|
|
93
|
+
_ref$showSpinner = _ref.showSpinner,
|
|
94
|
+
showSpinner = _ref$showSpinner === void 0 ? false : _ref$showSpinner,
|
|
95
|
+
_ref$releaseBranch = _ref.releaseBranch,
|
|
96
|
+
releaseBranch = _ref$releaseBranch === void 0 ? _releaseBranch.BRANCH.master : _ref$releaseBranch;
|
|
97
|
+
|
|
98
|
+
if (!data || data.length === 0) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
var getFirstCategory = function getFirstCategory(categorySets) {
|
|
103
|
+
var res = '';
|
|
104
|
+
|
|
105
|
+
_.forEach(categorySets, function (_ref2) {
|
|
106
|
+
var category = _ref2.category,
|
|
107
|
+
subcategory = _ref2.subcategory;
|
|
108
|
+
|
|
109
|
+
if (category && category.name) {
|
|
110
|
+
res = category.name;
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
return res;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
var listJSX = _.map(data, function (item) {
|
|
119
|
+
var id = item.id,
|
|
120
|
+
title = item.title,
|
|
121
|
+
slug = item.slug,
|
|
122
|
+
style = item.style;
|
|
123
|
+
var isInteractiveArticle = style === _theme.ARTICLE_THEME.interactive;
|
|
124
|
+
var link = {
|
|
125
|
+
to: "".concat(isInteractiveArticle ? _entityPath["default"].interactiveArticle : _entityPath["default"].article).concat(slug),
|
|
126
|
+
target: isInteractiveArticle ? '_blank' : ''
|
|
127
|
+
};
|
|
128
|
+
var articleCardProps = {
|
|
129
|
+
title: title,
|
|
130
|
+
description: _.get(item, 'og_description', ''),
|
|
131
|
+
image: {
|
|
132
|
+
alt: _.get(item, 'hero_image.description', ''),
|
|
133
|
+
src: _.get(item, 'hero_image.resized_targets.mobile.url') || _.get(item, 'og_image.resized_targets.mobile.url')
|
|
134
|
+
},
|
|
135
|
+
category: getFirstCategory(_.get(item, 'category_set', [])),
|
|
136
|
+
date: (0, _date.date2yyyymmdd)(_.get(item, 'published_date'), '/'),
|
|
137
|
+
releaseBranch: releaseBranch
|
|
138
|
+
};
|
|
139
|
+
return /*#__PURE__*/_react["default"].createElement(Item, {
|
|
140
|
+
key: id
|
|
141
|
+
}, /*#__PURE__*/_react["default"].createElement(_customizedLink["default"], link, /*#__PURE__*/_react["default"].createElement(DesktopOnly, null, /*#__PURE__*/_react["default"].createElement(_card.ArticleCard, _extends({}, articleCardProps, {
|
|
142
|
+
size: _size.SIZE.L
|
|
143
|
+
}))), /*#__PURE__*/_react["default"].createElement(MobileOnly, null, /*#__PURE__*/_react["default"].createElement(_card.ArticleCard, _extends({}, articleCardProps, {
|
|
144
|
+
size: _size.SIZE.S
|
|
145
|
+
}))), /*#__PURE__*/_react["default"].createElement(StyledDivider, null)));
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
return /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement(Content, {
|
|
149
|
+
isFetching: isFetching,
|
|
150
|
+
showSpinner: showSpinner
|
|
151
|
+
}, listJSX));
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
CardList.propTypes = {
|
|
155
|
+
data: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
156
|
+
id: _propTypes["default"].string.isRequired,
|
|
157
|
+
title: _propTypes["default"].string.isRequired,
|
|
158
|
+
og_description: _propTypes["default"].string.isRequired,
|
|
159
|
+
hero_image: _propTypes["default"].object,
|
|
160
|
+
og_image: _propTypes["default"].object,
|
|
161
|
+
category_set: _propTypes["default"].array,
|
|
162
|
+
published_date: _propTypes["default"].string.isRequired,
|
|
163
|
+
slug: _propTypes["default"].string.isRequired,
|
|
164
|
+
style: _propTypes["default"].string
|
|
165
|
+
})),
|
|
166
|
+
isFetching: _propTypes["default"].bool,
|
|
167
|
+
showSpinner: _propTypes["default"].bool,
|
|
168
|
+
releaseBranch: _releaseBranch.BRANCH_PROP_TYPES
|
|
169
|
+
};
|
|
170
|
+
var _default = CardList;
|
|
171
|
+
exports["default"] = _default;
|
|
@@ -41,6 +41,9 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
41
41
|
|
|
42
42
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
43
43
|
|
|
44
|
+
/* Notice: this component is deprecated.
|
|
45
|
+
* Please migrate to use @twerporter/react-components/lib/image-with-fallback.js
|
|
46
|
+
*/
|
|
44
47
|
var LogoIcon = function LogoIcon(props) {
|
|
45
48
|
return /*#__PURE__*/_react["default"].createElement("svg", props, /*#__PURE__*/_react["default"].createElement("title", null, "Fill 1"), /*#__PURE__*/_react["default"].createElement("path", {
|
|
46
49
|
d: "M5 112.563a5.001 5.001 0 0 1-5-5V4.999C0 3.298.866 1.713 2.298.794A5.003 5.003 0 0 1 7.08.451l42.724 19.521a5 5 0 0 1-4.156 9.097L10 12.783V99.78l49.843-22.775V32.014a5 5 0 0 1 3.669-4.82l37.105-10.247a4.999 4.999 0 0 1 6.331 4.819v67.44a5.003 5.003 0 0 1-6.142 4.868l-20.106-4.716a5 5 0 0 1 2.284-9.736l13.965 3.275V28.332L69.844 35.82v44.4a5 5 0 0 1-2.922 4.549L7.078 112.11a4.996 4.996 0 0 1-2.079.451",
|
|
@@ -21,6 +21,8 @@ var _date = require("@twreporter/core/lib/utils/date");
|
|
|
21
21
|
|
|
22
22
|
var _font = require("@twreporter/core/lib/constants/font");
|
|
23
23
|
|
|
24
|
+
var _theme = require("@twreporter/core/lib/constants/theme");
|
|
25
|
+
|
|
24
26
|
var _mockupSpec = _interopRequireDefault(require("../constants/mockup-spec"));
|
|
25
27
|
|
|
26
28
|
var _color = _interopRequireDefault(require("../constants/color"));
|
|
@@ -113,10 +115,10 @@ var List = /*#__PURE__*/function (_PureComponent) {
|
|
|
113
115
|
_.forEach(data, function (item) {
|
|
114
116
|
var style = _.get(item, 'style');
|
|
115
117
|
|
|
116
|
-
var slug = _.get(item, 'slug');
|
|
117
|
-
|
|
118
|
+
var slug = _.get(item, 'slug');
|
|
118
119
|
|
|
119
|
-
var
|
|
120
|
+
var isInteractiveArticle = style === _theme.ARTICLE_THEME.interactive;
|
|
121
|
+
var to = "".concat(isInteractiveArticle ? _entityPath["default"].interactiveArticle : _entityPath["default"].article).concat(slug);
|
|
120
122
|
|
|
121
123
|
var tags = _.map(_.get(item, 'tags'), function (tag) {
|
|
122
124
|
if (_.get(tag, 'name') === tagName) {
|
|
@@ -148,7 +150,7 @@ var List = /*#__PURE__*/function (_PureComponent) {
|
|
|
148
150
|
tags: tags,
|
|
149
151
|
link: {
|
|
150
152
|
to: to,
|
|
151
|
-
target:
|
|
153
|
+
target: isInteractiveArticle ? '_blank' : ''
|
|
152
154
|
}
|
|
153
155
|
}));
|
|
154
156
|
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ARTICLE_PROP_TYPES = void 0;
|
|
7
|
+
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
+
|
|
12
|
+
var ARTICLE_PROP_TYPES = _propTypes["default"].shape({
|
|
13
|
+
id: _propTypes["default"].string.isRequired,
|
|
14
|
+
title: _propTypes["default"].string.isRequired,
|
|
15
|
+
og_description: _propTypes["default"].string.isRequired,
|
|
16
|
+
hero_image: _propTypes["default"].object.isRequired,
|
|
17
|
+
categories: _propTypes["default"].array,
|
|
18
|
+
category_set: _propTypes["default"].array,
|
|
19
|
+
published_date: _propTypes["default"].string.isRequired,
|
|
20
|
+
slug: _propTypes["default"].string.isRequired,
|
|
21
|
+
tags: _propTypes["default"].array,
|
|
22
|
+
style: _propTypes["default"].string
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
exports.ARTICLE_PROP_TYPES = ARTICLE_PROP_TYPES;
|
|
@@ -15,16 +15,25 @@ Object.defineProperty(exports, "List", {
|
|
|
15
15
|
return _list["default"];
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
+
Object.defineProperty(exports, "CardList", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _cardList["default"];
|
|
22
|
+
}
|
|
23
|
+
});
|
|
18
24
|
exports["default"] = void 0;
|
|
19
25
|
|
|
20
26
|
var _topics = _interopRequireDefault(require("./components/topics"));
|
|
21
27
|
|
|
22
28
|
var _list = _interopRequireDefault(require("./components/list"));
|
|
23
29
|
|
|
30
|
+
var _cardList = _interopRequireDefault(require("./components/card-list"));
|
|
31
|
+
|
|
24
32
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
25
33
|
|
|
26
34
|
var _default = {
|
|
27
35
|
TopicsList: _topics["default"],
|
|
28
|
-
List: _list["default"]
|
|
36
|
+
List: _list["default"],
|
|
37
|
+
CardList: _cardList["default"]
|
|
29
38
|
};
|
|
30
39
|
exports["default"] = _default;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.card = exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _cardList = _interopRequireDefault(require("../components/card-list"));
|
|
11
|
+
|
|
12
|
+
var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
15
|
+
|
|
16
|
+
var _default = {
|
|
17
|
+
title: 'List/Card',
|
|
18
|
+
component: _cardList["default"],
|
|
19
|
+
argTypes: {
|
|
20
|
+
releaseBranch: _releaseBranch.BRANCH_STORYBOOK_ARG_TYPE
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports["default"] = _default;
|
|
24
|
+
|
|
25
|
+
var card = function card(args) {
|
|
26
|
+
return /*#__PURE__*/_react["default"].createElement(_cardList["default"], args);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.card = card;
|
|
30
|
+
card.args = {
|
|
31
|
+
data: [{
|
|
32
|
+
id: '12345',
|
|
33
|
+
title: '文章標題文章標題文章標題文章標題文章標題文章標題文章標題文章標題',
|
|
34
|
+
og_description: '文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述',
|
|
35
|
+
category_set: [{
|
|
36
|
+
category: {
|
|
37
|
+
name: '主分類'
|
|
38
|
+
},
|
|
39
|
+
subcategory: {
|
|
40
|
+
name: '子分類'
|
|
41
|
+
}
|
|
42
|
+
}],
|
|
43
|
+
published_date: '2023-02-12T16:00:00Z',
|
|
44
|
+
hero_image: {
|
|
45
|
+
description: 'test'
|
|
46
|
+
},
|
|
47
|
+
slug: 'this-is-a-test-article'
|
|
48
|
+
}, {
|
|
49
|
+
id: '12346',
|
|
50
|
+
title: '文章標題文章標題文章標題文章標題文章標題文章標題文章標題文章標題',
|
|
51
|
+
og_description: '文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述文章描述',
|
|
52
|
+
category_set: [{
|
|
53
|
+
category: {
|
|
54
|
+
name: '主分類'
|
|
55
|
+
},
|
|
56
|
+
subcategory: {
|
|
57
|
+
name: '子分類'
|
|
58
|
+
}
|
|
59
|
+
}],
|
|
60
|
+
published_date: '2023-02-12T16:00:00Z',
|
|
61
|
+
hero_image: {
|
|
62
|
+
description: 'test',
|
|
63
|
+
resized_targets: {
|
|
64
|
+
mobile: {
|
|
65
|
+
url: 'https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Google_Images_2015_logo.svg/220px-Google_Images_2015_logo.svg.png'
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
slug: 'this-is-a-test-article-2'
|
|
70
|
+
}],
|
|
71
|
+
releaseBranch: _releaseBranch.BRANCH.master
|
|
72
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _path = _interopRequireDefault(require("../utils/path"));
|
|
13
|
+
|
|
14
|
+
var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
17
|
+
|
|
18
|
+
// utils
|
|
19
|
+
// @twreporter
|
|
20
|
+
var LogoContainer = /*#__PURE__*/_styledComponents["default"].img.withConfig({
|
|
21
|
+
displayName: "logo-loading-fallback__LogoContainer",
|
|
22
|
+
componentId: "sc-12r72it-0"
|
|
23
|
+
})([""]);
|
|
24
|
+
|
|
25
|
+
var LogoFallback = function LogoFallback(_ref) {
|
|
26
|
+
var releaseBranch = _ref.releaseBranch;
|
|
27
|
+
|
|
28
|
+
var logoSrc = _path["default"].selectLogoPath('loading-fallback', releaseBranch);
|
|
29
|
+
|
|
30
|
+
return /*#__PURE__*/_react["default"].createElement(LogoContainer, {
|
|
31
|
+
alt: "The Reporter Loading Fallback",
|
|
32
|
+
src: logoSrc
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
LogoFallback.propTypes = {
|
|
37
|
+
releaseBranch: _releaseBranch.BRANCH_PROP_TYPES
|
|
38
|
+
};
|
|
39
|
+
LogoFallback.defaultProps = {
|
|
40
|
+
releaseBranch: _releaseBranch.BRANCH.master
|
|
41
|
+
};
|
|
42
|
+
var _default = LogoFallback;
|
|
43
|
+
exports["default"] = _default;
|
package/lib/logo/index.js
CHANGED
|
@@ -21,6 +21,12 @@ Object.defineProperty(exports, "LogoSymbol", {
|
|
|
21
21
|
return _logoSymbol["default"];
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
+
Object.defineProperty(exports, "LogoFallback", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function get() {
|
|
27
|
+
return _logoLoadingFallback["default"];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
24
30
|
exports["default"] = void 0;
|
|
25
31
|
|
|
26
32
|
var _logoHeader = _interopRequireDefault(require("./components/logo-header"));
|
|
@@ -29,11 +35,14 @@ var _logoFooter = _interopRequireDefault(require("./components/logo-footer"));
|
|
|
29
35
|
|
|
30
36
|
var _logoSymbol = _interopRequireDefault(require("./components/logo-symbol"));
|
|
31
37
|
|
|
38
|
+
var _logoLoadingFallback = _interopRequireDefault(require("./components/logo-loading-fallback"));
|
|
39
|
+
|
|
32
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
33
41
|
|
|
34
42
|
var _default = {
|
|
35
43
|
LogoHeader: _logoHeader["default"],
|
|
36
44
|
LogoFooter: _logoFooter["default"],
|
|
37
|
-
LogoSymbol: _logoSymbol["default"]
|
|
45
|
+
LogoSymbol: _logoSymbol["default"],
|
|
46
|
+
LogoFallback: _logoLoadingFallback["default"]
|
|
38
47
|
};
|
|
39
48
|
exports["default"] = _default;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.fallback = exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _logoLoadingFallback = _interopRequireDefault(require("../components/logo-loading-fallback"));
|
|
11
|
+
|
|
12
|
+
var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
15
|
+
|
|
16
|
+
var _default = {
|
|
17
|
+
title: 'Logo/Fallback',
|
|
18
|
+
component: _logoLoadingFallback["default"],
|
|
19
|
+
argTypes: {
|
|
20
|
+
releaseBranch: _releaseBranch.BRANCH_STORYBOOK_ARG_TYPE
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports["default"] = _default;
|
|
24
|
+
|
|
25
|
+
var fallback = function fallback(args) {
|
|
26
|
+
return /*#__PURE__*/_react["default"].createElement(_logoLoadingFallback["default"], args);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.fallback = fallback;
|