@twreporter/react-components 8.17.0-rc.2 → 8.17.0-rc.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.
@@ -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: 'S'
38
+ size: _size.SIZE.S
34
39
  };
35
40
  dialog.parameters = {
36
41
  backgrounds: {
@@ -23,6 +23,9 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
23
23
 
24
24
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
25
25
 
26
+ var disableColor = _color.colorGrayscale.gray400;
27
+ var activeColor = _color.colorGrayscale.gray800;
28
+
26
29
  var Container = /*#__PURE__*/_styledComponents["default"].div.withConfig({
27
30
  displayName: "checkbox__Container",
28
31
  componentId: "vzoxib-0"
@@ -31,13 +34,29 @@ var Container = /*#__PURE__*/_styledComponents["default"].div.withConfig({
31
34
  var Input = /*#__PURE__*/_styledComponents["default"].input.withConfig({
32
35
  displayName: "checkbox__Input",
33
36
  componentId: "vzoxib-1"
34
- })(["width:16px;height:16px;border:solid 1px;border-radius:2px;accent-color:", ";margin-left:0px;margin-right:8px;&:enabled:not(:checked){border-color:", ";background:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none;}"], _color.colorGrayscale.gray800, _color.colorGrayscale.gray800);
37
+ })(["width:0;height:0;opacity:0;z-index:-1;"]);
38
+
39
+ var Label = /*#__PURE__*/_styledComponents["default"].label.withConfig({
40
+ displayName: "checkbox__Label",
41
+ componentId: "vzoxib-2"
42
+ })(["display:block;position:relative;padding-left:25px;"]);
43
+
44
+ var Indicator = /*#__PURE__*/_styledComponents["default"].div.withConfig({
45
+ displayName: "checkbox__Indicator",
46
+ componentId: "vzoxib-3"
47
+ })(["width:16px;height:16px;background:", ";position:absolute;top:0px;left:0px;border-color:", ";border-radius:2px;box-shadow:0 0 0 1px ", ";margin:3px 8px 0px 0px;&::after{content:'';position:absolute;display:none;}", ":checked + &::after{display:block;left:5px;top:0px;width:4px;height:10px;border:solid white;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);}"], function (props) {
48
+ return props.value ? props.disabled ? disableColor : activeColor : 'rgba(0, 0, 0, 0)';
49
+ }, function (props) {
50
+ return props.disabled ? disableColor : activeColor;
51
+ }, function (props) {
52
+ return props.disabled ? disableColor : activeColor;
53
+ }, Input);
35
54
 
36
55
  var ColorP1 = /*#__PURE__*/(0, _styledComponents["default"])(_paragraph.P1).withConfig({
37
56
  displayName: "checkbox__ColorP1",
38
- componentId: "vzoxib-2"
57
+ componentId: "vzoxib-4"
39
58
  })(["color:", ";"], function (props) {
40
- return props.disabled ? _color.colorGrayscale.gray400 : _color.colorGrayscale.gray800;
59
+ return props.disabled ? disableColor : activeColor;
41
60
  });
42
61
 
43
62
  var Checkbox = function Checkbox(_ref) {
@@ -55,15 +74,18 @@ var Checkbox = function Checkbox(_ref) {
55
74
  onChange && onChange(e);
56
75
  };
57
76
 
58
- return /*#__PURE__*/_react["default"].createElement(Container, props, /*#__PURE__*/_react["default"].createElement(Input, {
77
+ return /*#__PURE__*/_react["default"].createElement(Container, props, /*#__PURE__*/_react["default"].createElement(Label, null, label && /*#__PURE__*/_react["default"].createElement(ColorP1, {
78
+ text: label,
79
+ disabled: disabled
80
+ }), /*#__PURE__*/_react["default"].createElement(Input, {
59
81
  type: "checkbox",
60
82
  checked: value,
61
83
  disabled: disabled,
62
84
  onChange: handleChange
63
- }), label && /*#__PURE__*/_react["default"].createElement(ColorP1, {
64
- text: label,
85
+ }), /*#__PURE__*/_react["default"].createElement(Indicator, {
86
+ value: value,
65
87
  disabled: disabled
66
- }));
88
+ })));
67
89
  };
68
90
 
69
91
  exports.Checkbox = Checkbox;
@@ -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'); // TODO extract interactive as to a const file
117
-
118
+ var slug = _.get(item, 'slug');
118
119
 
119
- var to = style === 'interactive' ? _entityPath["default"].interactiveArticle + slug : _entityPath["default"].article + slug;
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: style === 'interactive' ? '_blank' : ''
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
+ };