strapi-plugin-comments 2.1.8 → 2.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +11 -2
  2. package/admin/src/components/Avatar/index.d.ts +3 -2
  3. package/admin/src/components/CommentReviewModal/index.d.ts +11 -0
  4. package/admin/src/components/CommentReviewModal/index.js +19 -0
  5. package/admin/src/components/ConfirmationDialog/index.d.ts +12 -10
  6. package/admin/src/components/ConfirmationDialog/index.js +3 -3
  7. package/admin/src/components/DiscussionStatus/index.d.ts +2 -1
  8. package/admin/src/components/DiscussionThread/index.d.ts +11 -5
  9. package/admin/src/components/DiscussionThread/index.js +3 -3
  10. package/admin/src/components/DiscussionThreadItem/index.d.ts +2 -7
  11. package/admin/src/components/DiscussionThreadItem/index.js +3 -12
  12. package/admin/src/components/DiscussionThreadItemActions/index.d.ts +10 -6
  13. package/admin/src/components/DiscussionThreadItemActions/index.js +75 -53
  14. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.d.ts +9 -6
  15. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.js +6 -9
  16. package/admin/src/components/DiscussionThreadItemFooter/index.d.ts +14 -7
  17. package/admin/src/components/DiscussionThreadItemFooter/index.js +3 -3
  18. package/admin/src/components/DiscussionThreadItemReviewAction/index.d.ts +14 -18
  19. package/admin/src/components/DiscussionThreadItemReviewAction/index.js +71 -52
  20. package/admin/src/components/FormSwitch/index.d.ts +2 -1
  21. package/admin/src/components/Hint/index.d.ts +14 -0
  22. package/admin/src/components/Hint/index.js +22 -0
  23. package/admin/src/components/LoadingIndicatorOverlay/index.d.ts +2 -1
  24. package/admin/src/components/ModeratorResponse/index.d.ts +8 -0
  25. package/admin/src/components/ModeratorResponse/index.js +108 -0
  26. package/admin/src/components/ModeratorResponse/styles.d.ts +2 -0
  27. package/admin/src/components/ModeratorResponse/styles.js +12 -0
  28. package/admin/src/components/ModeratorResponseModal/ModeratorResponseModal.d.ts +11 -0
  29. package/admin/src/components/ModeratorResponseModal/ModeratorResponseModal.js +98 -0
  30. package/admin/src/components/Nav/index.d.ts +2 -1
  31. package/admin/src/components/Nav/index.js +6 -9
  32. package/admin/src/components/PluginIcon/index.d.ts +2 -1
  33. package/admin/src/components/PluginIcon/index.js +2 -6
  34. package/admin/src/components/PreviewWysiwyg/Wrapper.d.ts +3 -0
  35. package/admin/src/components/PreviewWysiwyg/Wrapper.js +162 -0
  36. package/admin/src/components/PreviewWysiwyg/index.d.ts +7 -0
  37. package/admin/src/components/PreviewWysiwyg/index.js +39 -0
  38. package/admin/src/components/PreviewWysiwyg/utils/mdRenderer.d.ts +3 -0
  39. package/admin/src/components/PreviewWysiwyg/utils/mdRenderer.js +88 -0
  40. package/admin/src/components/PreviewWysiwyg/utils/satinizeHtml.d.ts +3 -0
  41. package/admin/src/components/PreviewWysiwyg/utils/satinizeHtml.js +18 -0
  42. package/admin/src/components/ReportsActions/components/BlockMenu/index.d.ts +16 -0
  43. package/admin/src/components/ReportsActions/components/BlockMenu/index.js +51 -0
  44. package/admin/src/components/ReportsActions/index.d.ts +12 -0
  45. package/admin/src/components/ReportsActions/index.js +31 -0
  46. package/admin/src/components/ReportsReviewModal/index.d.ts +14 -8
  47. package/admin/src/components/ReportsReviewTable/index.d.ts +13 -24
  48. package/admin/src/components/ReportsReviewTable/index.js +11 -24
  49. package/admin/src/components/StatusBadge/index.d.ts +2 -1
  50. package/admin/src/components/TableFilters/index.d.ts +12 -2
  51. package/admin/src/components/TableFilters/index.js +2 -2
  52. package/admin/src/components/TablePagination/index.d.ts +9 -2
  53. package/admin/src/components/Wysiwyg/Editor.d.ts +17 -0
  54. package/admin/src/components/Wysiwyg/Editor.js +84 -0
  55. package/admin/src/components/Wysiwyg/EditorLayout.d.ts +12 -0
  56. package/admin/src/components/Wysiwyg/EditorLayout.js +99 -0
  57. package/admin/src/components/Wysiwyg/EditorStylesContainer.d.ts +2 -0
  58. package/admin/src/components/Wysiwyg/EditorStylesContainer.js +348 -0
  59. package/admin/src/components/Wysiwyg/WysiwygFooter.d.ts +7 -0
  60. package/admin/src/components/Wysiwyg/WysiwygFooter.js +25 -0
  61. package/admin/src/components/Wysiwyg/WysiwygNav.d.ts +13 -0
  62. package/admin/src/components/Wysiwyg/WysiwygNav.js +118 -0
  63. package/admin/src/components/Wysiwyg/WysiwygStyles.d.ts +8 -0
  64. package/admin/src/components/Wysiwyg/WysiwygStyles.js +59 -0
  65. package/admin/src/components/Wysiwyg/index.d.ts +28 -0
  66. package/admin/src/components/Wysiwyg/index.js +136 -0
  67. package/admin/src/components/Wysiwyg/tests/index.test.d.ts +2 -0
  68. package/admin/src/components/Wysiwyg/tests/index.test.js +1633 -0
  69. package/admin/src/components/Wysiwyg/utils/continueList.d.ts +3 -0
  70. package/admin/src/components/Wysiwyg/utils/continueList.js +83 -0
  71. package/admin/src/components/Wysiwyg/utils/utils.d.ts +15 -0
  72. package/admin/src/components/Wysiwyg/utils/utils.js +249 -0
  73. package/admin/src/components/icons/comments.d.ts +2 -1
  74. package/admin/src/components/icons/index.d.ts +2 -5
  75. package/admin/src/components/icons/index.js +24 -12
  76. package/admin/src/components/icons/lock.d.ts +2 -1
  77. package/admin/src/components/icons/review.d.ts +2 -1
  78. package/admin/src/components/icons/strapiIcons.d.ts +24 -0
  79. package/admin/src/components/icons/strapiIcons.js +35 -0
  80. package/admin/src/components/icons/unlock.d.ts +2 -1
  81. package/admin/src/custom-fields/comments/components/icon.d.ts +3 -0
  82. package/admin/src/custom-fields/comments/components/icon.js +14 -0
  83. package/admin/src/custom-fields/comments/components/index.d.ts +3 -0
  84. package/admin/src/custom-fields/comments/components/index.js +19 -0
  85. package/admin/src/custom-fields/comments/components/input/index.d.ts +3 -0
  86. package/admin/src/custom-fields/comments/components/input/index.js +5 -0
  87. package/admin/src/custom-fields/comments/components/input/input.d.ts +4 -0
  88. package/admin/src/custom-fields/comments/components/input/input.js +102 -0
  89. package/admin/src/custom-fields/comments/components/input/types.d.ts +10 -0
  90. package/admin/src/custom-fields/comments/components/input/types.js +3 -0
  91. package/admin/src/custom-fields/comments/components/input/utils.d.ts +35 -0
  92. package/admin/src/custom-fields/comments/components/input/utils.js +146 -0
  93. package/admin/src/custom-fields/comments/index.d.ts +3 -0
  94. package/admin/src/custom-fields/comments/index.js +53 -0
  95. package/admin/src/custom-fields/index.d.ts +3 -0
  96. package/admin/src/custom-fields/index.js +13 -0
  97. package/admin/src/hooks/useConfig.d.ts +4 -4
  98. package/admin/src/hooks/useConfig.js +3 -6
  99. package/admin/src/hooks/useReportsActionsHandlers.d.ts +19 -0
  100. package/admin/src/hooks/useReportsActionsHandlers.js +70 -0
  101. package/admin/src/index.d.ts +2 -1
  102. package/admin/src/index.js +4 -2
  103. package/admin/src/pages/App/index.js +8 -7
  104. package/admin/src/pages/App/reducer/index.d.ts +1 -1
  105. package/admin/src/pages/ComingSoonPage/index.d.ts +2 -1
  106. package/admin/src/pages/ComingSoonPage/index.js +2 -2
  107. package/admin/src/pages/Details/components/DetailsEntity/index.d.ts +8 -6
  108. package/admin/src/pages/Details/components/DetailsFilters/index.d.ts +5 -3
  109. package/admin/src/pages/Details/index.js +10 -7
  110. package/admin/src/pages/Discover/components/DiscoverTableRow/index.d.ts +11 -5
  111. package/admin/src/pages/Discover/components/DiscoverTableRow/index.js +7 -81
  112. package/admin/src/pages/Discover/index.js +14 -13
  113. package/admin/src/pages/NoAccessPage/index.d.ts +4 -0
  114. package/admin/src/pages/NoAccessPage/index.js +31 -0
  115. package/admin/src/pages/Reports/components/ReportsTableRow/index.d.ts +16 -0
  116. package/admin/src/pages/Reports/components/ReportsTableRow/index.js +91 -0
  117. package/admin/src/pages/Reports/components/ReportsTableRow/styles.d.ts +2 -0
  118. package/admin/src/pages/Reports/components/ReportsTableRow/styles.js +14 -0
  119. package/admin/src/pages/Reports/index.d.ts +4 -0
  120. package/admin/src/pages/Reports/index.js +196 -0
  121. package/admin/src/pages/Reports/utils/api.d.ts +2 -0
  122. package/admin/src/pages/Reports/utils/api.js +16 -0
  123. package/admin/src/pages/Reports/utils/filtersSchema.d.ts +11 -0
  124. package/admin/src/pages/Reports/utils/filtersSchema.js +11 -0
  125. package/admin/src/pages/Settings/index.d.ts +2 -1
  126. package/admin/src/pages/Settings/index.js +6 -7
  127. package/admin/src/pages/utils/api.d.ts +17 -10
  128. package/admin/src/pages/utils/api.js +25 -2
  129. package/admin/src/reducers.d.ts +1 -1
  130. package/admin/src/translations/en.json +49 -1
  131. package/admin/src/utils/axiosInstance.d.ts +1 -1
  132. package/admin/src/utils/constants.d.ts +9 -5
  133. package/admin/src/utils/constants.js +5 -3
  134. package/admin/src/utils/errors.d.ts +5 -0
  135. package/admin/src/utils/errors.js +10 -0
  136. package/admin/src/utils/functions.d.ts +2 -0
  137. package/admin/src/utils/functions.js +11 -0
  138. package/admin/src/utils/getMessage.d.ts +1 -1
  139. package/admin/src/utils/getMessage.js +1 -1
  140. package/admin/src/utils/getRelatedGroups.d.ts +6 -2
  141. package/admin/src/utils/handleAPIError.d.ts +1 -1
  142. package/admin/src/utils/index.d.ts +16 -11
  143. package/admin/src/utils/index.js +12 -1
  144. package/admin/src/utils/resolveCommentStatus.d.ts +8 -2
  145. package/admin/src/utils/resolveReportStatus.d.ts +4 -0
  146. package/admin/src/utils/resolveReportStatus.js +23 -0
  147. package/admin/src/utils/resolveReportStatusColor.d.ts +4 -0
  148. package/admin/src/utils/resolveReportStatusColor.js +17 -0
  149. package/package.json +6 -3
  150. package/server/controllers/admin.js +67 -2
  151. package/server/index.d.ts +1 -1
  152. package/server/register/custom-fields/comments.d.ts +6 -0
  153. package/server/register/custom-fields/comments.js +9 -0
  154. package/server/register/custom-fields/index.d.ts +3 -0
  155. package/server/register/custom-fields/index.js +14 -0
  156. package/server/register/index.d.ts +4 -0
  157. package/server/register/index.js +8 -0
  158. package/server/routes/admin.js +56 -0
  159. package/server/services/admin.d.ts +1 -1
  160. package/server/services/admin.js +196 -10
  161. package/server/utils/error.js +1 -1
  162. package/strapi-server.d.ts +1 -1
  163. package/tsconfig.tsbuildinfo +1 -1
  164. package/types/utils.d.ts +5 -0
  165. package/types/utils.js +10 -0
  166. package/server/register.d.ts +0 -3
  167. package/server/register.js +0 -4
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.CustomFieldInput = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const Stack_1 = require("@strapi/design-system/Stack");
29
+ const Flex_1 = require("@strapi/design-system/Flex");
30
+ const Box_1 = require("@strapi/design-system/Box");
31
+ const Field_1 = require("@strapi/design-system/Field");
32
+ const Select_1 = require("@strapi/design-system/Select");
33
+ const NumberInput_1 = require("@strapi/design-system/NumberInput");
34
+ const Checkbox_1 = require("@strapi/design-system/Checkbox");
35
+ const DatePicker_1 = require("@strapi/design-system/DatePicker");
36
+ const Grid_1 = require("@strapi/design-system/Grid");
37
+ const utils_1 = require("./utils");
38
+ const utils_2 = require("../../../../utils");
39
+ const react_intl_1 = require("react-intl");
40
+ const DEFAULTS = {
41
+ commentsNumber: 30,
42
+ populate: [],
43
+ renderType: "FLAT",
44
+ };
45
+ const CustomFieldInput = ({ attribute, description, disabled, error, intlLabel, labelAction, name, onChange, required, value, }) => {
46
+ const { formatMessage } = (0, react_intl_1.useIntl)();
47
+ const [currentState, setCurrentState] = (0, react_1.useState)(value ? (0, utils_1.fromInput)(value) : DEFAULTS);
48
+ const onCommentsNumberChange = (0, react_1.useCallback)((0, utils_1.handleStateSliceChange)("commentsNumber", setCurrentState), [setCurrentState]);
49
+ const onRenderTypeChange = (0, react_1.useCallback)((0, utils_1.handleStateSliceChange)("renderType", setCurrentState), [setCurrentState]);
50
+ const onSortByDateChange = (0, react_1.useCallback)((0, utils_1.handleStateSliceChange)("sortByDate", setCurrentState), [setCurrentState]);
51
+ const onFilterByChange = (0, react_1.useCallback)((filterBy) => {
52
+ setCurrentState((current) => ({
53
+ ...current,
54
+ filterBy,
55
+ filterByValue: undefined,
56
+ }));
57
+ }, [setCurrentState]);
58
+ const onFilterByValueChange = (0, react_1.useCallback)((0, utils_1.handleStateSliceChange)("filterByValue", setCurrentState), [setCurrentState]);
59
+ const onPopulateAuthorChange = (0, react_1.useCallback)((0, utils_1.handlePopulateChange)("author", setCurrentState), [setCurrentState]);
60
+ const onPopulateAvatarChange = (0, react_1.useCallback)((0, utils_1.handlePopulateChange)("avatar", setCurrentState), [setCurrentState]);
61
+ (0, react_1.useEffect)(() => {
62
+ const nextValue = (0, utils_1.toOutput)(currentState);
63
+ const initialValue = value ? (0, utils_1.toOutput)((0, utils_1.fromInput)(value)) : "";
64
+ if (initialValue !== nextValue && onChange) {
65
+ onChange({
66
+ target: {
67
+ name,
68
+ value: nextValue,
69
+ type: attribute.type,
70
+ },
71
+ });
72
+ }
73
+ }, [currentState, value]);
74
+ return (react_1.default.createElement(Field_1.Field, { name: name, id: name, error: error, hint: description && (0, utils_2.getMessage)(description) },
75
+ react_1.default.createElement(Stack_1.Stack, { spacing: 1 },
76
+ react_1.default.createElement(Flex_1.Flex, null,
77
+ react_1.default.createElement(Field_1.FieldLabel, { required: required }, formatMessage(intlLabel)),
78
+ labelAction && react_1.default.createElement(Box_1.Box, { paddingLeft: 1 }, labelAction)),
79
+ react_1.default.createElement(Grid_1.Grid, { gap: 4 },
80
+ react_1.default.createElement(Grid_1.GridItem, { col: 6 },
81
+ react_1.default.createElement(Box_1.Box, { paddingTop: 2 },
82
+ react_1.default.createElement(NumberInput_1.NumberInput, { disabled: disabled, label: (0, utils_2.getMessage)("customField.comments.input.commentsNumber.label", "Number of comments"), name: `${name}.commentsNumber`, value: currentState.commentsNumber, onValueChange: onCommentsNumberChange })),
83
+ react_1.default.createElement(Box_1.Box, { paddingTop: 2 },
84
+ react_1.default.createElement(Select_1.Select, { disabled: disabled, name: `${name}.renderType`, label: (0, utils_2.getMessage)("customField.comments.input.renderType.label", "Render comments as"), value: currentState.renderType, onChange: onRenderTypeChange }, (0, utils_1.getRenderTypeOptions)(utils_2.getMessage).map(({ value, label }) => (react_1.default.createElement(Select_1.Option, { key: value, value: value }, label))))),
85
+ react_1.default.createElement(Box_1.Box, { paddingTop: 2 },
86
+ react_1.default.createElement(Select_1.Select, { disabled: disabled, name: `${name}.sortByDate`, label: (0, utils_2.getMessage)("customField.comments.input.sortByDate.label", "Sort by creation date"), value: currentState.sortByDate, onChange: onSortByDateChange }, (0, utils_1.getSortByDateOptions)(utils_2.getMessage).map(({ value, label }) => (react_1.default.createElement(Select_1.Option, { key: value, value: value }, label)))))),
87
+ react_1.default.createElement(Grid_1.GridItem, { col: 6 },
88
+ react_1.default.createElement(Box_1.Box, { paddingTop: 2 },
89
+ react_1.default.createElement(Select_1.Select, { disabled: disabled, name: `${name}.filterBy`, label: (0, utils_2.getMessage)("customField.comments.input.filterBy.label", "Filter by"), value: currentState.filterBy, onChange: onFilterByChange }, (0, utils_1.getFilterByOptions)(utils_2.getMessage).map(({ value, label }) => (react_1.default.createElement(Select_1.Option, { key: value, value: value }, label)))),
90
+ react_1.default.createElement(Box_1.Box, { paddingTop: currentState.filterBy ? 2 : 0 },
91
+ currentState.filterBy === "APPROVAL_STATUS" ? (react_1.default.createElement(Select_1.Select, { label: (0, utils_2.getMessage)("customField.comments.input.filterBy.option.approvalStatus.label.details.label", "Specify date"), disabled: disabled, name: `${name}.filterBy.approvalStatus`, value: currentState.filterByValue, onChange: onFilterByValueChange }, (0, utils_1.getApprovalStatusOptions)(utils_2.getMessage).map(({ value, label }) => (react_1.default.createElement(Select_1.Option, { key: value, value: value }, label))))) : null,
92
+ currentState.filterBy === "DATE_CREATED" ? (react_1.default.createElement(DatePicker_1.DatePicker, { label: (0, utils_2.getMessage)("customField.comments.input.filterBy.option.dateCreated.label.details.label", "Specify date"), disabled: disabled, name: `${name}.filterBy.dateCreated`, onChange: onFilterByValueChange, selectedDate: currentState.filterByValue, selectedDateLabel: utils_1.asString })) : null)),
93
+ react_1.default.createElement(Box_1.Box, { paddingTop: 2 },
94
+ react_1.default.createElement(Field_1.FieldLabel, null, (0, utils_2.getMessage)("customField.comments.input.populate.label", "Populate")),
95
+ react_1.default.createElement(Box_1.Box, { paddingTop: 1 },
96
+ react_1.default.createElement(Checkbox_1.Checkbox, { disabled: disabled, children: (0, utils_2.getMessage)("customField.comments.input.populate.author.label", "Populate author field"), value: currentState.populate?.includes("author"), name: `${name}.populate.author`, onChange: onPopulateAuthorChange }),
97
+ react_1.default.createElement(Checkbox_1.Checkbox, { disabled: disabled, children: (0, utils_2.getMessage)("customField.comments.input.populate.avatar.label", "Populate avatar field"), value: currentState.populate?.includes("avatar"), name: `${name}.populate.avatar`, onChange: onPopulateAvatarChange }))))),
98
+ react_1.default.createElement(Field_1.FieldHint, null),
99
+ react_1.default.createElement(Field_1.FieldError, null))));
100
+ };
101
+ exports.CustomFieldInput = CustomFieldInput;
102
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1,10 @@
1
+ export declare type PopulateField = "avatar" | "author";
2
+ export declare type CommentsFieldValue = {
3
+ commentsNumber: number;
4
+ renderType?: "FLAT" | "TREE";
5
+ sortByDate?: "ASC" | "DESC";
6
+ filterBy?: "DATE_CREATED" | "APPROVAL_STATUS";
7
+ filterByValue?: string | Date;
8
+ populate?: Array<PopulateField>;
9
+ };
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,35 @@
1
+ import { SetStateAction, Dispatch } from "react";
2
+ import { getMessage } from "../../../../utils";
3
+ import { CommentsFieldValue, PopulateField } from "./types";
4
+ export declare const asString: () => string;
5
+ export declare const fromInput: (value: unknown) => CommentsFieldValue;
6
+ export declare const toOutput: (state: CommentsFieldValue) => string;
7
+ export declare function assertCorrectState(state: any): asserts state is CommentsFieldValue;
8
+ export declare const handleStateSliceChange: (key: keyof CommentsFieldValue, setState: Dispatch<SetStateAction<CommentsFieldValue>>) => (value: string | number | Date | PopulateField[] | undefined) => void;
9
+ export declare const handlePopulateChange: (key: PopulateField, setState: Dispatch<SetStateAction<CommentsFieldValue>>) => () => void;
10
+ export declare const getRenderTypeOptions: (translate: typeof getMessage) => {
11
+ value: string;
12
+ label: string;
13
+ }[];
14
+ export declare const getSortByDateOptions: (translate: typeof getMessage) => ({
15
+ value: undefined;
16
+ label: string;
17
+ } | {
18
+ value: string;
19
+ label: string;
20
+ })[];
21
+ export declare const getFilterByOptions: (translate: typeof getMessage) => ({
22
+ value: undefined;
23
+ label: string;
24
+ } | {
25
+ value: string;
26
+ label: string;
27
+ })[];
28
+ export declare const getApprovalStatusOptions: (translate: typeof getMessage) => ({
29
+ value: undefined;
30
+ label: string;
31
+ } | {
32
+ value: string;
33
+ label: string;
34
+ })[];
35
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getApprovalStatusOptions = exports.getFilterByOptions = exports.getSortByDateOptions = exports.getRenderTypeOptions = exports.handlePopulateChange = exports.handleStateSliceChange = exports.assertCorrectState = exports.toOutput = exports.fromInput = exports.asString = void 0;
4
+ const lodash_1 = require("lodash");
5
+ const utils_1 = require("../../../../utils");
6
+ const asString = () => "";
7
+ exports.asString = asString;
8
+ const fromInput = (value) => {
9
+ (0, utils_1.assertString)(value);
10
+ const state = JSON.parse(value);
11
+ assertCorrectState(state);
12
+ if (state.filterBy === "DATE_CREATED" && state.filterByValue) {
13
+ state.filterByValue = new Date(state.filterByValue);
14
+ }
15
+ return state;
16
+ };
17
+ exports.fromInput = fromInput;
18
+ const toOutput = (state) => JSON.stringify(state);
19
+ exports.toOutput = toOutput;
20
+ function assertCorrectState(state) {
21
+ if (typeof state.commentsNumber !== "number") {
22
+ throw new utils_1.ValidationError("Comments number is not a number");
23
+ }
24
+ if (state.populate && !Array.isArray(state.populate)) {
25
+ throw new utils_1.ValidationError("Comments populate is not an array");
26
+ }
27
+ stringFields.forEach((field) => {
28
+ if (state[field] && typeof state[field] !== "string") {
29
+ (0, utils_1.assertString)(state[field]);
30
+ }
31
+ });
32
+ }
33
+ exports.assertCorrectState = assertCorrectState;
34
+ const handleStateSliceChange = (key, setState) => (value) => {
35
+ return setState((current) => ({
36
+ ...current,
37
+ [key]: value,
38
+ }));
39
+ };
40
+ exports.handleStateSliceChange = handleStateSliceChange;
41
+ const handlePopulateChange = (key, setState) => () => {
42
+ return setState((current) => {
43
+ const populate = current.populate || [];
44
+ return {
45
+ ...current,
46
+ populate: populate.includes(key)
47
+ ? populate.filter((field) => field !== key)
48
+ : (0, lodash_1.uniq)(populate.concat(key)),
49
+ };
50
+ });
51
+ };
52
+ exports.handlePopulateChange = handlePopulateChange;
53
+ const getRenderTypeOptions = (translate) => [
54
+ {
55
+ value: "TREE",
56
+ label: translate({
57
+ id: "customField.comments.input.renderType.option.tree.label",
58
+ defaultMessage: "Tree",
59
+ }),
60
+ },
61
+ {
62
+ value: "FLAT",
63
+ label: translate({
64
+ id: "customField.comments.input.renderType.option.flat.label",
65
+ defaultMessage: "Flat list",
66
+ }),
67
+ },
68
+ ];
69
+ exports.getRenderTypeOptions = getRenderTypeOptions;
70
+ const getSortByDateOptions = (translate) => [
71
+ {
72
+ value: undefined,
73
+ label: "",
74
+ },
75
+ {
76
+ value: "ASC",
77
+ label: translate({
78
+ id: "customField.comments.input.sortByDate.option.asc.label",
79
+ defaultMessage: "Ascending",
80
+ }),
81
+ },
82
+ {
83
+ value: "DESC",
84
+ label: translate({
85
+ id: "customField.comments.input.sortByDate.option.desc.label",
86
+ defaultMessage: "Descending",
87
+ }),
88
+ },
89
+ ];
90
+ exports.getSortByDateOptions = getSortByDateOptions;
91
+ const getFilterByOptions = (translate) => [
92
+ {
93
+ value: undefined,
94
+ label: "",
95
+ },
96
+ {
97
+ value: "DATE_CREATED",
98
+ label: translate({
99
+ id: "customField.comments.input.filterBy.option.dateCreated.label",
100
+ defaultMessage: "Creation date",
101
+ }),
102
+ },
103
+ {
104
+ value: "APPROVAL_STATUS",
105
+ label: translate({
106
+ id: "customField.comments.input.filterBy.option.approvalStatus.label",
107
+ defaultMessage: "Approval Status",
108
+ }),
109
+ },
110
+ ];
111
+ exports.getFilterByOptions = getFilterByOptions;
112
+ const getApprovalStatusOptions = (translate) => [
113
+ {
114
+ value: undefined,
115
+ label: "",
116
+ },
117
+ {
118
+ value: utils_1.APPROVAL_STATUS.APPROVED,
119
+ label: translate({
120
+ id: "customField.comments.input.filterBy.option.approvalStatus.option.approved.label",
121
+ defaultMessage: "Approved",
122
+ }),
123
+ },
124
+ {
125
+ value: utils_1.APPROVAL_STATUS.PENDING,
126
+ label: translate({
127
+ id: "customField.comments.input.filterBy.option.approvalStatus.option.pending.label",
128
+ defaultMessage: "Pending",
129
+ }),
130
+ },
131
+ {
132
+ value: utils_1.APPROVAL_STATUS.REJECTED,
133
+ label: translate({
134
+ id: "customField.comments.input.filterBy.option.approvalStatus.option.rejected.label",
135
+ defaultMessage: "Rejected",
136
+ }),
137
+ },
138
+ ];
139
+ exports.getApprovalStatusOptions = getApprovalStatusOptions;
140
+ const stringFields = [
141
+ "renderType",
142
+ "sortByDate",
143
+ "filterBy",
144
+ "filterByValue",
145
+ ];
146
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,3 @@
1
+ import { StrapiAdminCustomFieldRegisterInput } from "strapi-typed";
2
+ export declare const commentsCustomField: StrapiAdminCustomFieldRegisterInput;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.commentsCustomField = void 0;
27
+ const pluginId_1 = require("../../pluginId");
28
+ const components_1 = require("./components");
29
+ exports.commentsCustomField = {
30
+ name: "comments",
31
+ pluginId: pluginId_1.pluginId,
32
+ type: "json",
33
+ icon: components_1.CustomFieldIcon,
34
+ intlLabel: {
35
+ defaultMessage: "Comments",
36
+ description: "",
37
+ id: `${pluginId_1.pluginId}.customField.comments.label`,
38
+ },
39
+ intlDescription: {
40
+ defaultMessage: "Specify comments query params",
41
+ description: "",
42
+ id: `${pluginId_1.pluginId}.customField.comments.description`,
43
+ },
44
+ components: {
45
+ Input: async () => Promise.resolve().then(() => __importStar(require("./components/input"))),
46
+ },
47
+ options: {
48
+ base: [],
49
+ advanced: [],
50
+ validator: () => ({}),
51
+ },
52
+ };
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ import { StrapiAdminInstance } from "strapi-typed";
2
+ export declare const registerCustomFields: (app: StrapiAdminInstance) => void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerCustomFields = void 0;
4
+ const comments_1 = require("./comments");
5
+ const registerCustomFields = (app) => {
6
+ if (!canRegister(app)) {
7
+ return;
8
+ }
9
+ app.customFields.register(comments_1.commentsCustomField);
10
+ };
11
+ exports.registerCustomFields = registerCustomFields;
12
+ const canRegister = (app) => !!app.customFields;
13
+ //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
1
  declare const useConfig: (toggleNotification: any) => {
2
- fetch: any;
3
- restartMutation: any;
4
- submitMutation: any;
5
- restoreMutation: any;
2
+ fetch: import("react-query").UseQueryResult<any, unknown>;
3
+ restartMutation: import("react-query").UseMutationResult<any, unknown, any, unknown>;
4
+ submitMutation: import("react-query").UseMutationResult<any, unknown, any, unknown>;
5
+ restoreMutation: import("react-query").UseMutationResult<any, unknown, any, unknown>;
6
6
  };
