@knocklabs/react-core 0.7.1 → 0.7.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 3703cf6: feat: adds `usePreferences` hook for fetching and updating user preferences in react apps.
8
+ - fdc6d82: chore(deps): bump the telegraph-packages group across 1 directory with 9 updates
9
+
3
10
  ## 0.7.1
4
11
 
5
12
  ### Patch Changes
package/dist/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./modules/core/context/KnockProvider.js"),c=require("./modules/core/hooks/useAuthenticatedKnockClient.js"),a=require("./modules/core/hooks/useStableOptions.js"),d=require("./modules/core/constants.js"),e=require("./modules/core/utils.js"),n=require("./modules/feed/context/KnockFeedProvider.js"),l=require("./modules/feed/hooks/useNotifications.js"),k=require("./modules/feed/hooks/useFeedSettings.js"),o=require("./modules/feed/hooks/useNotificationStore.js"),t=require("./modules/guide/context/KnockGuideProvider.js"),K=require("./modules/guide/hooks/useGuide.js"),r=require("./modules/ms-teams/context/KnockMsTeamsProvider.js"),C=require("./modules/ms-teams/hooks/useMsTeamsConnectionStatus.js"),S=require("./modules/ms-teams/hooks/useMsTeamsAuth.js"),m=require("./modules/ms-teams/hooks/useMsTeamsTeams.js"),q=require("./modules/ms-teams/hooks/useMsTeamsChannels.js"),v=require("./modules/ms-teams/hooks/useConnectedMsTeamsChannels.js"),i=require("./modules/slack/context/KnockSlackProvider.js"),P=require("./modules/slack/hooks/useSlackConnectionStatus.js"),T=require("./modules/slack/hooks/useSlackChannels.js"),M=require("./modules/slack/hooks/useConnectedSlackChannels.js"),f=require("./modules/slack/hooks/useSlackAuth.js"),u=require("./modules/i18n/context/KnockI18nProvider.js"),h=require("./modules/i18n/hooks/useTranslations.js"),F=require("./modules/i18n/languages/index.js");exports.KnockProvider=s.KnockProvider;exports.useKnockClient=s.useKnockClient;exports.useAuthenticatedKnockClient=c;exports.useStableOptions=a;exports.FilterStatus=d.FilterStatus;exports.feedProviderKey=e.feedProviderKey;exports.formatBadgeCount=e.formatBadgeCount;exports.formatTimestamp=e.formatTimestamp;exports.msTeamsProviderKey=e.msTeamsProviderKey;exports.renderNodeOrFallback=e.renderNodeOrFallback;exports.slackProviderKey=e.slackProviderKey;exports.toSentenceCase=e.toSentenceCase;exports.KnockFeedProvider=n.KnockFeedProvider;exports.useKnockFeed=n.useKnockFeed;exports.useNotifications=l;exports.useFeedSettings=k;exports.useCreateNotificationStore=o.useCreateNotificationStore;exports.useNotificationStore=o.default;exports.KnockGuideContext=t.KnockGuideContext;exports.KnockGuideProvider=t.KnockGuideProvider;exports.useGuide=K.useGuide;exports.KnockMsTeamsProvider=r.KnockMsTeamsProvider;exports.useKnockMsTeamsClient=r.useKnockMsTeamsClient;exports.useMsTeamsConnectionStatus=C;exports.useMsTeamsAuth=S;exports.useMsTeamsTeams=m;exports.useMsTeamsChannels=q;exports.useConnectedMsTeamsChannels=v;exports.KnockSlackProvider=i.KnockSlackProvider;exports.useKnockSlackClient=i.useKnockSlackClient;exports.useSlackConnectionStatus=P;exports.useSlackChannels=T;exports.useConnectedSlackChannels=M;exports.useSlackAuth=f;exports.I18nContext=u.I18nContext;exports.KnockI18nProvider=u.KnockI18nProvider;exports.useTranslations=h.useTranslations;exports.locales=F.locales;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./modules/core/context/KnockProvider.js"),c=require("./modules/core/hooks/useAuthenticatedKnockClient.js"),a=require("./modules/core/hooks/useStableOptions.js"),d=require("./modules/core/constants.js"),e=require("./modules/core/utils.js"),n=require("./modules/feed/context/KnockFeedProvider.js"),l=require("./modules/feed/hooks/useNotifications.js"),k=require("./modules/feed/hooks/useFeedSettings.js"),o=require("./modules/feed/hooks/useNotificationStore.js"),r=require("./modules/guide/context/KnockGuideProvider.js"),K=require("./modules/guide/hooks/useGuide.js"),t=require("./modules/ms-teams/context/KnockMsTeamsProvider.js"),C=require("./modules/ms-teams/hooks/useMsTeamsConnectionStatus.js"),S=require("./modules/ms-teams/hooks/useMsTeamsAuth.js"),m=require("./modules/ms-teams/hooks/useMsTeamsTeams.js"),P=require("./modules/ms-teams/hooks/useMsTeamsChannels.js"),q=require("./modules/ms-teams/hooks/useConnectedMsTeamsChannels.js"),i=require("./modules/slack/context/KnockSlackProvider.js"),v=require("./modules/slack/hooks/useSlackConnectionStatus.js"),T=require("./modules/slack/hooks/useSlackChannels.js"),f=require("./modules/slack/hooks/useConnectedSlackChannels.js"),M=require("./modules/slack/hooks/useSlackAuth.js"),u=require("./modules/i18n/context/KnockI18nProvider.js"),h=require("./modules/i18n/hooks/useTranslations.js"),F=require("./modules/i18n/languages/index.js"),y=require("./modules/preferences/hooks/usePreferences.js");exports.KnockProvider=s.KnockProvider;exports.useKnockClient=s.useKnockClient;exports.useAuthenticatedKnockClient=c;exports.useStableOptions=a;exports.FilterStatus=d.FilterStatus;exports.feedProviderKey=e.feedProviderKey;exports.formatBadgeCount=e.formatBadgeCount;exports.formatTimestamp=e.formatTimestamp;exports.msTeamsProviderKey=e.msTeamsProviderKey;exports.renderNodeOrFallback=e.renderNodeOrFallback;exports.slackProviderKey=e.slackProviderKey;exports.toSentenceCase=e.toSentenceCase;exports.KnockFeedProvider=n.KnockFeedProvider;exports.useKnockFeed=n.useKnockFeed;exports.useNotifications=l;exports.useFeedSettings=k;exports.useCreateNotificationStore=o.useCreateNotificationStore;exports.useNotificationStore=o.default;exports.KnockGuideContext=r.KnockGuideContext;exports.KnockGuideProvider=r.KnockGuideProvider;exports.useGuide=K.useGuide;exports.KnockMsTeamsProvider=t.KnockMsTeamsProvider;exports.useKnockMsTeamsClient=t.useKnockMsTeamsClient;exports.useMsTeamsConnectionStatus=C;exports.useMsTeamsAuth=S;exports.useMsTeamsTeams=m;exports.useMsTeamsChannels=P;exports.useConnectedMsTeamsChannels=q;exports.KnockSlackProvider=i.KnockSlackProvider;exports.useKnockSlackClient=i.useKnockSlackClient;exports.useSlackConnectionStatus=v;exports.useSlackChannels=T;exports.useConnectedSlackChannels=f;exports.useSlackAuth=M;exports.I18nContext=u.I18nContext;exports.KnockI18nProvider=u.KnockI18nProvider;exports.useTranslations=h.useTranslations;exports.locales=F.locales;exports.usePreferences=y.usePreferences;
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),d=require("swr"),P=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("fast-deep-equal");require("date-fns");const g=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},k=g(d),p=(e={})=>{const r=P.useKnockClient(),{preferenceSet:t,tenant:c}=e,u=["preferences",e.preferenceSet,e.tenant,r.userId],{data:a,isLoading:l,isValidating:o,mutate:s}=k.default(r.userId?u:null,()=>r.user.getPreferences({preferenceSet:t,tenant:c})),f=n.useCallback(i=>{s(r.user.setPreferences(i,{preferenceSet:t}),{revalidate:!1})},[s,r.user,t]);return{getAllPreferences:n.useCallback(async()=>await r.user.getAllPreferences(),[r.user]),setPreferences:f,preferences:a,isLoading:l,isValidating:o}};exports.usePreferences=p;
2
+ //# sourceMappingURL=usePreferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePreferences.js","sources":["../../../../../src/modules/preferences/hooks/usePreferences.ts"],"sourcesContent":["import type {\n GetPreferencesOptions,\n PreferenceSet,\n SetPreferencesProperties,\n} from \"@knocklabs/client\";\nimport { useCallback } from \"react\";\nimport useSWR, { type SWRResponse } from \"swr\";\n\nimport { useKnockClient } from \"../../core\";\n\ntype UsePreferencesReturn = {\n preferences: PreferenceSet | undefined;\n setPreferences: (setPreferencesProperties: SetPreferencesProperties) => void;\n getAllPreferences: ReturnType<\n typeof useKnockClient\n >[\"user\"][\"getAllPreferences\"];\n isLoading: SWRResponse[\"isLoading\"];\n isValidating: SWRResponse[\"isValidating\"];\n};\n\nconst usePreferences = (\n options: GetPreferencesOptions = {},\n): UsePreferencesReturn => {\n const knock = useKnockClient();\n\n const { preferenceSet, tenant } = options;\n\n const CACHE_KEY = [\n \"preferences\",\n options.preferenceSet,\n options.tenant,\n knock.userId,\n ];\n\n const {\n data: preferences,\n isLoading,\n isValidating,\n mutate,\n } = useSWR(knock.userId ? CACHE_KEY : null, () => {\n return knock.user.getPreferences({ preferenceSet, tenant });\n });\n\n const setPreferences = useCallback(\n (preferenceSetProperties: SetPreferencesProperties) => {\n mutate(\n knock.user.setPreferences(preferenceSetProperties, { preferenceSet }),\n {\n revalidate: false,\n },\n );\n },\n [mutate, knock.user, preferenceSet],\n );\n\n const getAllPreferences = useCallback(async () => {\n return await knock.user.getAllPreferences();\n }, [knock.user]);\n\n return {\n getAllPreferences,\n setPreferences,\n preferences,\n isLoading,\n isValidating,\n };\n};\n\nexport { usePreferences };\n"],"names":["usePreferences","options","knock","useKnockClient","preferenceSet","tenant","CACHE_KEY","userId","data","preferences","isLoading","isValidating","mutate","useSWR","user","getPreferences","setPreferences","useCallback","preferenceSetProperties","revalidate","getAllPreferences"],"mappings":"4TAoBMA,EAAiBA,CACrBC,EAAiC,KACR,CACzB,MAAMC,EAAQC,EAAAA,eAAe,EAEvB,CAAEC,cAAAA,EAAeC,OAAAA,CAAAA,EAAWJ,EAE5BK,EAAY,CAChB,cACAL,EAAQG,cACRH,EAAQI,OACRH,EAAMK,MAAM,EAGR,CACJC,KAAMC,EACNC,UAAAA,EACAC,aAAAA,EACAC,OAAAA,GACEC,EAAOX,QAAAA,EAAMK,OAASD,EAAY,KAAM,IACnCJ,EAAMY,KAAKC,eAAe,CAAEX,cAAAA,EAAeC,OAAAA,CAAAA,CAAQ,CAC3D,EAEKW,EAAiBC,cACpBC,GAAsD,CAEnDhB,EAAAA,EAAMY,KAAKE,eAAeE,EAAyB,CAAEd,cAAAA,CAAAA,CAAe,EACpE,CACEe,WAAY,EAAA,CAEhB,GAEF,CAACP,EAAQV,EAAMY,KAAMV,CAAa,CACpC,EAMO,MAAA,CACLgB,kBALwBH,EAAAA,YAAY,SAC7B,MAAMf,EAAMY,KAAKM,kBAAkB,EACzC,CAAClB,EAAMY,IAAI,CAAC,EAIbE,eAAAA,EACAP,YAAAA,EACAC,UAAAA,EACAC,aAAAA,CACF,CACF"}
@@ -4,7 +4,7 @@ import { default as f } from "./modules/core/hooks/useStableOptions.mjs";
4
4
  import { FilterStatus as m } from "./modules/core/constants.mjs";
