@selfcommunity/react-core 0.4.9-alpha.1 → 0.4.9-alpha.11

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.
@@ -1,5 +1,6 @@
1
1
  import { useEffect, useMemo } from 'react';
2
- import { http, Endpoints } from '@selfcommunity/api-services';
2
+ import { Endpoints, http } from '@selfcommunity/api-services';
3
+ import { SCGroupPrivacyType, SCGroupSubscriptionStatusType } from '@selfcommunity/types';
3
4
  import useSCCachingManager from './useSCCachingManager';
4
5
  import { SCOPE_SC_CORE } from '../constants/Errors';
5
6
  import { Logger } from '@selfcommunity/utils';
@@ -54,23 +55,64 @@ export default function useSCSubscribedGroupsManager(user) {
54
55
  * Memoized subscribe Group
55
56
  * Toggle action
56
57
  */
57
- const subscribe = useMemo(() => (group) => {
58
+ const subscribe = useMemo(() => (group, userId) => {
58
59
  setLoading(group.id);
59
- return http
60
- .request({
61
- url: Endpoints.SubscribeToGroup.url({ id: group.id }),
62
- method: Endpoints.SubscribeToGroup.method,
63
- })
64
- .then((res) => {
65
- if (res.status >= 300) {
66
- return Promise.reject(res);
67
- }
68
- updateCache([group.id]);
69
- const isSubscribed = data.includes(group.id);
70
- setData((prev) => (isSubscribed ? prev.filter((id) => id !== group.id) : [...[group.id], ...prev]));
71
- setUnLoading(group.id);
72
- return Promise.resolve(res.data);
73
- });
60
+ if (userId) {
61
+ return http
62
+ .request({
63
+ url: Endpoints.InviteOrAcceptGroupRequest.url({ id: group.id }),
64
+ method: Endpoints.InviteOrAcceptGroupRequest.method,
65
+ data: { users: [userId] },
66
+ })
67
+ .then((res) => {
68
+ if (res.status >= 300) {
69
+ return Promise.reject(res);
70
+ }
71
+ updateCache([group.id]);
72
+ setData((prev) => getDataUpdated(prev, group.id, SCGroupSubscriptionStatusType.SUBSCRIBED));
73
+ setUnLoading(group.id);
74
+ return Promise.resolve(res.data);
75
+ });
76
+ }
77
+ else {
78
+ return http
79
+ .request({
80
+ url: Endpoints.SubscribeToGroup.url({ id: group.id }),
81
+ method: Endpoints.SubscribeToGroup.method,
82
+ })
83
+ .then((res) => {
84
+ if (res.status >= 300) {
85
+ return Promise.reject(res);
86
+ }
87
+ updateCache([group.id]);
88
+ setData((prev) => getDataUpdated(prev, group.id, group.privacy === SCGroupPrivacyType.PRIVATE ? SCGroupSubscriptionStatusType.REQUESTED : SCGroupSubscriptionStatusType.SUBSCRIBED));
89
+ setUnLoading(group.id);
90
+ return Promise.resolve(res.data);
91
+ });
92
+ }
93
+ }, [data, loading, cache]);
94
+ /**
95
+ * Memoized subscribe Group
96
+ * Toggle action
97
+ */
98
+ const unsubscribe = useMemo(() => (group) => {
99
+ if (group.subscription_status !== SCGroupSubscriptionStatusType.REQUESTED) {
100
+ setLoading(group.id);
101
+ return http
102
+ .request({
103
+ url: Endpoints.UnsubscribeFromGroup.url({ id: group.id }),
104
+ method: Endpoints.UnsubscribeFromGroup.method,
105
+ })
106
+ .then((res) => {
107
+ if (res.status >= 300) {
108
+ return Promise.reject(res);
109
+ }
110
+ updateCache([group.id]);
111
+ setData((prev) => getDataUpdated(prev, group.id, null));
112
+ setUnLoading(group.id);
113
+ return Promise.resolve(res.data);
114
+ });
115
+ }
74
116
  }, [data, loading, cache]);
75
117
  /**
76
118
  * Check the authenticated user subscription status to the group
@@ -168,5 +210,5 @@ export default function useSCSubscribedGroupsManager(user) {
168
210
  if (!user) {
169
211
  return { groups: data, loading, isLoading };
170
212
  }
171
- return { groups: data, loading, isLoading, subscribe, subscriptionStatus, refresh, emptyCache };
213
+ return { groups: data, loading, isLoading, subscribe, unsubscribe, subscriptionStatus, refresh, emptyCache };
172
214
  }
@@ -61,6 +61,7 @@ import useSCFetchBroadcastMessages from './hooks/useSCFetchBroadcastMessages';
61
61
  import useSCFetchUserBlockedBy from './hooks/useSCFetchUserBlockedBy';
62
62
  import useSCUserIsBlocked from './hooks/useSCUserIsBlocked';
63
63
  import useSCFetchGroup from './hooks/useSCFetchGroup';
64
+ import useSCFetchGroups from './hooks/useSCFetchGroups';
64
65
  /**
65
66
  * Routing component
66
67
  */
@@ -80,4 +81,4 @@ import * as Locale from './constants/Locale';
80
81
  /**
81
82
  * List all exports
82
83
  */
83
- export { SCUserContextType, SCFollowedCategoriesManagerType, SCContextProviderType, SCContextType, SCSettingsType, SCSessionType, SCSettingsManagerType, SCFollowedManagerType, SCFollowersManagerType, SCConnectionsManagerType, SCSubscribedIncubatorsManagerType, SCLocaleType, SCNotificationContextType, SCPreferencesContextType, SCThemeContextType, SCRoutingContextType, SCLocaleContextType, SCAlertMessagesContextType, SCThemeAvatarVariableType, SCThemeCategoryIconVariableType, SCThemeCategoryVariableType, SCThemeVariablesType, SCThemeType, SCSubscribedGroupsManagerType, SCContext, SCUserContext, SCThemeContext, SCRoutingContext, SCLocaleContext, SCPreferencesContext, useSCContext, SCContextProvider, SCUserProvider, useSCUser, useSCPreferences, SCThemeProvider, useSCTheme, withSCTheme, SCRoutingProvider, useSCRouting, SCLocaleProvider, useSCLocale, withSCLocale, SCPreferencesProvider, SCPreferences, SCFeatures, SCNotification, SCNotificationProvider, SCNotificationContext, useSCNotification, SCAlertMessagesProvider, SCAlertMessagesContext, useSCAlertMessages, Link, SCRoutes, SCCache, UserUtils, Locale, useSCFetchUser, useSCFetchUserProviders, useSCFetchVote, useSCFetchFeedObject, useSCFetchCommentObject, useSCFetchCommentObjects, useSCFetchCustomAdv, useSCFetchTag, useSCFetchAddressingTagList, useSCFetchCategory, useSCFetchCategories, useSCFetchIncubator, useSCMediaClick, useSCFetchContributors, useSCFetchFeed, useIsComponentMountedRef, usePreviousValue, useIsomorphicLayoutEffect, useEffectOnce, useNoInitialEffect, useSCFetchPrivateMessageSnippets, useSCFetchBroadcastMessages, useSCFetchUserBlockedBy, useSCUserIsBlocked, useSCFetchGroup, };
84
+ export { SCUserContextType, SCFollowedCategoriesManagerType, SCContextProviderType, SCContextType, SCSettingsType, SCSessionType, SCSettingsManagerType, SCFollowedManagerType, SCFollowersManagerType, SCConnectionsManagerType, SCSubscribedIncubatorsManagerType, SCLocaleType, SCNotificationContextType, SCPreferencesContextType, SCThemeContextType, SCRoutingContextType, SCLocaleContextType, SCAlertMessagesContextType, SCThemeAvatarVariableType, SCThemeCategoryIconVariableType, SCThemeCategoryVariableType, SCThemeVariablesType, SCThemeType, SCSubscribedGroupsManagerType, SCContext, SCUserContext, SCThemeContext, SCRoutingContext, SCLocaleContext, SCPreferencesContext, useSCContext, SCContextProvider, SCUserProvider, useSCUser, useSCPreferences, SCThemeProvider, useSCTheme, withSCTheme, SCRoutingProvider, useSCRouting, SCLocaleProvider, useSCLocale, withSCLocale, SCPreferencesProvider, SCPreferences, SCFeatures, SCNotification, SCNotificationProvider, SCNotificationContext, useSCNotification, SCAlertMessagesProvider, SCAlertMessagesContext, useSCAlertMessages, Link, SCRoutes, SCCache, UserUtils, Locale, useSCFetchUser, useSCFetchUserProviders, useSCFetchVote, useSCFetchFeedObject, useSCFetchCommentObject, useSCFetchCommentObjects, useSCFetchCustomAdv, useSCFetchTag, useSCFetchAddressingTagList, useSCFetchCategory, useSCFetchCategories, useSCFetchIncubator, useSCMediaClick, useSCFetchContributors, useSCFetchFeed, useIsComponentMountedRef, usePreviousValue, useIsomorphicLayoutEffect, useEffectOnce, useNoInitialEffect, useSCFetchPrivateMessageSnippets, useSCFetchBroadcastMessages, useSCFetchUserBlockedBy, useSCUserIsBlocked, useSCFetchGroup, useSCFetchGroups, };
package/lib/esm/index.js CHANGED
@@ -57,6 +57,7 @@ import useSCFetchBroadcastMessages from './hooks/useSCFetchBroadcastMessages';
57
57
  import useSCFetchUserBlockedBy from './hooks/useSCFetchUserBlockedBy';
58
58
  import useSCUserIsBlocked from './hooks/useSCUserIsBlocked';
59
59
  import useSCFetchGroup from './hooks/useSCFetchGroup';
60
+ import useSCFetchGroups from './hooks/useSCFetchGroups';
60
61
  /**
61
62
  * Routing component
62
63
  */
@@ -76,4 +77,4 @@ import * as Locale from './constants/Locale';
76
77
  /**
77
78
  * List all exports
78
79
  */
79
- export { SCContext, SCUserContext, SCThemeContext, SCRoutingContext, SCLocaleContext, SCPreferencesContext, useSCContext, SCContextProvider, SCUserProvider, useSCUser, useSCPreferences, SCThemeProvider, useSCTheme, withSCTheme, SCRoutingProvider, useSCRouting, SCLocaleProvider, useSCLocale, withSCLocale, SCPreferencesProvider, SCPreferences, SCFeatures, SCNotification, SCNotificationProvider, SCNotificationContext, useSCNotification, SCAlertMessagesProvider, SCAlertMessagesContext, useSCAlertMessages, Link, SCRoutes, SCCache, UserUtils, Locale, useSCFetchUser, useSCFetchUserProviders, useSCFetchVote, useSCFetchFeedObject, useSCFetchCommentObject, useSCFetchCommentObjects, useSCFetchCustomAdv, useSCFetchTag, useSCFetchAddressingTagList, useSCFetchCategory, useSCFetchCategories, useSCFetchIncubator, useSCMediaClick, useSCFetchContributors, useSCFetchFeed, useIsComponentMountedRef, usePreviousValue, useIsomorphicLayoutEffect, useEffectOnce, useNoInitialEffect, useSCFetchPrivateMessageSnippets, useSCFetchBroadcastMessages, useSCFetchUserBlockedBy, useSCUserIsBlocked, useSCFetchGroup, };
80
+ export { SCContext, SCUserContext, SCThemeContext, SCRoutingContext, SCLocaleContext, SCPreferencesContext, useSCContext, SCContextProvider, SCUserProvider, useSCUser, useSCPreferences, SCThemeProvider, useSCTheme, withSCTheme, SCRoutingProvider, useSCRouting, SCLocaleProvider, useSCLocale, withSCLocale, SCPreferencesProvider, SCPreferences, SCFeatures, SCNotification, SCNotificationProvider, SCNotificationContext, useSCNotification, SCAlertMessagesProvider, SCAlertMessagesContext, useSCAlertMessages, Link, SCRoutes, SCCache, UserUtils, Locale, useSCFetchUser, useSCFetchUserProviders, useSCFetchVote, useSCFetchFeedObject, useSCFetchCommentObject, useSCFetchCommentObjects, useSCFetchCustomAdv, useSCFetchTag, useSCFetchAddressingTagList, useSCFetchCategory, useSCFetchCategories, useSCFetchIncubator, useSCMediaClick, useSCFetchContributors, useSCFetchFeed, useIsComponentMountedRef, usePreviousValue, useIsomorphicLayoutEffect, useEffectOnce, useNoInitialEffect, useSCFetchPrivateMessageSnippets, useSCFetchBroadcastMessages, useSCFetchUserBlockedBy, useSCUserIsBlocked, useSCFetchGroup, useSCFetchGroups, };
@@ -265,7 +265,11 @@ export interface SCSubscribedGroupsManagerType {
265
265
  /**
266
266
  * Handle user subscription to a group
267
267
  */
268
- subscribe?: (group: SCGroupType) => Promise<any>;
268
+ subscribe?: (group: SCGroupType, userId?: number) => Promise<any>;
269
+ /**
270
+ * Handle user unsubscription from a group
271
+ */
272
+ unsubscribe?: (group: SCGroupType) => Promise<any>;
269
273
  /**
270
274
  * Handles a user subscription status to a group, caching data
271
275
  */