7
7
  export default useConfig;
8
8
  //# sourceMappingURL=useConfig.d.ts.map
@@ -1,18 +1,15 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  const react_query_1 = require("react-query");
7
4
  const api_1 = require("../pages/Settings/utils/api");
8
- const pluginId_1 = __importDefault(require("../pluginId"));
5
+ const pluginId_1 = require("../pluginId");
9
6
  const useConfig = (toggleNotification) => {
10
7
  const queryClient = (0, react_query_1.useQueryClient)();
11
8
  const fetch = (0, react_query_1.useQuery)("get-config", () => (0, api_1.fetchConfig)(toggleNotification));
12
9
  const handleError = (type, callback = () => { }) => {
13
10
  toggleNotification({
14
11
  type: "warning",
15
- message: `${pluginId_1.default}.page.settings.notification.${type}.error`,
12
+ message: `${pluginId_1.pluginId}.page.settings.notification.${type}.error`,
16
13
  });
17
14
  callback();
18
15
  };
@@ -22,7 +19,7 @@ const useConfig = (toggleNotification) => {
22
19
  }
23
20
  toggleNotification({
24
21
  type: "success",
25
- message: `${pluginId_1.default}.page.settings.notification.${type}.success`,
22
+ message: `${pluginId_1.pluginId}.page.settings.notification.${type}.success`,
26
23
  });
27
24
  callback();
28
25
  };