5
5
  import { feedProviderKey as l, formatBadgeCount as i, formatTimestamp as c, msTeamsProviderKey as p, renderNodeOrFallback as x, slackProviderKey as k, toSentenceCase as C } from "./modules/core/utils.mjs";
6
6
  import { KnockFeedProvider as S, useKnockFeed as T } from "./modules/feed/context/KnockFeedProvider.mjs";
7
- import { default as P } from "./modules/feed/hooks/useNotifications.mjs";
7
+ import { default as v } from "./modules/feed/hooks/useNotifications.mjs";
8
8
  import { default as M } from "./modules/feed/hooks/useFeedSettings.mjs";
9
9
  import { useCreateNotificationStore as N, default as y } from "./modules/feed/hooks/useNotificationStore.mjs";
10
10
  import { KnockGuideContext as G, KnockGuideProvider as b } from "./modules/guide/context/KnockGuideProvider.mjs";
@@ -23,6 +23,7 @@ import { default as te } from "./modules/slack/hooks/useSlackAuth.mjs";
23
23
  import { I18nContext as se, KnockI18nProvider as ae } from "./modules/i18n/context/KnockI18nProvider.mjs";
24
24
  import { useTranslations as fe } from "./modules/i18n/hooks/useTranslations.mjs";
25
25
  import { locales as me } from "./modules/i18n/languages/index.mjs";
