@elementor/editor-current-user 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
 
2
- > @elementor/editor-current-user@0.3.2 build
2
+ > @elementor/editor-current-user@0.4.0 build
3
3
  > tsup --config=../../tsup.build.ts
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -10,13 +10,13 @@
10
10
  CLI Cleaning output folder
11
11
  ESM Build start
12
12
  CJS Build start
13
- ESM dist/index.mjs 2.55 KB
14
- ESM dist/index.mjs.map 5.33 KB
15
- ESM ⚡️ Build success in 94ms
16
- CJS dist/index.js 3.77 KB
17
- CJS dist/index.js.map 5.60 KB
18
- CJS ⚡️ Build success in 97ms
13
+ ESM dist/index.mjs 2.68 KB
14
+ ESM dist/index.mjs.map 5.43 KB
15
+ ESM ⚡️ Build success in 93ms
16
+ CJS dist/index.js 3.94 KB
17
+ CJS dist/index.js.map 5.76 KB
18
+ CJS ⚡️ Build success in 95ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 13281ms
21
- DTS dist/index.d.mts 365.00 B
22
- DTS dist/index.d.ts 365.00 B
20
+ DTS ⚡️ Build success in 10677ms
21
+ DTS dist/index.d.mts 464.00 B
22
+ DTS dist/index.d.ts 464.00 B
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @elementor/editor-current-user
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 89dfaf2: Update user api to support more capabilities.
8
+
3
9
  ## 0.3.2
4
10
 
5
11
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -2,10 +2,15 @@ declare function PrefetchUserData(): null;
2
2
 
3
3
  declare const useSuppressedMessage: (messageKey: string) => readonly [boolean, () => void];
4
4
 
5
- type UserCapability = 'manage_options';
6
-
7
5
  declare const useCurrentUserCapabilities: () => {
8
- canUser: (capability: UserCapability) => boolean;
6
+ canUser: (capability: string) => boolean;
7
+ };
8
+
9
+ type User = {
10
+ suppressedMessages: string[];
11
+ capabilities: string[];
9
12
  };
10
13
 
11
- export { PrefetchUserData, useCurrentUserCapabilities, useSuppressedMessage };
14
+ declare const getCurrentUser: () => Promise<User>;
15
+
16
+ export { PrefetchUserData, getCurrentUser, useCurrentUserCapabilities, useSuppressedMessage };
package/dist/index.d.ts CHANGED
@@ -2,10 +2,15 @@ declare function PrefetchUserData(): null;
2
2
 
3
3
  declare const useSuppressedMessage: (messageKey: string) => readonly [boolean, () => void];
4
4
 
5
- type UserCapability = 'manage_options';
6
-
7
5
  declare const useCurrentUserCapabilities: () => {
8
- canUser: (capability: UserCapability) => boolean;
6
+ canUser: (capability: string) => boolean;
7
+ };
8
+
9
+ type User = {
10
+ suppressedMessages: string[];
11
+ capabilities: string[];
9
12
  };
10
13
 
11
- export { PrefetchUserData, useCurrentUserCapabilities, useSuppressedMessage };
14
+ declare const getCurrentUser: () => Promise<User>;
15
+
16
+ export { PrefetchUserData, getCurrentUser, useCurrentUserCapabilities, useSuppressedMessage };
package/dist/index.js CHANGED
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
23
  PrefetchUserData: () => PrefetchUserData,
24
+ getCurrentUser: () => getCurrentUser,
24
25
  useCurrentUserCapabilities: () => useCurrentUserCapabilities,
25
26
  useSuppressedMessage: () => useSuppressedMessage
26
27
  });