@@ -0,0 +1,19 @@
1
+ declare const useReportsActionsHandlers: ({ allowedActions, commentId, mutation, onSelectionChange, reports, selectedReports, updateReports, }: {
2
+ allowedActions: any;
3
+ commentId: any;
4
+ mutation: any;
5
+ onSelectionChange: any;
6
+ reports: any;
7
+ selectedReports: any;
8
+ updateReports: any;
9
+ }) => {
10
+ handleBlockItemClick: (id: number) => void;
11
+ handleBlockItemThreadClick: (id: number) => void;
12
+ handleClickResolve: (reportId: any) => Promise<void>;
13
+ handleResolveAllAbuseReportsForComment: (id: number) => void;
14
+ handleResolveAllAbuseReportsForThread: (id: number) => void;
15
+ handleUnblockItemClick: (id: number) => void;
16
+ handleUnblockThreadClick: (id: number) => void;
17
+ };
18
+ export default useReportsActionsHandlers;
19
+ //# sourceMappingURL=useReportsActionsHandlers.d.ts.map
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_query_1 = require("react-query");
4
+ const helper_plugin_1 = require("@strapi/helper-plugin");
5
+ const utils_1 = require("../utils");
6
+ const api_1 = require("../pages/utils/api");
7
+ const useReportsActionsHandlers = ({ allowedActions, commentId, mutation, onSelectionChange, reports, selectedReports, updateReports, }) => {
8
+ const { canModerate, canReviewReports } = allowedActions;
9
+ const { lockApp, unlockApp } = (0, helper_plugin_1.useOverlayBlocker)();
10
+ const queryClient = (0, react_query_1.useQueryClient)();
11
+ const toggleNotification = (0, helper_plugin_1.useNotification)();
12
+ const onSuccess = async () => {
13
+ await queryClient.invalidateQueries("get-data");
14
+ unlockApp();
15
+ };
16
+ const onError = (err) => {
17
+ (0, utils_1.handleAPIError)(err, toggleNotification);
18
+ };
19
+ const mutationConfig = {
20
+ onSuccess,
21
+ onError,
22
+ refetchActive: false,
23
+ };
24
+ const resolveAllAbuseReportsForCommentMutation = (0, react_query_1.useMutation)(api_1.resolveAllAbuseReportsForComment, mutationConfig);
25
+ const resolveAllAbuseReportsForThreadMutation = (0, react_query_1.useMutation)(api_1.resolveAllAbuseReportsForThread, mutationConfig);
26
+ const blockItemMutation = (0, react_query_1.useMutation)(api_1.blockItem, mutationConfig);
27
+ const unblockItemMutation = (0, react_query_1.useMutation)(api_1.unblockItem, mutationConfig);
28
+ const blockItemThreadMutation = (0, react_query_1.useMutation)(api_1.blockItemThread, mutationConfig);
29
+ const unblockItemThreadMutation = (0, react_query_1.useMutation)(api_1.unblockItemThread, mutationConfig);
30
+ const handleClickResolve = async (reportId) => {
31
+ if (canReviewReports) {
32
+ lockApp();
33
+ const item = await mutation.mutateAsync({
34
+ id: commentId,
35
+ reportId,
36
+ });
37
+ if (item) {
38
+ const updatedReports = reports.map((report) => ({
39
+ ...report,
40
+ resolved: reportId === report.id ? true : report.resolved,
41
+ }));
42
+ updateReports(updatedReports);
43
+ onSelectionChange(selectedReports.filter((id) => id !== reportId));
44
+ }
45
+ }
46
+ };
47
+ const perform = (action) => (id) => {
48
+ if (canModerate) {
49
+ lockApp();
50
+ action(id);
51
+ }
52
+ };
53
+ const handleBlockItemClick = perform(blockItemMutation.mutate);
54
+ const handleUnblockItemClick = perform(unblockItemMutation.mutate);
55
+ const handleBlockItemThreadClick = perform(blockItemThreadMutation.mutate);
56
+ const handleUnblockThreadClick = perform(unblockItemThreadMutation.mutate);
57
+ const handleResolveAllAbuseReportsForComment = perform(resolveAllAbuseReportsForCommentMutation.mutate);
58
+ const handleResolveAllAbuseReportsForThread = perform(resolveAllAbuseReportsForThreadMutation.mutate);
59
+ return {
60
+ handleBlockItemClick,
61
+ handleBlockItemThreadClick,
62
+ handleClickResolve,
63
+ handleResolveAllAbuseReportsForComment,
64
+ handleResolveAllAbuseReportsForThread,
65
+ handleUnblockItemClick,
66
+ handleUnblockThreadClick,
67
+ };
68
+ };
69
+ exports.default = useReportsActionsHandlers;
70
+ //# sourceMappingURL=useReportsActionsHandlers.js.map
@@ -1,6 +1,7 @@
1
+ import { StrapiAdminInstance } from "strapi-typed";
1
2
  import { ToBeFixed } from "../../types";
