strapi-plugin-comments 1.0.4 → 2.0.0-beta.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.
Files changed (156) hide show
  1. package/.circleci/config.yml +2 -2
  2. package/README.md +53 -126
  3. package/admin/src/components/ConfirmationDialog/index.js +56 -0
  4. package/admin/src/components/DiscussionStatus/index.js +33 -0
  5. package/admin/src/components/DiscussionThread/index.js +59 -0
  6. package/admin/src/components/DiscussionThreadItem/index.js +87 -0
  7. package/admin/src/components/DiscussionThreadItem/styles.js +88 -0
  8. package/admin/src/components/DiscussionThreadItemActions/index.js +178 -0
  9. package/admin/src/components/DiscussionThreadItemActions/styles.js +22 -0
  10. package/admin/src/components/DiscussionThreadItemMeta/index.js +31 -0
  11. package/admin/src/components/DiscussionThreadItemWarnings/index.js +141 -0
  12. package/admin/src/components/DiscussionThreadItemWarnings/styles.js +7 -0
  13. package/admin/src/components/EntityDetails/index.js +53 -0
  14. package/admin/src/{containers → components}/Initializer/index.js +4 -4
  15. package/admin/src/components/LoadingIndicatorOverlay/index.js +15 -0
  16. package/admin/src/components/LoadingIndicatorOverlay/styles.js +20 -0
  17. package/admin/src/components/Nav/index.js +45 -0
  18. package/admin/src/components/PluginIcon/index.js +12 -0
  19. package/admin/src/components/ReportsReviewModal/index.js +43 -0
  20. package/admin/src/components/ReportsReviewTable/index.js +146 -0
  21. package/admin/src/components/TableFilters/index.js +53 -0
  22. package/admin/src/components/TablePagination/index.js +35 -0
  23. package/admin/src/components/icons/comments.js +9 -0
  24. package/admin/src/components/icons/index.js +6 -0
  25. package/admin/src/components/icons/lock.js +22 -0
  26. package/admin/src/components/icons/review.js +18 -0
  27. package/admin/src/components/icons/unlock.js +20 -0
  28. package/admin/src/index.js +58 -42
  29. package/admin/src/pages/App/index.js +71 -0
  30. package/admin/src/pages/App/reducer/actions.js +8 -0
  31. package/admin/src/pages/App/reducer/constants.js +4 -0
  32. package/admin/src/pages/App/reducer/index.js +26 -0
  33. package/admin/src/pages/App/reducer/init.js +7 -0
  34. package/admin/src/pages/App/reducer/selectors.js +35 -0
  35. package/admin/src/pages/App/utils/api.js +12 -0
  36. package/admin/src/pages/ComingSoonPage/index.js +25 -0
  37. package/admin/src/pages/Details/index.js +109 -0
  38. package/admin/src/pages/Details/utils/api.js +41 -0
  39. package/admin/src/pages/Discover/components/DiscoverTableRow/index.js +196 -0
  40. package/admin/src/pages/Discover/index.js +157 -0
  41. package/admin/src/pages/Discover/utils/api.js +14 -0
  42. package/admin/src/pages/Discover/utils/filtersSchema.js +9 -0
  43. package/admin/src/permissions.js +13 -37
  44. package/admin/src/pluginId.js +2 -4
  45. package/admin/src/reducers.js +8 -0
  46. package/admin/src/translations/en.json +73 -37
  47. package/admin/src/translations/fr.json +1 -0
  48. package/admin/src/utils/axiosInstance.js +35 -0
  49. package/admin/src/utils/constants.js +25 -6
  50. package/admin/src/utils/getApiUrl.js +5 -0
  51. package/admin/src/utils/getMessage.js +21 -0
  52. package/admin/src/utils/getRelatedGroups.js +5 -0
  53. package/admin/src/utils/getUrl.js +5 -0
  54. package/admin/src/utils/handleAPIError.js +15 -0
  55. package/admin/src/utils/index.js +6 -0
  56. package/codecov.yml +2 -1
  57. package/content-types/comment.js +97 -0
  58. package/content-types/index.js +11 -0
  59. package/content-types/report.js +54 -0
  60. package/package.json +11 -25
  61. package/server/bootstrap.js +5 -0
  62. package/server/config/index.js +10 -0
  63. package/server/controllers/admin.js +134 -0
  64. package/server/controllers/client.js +117 -0
  65. package/server/controllers/index.js +9 -0
  66. package/{controllers → server/controllers}/utils/__tests__/functions.test.js +0 -0
  67. package/{controllers → server/controllers}/utils/functions.js +1 -1
  68. package/server/destroy.js +5 -0
  69. package/server/index.js +22 -0
  70. package/server/register.js +5 -0
  71. package/server/routes/admin.js +92 -0
  72. package/server/routes/client.js +52 -0
  73. package/server/routes/index.js +15 -0
  74. package/server/services/admin.js +215 -0
  75. package/server/services/client.js +227 -0
  76. package/server/services/common.js +197 -0
  77. package/server/services/index.js +11 -0
  78. package/{services → server/services}/utils/__tests__/functions.test.js +0 -0
  79. package/{services → server/services}/utils/functions.js +17 -6
  80. package/server/utils/constants.js +16 -0
  81. package/{services → server}/utils/error.js +0 -0
  82. package/server/utils/functions.js +19 -0
  83. package/strapi-admin.js +3 -0
  84. package/strapi-server.js +9 -0
  85. package/admin/src/assets/images/icon-cross-blue.svg +0 -1
  86. package/admin/src/assets/images/icon_remove.svg +0 -19
  87. package/admin/src/assets/images/logo.svg +0 -5
  88. package/admin/src/components/AbuseReportsPopUp/ItemPreviewContainer.js +0 -8
  89. package/admin/src/components/AbuseReportsPopUp/ModalFooter.js +0 -31
  90. package/admin/src/components/AbuseReportsPopUp/TableContainer.js +0 -63
  91. package/admin/src/components/AbuseReportsPopUp/index.js +0 -148
  92. package/admin/src/components/Container/index.js +0 -7
  93. package/admin/src/components/EmptyView/index.js +0 -25
  94. package/admin/src/components/Filters/index.js +0 -151
  95. package/admin/src/components/Filters/index.styled.js +0 -82
  96. package/admin/src/components/Filters/utils.js +0 -21
  97. package/admin/src/components/Item/CardItem.js +0 -30
  98. package/admin/src/components/Item/CardWrapper.js +0 -10
  99. package/admin/src/components/Item/index.js +0 -107
  100. package/admin/src/components/ItemDetails/CardItem.js +0 -33
  101. package/admin/src/components/ItemDetails/CardLevelCounter.js +0 -46
  102. package/admin/src/components/ItemDetails/CardLevelCounterLink.js +0 -24
  103. package/admin/src/components/ItemDetails/CardLevelWrapper.js +0 -22
  104. package/admin/src/components/ItemDetails/CardWrapper.js +0 -52
  105. package/admin/src/components/ItemDetails/index.js +0 -167
  106. package/admin/src/components/ItemFooter/CardItemAuthor.js +0 -10
  107. package/admin/src/components/ItemFooter/CardItemRelation.js +0 -18
  108. package/admin/src/components/ItemFooter/Wrapper.js +0 -20
  109. package/admin/src/components/ItemFooter/index.js +0 -87
  110. package/admin/src/components/ItemHeader/CardHeaderBlocked.js +0 -24
  111. package/admin/src/components/ItemHeader/CardHeaderIndicator.js +0 -30
  112. package/admin/src/components/ItemHeader/CardHeaderIndicatorBlue.js +0 -11
  113. package/admin/src/components/ItemHeader/CardHeaderIndicatorRed.js +0 -11
  114. package/admin/src/components/ItemHeader/CardHeaderIndicatorsContainer.js +0 -18
  115. package/admin/src/components/ItemHeader/CardHeaderPending.js +0 -11
  116. package/admin/src/components/ItemHeader/CardHeaderReports.js +0 -40
  117. package/admin/src/components/ItemHeader/Wrapper.js +0 -16
  118. package/admin/src/components/ItemHeader/index.js +0 -97
  119. package/admin/src/components/ItemModeration/Wrapper.js +0 -19
  120. package/admin/src/components/ItemModeration/index.js +0 -84
  121. package/admin/src/components/List/Container.js +0 -20
  122. package/admin/src/components/List/index.js +0 -21
  123. package/admin/src/components/Search/index.js +0 -83
  124. package/admin/src/containers/App/Wrapper.js +0 -14
  125. package/admin/src/containers/App/index.js +0 -47
  126. package/admin/src/containers/DataManagerProvider/actions.js +0 -15
  127. package/admin/src/containers/DataManagerProvider/index.js +0 -332
  128. package/admin/src/containers/DataManagerProvider/init.js +0 -5
  129. package/admin/src/containers/DataManagerProvider/reducer.js +0 -59
  130. package/admin/src/containers/DetailsView/Wrapper.js +0 -18
  131. package/admin/src/containers/DetailsView/index.js +0 -106
  132. package/admin/src/containers/ListView/FadedWrapper.js +0 -42
  133. package/admin/src/containers/ListView/Footer.js +0 -53
  134. package/admin/src/containers/ListView/Wrapper.js +0 -17
  135. package/admin/src/containers/ListView/components.js +0 -138
  136. package/admin/src/containers/ListView/index.js +0 -45
  137. package/admin/src/containers/Panel/actions.js +0 -5
  138. package/admin/src/containers/Panel/index.js +0 -191
  139. package/admin/src/containers/Panel/index.styled.js +0 -6
  140. package/admin/src/containers/Panel/reducer.js +0 -44
  141. package/admin/src/contexts/DataManagerContext.js +0 -5
  142. package/admin/src/hooks/useDataManager.js +0 -6
  143. package/admin/src/lifecycles.js +0 -3
  144. package/admin/src/translations/index.js +0 -7
  145. package/admin/src/utils/getTrad.js +0 -5
  146. package/admin/src/utils/getTradId.js +0 -5
  147. package/config/functions/bootstrap.js +0 -62
  148. package/config/routes.json +0 -142
  149. package/config/schema.graphql.js +0 -268
  150. package/controllers/comments.js +0 -228
  151. package/models/comment.js +0 -8
  152. package/models/comment.settings.json +0 -102
  153. package/models/report.js +0 -8
  154. package/models/report.settings.json +0 -49
  155. package/services/comments.js +0 -539
  156. package/services/utils/constants.js +0 -9
