@selfcommunity/react-ui 0.8.0-alpha.9 → 0.8.0-embeds.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/BottomNavigation/BottomNavigation.js +11 -2
- package/lib/cjs/components/Composer/Composer.js +10 -2
- package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +12 -3
- package/lib/cjs/components/CreateEventButton/CreateEventButton.js +5 -1
- package/lib/cjs/components/CreateEventWidget/CreateEventWidget.js +5 -1
- package/lib/cjs/components/Feed/Feed.js +9 -1
- package/lib/cjs/components/MyEventsWidget/MyEventsWidget.js +6 -2
- package/lib/cjs/components/NavigationToolbar/NavigationToolbar.js +12 -3
- package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +11 -2
- package/lib/cjs/components/Notification/Event/Event.js +4 -0
- package/lib/cjs/components/OnBoardingWidget/OnBoardingWidget.d.ts +5 -0
- package/lib/cjs/components/OnBoardingWidget/OnBoardingWidget.js +18 -6
- package/lib/cjs/components/UserSubscribedGroupsWidget/UserSubscribedGroupsWidget.js +7 -2
- package/lib/cjs/shared/ContributionActionsMenu/index.js +6 -6
- package/lib/cjs/shared/InfiniteScroll/index.js +1 -1
- package/lib/cjs/shared/Media/Link/DisplayComponent.js +2 -2
- package/lib/cjs/utils/formatRelativeTime.js +2 -2
- package/lib/esm/components/BottomNavigation/BottomNavigation.js +11 -2
- package/lib/esm/components/Composer/Composer.js +10 -2
- package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +13 -4
- package/lib/esm/components/CreateEventButton/CreateEventButton.js +5 -1
- package/lib/esm/components/CreateEventWidget/CreateEventWidget.js +5 -1
- package/lib/esm/components/Feed/Feed.js +11 -3
- package/lib/esm/components/MyEventsWidget/MyEventsWidget.js +7 -3
- package/lib/esm/components/NavigationToolbar/NavigationToolbar.js +12 -3
- package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +11 -2
- package/lib/esm/components/Notification/Event/Event.js +4 -0
- package/lib/esm/components/OnBoardingWidget/OnBoardingWidget.d.ts +5 -0
- package/lib/esm/components/OnBoardingWidget/OnBoardingWidget.js +18 -6
- package/lib/esm/components/UserSubscribedGroupsWidget/UserSubscribedGroupsWidget.js +8 -3
- package/lib/esm/shared/ContributionActionsMenu/index.js +6 -6
- package/lib/esm/shared/InfiniteScroll/index.js +1 -1
- package/lib/esm/shared/Media/Link/DisplayComponent.js +2 -2
- package/lib/esm/utils/formatRelativeTime.js +2 -2
- package/lib/umd/react-ui.js +1 -1
- package/package.json +7 -7
|
@@ -63,8 +63,17 @@ function BottomNavigation(inProps) {
|
|
|
63
63
|
const { preferences, features } = (0, react_core_1.useSCPreferences)();
|
|
64
64
|
// MEMO
|
|
65
65
|
const privateMessagingEnabled = (0, react_1.useMemo)(() => features.includes(types_1.SCFeatureName.PRIVATE_MESSAGING), [features]);
|
|
66
|
-
const groupsEnabled = (0, react_1.useMemo)(() =>
|
|
67
|
-
|
|
66
|
+
const groupsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
67
|
+
features &&
|
|
68
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
69
|
+
features.includes(types_1.SCFeatureName.GROUPING) &&
|
|
70
|
+
react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED in preferences &&
|
|
71
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value, [preferences, features]);
|
|
72
|
+
const eventsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
73
|
+
features &&
|
|
74
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
75
|
+
react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
76
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
68
77
|
const exploreStreamEnabled = preferences[react_core_1.SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED].value;
|
|
69
78
|
const postOnlyStaffEnabled = preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value;
|
|
70
79
|
const contentAvailable = preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value;
|
|
@@ -430,10 +430,16 @@ function Composer(inProps) {
|
|
|
430
430
|
if (features.includes(types_1.SCFeatureName.TAGGING) && addressing !== null) {
|
|
431
431
|
data.addressing = addressing.map((t) => t.id);
|
|
432
432
|
}
|
|
433
|
-
if (features.includes(types_1.SCFeatureName.
|
|
433
|
+
if (features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
434
|
+
features.includes(types_1.SCFeatureName.GROUPING) &&
|
|
435
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value &&
|
|
436
|
+
group !== null) {
|
|
434
437
|
data.group = group.id;
|
|
435
438
|
}
|
|
436
|
-
if (features.includes(types_1.SCFeatureName.
|
|
439
|
+
if (features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
440
|
+
features.includes(types_1.SCFeatureName.EVENT) &&
|
|
441
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value &&
|
|
442
|
+
event !== null) {
|
|
437
443
|
data.event = event.id;
|
|
438
444
|
}
|
|
439
445
|
setIsSubmitting(true);
|
|
@@ -497,6 +503,8 @@ function Composer(inProps) {
|
|
|
497
503
|
}
|
|
498
504
|
else {
|
|
499
505
|
onClose && onClose(e);
|
|
506
|
+
setLayer(null);
|
|
507
|
+
dispatch({ type: 'reset' });
|
|
500
508
|
/*setLayer(null);
|
|
501
509
|
feedType && feedType === SCFeedTypologyType.CATEGORY
|
|
502
510
|
? dispatch({type: 'resetCategoryFeed'})
|
|
@@ -60,10 +60,19 @@ const AudienceLayer = react_1.default.forwardRef((props, ref) => {
|
|
|
60
60
|
const [value, setValue] = (0, react_1.useState)(defaultValue || undefined);
|
|
61
61
|
// HOOKS
|
|
62
62
|
const { scAddressingTags } = (0, react_core_1.useSCFetchAddressingTagList)({ fetch: autocompleteOpen });
|
|
63
|
-
const { features } = (0, react_core_1.useSCPreferences)();
|
|
63
|
+
const { preferences, features } = (0, react_core_1.useSCPreferences)();
|
|
64
64
|
// MEMO
|
|
65
|
-
const
|
|
66
|
-
|
|
65
|
+
const groupsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
66
|
+
features &&
|
|
67
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
68
|
+
features.includes(types_1.SCFeatureName.GROUPING) &&
|
|
69
|
+
react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED in preferences &&
|
|
70
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value, [preferences, features]);
|
|
71
|
+
const eventsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
72
|
+
features &&
|
|
73
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
74
|
+
react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
75
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
67
76
|
// HANDLERS
|
|
68
77
|
const handleSave = (0, react_1.useCallback)(() => {
|
|
69
78
|
audience === AudienceTypes.AUDIENCE_GROUP || audience === AudienceTypes.AUDIENCE_EVENT
|
|
@@ -54,7 +54,11 @@ function CreateEventButton(inProps) {
|
|
|
54
54
|
// CONST
|
|
55
55
|
const authUserId = scUserContext.user ? scUserContext.user.id : null;
|
|
56
56
|
const { preferences, features } = (0, react_core_1.useSCPreferences)();
|
|
57
|
-
const eventsEnabled = (0, react_1.useMemo)(() =>
|
|
57
|
+
const eventsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
58
|
+
features &&
|
|
59
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
60
|
+
react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
61
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
58
62
|
const onlyStaffEnabled = (0, react_1.useMemo)(() => preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ONLY_STAFF_ENABLED].value, [preferences]);
|
|
59
63
|
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
60
64
|
// @ts-ignore
|
|
@@ -40,7 +40,11 @@ function CreateEventWidget(inProps) {
|
|
|
40
40
|
const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
|
|
41
41
|
// HOOK
|
|
42
42
|
const { preferences, features } = (0, react_core_1.useSCPreferences)();
|
|
43
|
-
const eventsEnabled = (0, react_1.useMemo)(() =>
|
|
43
|
+
const eventsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
44
|
+
features &&
|
|
45
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
46
|
+
react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
47
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
44
48
|
const authUserId = scUserContext.user ? scUserContext.user.id : null;
|
|
45
49
|
const onlyStaffEnabled = (0, react_1.useMemo)(() => preferences[react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ONLY_STAFF_ENABLED].value, [preferences]);
|
|
46
50
|
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
@@ -26,6 +26,12 @@ const Skeleton_2 = tslib_1.__importDefault(require("./Skeleton"));
|
|
|
26
26
|
const use_deep_compare_effect_1 = require("use-deep-compare-effect");
|
|
27
27
|
const StickyBox_1 = tslib_1.__importDefault(require("../../shared/StickyBox"));
|
|
28
28
|
const constants_1 = require("./constants");
|
|
29
|
+
const messages = (0, react_intl_1.defineMessages)({
|
|
30
|
+
refresh: {
|
|
31
|
+
id: 'ui.feed.refreshRelease',
|
|
32
|
+
defaultMessage: 'ui.feed.refreshRelease'
|
|
33
|
+
}
|
|
34
|
+
});
|
|
29
35
|
const classes = {
|
|
30
36
|
root: `${constants_1.PREFIX}-root`,
|
|
31
37
|
left: `${constants_1.PREFIX}-left`,
|
|
@@ -78,7 +84,9 @@ const Feed = (inProps, ref) => {
|
|
|
78
84
|
props: inProps,
|
|
79
85
|
name: constants_1.PREFIX
|
|
80
86
|
});
|
|
81
|
-
|
|
87
|
+
// HOOKS
|
|
88
|
+
const intl = (0, react_intl_1.useIntl)();
|
|
89
|
+
const { id = 'feed', className, endpoint, endpointQueryParams = { limit: Pagination_1.DEFAULT_PAGINATION_LIMIT, offset: Pagination_1.DEFAULT_PAGINATION_OFFSET }, endMessage = (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.feed.noOtherFeedObject", defaultMessage: "ui.feed.noOtherFeedObject" }), refreshMessage = (0, jsx_runtime_1.jsx)(material_1.Typography, { dangerouslySetInnerHTML: { __html: `${intl.formatMessage(messages.refresh)}` } }), HeaderComponent, FooterComponent = Footer_1.default, FooterComponentProps = {}, widgets = [], ItemComponent, itemPropsGenerator, itemIdGenerator, ItemProps = {}, ItemSkeleton, ItemSkeletonProps = {}, onNextData, onPreviousData, FeedSidebarProps = {}, CustomAdvProps = {}, enabledCustomAdvPositions = [types_1.SCCustomAdvPosition.POSITION_FEED_SIDEBAR, types_1.SCCustomAdvPosition.POSITION_FEED], requireAuthentication = false, cacheStrategy = utils_1.CacheStrategies.NETWORK_ONLY, prefetchedData, scrollableTargetId, VirtualizedScrollerProps = {}, disablePaginationLinks = false, hidePaginationLinks = true, paginationLinksPageQueryParam = Pagination_1.DEFAULT_PAGINATION_QUERY_PARAM_NAME, PaginationLinkProps = {}, hideAdvs = false, emptyFeedPlaceholder } = props;
|
|
82
90
|
// CONTEXT
|
|
83
91
|
const scPreferences = (0, react_1.useContext)(react_core_1.SCPreferencesContext);
|
|
84
92
|
const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
|
|
@@ -66,8 +66,12 @@ function MyEventsWidget(inProps) {
|
|
|
66
66
|
// CONTEXT
|
|
67
67
|
const scUserContext = (0, react_core_1.useSCUser)();
|
|
68
68
|
const scRoutingContext = (0, react_core_1.useSCRouting)();
|
|
69
|
-
const { features } = (0, react_core_1.useSCPreferences)();
|
|
70
|
-
const eventsEnabled = (0, react_1.useMemo)(() =>
|
|
69
|
+
const { preferences, features } = (0, react_core_1.useSCPreferences)();
|
|
70
|
+
const eventsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
71
|
+
features &&
|
|
72
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
73
|
+
react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
74
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
71
75
|
// REFS
|
|
72
76
|
const updatesSubscription = (0, react_1.useRef)(null);
|
|
73
77
|
/**
|
|
@@ -110,12 +110,21 @@ function NavigationToolbar(inProps) {
|
|
|
110
110
|
return _preferences;
|
|
111
111
|
}, [scPreferences.preferences]);
|
|
112
112
|
const privateMessagingEnabled = (0, react_1.useMemo)(() => scPreferences.features.includes(types_1.SCFeatureName.PRIVATE_MESSAGING), [scPreferences.features]);
|
|
113
|
-
const groupsEnabled = (0, react_1.useMemo)(() => scPreferences.
|
|
114
|
-
|
|
113
|
+
const groupsEnabled = (0, react_1.useMemo)(() => scPreferences.preferences &&
|
|
114
|
+
scPreferences.features &&
|
|
115
|
+
scPreferences.features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
116
|
+
scPreferences.features.includes(types_1.SCFeatureName.GROUPING) &&
|
|
117
|
+
react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED in scPreferences.preferences &&
|
|
118
|
+
scPreferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value, [scPreferences.preferences, scPreferences.features]);
|
|
119
|
+
const eventsEnabled = (0, react_1.useMemo)(() => scPreferences.preferences &&
|
|
120
|
+
scPreferences.features &&
|
|
121
|
+
scPreferences.features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
122
|
+
react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in scPreferences.preferences &&
|
|
123
|
+
scPreferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [scPreferences.preferences, scPreferences.features]);
|
|
115
124
|
const showComposer = (0, react_1.useMemo)(() => {
|
|
116
125
|
return (!disableComposer &&
|
|
117
126
|
(!scPreferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value || react_core_1.UserUtils.isStaff(scUserContext.user)));
|
|
118
|
-
}, [
|
|
127
|
+
}, [preferences, disableComposer, scUserContext.user]);
|
|
119
128
|
// STATE
|
|
120
129
|
const [anchorNotification, setAnchorNotification] = react_1.default.useState(null);
|
|
121
130
|
// HANDLERS
|
|
@@ -80,8 +80,17 @@ function NavigationToolbarMobile(inProps) {
|
|
|
80
80
|
// STATE
|
|
81
81
|
const [searchOpen, setSearchOpen] = (0, react_1.useState)(false);
|
|
82
82
|
// MEMO
|
|
83
|
-
const groupsEnabled = (0, react_1.useMemo)(() =>
|
|
84
|
-
|
|
83
|
+
const groupsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
84
|
+
features &&
|
|
85
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
86
|
+
features.includes(types_1.SCFeatureName.GROUPING) &&
|
|
87
|
+
react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED in preferences &&
|
|
88
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value, [preferences, features]);
|
|
89
|
+
const eventsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
90
|
+
features &&
|
|
91
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
92
|
+
react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
93
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
85
94
|
const exploreStreamEnabled = preferences[react_core_1.SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED].value;
|
|
86
95
|
const postOnlyStaffEnabled = preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value;
|
|
87
96
|
const contentAvailable = preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value;
|
|
@@ -53,6 +53,8 @@ function EventNotification(props) {
|
|
|
53
53
|
}), { onClick: notificationObject.user.deleted ? () => setOpenAlert(true) : null }, { children: (0, jsx_runtime_1.jsx)(UserAvatar_1.default, Object.assign({ hide: !notificationObject.user.community_badge, smaller: true }, { children: (0, jsx_runtime_1.jsx)(material_1.Avatar, { alt: notificationObject.user.username, variant: "circular", src: notificationObject.user.avatar, classes: { root: classes.avatar } }) })) })), primary: (0, jsx_runtime_1.jsxs)(material_1.Box, { children: [(0, jsx_runtime_1.jsx)(react_core_1.Link, Object.assign({}, (!notificationObject.user.deleted && {
|
|
54
54
|
to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, notificationObject.user)
|
|
55
55
|
}), { onClick: notificationObject.user.deleted ? () => setOpenAlert(true) : null, className: classes.username }, { children: notificationObject.user.username })), ' ', (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: `ui.notification.event.${notificationObject.type}`, defaultMessage: `ui.notification.event.${notificationObject.type}`, values: {
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
57
|
+
// @ts-ignore
|
|
56
58
|
icon: (...chunks) => (0, jsx_runtime_1.jsx)(material_1.Icon, { children: chunks }),
|
|
57
59
|
event: notificationObject.event.name,
|
|
58
60
|
link: (...chunks) => (0, jsx_runtime_1.jsx)(react_core_1.Link, Object.assign({ to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, notificationObject.event) }, { children: chunks }))
|
|
@@ -71,6 +73,8 @@ function EventNotification(props) {
|
|
|
71
73
|
}), { onClick: notificationObject.user.deleted ? () => setOpenAlert(true) : null }, { children: (0, jsx_runtime_1.jsx)(UserAvatar_1.default, Object.assign({ hide: !notificationObject.user.community_badge, smaller: true }, { children: (0, jsx_runtime_1.jsx)(material_1.Avatar, { className: classes.avatar, alt: notificationObject.user.username, variant: "circular", src: notificationObject.user.avatar }) })) })), primary: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_core_1.Link, Object.assign({}, (!notificationObject.user.deleted && {
|
|
72
74
|
to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, notificationObject.user)
|
|
73
75
|
}), { onClick: notificationObject.user.deleted ? () => setOpenAlert(true) : null, className: classes.username }, { children: notificationObject.user.username })), ' ', (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: `ui.notification.${notificationObject.type}`, defaultMessage: `ui.notification.${notificationObject.type}`, values: {
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
77
|
+
// @ts-ignore
|
|
74
78
|
icon: (...chunks) => (0, jsx_runtime_1.jsx)(material_1.Icon, { children: chunks }),
|
|
75
79
|
event: notificationObject.event.name,
|
|
76
80
|
link: (...chunks) => (0, jsx_runtime_1.jsx)(react_core_1.Link, Object.assign({ to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, notificationObject.event) }, { children: chunks }))
|
|
@@ -18,6 +18,11 @@ export interface OnBoardingWidgetProps extends VirtualScrollerItemProps {
|
|
|
18
18
|
* @default null
|
|
19
19
|
*/
|
|
20
20
|
onGeneratedContent?: (feedObjs: SCFeedObjectType[]) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Force widget expanded
|
|
23
|
+
* @default false
|
|
24
|
+
*/
|
|
25
|
+
forceExpanded?: boolean;
|
|
21
26
|
}
|
|
22
27
|
declare const OnBoardingWidget: (inProps: OnBoardingWidgetProps) => JSX.Element;
|
|
23
28
|
export default OnBoardingWidget;
|
|
@@ -53,7 +53,7 @@ const OnBoardingWidget = (inProps) => {
|
|
|
53
53
|
props: inProps,
|
|
54
54
|
name: constants_1.PREFIX
|
|
55
55
|
});
|
|
56
|
-
const { className, GenerateContentsParams = {}, onGeneratedContent = null, onHeightChange } = props, rest = tslib_1.__rest(props, ["className", "GenerateContentsParams", "onGeneratedContent", "onHeightChange"]);
|
|
56
|
+
const { className, GenerateContentsParams = {}, onGeneratedContent = null, onHeightChange, onStateChange, forceExpanded = false } = props, rest = tslib_1.__rest(props, ["className", "GenerateContentsParams", "onGeneratedContent", "onHeightChange", "onStateChange", "forceExpanded"]);
|
|
57
57
|
// STATE
|
|
58
58
|
const [loading, setLoading] = (0, react_1.useState)(true);
|
|
59
59
|
const [initialized, setInitialized] = (0, react_1.useState)(false);
|
|
@@ -65,7 +65,7 @@ const OnBoardingWidget = (inProps) => {
|
|
|
65
65
|
const allStepsDone = (0, react_1.useMemo)(() => {
|
|
66
66
|
return steps === null || steps === void 0 ? void 0 : steps.every((step) => step.status === types_1.SCOnBoardingStepStatusType.COMPLETED);
|
|
67
67
|
}, [steps]);
|
|
68
|
-
const [expanded, setExpanded] = (0, react_1.useState)(!allStepsDone);
|
|
68
|
+
const [expanded, setExpanded] = (0, react_1.useState)(!allStepsDone || forceExpanded);
|
|
69
69
|
const [_step, setStep] = (0, react_1.useState)(nextStep);
|
|
70
70
|
const currentContentsStep = steps === null || steps === void 0 ? void 0 : steps.find((s) => s.step === types_1.SCOnBoardingStepType.CONTENTS);
|
|
71
71
|
const prevContentsStep = (0, react_core_1.usePreviousValue)(currentContentsStep);
|
|
@@ -86,6 +86,15 @@ const OnBoardingWidget = (inProps) => {
|
|
|
86
86
|
const isMobile = (0, material_1.useMediaQuery)(theme.breakpoints.down('md'));
|
|
87
87
|
const { categories, isLoading } = (0, react_core_1.useSCFetchCategories)();
|
|
88
88
|
// HANDLERS
|
|
89
|
+
/**
|
|
90
|
+
* Notify changes to Feed if the Widget is contained
|
|
91
|
+
*/
|
|
92
|
+
const notifyLayoutChanges = (0, react_1.useMemo)(() => (state) => {
|
|
93
|
+
if (onStateChange && state) {
|
|
94
|
+
onStateChange(state);
|
|
95
|
+
}
|
|
96
|
+
onHeightChange && onHeightChange();
|
|
97
|
+
}, [onStateChange, onHeightChange]);
|
|
89
98
|
const completeStep = (s) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
90
99
|
if (s.status !== types_1.SCOnBoardingStepStatusType.COMPLETED) {
|
|
91
100
|
yield api_services_1.OnBoardingService.completeAStep(s.id)
|
|
@@ -131,8 +140,9 @@ const OnBoardingWidget = (inProps) => {
|
|
|
131
140
|
setStep(newStep);
|
|
132
141
|
};
|
|
133
142
|
const handleExpand = () => {
|
|
134
|
-
|
|
135
|
-
|
|
143
|
+
const _expanded = !expanded;
|
|
144
|
+
setExpanded(_expanded);
|
|
145
|
+
notifyLayoutChanges({ forceExpanded: _expanded });
|
|
136
146
|
};
|
|
137
147
|
const generateContent = (stepId) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
138
148
|
if (!isLoading && !categories.length) {
|
|
@@ -178,11 +188,13 @@ const OnBoardingWidget = (inProps) => {
|
|
|
178
188
|
if (!initialized && nextStep) {
|
|
179
189
|
setStep(nextStep);
|
|
180
190
|
setInitialized(true);
|
|
191
|
+
notifyLayoutChanges({ forceExpanded: expanded });
|
|
181
192
|
}
|
|
182
193
|
}, [initialized, nextStep]);
|
|
183
194
|
(0, react_1.useEffect)(() => {
|
|
184
|
-
|
|
185
|
-
|
|
195
|
+
const _expanded = !allStepsDone;
|
|
196
|
+
setExpanded(_expanded);
|
|
197
|
+
notifyLayoutChanges({ forceExpanded: _expanded });
|
|
186
198
|
}, [allStepsDone]);
|
|
187
199
|
(0, react_1.useEffect)(() => {
|
|
188
200
|
if (isAdmin) {
|
|
@@ -73,8 +73,13 @@ function UserSubscribedGroupsWidget(inProps) {
|
|
|
73
73
|
// CONTEXT
|
|
74
74
|
const scUserContext = (0, react_core_1.useSCUser)();
|
|
75
75
|
const isMe = (0, react_1.useMemo)(() => scUserContext.user && userId === scUserContext.user.id, [scUserContext.user, userId]);
|
|
76
|
-
const { features } = (0, react_core_1.useSCPreferences)();
|
|
77
|
-
const groupsEnabled = (0, react_1.useMemo)(() =>
|
|
76
|
+
const { preferences, features } = (0, react_core_1.useSCPreferences)();
|
|
77
|
+
const groupsEnabled = (0, react_1.useMemo)(() => preferences &&
|
|
78
|
+
features &&
|
|
79
|
+
features.includes(types_1.SCFeatureName.TAGGING) &&
|
|
80
|
+
features.includes(types_1.SCFeatureName.GROUPING) &&
|
|
81
|
+
react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED in preferences &&
|
|
82
|
+
preferences[react_core_1.SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value, [preferences, features]);
|
|
78
83
|
// STATE
|
|
79
84
|
const [state, dispatch] = (0, react_1.useReducer)(widget_1.dataWidgetReducer, {
|
|
80
85
|
isLoadingNext: false,
|
|
@@ -77,7 +77,6 @@ const messages = (0, react_intl_1.defineMessages)({
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
function ContributionActionsMenu(props) {
|
|
80
|
-
var _a, _b, _c;
|
|
81
80
|
// PROPS
|
|
82
81
|
const { className, feedObjectId, feedObject, feedObjectType = types_1.SCContributionType.POST, commentObjectId, commentObject, onFlagContribution, onEditContribution, onHideContribution, onDeleteContribution, onRestoreContribution, onSuspendNotificationContribution, onSuspendNotificationEvent, PopperProps = {} } = props, rest = tslib_1.__rest(props, ["className", "feedObjectId", "feedObject", "feedObjectType", "commentObjectId", "commentObject", "onFlagContribution", "onEditContribution", "onHideContribution", "onDeleteContribution", "onRestoreContribution", "onSuspendNotificationContribution", "onSuspendNotificationEvent", "PopperProps"]);
|
|
83
82
|
// INTL
|
|
@@ -624,9 +623,9 @@ function ContributionActionsMenu(props) {
|
|
|
624
623
|
return name;
|
|
625
624
|
}
|
|
626
625
|
/**
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
626
|
+
* action
|
|
627
|
+
* @param sectionId
|
|
628
|
+
*/
|
|
630
629
|
function handleOpenSection(sectionId) {
|
|
631
630
|
if (sectionId) {
|
|
632
631
|
if (sectionId === openSection) {
|
|
@@ -705,7 +704,8 @@ function ContributionActionsMenu(props) {
|
|
|
705
704
|
scUserContext.user.id !== contributionObj.author.id &&
|
|
706
705
|
contributionObj &&
|
|
707
706
|
contributionObj.type !== types_1.SCContributionType.COMMENT &&
|
|
708
|
-
Boolean(contributionObj.event)
|
|
707
|
+
Boolean(contributionObj.event) &&
|
|
708
|
+
Boolean(contributionObj.event.active));
|
|
709
709
|
}
|
|
710
710
|
/**
|
|
711
711
|
* Renders section general
|
|
@@ -728,7 +728,7 @@ function ContributionActionsMenu(props) {
|
|
|
728
728
|
, Object.assign({
|
|
729
729
|
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
730
730
|
// @ts-ignore
|
|
731
|
-
|
|
731
|
+
ref: (ref) => {
|
|
732
732
|
popperRef.current = ref;
|
|
733
733
|
}, "aria-haspopup": "true", onClick: handleOpen, className: classes.button, size: "small" }, { children: contributionObj && (contributionObj.collapsed || contributionObj.deleted) ? ((0, jsx_runtime_1.jsxs)("span", Object.assign({ className: classes.visibilityIcons }, { children: [contributionObj.collapsed ? (0, jsx_runtime_1.jsx)(Icon_1.default, { children: "visibility_off" }) : (0, jsx_runtime_1.jsx)(Icon_1.default, { children: "delete" }), (0, jsx_runtime_1.jsx)(Icon_1.default, { children: "expand_more" })] }))) : ((0, jsx_runtime_1.jsx)(Icon_1.default, { children: "more_vert" })) })), isMobile ? ((0, jsx_runtime_1.jsx)(material_1.SwipeableDrawer, Object.assign({ open: open, onClose: handleClose, onOpen: handleOpen, anchor: "bottom", disableSwipeToOpen: true }, { children: renderContent() }))) : ((0, jsx_runtime_1.jsx)(PopperRoot, Object.assign({ open: open, anchorEl: popperRef.current, role: undefined, transition: true, className: classes.popperRoot }, PopperProps, { placement: "bottom-end" }, { children: ({ TransitionProps, placement }) => ((0, jsx_runtime_1.jsx)(material_1.Grow, Object.assign({}, TransitionProps, { style: { transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom' } }, { children: (0, jsx_runtime_1.jsx)(material_1.Paper, Object.assign({ variant: 'outlined', className: classes.paper }, { children: (0, jsx_runtime_1.jsx)(material_1.ClickAwayListener, Object.assign({ onClickAway: handleClose }, { children: renderContent() })) })) }))) }))), openConfirmDialog && ((0, jsx_runtime_1.jsx)(ConfirmDialog_1.default, Object.assign({ open: openConfirmDialog }, (currentAction === ContributionsActionsMenu_1.DELETE_CONTRIBUTION
|
|
734
734
|
? {
|
|
@@ -225,7 +225,7 @@ class InfiniteScroll extends react_1.Component {
|
|
|
225
225
|
// because heighted infiniteScroll visualy breaks
|
|
226
226
|
// on drag down as overflow becomes visible
|
|
227
227
|
const outerDivStyle = this.props.pullDownToRefresh && this.props.height ? { overflow: 'auto' } : {};
|
|
228
|
-
return ((0, jsx_runtime_1.jsx)("div", Object.assign({ style: outerDivStyle, className: "infinite-scroll-component__outerdiv" }, { children: (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: `infinite-scroll-component ${this.props.className || ''}`, ref: (infScroll) => (this._infScroll = infScroll), style: style }, { children: [this.props.header, this.props.pullDownToRefresh && ((0, jsx_runtime_1.jsx)("div", Object.assign({ style: { position: 'relative' }, ref: (pullDown) => (this._pullDown = pullDown) }, { children: (0, jsx_runtime_1.jsx)("div", Object.assign({ style: {
|
|
228
|
+
return ((0, jsx_runtime_1.jsx)("div", Object.assign({ style: outerDivStyle, className: "infinite-scroll-component__outerdiv" }, { children: (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: `infinite-scroll-component ${this.props.className || ''}`, ref: (infScroll) => (this._infScroll = infScroll), style: style }, { children: [this.props.header, this.props.pullDownToRefresh && ((0, jsx_runtime_1.jsx)("div", Object.assign({ style: { position: 'relative', marginBottom: 16 }, ref: (pullDown) => (this._pullDown = pullDown) }, { children: (0, jsx_runtime_1.jsx)("div", Object.assign({ style: {
|
|
229
229
|
position: 'absolute',
|
|
230
230
|
left: 0,
|
|
231
231
|
right: 0,
|
|
@@ -53,7 +53,7 @@ exports.default = (props) => {
|
|
|
53
53
|
return renderHtml(media, key);
|
|
54
54
|
}
|
|
55
55
|
const domain = new URL(media.embed.metadata.url).hostname.replace('www.', '');
|
|
56
|
-
return ((0, jsx_runtime_1.jsxs)(Box_1.default, Object.assign({ className: classes.displayLink }, { children: [media.embed.metadata.images && media.embed.metadata.images.length > 0 && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: fullWidth ? ((0, jsx_runtime_1.jsx)(Box_1.default, { className: (0, classnames_1.default)(classes.thumbnailFullWidth, classes.image), style: { background: `url(${media.image})`, paddingBottom: `${100 / media.image_width / media.image_height}%` } })) : ((0, jsx_runtime_1.jsx)(Box_1.default, { className: (0, classnames_1.default)(classes.thumbnail, classes.image), style: { background: `url(${media.image})` } })) })), (0, jsx_runtime_1.jsxs)(Box_1.default, Object.assign({ className: classes.snippet }, { children: [(0, jsx_runtime_1.jsx)("b", Object.assign({ className: classes.snippetTitle }, { children: media.embed.metadata.title })), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("p", Object.assign({ className: classes.snippetDescription }, { children: media.embed.metadata.description })), (0, jsx_runtime_1.jsx)("a", Object.assign({ href: media.embed.metadata.url, target: '_blank', onClick: () => handleLinkClick(media) }, { children: domain }))] })), (0, jsx_runtime_1.jsx)("div", { style: { clear: 'both' } })] })
|
|
56
|
+
return ((0, jsx_runtime_1.jsxs)(Box_1.default, Object.assign({ className: classes.displayLink }, { children: [media.embed.metadata.images && media.embed.metadata.images.length > 0 && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: fullWidth ? ((0, jsx_runtime_1.jsx)(Box_1.default, { className: (0, classnames_1.default)(classes.thumbnailFullWidth, classes.image), style: { background: `url(${media.image})`, paddingBottom: `${100 / media.image_width / media.image_height}%` } })) : ((0, jsx_runtime_1.jsx)(Box_1.default, { className: (0, classnames_1.default)(classes.thumbnail, classes.image), style: { background: `url(${media.image})` } })) })), (0, jsx_runtime_1.jsxs)(Box_1.default, Object.assign({ className: classes.snippet }, { children: [(0, jsx_runtime_1.jsx)("b", Object.assign({ className: classes.snippetTitle }, { children: media.embed.metadata.title })), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("p", Object.assign({ className: classes.snippetDescription }, { children: media.embed.metadata.description })), (0, jsx_runtime_1.jsx)("a", Object.assign({ href: media.embed.metadata.url, target: '_blank', onClick: () => handleLinkClick(media) }, { children: domain }))] })), (0, jsx_runtime_1.jsx)("div", { style: { clear: 'both' } })] })));
|
|
57
57
|
};
|
|
58
58
|
/**
|
|
59
59
|
* Render html embed
|
|
@@ -61,7 +61,7 @@ exports.default = (props) => {
|
|
|
61
61
|
* @param key
|
|
62
62
|
*/
|
|
63
63
|
const renderHtml = (media, key) => {
|
|
64
|
-
return ((0, jsx_runtime_1.jsxs)(Box_1.default, Object.assign({ className: classes.displayHtmlWrap }, { children: [(0, jsx_runtime_1.jsx)("div", { dangerouslySetInnerHTML: { __html: media.embed.metadata.html }, className: classes.displayHtml }), (0, jsx_runtime_1.jsx)("div", Object.assign({ className: classes.displayHtmlPlaceholder, style: { paddingTop: `${(100 * media.embed.metadata.height) / media.embed.metadata.width}%`, maxHeight: media.embed.metadata.height } }, { children: (0, jsx_runtime_1.jsx)(material_1.CircularProgress, { size: 20, className: classes.displayHtmlLoading }) }))] })
|
|
64
|
+
return ((0, jsx_runtime_1.jsxs)(Box_1.default, Object.assign({ className: classes.displayHtmlWrap }, { children: [(0, jsx_runtime_1.jsx)("div", { dangerouslySetInnerHTML: { __html: media.embed.metadata.html }, className: classes.displayHtml }), (0, jsx_runtime_1.jsx)("div", Object.assign({ className: classes.displayHtmlPlaceholder, style: { paddingTop: `${(100 * media.embed.metadata.height) / media.embed.metadata.width}%`, maxHeight: media.embed.metadata.height } }, { children: (0, jsx_runtime_1.jsx)(material_1.CircularProgress, { size: 20, className: classes.displayHtmlLoading }) }))] })));
|
|
65
65
|
};
|
|
66
66
|
/**
|
|
67
67
|
* Renders component
|
|
@@ -5,8 +5,8 @@ const getRelativeTime = (date) => {
|
|
|
5
5
|
const diffInMilliseconds = new Date().getTime() - new Date(date).getTime();
|
|
6
6
|
const seconds = Math.floor(diffInMilliseconds / 1000);
|
|
7
7
|
const minutes = Math.floor(seconds / 60);
|
|
8
|
-
const hours = Math.
|
|
9
|
-
const days = Math.
|
|
8
|
+
const hours = Math.floor(minutes / 60);
|
|
9
|
+
const days = Math.round(hours / 24);
|
|
10
10
|
const weeks = Math.floor(days / 7);
|
|
11
11
|
const months = Math.floor(days / 30);
|
|
12
12
|
const years = Math.floor(months / 12);
|
|
@@ -61,8 +61,17 @@ export default function BottomNavigation(inProps) {
|
|
|
61
61
|
const { preferences, features } = useSCPreferences();
|
|
62
62
|
// MEMO
|
|
63
63
|
const privateMessagingEnabled = useMemo(() => features.includes(SCFeatureName.PRIVATE_MESSAGING), [features]);
|
|
64
|
-
const groupsEnabled = useMemo(() =>
|
|
65
|
-
|
|
64
|
+
const groupsEnabled = useMemo(() => preferences &&
|
|
65
|
+
features &&
|
|
66
|
+
features.includes(SCFeatureName.TAGGING) &&
|
|
67
|
+
features.includes(SCFeatureName.GROUPING) &&
|
|
68
|
+
SCPreferences.CONFIGURATIONS_GROUPS_ENABLED in preferences &&
|
|
69
|
+
preferences[SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value, [preferences, features]);
|
|
70
|
+
const eventsEnabled = useMemo(() => preferences &&
|
|
71
|
+
features &&
|
|
72
|
+
features.includes(SCFeatureName.TAGGING) &&
|
|
73
|
+
SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
74
|
+
preferences[SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
66
75
|
const exploreStreamEnabled = preferences[SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED].value;
|
|
67
76
|
const postOnlyStaffEnabled = preferences[SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value;
|
|
68
77
|
const contentAvailable = preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value;
|
|
@@ -428,10 +428,16 @@ export default function Composer(inProps) {
|
|
|
428
428
|
if (features.includes(SCFeatureName.TAGGING) && addressing !== null) {
|
|
429
429
|
data.addressing = addressing.map((t) => t.id);
|
|
430
430
|
}
|
|
431
|
-
if (features.includes(SCFeatureName.
|
|
431
|
+
if (features.includes(SCFeatureName.TAGGING) &&
|
|
432
|
+
features.includes(SCFeatureName.GROUPING) &&
|
|
433
|
+
preferences[SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value &&
|
|
434
|
+
group !== null) {
|
|
432
435
|
data.group = group.id;
|
|
433
436
|
}
|
|
434
|
-
if (features.includes(SCFeatureName.
|
|
437
|
+
if (features.includes(SCFeatureName.TAGGING) &&
|
|
438
|
+
features.includes(SCFeatureName.EVENT) &&
|
|
439
|
+
preferences[SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value &&
|
|
440
|
+
event !== null) {
|
|
435
441
|
data.event = event.id;
|
|
436
442
|
}
|
|
437
443
|
setIsSubmitting(true);
|
|
@@ -495,6 +501,8 @@ export default function Composer(inProps) {
|
|
|
495
501
|
}
|
|
496
502
|
else {
|
|
497
503
|
onClose && onClose(e);
|
|
504
|
+
setLayer(null);
|
|
505
|
+
dispatch({ type: 'reset' });
|
|
498
506
|
/*setLayer(null);
|
|
499
507
|
feedType && feedType === SCFeedTypologyType.CATEGORY
|
|
500
508
|
? dispatch({type: 'resetCategoryFeed'})
|
|
@@ -11,7 +11,7 @@ import TagChip from '../../../../shared/TagChip';
|
|
|
11
11
|
import classNames from 'classnames';
|
|
12
12
|
import Icon from '@mui/material/Icon';
|
|
13
13
|
import DialogContent from '@mui/material/DialogContent';
|
|
14
|
-
import { useSCFetchAddressingTagList, useSCPreferences } from '@selfcommunity/react-core';
|
|
14
|
+
import { SCPreferences, useSCFetchAddressingTagList, useSCPreferences } from '@selfcommunity/react-core';
|
|
15
15
|
import { PREFIX } from '../../constants';
|
|
16
16
|
import GroupAutocomplete from '../../../GroupAutocomplete';
|
|
17
17
|
import { SCFeatureName } from '@selfcommunity/types';
|
|
@@ -57,10 +57,19 @@ const AudienceLayer = React.forwardRef((props, ref) => {
|
|
|
57
57
|
const [value, setValue] = useState(defaultValue || undefined);
|
|
58
58
|
// HOOKS
|
|
59
59
|
const { scAddressingTags } = useSCFetchAddressingTagList({ fetch: autocompleteOpen });
|
|
60
|
-
const { features } = useSCPreferences();
|
|
60
|
+
const { preferences, features } = useSCPreferences();
|
|
61
61
|
// MEMO
|
|
62
|
-
const
|
|
63
|
-
|
|
62
|
+
const groupsEnabled = useMemo(() => preferences &&
|
|
63
|
+
features &&
|
|
64
|
+
features.includes(SCFeatureName.TAGGING) &&
|
|
65
|
+
features.includes(SCFeatureName.GROUPING) &&
|
|
66
|
+
SCPreferences.CONFIGURATIONS_GROUPS_ENABLED in preferences &&
|
|
67
|
+
preferences[SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value, [preferences, features]);
|
|
68
|
+
const eventsEnabled = useMemo(() => preferences &&
|
|
69
|
+
features &&
|
|
70
|
+
features.includes(SCFeatureName.TAGGING) &&
|
|
71
|
+
SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
72
|
+
preferences[SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
64
73
|
// HANDLERS
|
|
65
74
|
const handleSave = useCallback(() => {
|
|
66
75
|
audience === AudienceTypes.AUDIENCE_GROUP || audience === AudienceTypes.AUDIENCE_EVENT
|
|
@@ -52,7 +52,11 @@ export default function CreateEventButton(inProps) {
|
|
|
52
52
|
// CONST
|
|
53
53
|
const authUserId = scUserContext.user ? scUserContext.user.id : null;
|
|
54
54
|
const { preferences, features } = useSCPreferences();
|
|
55
|
-
const eventsEnabled = useMemo(() =>
|
|
55
|
+
const eventsEnabled = useMemo(() => preferences &&
|
|
56
|
+
features &&
|
|
57
|
+
features.includes(SCFeatureName.TAGGING) &&
|
|
58
|
+
SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
59
|
+
preferences[SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
56
60
|
const onlyStaffEnabled = useMemo(() => preferences[SCPreferences.CONFIGURATIONS_EVENTS_ONLY_STAFF_ENABLED].value, [preferences]);
|
|
57
61
|
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
58
62
|
// @ts-ignore
|
|
@@ -38,7 +38,11 @@ export default function CreateEventWidget(inProps) {
|
|
|
38
38
|
const scUserContext = useContext(SCUserContext);
|
|
39
39
|
// HOOK
|
|
40
40
|
const { preferences, features } = useSCPreferences();
|
|
41
|
-
const eventsEnabled = useMemo(() =>
|
|
41
|
+
const eventsEnabled = useMemo(() => preferences &&
|
|
42
|
+
features &&
|
|
43
|
+
features.includes(SCFeatureName.TAGGING) &&
|
|
44
|
+
SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
45
|
+
preferences[SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
42
46
|
const authUserId = scUserContext.user ? scUserContext.user.id : null;
|
|
43
47
|
const onlyStaffEnabled = useMemo(() => preferences[SCPreferences.CONFIGURATIONS_GROUPS_ONLY_STAFF_ENABLED].value, [preferences]);
|
|
44
48
|
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
@@ -3,8 +3,8 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
3
3
|
import React, { forwardRef, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
4
4
|
import { Link, SCCache, SCPreferences, SCPreferencesContext, SCUserContext, useIsComponentMountedRef, usePreviousValue, useSCFetchFeed } from '@selfcommunity/react-core';
|
|
5
5
|
import { styled, useTheme } from '@mui/material/styles';
|
|
6
|
-
import { Box, CardContent, Grid, Hidden, useMediaQuery } from '@mui/material';
|
|
7
|
-
import { FormattedMessage } from 'react-intl';
|
|
6
|
+
import { Box, CardContent, Grid, Hidden, Typography, useMediaQuery } from '@mui/material';
|
|
7
|
+
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
|
8
8
|
import { GenericSkeleton } from '../Skeleton';
|
|
9
9
|
import CustomAdv from '../CustomAdv';
|
|
10
10
|
import { SCCustomAdvPosition } from '@selfcommunity/types';
|
|
@@ -23,6 +23,12 @@ import FeedSkeleton from './Skeleton';
|
|
|
23
23
|
import { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect';
|
|
24
24
|
import StickyBoxComp from '../../shared/StickyBox';
|
|
25
25
|
import { PREFIX } from './constants';
|
|
26
|
+
const messages = defineMessages({
|
|
27
|
+
refresh: {
|
|
28
|
+
id: 'ui.feed.refreshRelease',
|
|
29
|
+
defaultMessage: 'ui.feed.refreshRelease'
|
|
30
|
+
}
|
|
31
|
+
});
|
|
26
32
|
const classes = {
|
|
27
33
|
root: `${PREFIX}-root`,
|
|
28
34
|
left: `${PREFIX}-left`,
|
|
@@ -75,7 +81,9 @@ const Feed = (inProps, ref) => {
|
|
|
75
81
|
props: inProps,
|
|
76
82
|
name: PREFIX
|
|
77
83
|
});
|
|
78
|
-
|
|
84
|
+
// HOOKS
|
|
85
|
+
const intl = useIntl();
|
|
86
|
+
const { id = 'feed', className, endpoint, endpointQueryParams = { limit: DEFAULT_PAGINATION_LIMIT, offset: DEFAULT_PAGINATION_OFFSET }, endMessage = _jsx(FormattedMessage, { id: "ui.feed.noOtherFeedObject", defaultMessage: "ui.feed.noOtherFeedObject" }), refreshMessage = _jsx(Typography, { dangerouslySetInnerHTML: { __html: `${intl.formatMessage(messages.refresh)}` } }), HeaderComponent, FooterComponent = Footer, FooterComponentProps = {}, widgets = [], ItemComponent, itemPropsGenerator, itemIdGenerator, ItemProps = {}, ItemSkeleton, ItemSkeletonProps = {}, onNextData, onPreviousData, FeedSidebarProps = {}, CustomAdvProps = {}, enabledCustomAdvPositions = [SCCustomAdvPosition.POSITION_FEED_SIDEBAR, SCCustomAdvPosition.POSITION_FEED], requireAuthentication = false, cacheStrategy = CacheStrategies.NETWORK_ONLY, prefetchedData, scrollableTargetId, VirtualizedScrollerProps = {}, disablePaginationLinks = false, hidePaginationLinks = true, paginationLinksPageQueryParam = DEFAULT_PAGINATION_QUERY_PARAM_NAME, PaginationLinkProps = {}, hideAdvs = false, emptyFeedPlaceholder } = props;
|
|
79
87
|
// CONTEXT
|
|
80
88
|
const scPreferences = useContext(SCPreferencesContext);
|
|
81
89
|
const scUserContext = useContext(SCUserContext);
|
|
@@ -4,7 +4,7 @@ import { Button, CardActions, Icon, IconButton, Typography } from '@mui/material
|
|
|
4
4
|
import { styled } from '@mui/material/styles';
|
|
5
5
|
import { Box, useThemeProps } from '@mui/system';
|
|
6
6
|
import { Endpoints, EventService, http } from '@selfcommunity/api-services';
|
|
7
|
-
import { SCCache, SCRoutes, useSCPreferences, useSCRouting, useSCUser } from '@selfcommunity/react-core';
|
|
7
|
+
import { SCCache, SCPreferences, SCRoutes, useSCPreferences, useSCRouting, useSCUser } from '@selfcommunity/react-core';
|
|
8
8
|
import { SCEventSubscriptionStatusType, SCFeatureName } from '@selfcommunity/types';
|
|
9
9
|
import { Logger } from '@selfcommunity/utils';
|
|
10
10
|
import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';
|
|
@@ -64,8 +64,12 @@ export default function MyEventsWidget(inProps) {
|
|
|
64
64
|
// CONTEXT
|
|
65
65
|
const scUserContext = useSCUser();
|
|
66
66
|
const scRoutingContext = useSCRouting();
|
|
67
|
-
const { features } = useSCPreferences();
|
|
68
|
-
const eventsEnabled = useMemo(() =>
|
|
67
|
+
const { preferences, features } = useSCPreferences();
|
|
68
|
+
const eventsEnabled = useMemo(() => preferences &&
|
|
69
|
+
features &&
|
|
70
|
+
features.includes(SCFeatureName.TAGGING) &&
|
|
71
|
+
SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in preferences &&
|
|
72
|
+
preferences[SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [preferences, features]);
|
|
69
73
|
// REFS
|
|
70
74
|
const updatesSubscription = useRef(null);
|
|
71
75
|
/**
|
|
@@ -108,12 +108,21 @@ export default function NavigationToolbar(inProps) {
|
|
|
108
108
|
return _preferences;
|
|
109
109
|
}, [scPreferences.preferences]);
|
|
110
110
|
const privateMessagingEnabled = useMemo(() => scPreferences.features.includes(SCFeatureName.PRIVATE_MESSAGING), [scPreferences.features]);
|
|
111
|
-
const groupsEnabled = useMemo(() => scPreferences.
|
|
112
|
-
|
|
111
|
+
const groupsEnabled = useMemo(() => scPreferences.preferences &&
|
|
112
|
+
scPreferences.features &&
|
|
113
|
+
scPreferences.features.includes(SCFeatureName.TAGGING) &&
|
|
114
|
+
scPreferences.features.includes(SCFeatureName.GROUPING) &&
|
|
115
|
+
SCPreferences.CONFIGURATIONS_GROUPS_ENABLED in scPreferences.preferences &&
|
|
116
|
+
scPreferences.preferences[SCPreferences.CONFIGURATIONS_GROUPS_ENABLED].value, [scPreferences.preferences, scPreferences.features]);
|
|
117
|
+
const eventsEnabled = useMemo(() => scPreferences.preferences &&
|
|
118
|
+
scPreferences.features &&
|
|
119
|
+
scPreferences.features.includes(SCFeatureName.TAGGING) &&
|
|
120
|
+
SCPreferences.CONFIGURATIONS_EVENTS_ENABLED in scPreferences.preferences &&
|
|
121
|
+
scPreferences.preferences[SCPreferences.CONFIGURATIONS_EVENTS_ENABLED].value, [scPreferences.preferences, scPreferences.features]);
|
|
113
122
|
const showComposer = useMemo(() => {
|
|
114
123
|
return (!disableComposer &&
|
|
115
124
|
(!scPreferences.preferences[SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value || UserUtils.isStaff(scUserContext.user)));
|
|
116
|
-
}, [
|
|
125
|
+
}, [preferences, disableComposer, scUserContext.user]);
|
|
117
126
|
// STATE
|
|
118
127
|
const [anchorNotification, setAnchorNotification] = React.useState(null);
|
|
119
128
|
// HANDLERS
|