2
3
  declare const _default: {
3
- register(app: ToBeFixed): void;
4
+ register(app: StrapiAdminInstance): void;
4
5
  registerTrads({ locales }: ToBeFixed): Promise<any[]>;
5
6
  };
6
7
  export default _default;
@@ -33,11 +33,12 @@ const Initializer_1 = __importDefault(require("./components/Initializer"));
33
33
  const PluginIcon_1 = __importDefault(require("./components/PluginIcon"));
34
34
  const permissions_1 = __importDefault(require("./permissions"));
35
35
  const reducers_1 = __importDefault(require("./reducers"));
36
+ const custom_fields_1 = require("./custom-fields");
36
37
  const { name, displayName } = pluginPkg.strapi;
37
38
  exports.default = {
38
39
  register(app) {
39
40
  app.addMenuLink({
40
- to: `/plugins/${pluginId_1.pluginId}/discover`,
41
+ to: `/plugins/${pluginId_1.pluginId}`,
41
42
  badgeContent: 1,
42
43
  icon: PluginIcon_1.default,
43
44
  intlLabel: {
@@ -45,7 +46,7 @@ exports.default = {
45
46
  defaultMessage: displayName,
46
47
  },
47
48
  Component: async () => {
48
- const component = await Promise.resolve().then(() => __importStar(require("./pages/App")));
49
+ const component = await Promise.resolve().then(() => __importStar(require('./pages/App')));
49
50
  return component;
50
51
  },
51
52
  permissions: permissions_1.default.access,
@@ -78,6 +79,7 @@ exports.default = {
78
79
  isReady: false,
79
80
  name,
80
81
  });
82
+ (0, custom_fields_1.registerCustomFields)(app);
81
83
  },
82
84
  async registerTrads({ locales }) {
83
85
  const importedTrads = await Promise.all(locales.map((locale) => {
@@ -14,12 +14,13 @@ const ComingSoonPage_1 = __importDefault(require("../ComingSoonPage"));
14
14
  const getUrl_1 = __importDefault(require("../../utils/getUrl"));
15
15
  const Discover_1 = __importDefault(require("../Discover"));
16
16
  const Details_1 = __importDefault(require("../Details"));
17
+ const Reports_1 = __importDefault(require("../Reports"));
17
18
  const api_1 = require("./utils/api");
18
19
  const actions_1 = require("./reducer/actions");
19
20
  const selectors_1 = __importDefault(require("./reducer/selectors"));
20
21
  const App = ({ setConfig }) => {
21
22
  const toggleNotification = (0, helper_plugin_1.useNotification)();
22
- const { isLoading, isFetching } = (0, react_query_1.useQuery)("get-config", () => (0, api_1.fetchConfig)(toggleNotification), {
23
+ const { isLoading, isFetching } = (0, react_query_1.useQuery)('get-config', () => (0, api_1.fetchConfig)(toggleNotification), {
23
24
  initialData: {},
24
25
  onSuccess: (response) => {
25
26
  setConfig(response);
@@ -30,12 +31,12 @@ const App = ({ setConfig }) => {
30
31
  }
31
32
  return (react_1.default.createElement("div", null,
32
33
  react_1.default.createElement(react_router_dom_1.Switch, null,
33
- react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)("dashboard"), component: ComingSoonPage_1.default, exact: true }),
34
- react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)("discover"), component: Discover_1.default, exact: true }),
35
- react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)("discover/:id"), component: Details_1.default, exact: true }),
36
- react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)("reports"), component: ComingSoonPage_1.default, exact: true }),
37
- react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)("settings"), component: ComingSoonPage_1.default, exact: true }),
38
- react_1.default.createElement(react_router_dom_1.Route, { component: helper_plugin_1.NotFound }))));
34
+ react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)('discover/:id'), component: Details_1.default }),
35
+ react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)('dashboard'), component: ComingSoonPage_1.default }),
36
+ react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)('discover'), component: Discover_1.default }),
37
+ react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)('settings'), component: ComingSoonPage_1.default }),
38
+ react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)('reports'), component: Reports_1.default }),
39
+ react_1.default.createElement(react_router_dom_1.Route, { path: (0, getUrl_1.default)(), exact: true, children: react_1.default.createElement(react_router_dom_1.Redirect, { to: (0, getUrl_1.default)('discover') }) }))));
39
40
  };