@@ -1,22 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors, sizes } from 'strapi-helper-plugin';
4
-
5
- const CardLevelWrapper = styled.ul`
6
- padding: 0;
7
- margin: 0;
8
-
9
- list-style: none;
10
-
11
- position: relative;
12
- z-index: 1;
13
-
14
- ul {
15
- padding-left: 4rem;
16
-
17
- position: relative;
18
- z-index: 0;
19
- }
20
- `;
21
-
22
- export default CardLevelWrapper;
@@ -1,52 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors, sizes } from 'strapi-helper-plugin';
4
- import CardItem from './CardItem';
5
-
6
- const CardWrapper = styled.li`
7
- padding: 0;
8
- margin: 0 0 2rem 0;
9
-
10
- position: relative;
11
- z-index: 1;
12
-
13
- ${CardItem}:before {
14
- display: ${ props => props.root ? 'none' : 'block' };
15
- content: '';
16
- margin-top: -1px;
17
-
18
- height: 2px;
19
- width: 2rem;
20
-
21
- position: absolute;
22
- top: 50%;
23
- left: -2rem;
24
- z-index: -1;
25
-
26
- background-color: ${colors.relations.boxShadow};
27
- }
28
-
29
- &:after {
30
- display: ${ props => props.root ? 'none' : 'block' };
31
- content: '';
32
- margin-left: -1px;
33
-
34
- width: 2px;
35
-
36
- position: absolute;
37
- top: -2rem;
38
- bottom: 0;
39
- left: -2rem;
40
- z-index: -1;
41
-
42
- background-color: ${colors.relations.boxShadow};
43
- }
44
-
45
- &:last-child {
46
- &:after {
47
- bottom: ${props => props.active ? `calc(50% - 1px + 2rem)` : `calc(50% - 1px)`};
48
- }
49
- }
50
- `;
51
-
52
- export default CardWrapper;
@@ -1,167 +0,0 @@
1
- import React, { useState } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { FormattedMessage } from 'react-intl';
4
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
- import { faArrowRight } from '@fortawesome/free-solid-svg-icons';
6
- import { isEmpty, isArray, first } from 'lodash';
7
- import CardWrapper from './CardWrapper';
8
- import CardItem from './CardItem';
9
- import CardLevelCounter from './CardLevelCounter';
10
- import CardLevelCounterLink from './CardLevelCounterLink';
11
- import ItemFooter from '../ItemFooter';
12
- import ItemModeration from '../ItemModeration';
13
- import ItemHeader from '../ItemHeader';
14
- import AbuseReportsPopUp from '../AbuseReportsPopUp';
15
- import pluginId from '../../pluginId';
16
- import { APPROVAL_STATUS } from "../../utils/constants";
17
-
18
- const ItemDetails = ({
19
- id,
20
- content,
21
- active,
22
- clickable,
23
- root,
24
- threadsCount,
25
- authorName,
26
- authorUser,
27
- created_at,
28
- createdAt,
29
- updated_at,
30
- updatedAt,
31
- related,
32
- reports,
33
- blocked,
34
- blockedThread,
35
- removed,
36
- onClick,
37
- onBlockClick,
38
- onBlockThreadClick,
39
- onAbuseReportResolve,
40
- onApproveCommentClick,
41
- onRejectCommentClick,
42
- approvalStatus,
43
- }) => {
44
- const [showPopUp, setPopUpVisibility] = useState(false);
45
-
46
- const onPopUpOpen = e => {
47
- e.preventDefault();
48
- e.stopPropagation();
49
- setPopUpVisibility(true);
50
- };
51
-
52
- const onPopUpClose = e => {
53
- e.preventDefault();
54
- e.stopPropagation();
55
- setPopUpVisibility(false);
56
- };
57
-
58
- const onAbuseReportResolveClick = (e, reportId) => {
59
- e.preventDefault();
60
- e.stopPropagation();
61
- onAbuseReportResolve(reportId, id);
62
- };
63
- const hasThreads = (threadsCount !== undefined) && (threadsCount > 0);
64
- const isAbuseReported = !isEmpty(reports);
65
- const isPending = approvalStatus === APPROVAL_STATUS.PENDING;
66
- const isItemHeaderDisplayed = blocked || blockedThread || removed || isAbuseReported || isPending;
67
- const footerProps = {
68
- authorName,
69
- authorUser,
70
- related: isArray(related) ? first(related) : related,
71
- created_at: created_at || createdAt,
72
- updated_at: updated_at || updatedAt,
73
- isDetailedView: true,
74
- };
75
- const headerProps = {
76
- active,
77
- blocked,
78
- blockedThread,
79
- isRemoved: removed,
80
- abuseReports: reports || [],
81
- isAbuseReported: !isEmpty(reports),
82
- isDetailedView: true,
83
- onReportsClick: onPopUpOpen,
84
- approvalStatus,
85
- };
86
- const moderationProps = {
87
- id,
88
- blocked,
89
- blockedThread,
90
- onBlockClick,
91
- onBlockThreadClick,
92
- onApproveCommentClick,
93
- onRejectCommentClick,
94
- approvalStatus,
95
- };
96
- const reportsPopUpProps = {
97
- blocked,
98
- blockedThread,
99
- reports,
100
- comment: {
101
- id, content, authorName, authorUser, created_at, updated_at,
102
- },
103
- onBlockClick,
104
- onBlockThreadClick,
105
- onAbuseReportResolveClick,
106
- isOpen: showPopUp,
107
- onClose: onPopUpClose,
108
- };
109
-
110
- return (
111
- <CardWrapper root={root} active={active}>
112
- <CardItem
113
- onClick={e => (hasThreads || root) && clickable && !active && onClick(e)}
114
- clickable={clickable}
115
- root={root}
116
- active={active}>
117
- {isItemHeaderDisplayed && (<ItemHeader { ...headerProps } />) }
118
- <p>{content}</p>
119
- <ItemFooter {...footerProps} />
120
- </CardItem>
121
- {hasThreads && (<CardLevelCounter>
122
- <FormattedMessage id={`${pluginId}.list.item.threads.count`} values={{ count: threadsCount }}/>
123
- <CardLevelCounterLink onClick={onClick}>
124
- <FormattedMessage id={`${pluginId}.list.item.threads.drilldown`} />
125
- <FontAwesomeIcon icon={faArrowRight} />
126
- </CardLevelCounterLink>
127
- </CardLevelCounter>
128
- )}
129
- {active && !removed && (<ItemModeration { ...moderationProps } />)}
130
- {(!isEmpty(reports) && active) && (
131
- <AbuseReportsPopUp
132
- {...reportsPopUpProps}
133
- />
134
- )}
135
- </CardWrapper>
136
- );
137
- };
138
-
139
- ItemDetails.propTypes = {
140
- id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
141
- content: PropTypes.string.isRequired,
142
- active: PropTypes.bool,
143
- clickable: PropTypes.bool,
144
- root: PropTypes.bool,
145
- threadsCount: PropTypes.number,
146
- authorName: PropTypes.string,
147
- authorUser: PropTypes.object,
148
- created_at: PropTypes.string.isRequired,
149
- updated_at: PropTypes.string,
150
- related: PropTypes.array,
151
- reports: PropTypes.array,
152
- blocked: PropTypes.bool,
153
- blockedThread: PropTypes.bool,
154
- onClick: PropTypes.func,
155
- onBlockClick: PropTypes.func,
156
- onBlockThreadClick: PropTypes.func,
157
- onAbuseReportResolve: PropTypes.func,
158
- approvalStatus: PropTypes.oneOf([
159
- APPROVAL_STATUS.APPROVED,
160
- APPROVAL_STATUS.PENDING,
161
- APPROVAL_STATUS
162
- ]),
163
- onApproveCommentClick: PropTypes.func,
164
- onRejectCommentClick: PropTypes.func,
165
- };
166
-
167
- export default ItemDetails;
@@ -1,10 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
-
5
- const CardItemAuthor = styled.span`
6
- display: flex;
7
- flex-grow: 1;
8
- `;
9
-
10
- export default CardItemAuthor;
@@ -1,18 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { sizes } from 'strapi-helper-plugin';
4
-
5
- const CardItemRelation = styled.span`
6
- display: flex;
7
- flex-grow: 1;
8
- flex-direction: row;
9
-
10
- align-items: center;
11
- justify-content: flex-end;
12
-
13
- svg {
14
- margin-right: ${sizes.margin/2}px;
15
- }
16
- `;
17
-
18
- export default CardItemRelation;
@@ -1,20 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
-
5
- const Wrapper = styled.div`
6
- display: flex;
7
- padding-top: 1rem;
8
- margin-top: 1rem;
9
-
10
- flex-wrap: wrap;
11
- justify-items: center;
12
- align-items: stretch;
13
-
14
- color: ${colors.leftMenu.grey};
15
- font-size: 1.25rem;
16
-
17
- border-top: 1px ${colors.leftMenu.lightGrey} solid;
18
- `;
19
-
20
- export default Wrapper;
@@ -1,87 +0,0 @@
1
- import React, { useMemo } from 'react';
2
- import PropTypes from 'prop-types';
3
- import moment from 'moment';
4
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
- import { faLink } from '@fortawesome/free-solid-svg-icons';
6
- import CardItemRelation from './CardItemRelation';
7
- import CardItemAuthor from './CardItemAuthor';
8
- import Wrapper from './Wrapper';
9
- import { find, isNil, isObject, kebabCase, snakeCase, startCase } from 'lodash';
10
- import { Link } from 'react-router-dom';
11
-
12
- const ENTITY_NAME_PARAMS = ['title', 'Title', 'subject', 'Subject', 'name', 'Name'];
13
-
14
- const getLink = (to, contentType) => (
15
- <Link to={`${to}`}>
16
- {startCase(contentType)}
17
- </Link>
18
- );
19
-
20
- const getContentTypeLink = (name) => `application::${name}.${name}`;
21
-
22
- const resolveEntityName = entity => ENTITY_NAME_PARAMS.map(_ => entity[_]).filter(_ => _)[0] || '';
23
-
24
- const ItemFooter = ({ authorName, authorUser, related, created_at, isDetailedView, relatedContentTypes }) => {
25
- const formatAuthor = () => {
26
- if (authorUser) {
27
- return authorUser.username;
28
- }
29
- return authorName;
30
- };
31
-
32
- const formatDateTime = () => {
33
- return moment(created_at).format('DD/MM/YYYY, HH:mm:ss');
34
- };
35
-
36
- const relatedExist = useMemo(() => !isNil(related) && isObject(related), [related]);
37
-
38
- const formatRelationType = () => {
39
- if (relatedExist) {
40
- const { id, __contentType: contentType } = related;
41
- const name = snakeCase(contentType);
42
- const relation = find(relatedContentTypes, ({ globalName }) => globalName === name);
43
- if (relation && relation.contentManager) {
44
- const contentManagerRoot = `/plugins/content-manager`;
45
- if (relation.isSingle) {
46
- return getLink(
47
- relation.url || `${contentManagerRoot}/singleType/${getContentTypeLink(kebabCase(name))}`,
48
- related.__contentType,
49
- );
50
- } else if (relation.url) {
51
- const url = `${relation.url.replace(':id', id)}'?_sort=id:ASC&_where[0][id]=${id}`;
52
- return getLink(url, related[relation.key] || related.__contentType);
53
- } else {
54
- const url = `${contentManagerRoot}/collectionType/${getContentTypeLink(
55
- kebabCase(name))}?_sort=id:ASC&_where[0][id]=${id}`;
56
- return getLink(url, related[relation.key] || related.__contentType);
57
- }
58
- }
59
- return startCase(related.__contentType);
60
- }
61
- return '';
62
- };
63
-
64
- const formatRelationName = () => relatedExist ? resolveEntityName(related) : '';
65
-
66
- return (
67
- <Wrapper>
68
- <CardItemAuthor>{formatAuthor()} @ {formatDateTime()}</CardItemAuthor>
69
- {!isNil(related) && (
70
- <CardItemRelation title={!isDetailedView && formatRelationName()}>
71
- <FontAwesomeIcon icon={faLink} />
72
- {isDetailedView ? `(${formatRelationType()}) ${formatRelationName()}` : formatRelationType()}
73
- </CardItemRelation>
74
- )}
75
- </Wrapper>
76
- );
77
- };
78
-
79
- ItemFooter.propTypes = {
80
- authorName: PropTypes.string,
81
- authorUser: PropTypes.object,
82
- related: PropTypes.object,
83
- created_at: PropTypes.string.isRequired,
84
- isDetailedView: PropTypes.bool,
85
- };
86
-
87
- export default ItemFooter;
@@ -1,24 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
-
5
- const CardHeaderBlocked = styled.span`
6
- display: inline-flex;
7
- flex-direction: row;
8
- align-items: center;
9
- justify-items: center;
10
- height: 2.5rem;
11
- margin-right: 1rem;
12
- padding: .25rem 1rem;
13
-
14
- color: ${colors.leftMenu.grey};
15
-
16
- border-radius: 1.25rem;
17
- background: ${colors.leftMenu.lightGrey};
18
-
19
- svg {
20
- margin-right: .5rem;
21
- }
22
- `;
23
-
24
- export default CardHeaderBlocked;
@@ -1,30 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
-
5
- const CardHeaderIndicator = styled.span`
6
- display: inline-flex;
7
- align-items: center;
8
- justify-content: center;
9
- width: 1.8rem;
10
- height: 1.8rem;
11
-
12
- font-size: 1rem;
13
- color: ${colors.beige};
14
- vertical-align: middle;
15
- line-height: 1.8rem;
16
- text-align: center;
17
-
18
- border-radius: .9rem;
19
- background: ${colors.grey};
20
-
21
- &:first-child {
22
- margin-right: .5rem;
23
- }
24
-
25
- &:last-child {
26
- margin-right: 0;
27
- }
28
- `;
29
-
30
- export default CardHeaderIndicator;
@@ -1,11 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
- import CardHeaderIndicator from './CardHeaderIndicator';
5
-
6
- const CardHeaderIndicatorBlue = styled(CardHeaderIndicator)`
7
- color: ${colors.beige};
8
- background: ${colors.blue};
9
- `;
10
-
11
- export default CardHeaderIndicatorBlue;
@@ -1,11 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
- import CardHeaderIndicator from './CardHeaderIndicator';
5
-
6
- const CardHeaderIndicatorRed = styled(CardHeaderIndicator)`
7
- color: ${colors.beige};
8
- background: red;
9
- `;
10
-
11
- export default CardHeaderIndicatorRed;
@@ -1,18 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
-
5
- const CardHeaderIndicatorsContainer = styled.span`
6
- display: flex;
7
- height: 1.8rem;
8
-
9
- position: absolute;
10
- top: -.9rem;
11
- right: -.9rem;
12
-
13
- font-size: 1rem;
14
- color: ${colors.beige};
15
- line-height: 1.8rem;
16
- `;
17
-
18
- export default CardHeaderIndicatorsContainer;
@@ -1,11 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
-
5
- import CardHeaderBlocked from './CardHeaderBlocked';
6
-
7
- const CardHeaderPending = styled(CardHeaderBlocked)`
8
- color: ${colors.blue};
9
- `;
10
-
11
- export default CardHeaderPending;
@@ -1,40 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
-
5
- const CardHeaderReports = styled.a`
6
- display: inline-flex;
7
- flex-direction: row;
8
- align-items: center;
9
- justify-items: center;
10
- height: 2.5rem;
11
- margin-right: 1rem;
12
- padding: .25rem 1rem;
13
-
14
- color: red;
15
- text-decoration: none;
16
-
17
- border: 1px dotted red;
18
- border-radius: 1.25rem;
19
- background: transparent;
20
-
21
- transition: .25s ease-in-out all;
22
-
23
- svg {
24
- margin-right: .5rem;
25
- }
26
-
27
- &:hover {
28
- color: ${colors.beige};
29
- text-decoration: none;
30
-
31
- border-style: solid;
32
- background: red;
33
-
34
- transform: translateY(-.25rem);
35
-
36
- cursor: pointer;
37
- }
38
- `;
39
-
40
- export default CardHeaderReports;
@@ -1,16 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { colors } from 'strapi-helper-plugin';
4
-
5
- const Wrapper = styled.div`
6
- display: flex;
7
- flex-direction: row;
8
- justify-content: space-between;
9
- margin-bottom: ${props => props.hasMargin ? '1rem' : 0};
10
-
11
- color: ${colors.leftMenu.grey};
12
- font-size: 1.25rem;
13
- font-weight: 500;
14
- `;
15
-
16
- export default Wrapper;
@@ -1,97 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { FormattedMessage } from 'react-intl';
4
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
- import { useGlobalContext, CheckPermissions } from 'strapi-helper-plugin';
6
- import { faLock, faStream, faAsterisk, faFire, faExclamationCircle } from '@fortawesome/free-solid-svg-icons';
7
- import Wrapper from './Wrapper';
8
- import CardHeaderBlocked from './CardHeaderBlocked';
9
- import CardHeaderPending from './CardHeaderPending';
10
- import pluginId from '../../pluginId';
11
- import CardHeaderIndicatorsContainer from './CardHeaderIndicatorsContainer';
12
- import CardHeaderIndicatorBlue from './CardHeaderIndicatorBlue';
13
- import CardHeaderIndicatorRed from './CardHeaderIndicatorRed';
14
- import CardHeaderReports from './CardHeaderReports';
15
- import pluginPermissions from '../../permissions';
16
- import { APPROVAL_STATUS } from "../../utils/constants";
17
-
18
- const ItemHeader = ({ active, isDetailedView, blocked, blockedThread, isNew, isAbuseReported, isRemoved, abuseReports, onReportsClick, approvalStatus }) => {
19
- const { formatMessage } = useGlobalContext();
20
- const isBlocked = blocked || blockedThread;
21
- const hasAnyIndicators = isNew || (isAbuseReported && !isDetailedView);
22
-
23
- return (
24
- <Wrapper hasMargin={isBlocked || isRemoved || (isAbuseReported && isDetailedView)}>
25
- {isBlocked && (
26
- <CheckPermissions permissions={pluginPermissions.moderate}>
27
- <CardHeaderBlocked>
28
- <FontAwesomeIcon icon={faLock} />
29
- {blockedThread && <FontAwesomeIcon icon={faStream} />}
30
- <FormattedMessage id={`${pluginId}.list.item.header.blocked${blockedThread ? '.thread' : ''}`} />
31
- </CardHeaderBlocked>
32
- </CheckPermissions>
33
- )}
34
- {
35
- isRemoved && (
36
- <CheckPermissions permissions={pluginPermissions.moderate}>
37
- <CardHeaderBlocked>
38
- <FontAwesomeIcon icon={faLock} />
39
- {blockedThread && <FontAwesomeIcon icon={faStream} />}
40
- <FormattedMessage id={`${pluginId}.list.item.header.removed`} />
41
- </CardHeaderBlocked>
42
- </CheckPermissions>
43
- )
44
- }
45
- {
46
- approvalStatus === APPROVAL_STATUS.PENDING && (
47
- <CheckPermissions permissions={pluginPermissions.moderate}>
48
- <CardHeaderPending>
49
- <FontAwesomeIcon icon={faExclamationCircle} />
50
- <FormattedMessage id={`${pluginId}.list.item.header.pending`} />
51
- </CardHeaderPending>
52
- </CheckPermissions>
53
- )
54
- }
55
- {(isDetailedView && active) && (<>
56
- {isAbuseReported && (
57
- <CheckPermissions permissions={pluginPermissions.moderateReports}>
58
- <CardHeaderReports href="#abuse-reports" onClick={onReportsClick}>
59
- <FontAwesomeIcon icon={faFire} />
60
- <FormattedMessage id={`${pluginId}.list.item.header.abuse`} values={{ count: abuseReports.length }} />
61
- </CardHeaderReports>
62
- </CheckPermissions>
63
- )}
64
- </>)}
65
- {hasAnyIndicators && <CardHeaderIndicatorsContainer>
66
- {isNew && (<CardHeaderIndicatorBlue title={formatMessage({ id: `${pluginId}.list.item.indication.new`})}>
67
- <FontAwesomeIcon icon={faAsterisk} />
68
- </CardHeaderIndicatorBlue>)}
69
- <CheckPermissions permissions={pluginPermissions.moderateReports}>
70
- {isAbuseReported && (<CardHeaderIndicatorRed title={formatMessage({ id: `${pluginId}.list.item.indication.abuse`})}>
71
- <FontAwesomeIcon icon={faFire} />
72
- </CardHeaderIndicatorRed>)}
73
- </CheckPermissions>
74
- </CardHeaderIndicatorsContainer>
75
- }
76
- </Wrapper>
77
- );
78
- };
79
-
80
- ItemHeader.propTypes = {
81
- active: PropTypes.bool,
82
- isDetailedView: PropTypes.bool,
83
- blocked: PropTypes.bool,
84
- blockedThread: PropTypes.bool,
85
- isNew: PropTypes.bool,
86
- removed: PropTypes.bool,
87
- isAbuseReported: PropTypes.bool,
88
- abuseReports: PropTypes.array,
89
- onReportsClick: PropTypes.func,
90
- approvalStatus: PropTypes.oneOf([
91
- APPROVAL_STATUS.APPROVED,
92
- APPROVAL_STATUS.PENDING,
93
- APPROVAL_STATUS
94
- ])
95
- };
96
-
97
- export default ItemHeader;
@@ -1,19 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { Button } from '@buffetjs/styles';
4
- import { colors } from 'strapi-helper-plugin';
5
-
6
- const Wrapper = styled.div`
7
- display: flex;
8
- margin-top: 1rem;
9
-
10
- flex-wrap: wrap;
11
- justify-items: center;
12
- align-items: stretch;
13
-
14
- ${Button} {
15
- margin-right: 1rem;
16
- }
17
- `;
18
-
19
- export default Wrapper;