@@ -59,10 +60,17 @@ var userToRequest = (user) => {
59
60
 
60
61
  // src/use-current-user.ts
61
62
  var import_query = require("@elementor/query");
63
+
64
+ // src/get-current-user.ts
65
+ var getCurrentUser = () => {
66
+ return apiClient.get();
67
+ };
68
+
69
+ // src/use-current-user.ts
62
70
  var EDITOR_CURRENT_USER_QUERY_KEY = "editor-current-user";
63
71
  var useCurrentUser = () => (0, import_query.useQuery)({
64
72
  queryKey: [EDITOR_CURRENT_USER_QUERY_KEY],
65
- queryFn: apiClient.get
73
+ queryFn: getCurrentUser
66
74
  });
67
75
 
68
76
  // src/components/prefetch-user-data.tsx
@@ -111,6 +119,7 @@ var useCurrentUserCapabilities = () => {
111
119
  // Annotate the CommonJS export names for ESM import in node:
112
120
  0 && (module.exports = {
113
121
  PrefetchUserData,
122
+ getCurrentUser,
114
123
  useCurrentUserCapabilities,
115
124
  useSuppressedMessage
116
125
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/prefetch-user-data.tsx","../src/api.ts","../src/use-current-user.ts","../src/use-update-current-user.ts","../src/use-suppressed-message.ts","../src/use-current-user-capabilities.ts"],"sourcesContent":["export { PrefetchUserData } from './components/prefetch-user-data';\nexport { useSuppressedMessage } from './use-suppressed-message';\nexport { useCurrentUserCapabilities } from './use-current-user-capabilities';\n","import { useQueryClient } from '@elementor/query';\n\nimport { apiClient } from '../api';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from '../use-current-user';\n\nexport function PrefetchUserData() {\n\tconst queryClient = useQueryClient();\n\n\tqueryClient.prefetchQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: apiClient.get,\n\t} );\n\n\treturn null;\n}\n","import { httpService } from '@elementor/http-client';\n\nimport { type User, type UserCapability } from './types';\n\nconst RESOURCE_URL = '/users/me';\n\ntype GetUserPayload = {\n\tparams: { context?: 'edit' };\n};\n\ntype UserModel = {\n\telementor_introduction: Record< string, boolean >;\n\tcapabilities: Partial< Record< UserCapability, true > >;\n};\n\nconst getUserPayload: GetUserPayload = { params: { context: 'edit' } };\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< UserModel >( 'wp/v2' + RESOURCE_URL, getUserPayload )\n\t\t\t.then( ( res ) => {\n\t\t\t\treturn responseToUser( res.data );\n\t\t\t} ),\n\tupdate: ( data: Partial< User > ) =>\n\t\thttpService().patch< Partial< UserModel > >( 'wp/v2' + RESOURCE_URL, userToRequest( data ) ),\n};\n\nconst responseToUser = ( response: UserModel ): User => {\n\treturn {\n\t\tsuppressedMessages: Object.entries( response.elementor_introduction )\n\t\t\t.filter( ( [ , value ] ) => value )\n\t\t\t.map( ( [ message ] ) => message ),\n\t\tcapabilities: Object.keys( response.capabilities ) as UserCapability[],\n\t};\n};\n\nconst userToRequest = ( user: Partial< User > ): Partial< UserModel > => {\n\treturn {\n\t\telementor_introduction: user.suppressedMessages?.reduce(\n\t\t\t( acc, message ) => {\n\t\t\t\tacc[ message ] = true;\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record< string, boolean >\n\t\t),\n\t};\n};\n","import { useQuery } from '@elementor/query';\n\nimport { apiClient } from './api';\n\nexport const EDITOR_CURRENT_USER_QUERY_KEY = 'editor-current-user';\n\nexport const useCurrentUser = () =>\n\tuseQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: apiClient.get,\n\t} );\n","import { useMutation, useQueryClient } from '@elementor/query';\n\nimport { apiClient } from './api';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from './use-current-user';\n\nexport const useUpdateCurrentUser = () => {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation( {\n\t\tmutationFn: apiClient.update,\n\t\tonSuccess: () => queryClient.invalidateQueries( { queryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ] } ),\n\t} );\n};\n","import { useCurrentUser } from './use-current-user';\nimport { useUpdateCurrentUser } from './use-update-current-user';\n\nexport const useSuppressedMessage = ( messageKey: string ) => {\n\tconst { data } = useCurrentUser();\n\tconst { mutate } = useUpdateCurrentUser();\n\n\tconst isMessageSuppressed = !! data?.suppressedMessages.includes( messageKey );\n\n\tconst suppressMessage = () => {\n\t\tif ( ! isMessageSuppressed ) {\n\t\t\tmutate( {\n\t\t\t\tsuppressedMessages: [ ...( data?.suppressedMessages ?? [] ), messageKey ],\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn [ isMessageSuppressed, suppressMessage ] as const;\n};\n","import { type UserCapability } from './types';\nimport { useCurrentUser } from './use-current-user';\n\nexport const useCurrentUserCapabilities = () => {\n\tconst { data } = useCurrentUser();\n\n\tconst canUser = ( capability: UserCapability ) => {\n\t\treturn Boolean( data?.capabilities.includes( capability ) );\n\t};\n\n\treturn { canUser };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA+B;;;ACA/B,yBAA4B;AAI5B,IAAM,eAAe;AAWrB,IAAM,iBAAiC,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE;AAE9D,IAAM,YAAY;AAAA,EACxB,KAAK,UACJ,gCAAY,EACV,IAAkB,UAAU,cAAc,cAAe,EACzD,KAAM,CAAE,QAAS;AACjB,WAAO,eAAgB,IAAI,IAAK;AAAA,EACjC,CAAE;AAAA,EACJ,QAAQ,CAAE,aACT,gCAAY,EAAE,MAA+B,UAAU,cAAc,cAAe,IAAK,CAAE;AAC7F;AAEA,IAAM,iBAAiB,CAAE,aAA+B;AACvD,SAAO;AAAA,IACN,oBAAoB,OAAO,QAAS,SAAS,sBAAuB,EAClE,OAAQ,CAAE,CAAE,EAAE,KAAM,MAAO,KAAM,EACjC,IAAK,CAAE,CAAE,OAAQ,MAAO,OAAQ;AAAA,IAClC,cAAc,OAAO,KAAM,SAAS,YAAa;AAAA,EAClD;AACD;AAEA,IAAM,gBAAgB,CAAE,SAAiD;AACxE,SAAO;AAAA,IACN,wBAAwB,KAAK,oBAAoB;AAAA,MAChD,CAAE,KAAK,YAAa;AACnB,YAAK,OAAQ,IAAI;AAEjB,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;AChDA,mBAAyB;AAIlB,IAAM,gCAAgC;AAEtC,IAAM,iBAAiB,UAC7B,uBAAU;AAAA,EACT,UAAU,CAAE,6BAA8B;AAAA,EAC1C,SAAS,UAAU;AACpB,CAAE;;;AFLI,SAAS,mBAAmB;AAClC,QAAM,kBAAc,8BAAe;AAEnC,cAAY,cAAe;AAAA,IAC1B,UAAU,CAAE,6BAA8B;AAAA,IAC1C,SAAS,UAAU;AAAA,EACpB,CAAE;AAEF,SAAO;AACR;;;AGdA,IAAAC,gBAA4C;AAKrC,IAAM,uBAAuB,MAAM;AACzC,QAAM,kBAAc,8BAAe;AAEnC,aAAO,2BAAa;AAAA,IACnB,YAAY,UAAU;AAAA,IACtB,WAAW,MAAM,YAAY,kBAAmB,EAAE,UAAU,CAAE,6BAA8B,EAAE,CAAE;AAAA,EACjG,CAAE;AACH;;;ACTO,IAAM,uBAAuB,CAAE,eAAwB;AAC7D,QAAM,EAAE,KAAK,IAAI,eAAe;AAChC,QAAM,EAAE,OAAO,IAAI,qBAAqB;AAExC,QAAM,sBAAsB,CAAC,CAAE,MAAM,mBAAmB,SAAU,UAAW;AAE7E,QAAM,kBAAkB,MAAM;AAC7B,QAAK,CAAE,qBAAsB;AAC5B,aAAQ;AAAA,QACP,oBAAoB,CAAE,GAAK,MAAM,sBAAsB,CAAC,GAAK,UAAW;AAAA,MACzE,CAAE;AAAA,IACH;AAAA,EACD;AAEA,SAAO,CAAE,qBAAqB,eAAgB;AAC/C;;;ACfO,IAAM,6BAA6B,MAAM;AAC/C,QAAM,EAAE,KAAK,IAAI,eAAe;AAEhC,QAAM,UAAU,CAAE,eAAgC;AACjD,WAAO,QAAS,MAAM,aAAa,SAAU,UAAW,CAAE;AAAA,EAC3D;AAEA,SAAO,EAAE,QAAQ;AAClB;","names":["import_query","import_query"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/prefetch-user-data.tsx","../src/api.ts","../src/use-current-user.ts","../src/get-current-user.ts","../src/use-update-current-user.ts","../src/use-suppressed-message.ts","../src/use-current-user-capabilities.ts"],"sourcesContent":["export { PrefetchUserData } from './components/prefetch-user-data';\nexport { useSuppressedMessage } from './use-suppressed-message';\nexport { useCurrentUserCapabilities } from './use-current-user-capabilities';\nexport { getCurrentUser } from './get-current-user';\n","import { useQueryClient } from '@elementor/query';\n\nimport { apiClient } from '../api';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from '../use-current-user';\n\nexport function PrefetchUserData() {\n\tconst queryClient = useQueryClient();\n\n\tqueryClient.prefetchQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: apiClient.get,\n\t} );\n\n\treturn null;\n}\n","import { httpService } from '@elementor/http-client';\n\nimport { type User } from './types';\n\nconst RESOURCE_URL = '/users/me';\n\ntype GetUserPayload = {\n\tparams: { context?: 'edit' };\n};\n\ntype UserModel = {\n\telementor_introduction: Record< string, boolean >;\n\tcapabilities: Partial< Record< string, true > >;\n};\n\nconst getUserPayload: GetUserPayload = { params: { context: 'edit' } };\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< UserModel >( 'wp/v2' + RESOURCE_URL, getUserPayload )\n\t\t\t.then( ( res ) => {\n\t\t\t\treturn responseToUser( res.data );\n\t\t\t} ),\n\tupdate: ( data: Partial< User > ) =>\n\t\thttpService().patch< Partial< UserModel > >( 'wp/v2' + RESOURCE_URL, userToRequest( data ) ),\n};\n\nconst responseToUser = ( response: UserModel ): User => {\n\treturn {\n\t\tsuppressedMessages: Object.entries( response.elementor_introduction )\n\t\t\t.filter( ( [ , value ] ) => value )\n\t\t\t.map( ( [ message ] ) => message ),\n\t\tcapabilities: Object.keys( response.capabilities ),\n\t};\n};\n\nconst userToRequest = ( user: Partial< User > ): Partial< UserModel > => {\n\treturn {\n\t\telementor_introduction: user.suppressedMessages?.reduce(\n\t\t\t( acc, message ) => {\n\t\t\t\tacc[ message ] = true;\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record< string, boolean >\n\t\t),\n\t};\n};\n","import { useQuery } from '@elementor/query';\n\nimport { getCurrentUser } from './get-current-user';\n\nexport const EDITOR_CURRENT_USER_QUERY_KEY = 'editor-current-user';\n\nexport const useCurrentUser = () =>\n\tuseQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: getCurrentUser,\n\t} );\n","import { apiClient } from './api';\n\nexport const getCurrentUser = () => {\n\treturn apiClient.get();\n};\n","import { useMutation, useQueryClient } from '@elementor/query';\n\nimport { apiClient } from './api';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from './use-current-user';\n\nexport const useUpdateCurrentUser = () => {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation( {\n\t\tmutationFn: apiClient.update,\n\t\tonSuccess: () => queryClient.invalidateQueries( { queryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ] } ),\n\t} );\n};\n","import { useCurrentUser } from './use-current-user';\nimport { useUpdateCurrentUser } from './use-update-current-user';\n\nexport const useSuppressedMessage = ( messageKey: string ) => {\n\tconst { data } = useCurrentUser();\n\tconst { mutate } = useUpdateCurrentUser();\n\n\tconst isMessageSuppressed = !! data?.suppressedMessages.includes( messageKey );\n\n\tconst suppressMessage = () => {\n\t\tif ( ! isMessageSuppressed ) {\n\t\t\tmutate( {\n\t\t\t\tsuppressedMessages: [ ...( data?.suppressedMessages ?? [] ), messageKey ],\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn [ isMessageSuppressed, suppressMessage ] as const;\n};\n","import { useCurrentUser } from './use-current-user';\n\nexport const useCurrentUserCapabilities = () => {\n\tconst { data } = useCurrentUser();\n\n\tconst canUser = ( capability: string ) => {\n\t\treturn Boolean( data?.capabilities.includes( capability ) );\n\t};\n\n\treturn { canUser };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA+B;;;ACA/B,yBAA4B;AAI5B,IAAM,eAAe;AAWrB,IAAM,iBAAiC,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE;AAE9D,IAAM,YAAY;AAAA,EACxB,KAAK,UACJ,gCAAY,EACV,IAAkB,UAAU,cAAc,cAAe,EACzD,KAAM,CAAE,QAAS;AACjB,WAAO,eAAgB,IAAI,IAAK;AAAA,EACjC,CAAE;AAAA,EACJ,QAAQ,CAAE,aACT,gCAAY,EAAE,MAA+B,UAAU,cAAc,cAAe,IAAK,CAAE;AAC7F;AAEA,IAAM,iBAAiB,CAAE,aAA+B;AACvD,SAAO;AAAA,IACN,oBAAoB,OAAO,QAAS,SAAS,sBAAuB,EAClE,OAAQ,CAAE,CAAE,EAAE,KAAM,MAAO,KAAM,EACjC,IAAK,CAAE,CAAE,OAAQ,MAAO,OAAQ;AAAA,IAClC,cAAc,OAAO,KAAM,SAAS,YAAa;AAAA,EAClD;AACD;AAEA,IAAM,gBAAgB,CAAE,SAAiD;AACxE,SAAO;AAAA,IACN,wBAAwB,KAAK,oBAAoB;AAAA,MAChD,CAAE,KAAK,YAAa;AACnB,YAAK,OAAQ,IAAI;AAEjB,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;AChDA,mBAAyB;;;ACElB,IAAM,iBAAiB,MAAM;AACnC,SAAO,UAAU,IAAI;AACtB;;;ADAO,IAAM,gCAAgC;AAEtC,IAAM,iBAAiB,UAC7B,uBAAU;AAAA,EACT,UAAU,CAAE,6BAA8B;AAAA,EAC1C,SAAS;AACV,CAAE;;;AFLI,SAAS,mBAAmB;AAClC,QAAM,kBAAc,8BAAe;AAEnC,cAAY,cAAe;AAAA,IAC1B,UAAU,CAAE,6BAA8B;AAAA,IAC1C,SAAS,UAAU;AAAA,EACpB,CAAE;AAEF,SAAO;AACR;;;AIdA,IAAAC,gBAA4C;AAKrC,IAAM,uBAAuB,MAAM;AACzC,QAAM,kBAAc,8BAAe;AAEnC,aAAO,2BAAa;AAAA,IACnB,YAAY,UAAU;AAAA,IACtB,WAAW,MAAM,YAAY,kBAAmB,EAAE,UAAU,CAAE,6BAA8B,EAAE,CAAE;AAAA,EACjG,CAAE;AACH;;;ACTO,IAAM,uBAAuB,CAAE,eAAwB;AAC7D,QAAM,EAAE,KAAK,IAAI,eAAe;AAChC,QAAM,EAAE,OAAO,IAAI,qBAAqB;AAExC,QAAM,sBAAsB,CAAC,CAAE,MAAM,mBAAmB,SAAU,UAAW;AAE7E,QAAM,kBAAkB,MAAM;AAC7B,QAAK,CAAE,qBAAsB;AAC5B,aAAQ;AAAA,QACP,oBAAoB,CAAE,GAAK,MAAM,sBAAsB,CAAC,GAAK,UAAW;AAAA,MACzE,CAAE;AAAA,IACH;AAAA,EACD;AAEA,SAAO,CAAE,qBAAqB,eAAgB;AAC/C;;;AChBO,IAAM,6BAA6B,MAAM;AAC/C,QAAM,EAAE,KAAK,IAAI,eAAe;AAEhC,QAAM,UAAU,CAAE,eAAwB;AACzC,WAAO,QAAS,MAAM,aAAa,SAAU,UAAW,CAAE;AAAA,EAC3D;AAEA,SAAO,EAAE,QAAQ;AAClB;","names":["import_query","import_query"]}
package/dist/index.mjs CHANGED
@@ -31,10 +31,17 @@ var userToRequest = (user) => {
31
31
 
32
32
  // src/use-current-user.ts
33
33
  import { useQuery } from "@elementor/query";
34
+
35
+ // src/get-current-user.ts
36
+ var getCurrentUser = () => {
37
+ return apiClient.get();
38
+ };
39
+
40
+ // src/use-current-user.ts
34
41
  var EDITOR_CURRENT_USER_QUERY_KEY = "editor-current-user";
35
42
  var useCurrentUser = () => useQuery({
36
43
  queryKey: [EDITOR_CURRENT_USER_QUERY_KEY],
37
- queryFn: apiClient.get
44
+ queryFn: getCurrentUser
38
45
  });
39
46
 
40
47
  // src/components/prefetch-user-data.tsx
@@ -82,6 +89,7 @@ var useCurrentUserCapabilities = () => {
82
89
  };
83
90
  export {
84
91
  PrefetchUserData,
92
+ getCurrentUser,
85
93
  useCurrentUserCapabilities,
86
94
  useSuppressedMessage
87
95
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/prefetch-user-data.tsx","../src/api.ts","../src/use-current-user.ts","../src/use-update-current-user.ts","../src/use-suppressed-message.ts","../src/use-current-user-capabilities.ts"],"sourcesContent":["import { useQueryClient } from '@elementor/query';\n\nimport { apiClient } from '../api';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from '../use-current-user';\n\nexport function PrefetchUserData() {\n\tconst queryClient = useQueryClient();\n\n\tqueryClient.prefetchQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: apiClient.get,\n\t} );\n\n\treturn null;\n}\n","import { httpService } from '@elementor/http-client';\n\nimport { type User, type UserCapability } from './types';\n\nconst RESOURCE_URL = '/users/me';\n\ntype GetUserPayload = {\n\tparams: { context?: 'edit' };\n};\n\ntype UserModel = {\n\telementor_introduction: Record< string, boolean >;\n\tcapabilities: Partial< Record< UserCapability, true > >;\n};\n\nconst getUserPayload: GetUserPayload = { params: { context: 'edit' } };\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< UserModel >( 'wp/v2' + RESOURCE_URL, getUserPayload )\n\t\t\t.then( ( res ) => {\n\t\t\t\treturn responseToUser( res.data );\n\t\t\t} ),\n\tupdate: ( data: Partial< User > ) =>\n\t\thttpService().patch< Partial< UserModel > >( 'wp/v2' + RESOURCE_URL, userToRequest( data ) ),\n};\n\nconst responseToUser = ( response: UserModel ): User => {\n\treturn {\n\t\tsuppressedMessages: Object.entries( response.elementor_introduction )\n\t\t\t.filter( ( [ , value ] ) => value )\n\t\t\t.map( ( [ message ] ) => message ),\n\t\tcapabilities: Object.keys( response.capabilities ) as UserCapability[],\n\t};\n};\n\nconst userToRequest = ( user: Partial< User > ): Partial< UserModel > => {\n\treturn {\n\t\telementor_introduction: user.suppressedMessages?.reduce(\n\t\t\t( acc, message ) => {\n\t\t\t\tacc[ message ] = true;\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record< string, boolean >\n\t\t),\n\t};\n};\n","import { useQuery } from '@elementor/query';\n\nimport { apiClient } from './api';\n\nexport const EDITOR_CURRENT_USER_QUERY_KEY = 'editor-current-user';\n\nexport const useCurrentUser = () =>\n\tuseQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: apiClient.get,\n\t} );\n","import { useMutation, useQueryClient } from '@elementor/query';\n\nimport { apiClient } from './api';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from './use-current-user';\n\nexport const useUpdateCurrentUser = () => {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation( {\n\t\tmutationFn: apiClient.update,\n\t\tonSuccess: () => queryClient.invalidateQueries( { queryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ] } ),\n\t} );\n};\n","import { useCurrentUser } from './use-current-user';\nimport { useUpdateCurrentUser } from './use-update-current-user';\n\nexport const useSuppressedMessage = ( messageKey: string ) => {\n\tconst { data } = useCurrentUser();\n\tconst { mutate } = useUpdateCurrentUser();\n\n\tconst isMessageSuppressed = !! data?.suppressedMessages.includes( messageKey );\n\n\tconst suppressMessage = () => {\n\t\tif ( ! isMessageSuppressed ) {\n\t\t\tmutate( {\n\t\t\t\tsuppressedMessages: [ ...( data?.suppressedMessages ?? [] ), messageKey ],\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn [ isMessageSuppressed, suppressMessage ] as const;\n};\n","import { type UserCapability } from './types';\nimport { useCurrentUser } from './use-current-user';\n\nexport const useCurrentUserCapabilities = () => {\n\tconst { data } = useCurrentUser();\n\n\tconst canUser = ( capability: UserCapability ) => {\n\t\treturn Boolean( data?.capabilities.includes( capability ) );\n\t};\n\n\treturn { canUser };\n};\n"],"mappings":";AAAA,SAAS,sBAAsB;;;ACA/B,SAAS,mBAAmB;AAI5B,IAAM,eAAe;AAWrB,IAAM,iBAAiC,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE;AAE9D,IAAM,YAAY;AAAA,EACxB,KAAK,MACJ,YAAY,EACV,IAAkB,UAAU,cAAc,cAAe,EACzD,KAAM,CAAE,QAAS;AACjB,WAAO,eAAgB,IAAI,IAAK;AAAA,EACjC,CAAE;AAAA,EACJ,QAAQ,CAAE,SACT,YAAY,EAAE,MAA+B,UAAU,cAAc,cAAe,IAAK,CAAE;AAC7F;AAEA,IAAM,iBAAiB,CAAE,aAA+B;AACvD,SAAO;AAAA,IACN,oBAAoB,OAAO,QAAS,SAAS,sBAAuB,EAClE,OAAQ,CAAE,CAAE,EAAE,KAAM,MAAO,KAAM,EACjC,IAAK,CAAE,CAAE,OAAQ,MAAO,OAAQ;AAAA,IAClC,cAAc,OAAO,KAAM,SAAS,YAAa;AAAA,EAClD;AACD;AAEA,IAAM,gBAAgB,CAAE,SAAiD;AACxE,SAAO;AAAA,IACN,wBAAwB,KAAK,oBAAoB;AAAA,MAChD,CAAE,KAAK,YAAa;AACnB,YAAK,OAAQ,IAAI;AAEjB,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;AChDA,SAAS,gBAAgB;AAIlB,IAAM,gCAAgC;AAEtC,IAAM,iBAAiB,MAC7B,SAAU;AAAA,EACT,UAAU,CAAE,6BAA8B;AAAA,EAC1C,SAAS,UAAU;AACpB,CAAE;;;AFLI,SAAS,mBAAmB;AAClC,QAAM,cAAc,eAAe;AAEnC,cAAY,cAAe;AAAA,IAC1B,UAAU,CAAE,6BAA8B;AAAA,IAC1C,SAAS,UAAU;AAAA,EACpB,CAAE;AAEF,SAAO;AACR;;;AGdA,SAAS,aAAa,kBAAAA,uBAAsB;AAKrC,IAAM,uBAAuB,MAAM;AACzC,QAAM,cAAcC,gBAAe;AAEnC,SAAO,YAAa;AAAA,IACnB,YAAY,UAAU;AAAA,IACtB,WAAW,MAAM,YAAY,kBAAmB,EAAE,UAAU,CAAE,6BAA8B,EAAE,CAAE;AAAA,EACjG,CAAE;AACH;;;ACTO,IAAM,uBAAuB,CAAE,eAAwB;AAC7D,QAAM,EAAE,KAAK,IAAI,eAAe;AAChC,QAAM,EAAE,OAAO,IAAI,qBAAqB;AAExC,QAAM,sBAAsB,CAAC,CAAE,MAAM,mBAAmB,SAAU,UAAW;AAE7E,QAAM,kBAAkB,MAAM;AAC7B,QAAK,CAAE,qBAAsB;AAC5B,aAAQ;AAAA,QACP,oBAAoB,CAAE,GAAK,MAAM,sBAAsB,CAAC,GAAK,UAAW;AAAA,MACzE,CAAE;AAAA,IACH;AAAA,EACD;AAEA,SAAO,CAAE,qBAAqB,eAAgB;AAC/C;;;ACfO,IAAM,6BAA6B,MAAM;AAC/C,QAAM,EAAE,KAAK,IAAI,eAAe;AAEhC,QAAM,UAAU,CAAE,eAAgC;AACjD,WAAO,QAAS,MAAM,aAAa,SAAU,UAAW,CAAE;AAAA,EAC3D;AAEA,SAAO,EAAE,QAAQ;AAClB;","names":["useQueryClient","useQueryClient"]}
1
+ {"version":3,"sources":["../src/components/prefetch-user-data.tsx","../src/api.ts","../src/use-current-user.ts","../src/get-current-user.ts","../src/use-update-current-user.ts","../src/use-suppressed-message.ts","../src/use-current-user-capabilities.ts"],"sourcesContent":["import { useQueryClient } from '@elementor/query';\n\nimport { apiClient } from '../api';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from '../use-current-user';\n\nexport function PrefetchUserData() {\n\tconst queryClient = useQueryClient();\n\n\tqueryClient.prefetchQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: apiClient.get,\n\t} );\n\n\treturn null;\n}\n","import { httpService } from '@elementor/http-client';\n\nimport { type User } from './types';\n\nconst RESOURCE_URL = '/users/me';\n\ntype GetUserPayload = {\n\tparams: { context?: 'edit' };\n};\n\ntype UserModel = {\n\telementor_introduction: Record< string, boolean >;\n\tcapabilities: Partial< Record< string, true > >;\n};\n\nconst getUserPayload: GetUserPayload = { params: { context: 'edit' } };\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< UserModel >( 'wp/v2' + RESOURCE_URL, getUserPayload )\n\t\t\t.then( ( res ) => {\n\t\t\t\treturn responseToUser( res.data );\n\t\t\t} ),\n\tupdate: ( data: Partial< User > ) =>\n\t\thttpService().patch< Partial< UserModel > >( 'wp/v2' + RESOURCE_URL, userToRequest( data ) ),\n};\n\nconst responseToUser = ( response: UserModel ): User => {\n\treturn {\n\t\tsuppressedMessages: Object.entries( response.elementor_introduction )\n\t\t\t.filter( ( [ , value ] ) => value )\n\t\t\t.map( ( [ message ] ) => message ),\n\t\tcapabilities: Object.keys( response.capabilities ),\n\t};\n};\n\nconst userToRequest = ( user: Partial< User > ): Partial< UserModel > => {\n\treturn {\n\t\telementor_introduction: user.suppressedMessages?.reduce(\n\t\t\t( acc, message ) => {\n\t\t\t\tacc[ message ] = true;\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record< string, boolean >\n\t\t),\n\t};\n};\n","import { useQuery } from '@elementor/query';\n\nimport { getCurrentUser } from './get-current-user';\n\nexport const EDITOR_CURRENT_USER_QUERY_KEY = 'editor-current-user';\n\nexport const useCurrentUser = () =>\n\tuseQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: getCurrentUser,\n\t} );\n","import { apiClient } from './api';\n\nexport const getCurrentUser = () => {\n\treturn apiClient.get();\n};\n","import { useMutation, useQueryClient } from '@elementor/query';\n\nimport { apiClient } from './api';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from './use-current-user';\n\nexport const useUpdateCurrentUser = () => {\n\tconst queryClient = useQueryClient();\n\n\treturn useMutation( {\n\t\tmutationFn: apiClient.update,\n\t\tonSuccess: () => queryClient.invalidateQueries( { queryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ] } ),\n\t} );\n};\n","import { useCurrentUser } from './use-current-user';\nimport { useUpdateCurrentUser } from './use-update-current-user';\n\nexport const useSuppressedMessage = ( messageKey: string ) => {\n\tconst { data } = useCurrentUser();\n\tconst { mutate } = useUpdateCurrentUser();\n\n\tconst isMessageSuppressed = !! data?.suppressedMessages.includes( messageKey );\n\n\tconst suppressMessage = () => {\n\t\tif ( ! isMessageSuppressed ) {\n\t\t\tmutate( {\n\t\t\t\tsuppressedMessages: [ ...( data?.suppressedMessages ?? [] ), messageKey ],\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn [ isMessageSuppressed, suppressMessage ] as const;\n};\n","import { useCurrentUser } from './use-current-user';\n\nexport const useCurrentUserCapabilities = () => {\n\tconst { data } = useCurrentUser();\n\n\tconst canUser = ( capability: string ) => {\n\t\treturn Boolean( data?.capabilities.includes( capability ) );\n\t};\n\n\treturn { canUser };\n};\n"],"mappings":";AAAA,SAAS,sBAAsB;;;ACA/B,SAAS,mBAAmB;AAI5B,IAAM,eAAe;AAWrB,IAAM,iBAAiC,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE;AAE9D,IAAM,YAAY;AAAA,EACxB,KAAK,MACJ,YAAY,EACV,IAAkB,UAAU,cAAc,cAAe,EACzD,KAAM,CAAE,QAAS;AACjB,WAAO,eAAgB,IAAI,IAAK;AAAA,EACjC,CAAE;AAAA,EACJ,QAAQ,CAAE,SACT,YAAY,EAAE,MAA+B,UAAU,cAAc,cAAe,IAAK,CAAE;AAC7F;AAEA,IAAM,iBAAiB,CAAE,aAA+B;AACvD,SAAO;AAAA,IACN,oBAAoB,OAAO,QAAS,SAAS,sBAAuB,EAClE,OAAQ,CAAE,CAAE,EAAE,KAAM,MAAO,KAAM,EACjC,IAAK,CAAE,CAAE,OAAQ,MAAO,OAAQ;AAAA,IAClC,cAAc,OAAO,KAAM,SAAS,YAAa;AAAA,EAClD;AACD;AAEA,IAAM,gBAAgB,CAAE,SAAiD;AACxE,SAAO;AAAA,IACN,wBAAwB,KAAK,oBAAoB;AAAA,MAChD,CAAE,KAAK,YAAa;AACnB,YAAK,OAAQ,IAAI;AAEjB,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;AChDA,SAAS,gBAAgB;;;ACElB,IAAM,iBAAiB,MAAM;AACnC,SAAO,UAAU,IAAI;AACtB;;;ADAO,IAAM,gCAAgC;AAEtC,IAAM,iBAAiB,MAC7B,SAAU;AAAA,EACT,UAAU,CAAE,6BAA8B;AAAA,EAC1C,SAAS;AACV,CAAE;;;AFLI,SAAS,mBAAmB;AAClC,QAAM,cAAc,eAAe;AAEnC,cAAY,cAAe;AAAA,IAC1B,UAAU,CAAE,6BAA8B;AAAA,IAC1C,SAAS,UAAU;AAAA,EACpB,CAAE;AAEF,SAAO;AACR;;;AIdA,SAAS,aAAa,kBAAAA,uBAAsB;AAKrC,IAAM,uBAAuB,MAAM;AACzC,QAAM,cAAcC,gBAAe;AAEnC,SAAO,YAAa;AAAA,IACnB,YAAY,UAAU;AAAA,IACtB,WAAW,MAAM,YAAY,kBAAmB,EAAE,UAAU,CAAE,6BAA8B,EAAE,CAAE;AAAA,EACjG,CAAE;AACH;;;ACTO,IAAM,uBAAuB,CAAE,eAAwB;AAC7D,QAAM,EAAE,KAAK,IAAI,eAAe;AAChC,QAAM,EAAE,OAAO,IAAI,qBAAqB;AAExC,QAAM,sBAAsB,CAAC,CAAE,MAAM,mBAAmB,SAAU,UAAW;AAE7E,QAAM,kBAAkB,MAAM;AAC7B,QAAK,CAAE,qBAAsB;AAC5B,aAAQ;AAAA,QACP,oBAAoB,CAAE,GAAK,MAAM,sBAAsB,CAAC,GAAK,UAAW;AAAA,MACzE,CAAE;AAAA,IACH;AAAA,EACD;AAEA,SAAO,CAAE,qBAAqB,eAAgB;AAC/C;;;AChBO,IAAM,6BAA6B,MAAM;AAC/C,QAAM,EAAE,KAAK,IAAI,eAAe;AAEhC,QAAM,UAAU,CAAE,eAAwB;AACzC,WAAO,QAAS,MAAM,aAAa,SAAU,UAAW,CAAE;AAAA,EAC3D;AAEA,SAAO,EAAE,QAAQ;AAClB;","names":["useQueryClient","useQueryClient"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-current-user",
3
3
  "description": "Elementor Editor Current User",
4
- "version": "0.3.2",
4
+ "version": "0.4.0",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -1,7 +1,7 @@
1
1
  import { type UseQueryResult } from '@elementor/query';
2
2
  import { renderHook } from '@testing-library/react';
3
3
 
4
- import { type User, type UserCapability } from '../types';
4
+ import { type User } from '../types';
5
5
  import { useCurrentUser } from '../use-current-user';
6
6
  import { useCurrentUserCapabilities } from '../use-current-user-capabilities';
7
7
 
@@ -20,7 +20,7 @@ describe( 'useCurrentUserCapabilities', () => {
20
20
 
21
21
  it( "should return false if user doesn't have the capability", async () => {
22
22
  jest.mocked( useCurrentUser ).mockReturnValue( {
23
- data: { capabilities: [] as UserCapability[] },
23
+ data: { capabilities: [] as string[] },
24
24
  } as UseQueryResult< User, Error > );
25
25
 
26
26
  const { result } = renderHook( () => useCurrentUserCapabilities() );
package/src/api.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { httpService } from '@elementor/http-client';
2
2
 
3
- import { type User, type UserCapability } from './types';
3
+ import { type User } from './types';
4
4
 
5
5
  const RESOURCE_URL = '/users/me';
6
6
 
@@ -10,7 +10,7 @@ type GetUserPayload = {
10
10
 
11
11
  type UserModel = {
12
12
  elementor_introduction: Record< string, boolean >;
13
- capabilities: Partial< Record< UserCapability, true > >;
13
+ capabilities: Partial< Record< string, true > >;
14
14
  };
15
15
 
16
16
  const getUserPayload: GetUserPayload = { params: { context: 'edit' } };
@@ -31,7 +31,7 @@ const responseToUser = ( response: UserModel ): User => {
31
31
  suppressedMessages: Object.entries( response.elementor_introduction )
32
32
  .filter( ( [ , value ] ) => value )
33
33
  .map( ( [ message ] ) => message ),
34
- capabilities: Object.keys( response.capabilities ) as UserCapability[],
34
+ capabilities: Object.keys( response.capabilities ),
35
35
  };
36
36
  };
37
37
 
@@ -0,0 +1,5 @@
1
+ import { apiClient } from './api';
2
+
3
+ export const getCurrentUser = () => {
4
+ return apiClient.get();
5
+ };
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { PrefetchUserData } from './components/prefetch-user-data';
2
2
  export { useSuppressedMessage } from './use-suppressed-message';
3
3
  export { useCurrentUserCapabilities } from './use-current-user-capabilities';
4
+ export { getCurrentUser } from './get-current-user';
package/src/types.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  export type User = {
2
2
  suppressedMessages: string[];
3
- capabilities: UserCapability[];
3
+ capabilities: string[];
4
4
  };
5
-
6
- export type UserCapability = 'manage_options';
@@ -1,10 +1,9 @@
1
- import { type UserCapability } from './types';
2
1
  import { useCurrentUser } from './use-current-user';
3
2
 
4
3
  export const useCurrentUserCapabilities = () => {
5
4
  const { data } = useCurrentUser();
6
5
 
7
- const canUser = ( capability: UserCapability ) => {
6
+ const canUser = ( capability: string ) => {
8
7
  return Boolean( data?.capabilities.includes( capability ) );
9
8
  };
10
9
 
@@ -1,11 +1,11 @@
1
1
  import { useQuery } from '@elementor/query';
2
2
 
3
- import { apiClient } from './api';
3
+ import { getCurrentUser } from './get-current-user';
4
4
 
5
5
  export const EDITOR_CURRENT_USER_QUERY_KEY = 'editor-current-user';
6
6
 
7
7
  export const useCurrentUser = () =>
8
8
  useQuery( {
9
9
  queryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],
10
- queryFn: apiClient.get,
10
+ queryFn: getCurrentUser,
11
11
  } );