40
41
  const mapStateToProps = (0, selectors_1.default)();
41
42
  function mapDispatchToProps(dispatch) {
@@ -3,7 +3,7 @@ declare const initialState: {
3
3
  };
4
4
  declare const reducer: (state: {
5
5
  config: {};
6
- } | undefined, action: any) => any;
6
+ } | undefined, action: any) => unknown;
7
7
  export default reducer;
8
8
  export { initialState };
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,4 @@
1
- declare const _default: any;
1
+ import React from "react";
2
+ declare const _default: React.MemoExoticComponent<() => JSX.Element>;
2
3
  export default _default;
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -30,14 +30,14 @@ const react_1 = __importStar(require("react"));
30
30
  const Box_1 = require("@strapi/design-system/Box");
31
31
  const EmptyStateLayout_1 = require("@strapi/design-system/EmptyStateLayout");
32
32
  const Layout_1 = require("@strapi/design-system/Layout");
33
- const icons_1 = require("@strapi/icons");
33
+ const icons_1 = require("../../components/icons");
34
34
  const getMessage_1 = __importDefault(require("../../utils/getMessage"));
35
35
  const Nav_1 = __importDefault(require("../../components/Nav"));
36
36
  const ComingSoonPage = () => {
37
37
  return (react_1.default.createElement(Box_1.Box, { background: "neutral100" },
38
38
  react_1.default.createElement(Layout_1.Layout, { sideNav: react_1.default.createElement(Nav_1.default, null) },
39
39
  react_1.default.createElement(Box_1.Box, { padding: 8, background: "neutral100" },
40
- react_1.default.createElement(EmptyStateLayout_1.EmptyStateLayout, { icon: react_1.default.createElement(icons_1.Illo, null), content: (0, getMessage_1.default)("page.coming.soon") })))));
40
+ react_1.default.createElement(EmptyStateLayout_1.EmptyStateLayout, { icon: icons_1.illo, content: (0, getMessage_1.default)("page.coming.soon") })))));
41
41
  };
42
42
  exports.default = (0, react_1.memo)(ComingSoonPage);
43
43
  //# sourceMappingURL=index.js.map