26
+ import { usePreferences as le } from "./modules/preferences/hooks/usePreferences.mjs";
26
27
  export {
27
28
  m as FilterStatus,
28
29
  se as I18nContext,
@@ -56,7 +57,8 @@ export {
56
57
  w as useMsTeamsConnectionStatus,
57
58
  H as useMsTeamsTeams,
58
59
  y as useNotificationStore,
59
- P as useNotifications,
60
+ v as useNotifications,
61
+ le as usePreferences,
60
62
  te as useSlackAuth,
61
63
  _ as useSlackChannels,
62
64
  Y as useSlackConnectionStatus,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,37 @@
1
+ import { useCallback as n } from "react";
2
+ import m from "swr";
3
+ import { useKnockClient as p } from "../../core/context/KnockProvider.mjs";
4
+ import "@knocklabs/client";
5
+ import "fast-deep-equal";
6
+ import "date-fns";
7
+ const E = (r = {}) => {
8
+ const e = p(), {
9
+ preferenceSet: t,
10
+ tenant: c
11
+ } = r, a = ["preferences", r.preferenceSet, r.tenant, e.userId], {
12
+ data: o,
13
+ isLoading: u,
14
+ isValidating: f,
15
+ mutate: s
16
+ } = m(e.userId ? a : null, () => e.user.getPreferences({
17
+ preferenceSet: t,
18
+ tenant: c
19
+ })), l = n((i) => {
20
+ s(e.user.setPreferences(i, {
21
+ preferenceSet: t
22
+ }), {
23
+ revalidate: !1
24
+ });
25
+ }, [s, e.user, t]);
26
+ return {
27
+ getAllPreferences: n(async () => await e.user.getAllPreferences(), [e.user]),
28
+ setPreferences: l,
29
+ preferences: o,
30
+ isLoading: u,
31
+ isValidating: f
32
+ };
33
+ };
34
+ export {
35
+ E as usePreferences
36
+ };
37
+ //# sourceMappingURL=usePreferences.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePreferences.mjs","sources":["../../../../../src/modules/preferences/hooks/usePreferences.ts"],"sourcesContent":["import type {\n GetPreferencesOptions,\n PreferenceSet,\n SetPreferencesProperties,\n} from \"@knocklabs/client\";\nimport { useCallback } from \"react\";\nimport useSWR, { type SWRResponse } from \"swr\";\n\nimport { useKnockClient } from \"../../core\";\n\ntype UsePreferencesReturn = {\n preferences: PreferenceSet | undefined;\n setPreferences: (setPreferencesProperties: SetPreferencesProperties) => void;\n getAllPreferences: ReturnType<\n typeof useKnockClient\n >[\"user\"][\"getAllPreferences\"];\n isLoading: SWRResponse[\"isLoading\"];\n isValidating: SWRResponse[\"isValidating\"];\n};\n\nconst usePreferences = (\n options: GetPreferencesOptions = {},\n): UsePreferencesReturn => {\n const knock = useKnockClient();\n\n const { preferenceSet, tenant } = options;\n\n const CACHE_KEY = [\n \"preferences\",\n options.preferenceSet,\n options.tenant,\n knock.userId,\n ];\n\n const {\n data: preferences,\n isLoading,\n isValidating,\n mutate,\n } = useSWR(knock.userId ? CACHE_KEY : null, () => {\n return knock.user.getPreferences({ preferenceSet, tenant });\n });\n\n const setPreferences = useCallback(\n (preferenceSetProperties: SetPreferencesProperties) => {\n mutate(\n knock.user.setPreferences(preferenceSetProperties, { preferenceSet }),\n {\n revalidate: false,\n },\n );\n },\n [mutate, knock.user, preferenceSet],\n );\n\n const getAllPreferences = useCallback(async () => {\n return await knock.user.getAllPreferences();\n }, [knock.user]);\n\n return {\n getAllPreferences,\n setPreferences,\n preferences,\n isLoading,\n isValidating,\n };\n};\n\nexport { usePreferences };\n"],"names":["usePreferences","options","knock","useKnockClient","preferenceSet","tenant","CACHE_KEY","userId","data","preferences","isLoading","isValidating","mutate","useSWR","user","getPreferences","setPreferences","useCallback","preferenceSetProperties","revalidate","getAllPreferences"],"mappings":";;;;;;AAoBA,MAAMA,IAAiBA,CACrBC,IAAiC,OACR;AACzB,QAAMC,IAAQC,EAAe,GAEvB;AAAA,IAAEC,eAAAA;AAAAA,IAAeC,QAAAA;AAAAA,EAAAA,IAAWJ,GAE5BK,IAAY,CAChB,eACAL,EAAQG,eACRH,EAAQI,QACRH,EAAMK,MAAM,GAGR;AAAA,IACJC,MAAMC;AAAAA,IACNC,WAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACAC,QAAAA;AAAAA,MACEC,EAAOX,EAAMK,SAASD,IAAY,MAAM,MACnCJ,EAAMY,KAAKC,eAAe;AAAA,IAAEX,eAAAA;AAAAA,IAAeC,QAAAA;AAAAA,EAAAA,CAAQ,CAC3D,GAEKW,IAAiBC,EACrB,CAACC,MAAsD;AAEnDhB,IAAAA,EAAAA,EAAMY,KAAKE,eAAeE,GAAyB;AAAA,MAAEd,eAAAA;AAAAA,IAAAA,CAAe,GACpE;AAAA,MACEe,YAAY;AAAA,IAAA,CAEhB;AAAA,KAEF,CAACP,GAAQV,EAAMY,MAAMV,CAAa,CACpC;AAMO,SAAA;AAAA,IACLgB,mBALwBH,EAAY,YAC7B,MAAMf,EAAMY,KAAKM,kBAAkB,GACzC,CAAClB,EAAMY,IAAI,CAAC;AAAA,IAIbE,gBAAAA;AAAAA,IACAP,aAAAA;AAAAA,IACAC,WAAAA;AAAAA,IACAC,cAAAA;AAAAA,EACF;AACF;"}
@@ -5,4 +5,5 @@ export { type MsTeamsChannelQueryOptions, type MsTeamsTeamQueryOptions, KnockMsT
5
5
  export { KnockSlackProvider, type ContainerObject, type KnockSlackProviderProps, type KnockSlackProviderState, type SlackChannelQueryOptions, useConnectedSlackChannels, useKnockSlackClient, useSlackAuth, useSlackChannels, useSlackConnectionStatus, } from './modules/slack';
6
6
  export { I18nContext, KnockI18nProvider, locales, type I18nContent, type KnockI18nProviderProps, type Translations, useTranslations, } from './modules/i18n';
7
7
  export { type RecipientObject } from './interfaces';
8
+ export { usePreferences } from './modules/preferences';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,EACb,0BAA0B,EAC1B,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,2BAA2B,EAC3B,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,yBAAyB,EACzB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,EACb,0BAA0B,EAC1B,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,2BAA2B,EAC3B,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,yBAAyB,EACzB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { usePreferences } from './usePreferences';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/preferences/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { GetPreferencesOptions, PreferenceSet, SetPreferencesProperties } from '@knocklabs/client';
2
+ import { SWRResponse } from 'swr';
3
+ import { useKnockClient } from '../../core';
4
+ type UsePreferencesReturn = {
5
+ preferences: PreferenceSet | undefined;
6
+ setPreferences: (setPreferencesProperties: SetPreferencesProperties) => void;
7
+ getAllPreferences: ReturnType<typeof useKnockClient>["user"]["getAllPreferences"];
8
+ isLoading: SWRResponse["isLoading"];
9
+ isValidating: SWRResponse["isValidating"];
10
+ };
11
+ declare const usePreferences: (options?: GetPreferencesOptions) => UsePreferencesReturn;
12
+ export { usePreferences };
13
+ //# sourceMappingURL=usePreferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePreferences.d.ts","sourceRoot":"","sources":["../../../../../src/modules/preferences/hooks/usePreferences.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACb,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAe,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,KAAK,oBAAoB,GAAG;IAC1B,WAAW,EAAE,aAAa,GAAG,SAAS,CAAC;IACvC,cAAc,EAAE,CAAC,wBAAwB,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC7E,iBAAiB,EAAE,UAAU,CAC3B,OAAO,cAAc,CACtB,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/B,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACpC,YAAY,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;CAC3C,CAAC;AAEF,QAAA,MAAM,cAAc,GAClB,UAAS,qBAA0B,KAClC,oBA4CF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { usePreferences } from './hooks';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/preferences/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@knocklabs/react-core",
3
3
  "description": "A set of React components to build notification experiences powered by Knock",
4
4
  "author": "@knocklabs",
5
- "version": "0.7.1",
5
+ "version": "0.7.2",
6
6
  "license": "MIT",
7
7
  "main": "dist/cjs/index.js",
8
8
  "module": "dist/esm/index.mjs",
package/src/index.ts CHANGED
@@ -66,3 +66,5 @@ export {
66
66
  useTranslations,
67
67
  } from "./modules/i18n";
68
68
  export { type RecipientObject } from "./interfaces";
69
+
70
+ export { usePreferences } from "./modules/preferences";
@@ -0,0 +1 @@
1
+ export { usePreferences } from "./usePreferences";
@@ -0,0 +1,69 @@
1
+ import type {
2
+ GetPreferencesOptions,
3
+ PreferenceSet,
4
+ SetPreferencesProperties,
5
+ } from "@knocklabs/client";
6
+ import { useCallback } from "react";
7
+ import useSWR, { type SWRResponse } from "swr";
8
+
9
+ import { useKnockClient } from "../../core";
10
+
11
+ type UsePreferencesReturn = {
12
+ preferences: PreferenceSet | undefined;
13
+ setPreferences: (setPreferencesProperties: SetPreferencesProperties) => void;
14
+ getAllPreferences: ReturnType<
15
+ typeof useKnockClient
16
+ >["user"]["getAllPreferences"];
17
+ isLoading: SWRResponse["isLoading"];
18
+ isValidating: SWRResponse["isValidating"];
19
+ };
20
+
21
+ const usePreferences = (
22
+ options: GetPreferencesOptions = {},
23
+ ): UsePreferencesReturn => {
24
+ const knock = useKnockClient();
25
+
26
+ const { preferenceSet, tenant } = options;
27
+
28
+ const CACHE_KEY = [
29
+ "preferences",
30
+ options.preferenceSet,
31
+ options.tenant,
32
+ knock.userId,
33
+ ];
34
+
35
+ const {
36
+ data: preferences,
37
+ isLoading,
38
+ isValidating,
39
+ mutate,
40
+ } = useSWR(knock.userId ? CACHE_KEY : null, () => {
41
+ return knock.user.getPreferences({ preferenceSet, tenant });
42
+ });
43
+
44
+ const setPreferences = useCallback(
45
+ (preferenceSetProperties: SetPreferencesProperties) => {
46
+ mutate(
47
+ knock.user.setPreferences(preferenceSetProperties, { preferenceSet }),
48
+ {
49
+ revalidate: false,
50
+ },
51
+ );
52
+ },
53
+ [mutate, knock.user, preferenceSet],
54
+ );
55
+
56
+ const getAllPreferences = useCallback(async () => {
57
+ return await knock.user.getAllPreferences();
58
+ }, [knock.user]);
59
+
60
+ return {
61
+ getAllPreferences,
62
+ setPreferences,
63
+ preferences,
64
+ isLoading,
65
+ isValidating,
66
+ };
67
+ };
68
+
69
+ export { usePreferences };
@@ -0,0 +1 @@
1
+ export { usePreferences } from "./hooks";