@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.
Files changed (36) hide show
  1. package/lib/cjs/components/BottomNavigation/BottomNavigation.js +11 -2
  2. package/lib/cjs/components/Composer/Composer.js +10 -2
  3. package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +12 -3
  4. package/lib/cjs/components/CreateEventButton/CreateEventButton.js +5 -1
  5. package/lib/cjs/components/CreateEventWidget/CreateEventWidget.js +5 -1
  6. package/lib/cjs/components/Feed/Feed.js +9 -1
  7. package/lib/cjs/components/MyEventsWidget/MyEventsWidget.js +6 -2
  8. package/lib/cjs/components/NavigationToolbar/NavigationToolbar.js +12 -3
  9. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +11 -2
  10. package/lib/cjs/components/Notification/Event/Event.js +4 -0
  11. package/lib/cjs/components/OnBoardingWidget/OnBoardingWidget.d.ts +5 -0
  12. package/lib/cjs/components/OnBoardingWidget/OnBoardingWidget.js +18 -6
  13. package/lib/cjs/components/UserSubscribedGroupsWidget/UserSubscribedGroupsWidget.js +7 -2
  14. package/lib/cjs/shared/ContributionActionsMenu/index.js +6 -6
  15. package/lib/cjs/shared/InfiniteScroll/index.js +1 -1
  16. package/lib/cjs/shared/Media/Link/DisplayComponent.js +2 -2
  17. package/lib/cjs/utils/formatRelativeTime.js +2 -2
  18. package/lib/esm/components/BottomNavigation/BottomNavigation.js +11 -2
  19. package/lib/esm/components/Composer/Composer.js +10 -2
  20. package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +13 -4
  21. package/lib/esm/components/CreateEventButton/CreateEventButton.js +5 -1
  22. package/lib/esm/components/CreateEventWidget/CreateEventWidget.js +5 -1
  23. package/lib/esm/components/Feed/Feed.js +11 -3
  24. package/lib/esm/components/MyEventsWidget/MyEventsWidget.js +7 -3
  25. package/lib/esm/components/NavigationToolbar/NavigationToolbar.js +12 -3
  26. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +11 -2
  27. package/lib/esm/components/Notification/Event/Event.js +4 -0
  28. package/lib/esm/components/OnBoardingWidget/OnBoardingWidget.d.ts +5 -0
  29. package/lib/esm/components/OnBoardingWidget/OnBoardingWidget.js +18 -6
  30. package/lib/esm/components/UserSubscribedGroupsWidget/UserSubscribedGroupsWidget.js +8 -3
  31. package/lib/esm/shared/ContributionActionsMenu/index.js +6 -6
  32. package/lib/esm/shared/InfiniteScroll/index.js +1 -1
  33. package/lib/esm/shared/Media/Link/DisplayComponent.js +2 -2
  34. package/lib/esm/utils/formatRelativeTime.js +2 -2
  35. package/lib/umd/react-ui.js +1 -1
  36. 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)(() => features.includes(types_1.SCFeatureName.GROUPING) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
67
- const eventsEnabled = (0, react_1.useMemo)(() => features && features.includes(types_1.SCFeatureName.EVENT) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
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.GROUPING) && group !== null) {
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.EVENT) && event !== null) {
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 eventsEnabled = (0, react_1.useMemo)(() => features && features.includes(types_1.SCFeatureName.EVENT) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
66
- const groupsEnabled = (0, react_1.useMemo)(() => features && features.includes(types_1.SCFeatureName.GROUPING) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
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)(() => features && features.includes(types_1.SCFeatureName.EVENT) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
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)(() => features && features.includes(types_1.SCFeatureName.EVENT) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
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
- 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)(react_intl_1.FormattedMessage, { id: "ui.feed.refreshRelease", defaultMessage: "ui.feed.refreshRelease" }), 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;
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)(() => features && features.includes(types_1.SCFeatureName.EVENT) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
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.features && scPreferences.features.includes(types_1.SCFeatureName.GROUPING) && scPreferences.features.includes(types_1.SCFeatureName.TAGGING), [scPreferences.features]);
114
- const eventsEnabled = (0, react_1.useMemo)(() => scPreferences.features && scPreferences.features.includes(types_1.SCFeatureName.EVENT) && scPreferences.features.includes(types_1.SCFeatureName.TAGGING), [scPreferences.features]);
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
- }, [scPreferences, disableComposer, scUserContext.user]);
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)(() => features && features.includes(types_1.SCFeatureName.GROUPING) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
84
- const eventsEnabled = (0, react_1.useMemo)(() => features && features.includes(types_1.SCFeatureName.EVENT) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
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
- setExpanded(!expanded);
135
- onHeightChange && onHeightChange();
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
- setExpanded(!allStepsDone);
185
- onHeightChange && onHeightChange();
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)(() => features.includes(types_1.SCFeatureName.GROUPING) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
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
- * action
628
- * @param sectionId
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
- disabled: contributionObj && ((_a = contributionObj === null || contributionObj === void 0 ? void 0 : contributionObj.medias) === null || _a === void 0 ? void 0 : _a.length) && !((_c = (_b = contributionObj.medias[0].embed) === null || _b === void 0 ? void 0 : _b.metadata) === null || _c === void 0 ? void 0 : _c.active), ref: (ref) => {
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' } })] }), key));
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 }) }))] }), 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 }) }))] })));
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.ceil(minutes / 60);
9
- const days = Math.floor(hours / 24);
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(() => features.includes(SCFeatureName.GROUPING) && features.includes(SCFeatureName.TAGGING), [features]);
65
- const eventsEnabled = useMemo(() => features && features.includes(SCFeatureName.EVENT) && features.includes(SCFeatureName.TAGGING), [features]);
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.GROUPING) && group !== null) {
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.EVENT) && event !== null) {
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 eventsEnabled = useMemo(() => features && features.includes(SCFeatureName.EVENT) && features.includes(SCFeatureName.TAGGING), [features]);
63
- const groupsEnabled = useMemo(() => features && features.includes(SCFeatureName.GROUPING) && features.includes(SCFeatureName.TAGGING), [features]);
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(() => features && features.includes(SCFeatureName.EVENT) && features.includes(SCFeatureName.TAGGING), [features]);
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(() => features && features.includes(SCFeatureName.EVENT) && features.includes(SCFeatureName.TAGGING), [features]);
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
- 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(FormattedMessage, { id: "ui.feed.refreshRelease", defaultMessage: "ui.feed.refreshRelease" }), 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;
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(() => features && features.includes(SCFeatureName.EVENT) && features.includes(SCFeatureName.TAGGING), [features]);
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.features && scPreferences.features.includes(SCFeatureName.GROUPING) && scPreferences.features.includes(SCFeatureName.TAGGING), [scPreferences.features]);
112
- const eventsEnabled = useMemo(() => scPreferences.features && scPreferences.features.includes(SCFeatureName.EVENT) && scPreferences.features.includes(SCFeatureName.TAGGING), [scPreferences.features]);
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
- }, [scPreferences, disableComposer, scUserContext.user]);
125
+ }, [preferences, disableComposer, scUserContext.user]);
117
126
  // STATE
118
127
  const [anchorNotification, setAnchorNotification] = React.useState(null);
119
128
  // HANDLERS