@elementor/editor-current-user 0.1.0 → 0.2.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.1.0 build
2
+ > @elementor/editor-current-user@0.2.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
- CJS dist/index.js 2.53 KB
14
- CJS dist/index.js.map 3.00 KB
15
- CJS ⚡️ Build success in 49ms
16
- ESM dist/index.mjs 1.39 KB
17
- ESM dist/index.mjs.map 2.80 KB
18
- ESM ⚡️ Build success in 51ms
13
+ CJS dist/index.js 3.45 KB
14
+ CJS dist/index.js.map 4.88 KB
15
+ CJS ⚡️ Build success in 81ms
16
+ ESM dist/index.mjs 2.34 KB
17
+ ESM dist/index.mjs.map 4.85 KB
18
+ ESM ⚡️ Build success in 84ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 9572ms
21
- DTS dist/index.d.mts 476.00 B
22
- DTS dist/index.d.ts 476.00 B
20
+ DTS ⚡️ Build success in 13014ms
21
+ DTS dist/index.d.mts 126.00 B
22
+ DTS dist/index.d.ts 126.00 B
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @elementor/editor-current-user
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - dd8654a: Add introduction modal to class manager panel
8
+
3
9
  ## 0.1.0
4
10
 
5
11
  ### Minor Changes
package/dist/index.d.mts CHANGED
@@ -1,14 +1,3 @@
1
- import * as _tanstack_react_query from '@tanstack/react-query';
2
- import * as axios from 'axios';
1
+ declare const useSuppressedMessage: (messageKey: string) => readonly [boolean, () => void];
3
2
 
4
- type User = {
5
- suppressedMessages: string[];
6
- };
7
-
8
- declare const useCurrentUser: () => _tanstack_react_query.UseQueryResult<User, Error>;
9
-
10
- declare const useUpdateCurrentUser: () => _tanstack_react_query.UseMutationResult<axios.AxiosResponse<{
11
- elementor_introduction: Record<string, boolean>;
12
- }, any>, Error, User, unknown>;
13
-
14
- export { useCurrentUser, useUpdateCurrentUser };
3
+ export { useSuppressedMessage };
package/dist/index.d.ts CHANGED
@@ -1,14 +1,3 @@
1
- import * as _tanstack_react_query from '@tanstack/react-query';
2
- import * as axios from 'axios';
1
+ declare const useSuppressedMessage: (messageKey: string) => readonly [boolean, () => void];
3
2
 
4
- type User = {
5
- suppressedMessages: string[];
6
- };
7
-
8
- declare const useCurrentUser: () => _tanstack_react_query.UseQueryResult<User, Error>;
9
-
10
- declare const useUpdateCurrentUser: () => _tanstack_react_query.UseMutationResult<axios.AxiosResponse<{
11
- elementor_introduction: Record<string, boolean>;
12
- }, any>, Error, User, unknown>;
13
-
14
- export { useCurrentUser, useUpdateCurrentUser };
3
+ export { useSuppressedMessage };
package/dist/index.js CHANGED
@@ -20,13 +20,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
- useCurrentUser: () => useCurrentUser,
24
- useUpdateCurrentUser: () => useUpdateCurrentUser
23
+ useSuppressedMessage: () => useSuppressedMessage
25
24
  });
26
25
  module.exports = __toCommonJS(index_exports);
27
26
 
28
- // src/use-current-user.ts
29
- var import_query = require("@elementor/query");
27
+ // src/init.ts
28
+ var import_editor = require("@elementor/editor");
29
+
30
+ // src/components/prefetch-user-data.tsx
31
+ var import_query2 = require("@elementor/query");
30
32
 
31
33
  // src/api.ts
32
34
  var import_http = require("@elementor/http");
@@ -55,26 +57,60 @@ var userToRequest = (user) => {
55
57
  };
56
58
 
57
59
  // src/use-current-user.ts
60
+ var import_query = require("@elementor/query");
58
61
  var EDITOR_CURRENT_USER_QUERY_KEY = "editor-current-user";
59
- var useCurrentUser = () => {
60
- return (0, import_query.useQuery)({
62
+ var useCurrentUser = () => (0, import_query.useQuery)({
63
+ queryKey: [EDITOR_CURRENT_USER_QUERY_KEY],
64
+ queryFn: apiClient.get
65
+ });
66
+
67
+ // src/components/prefetch-user-data.tsx
68
+ function PrefetchUserData() {
69
+ const queryClient = (0, import_query2.useQueryClient)();
70
+ queryClient.prefetchQuery({
61
71
  queryKey: [EDITOR_CURRENT_USER_QUERY_KEY],
62
72
  queryFn: apiClient.get
63
73
  });
74
+ return null;
75
+ }
76
+
77
+ // src/init.ts
78
+ var init = () => {
79
+ (0, import_editor.injectIntoLogic)({
80
+ id: "current-user-data",
81
+ component: PrefetchUserData
82
+ });
64
83
  };
65
84
 
66
85
  // src/use-update-current-user.ts
67
- var import_query2 = require("@elementor/query");
86
+ var import_query3 = require("@elementor/query");
68
87
  var useUpdateCurrentUser = () => {
69
- const queryClient = (0, import_query2.useQueryClient)();
70
- return (0, import_query2.useMutation)({
88
+ const queryClient = (0, import_query3.useQueryClient)();
89
+ return (0, import_query3.useMutation)({
71
90
  mutationFn: apiClient.update,
72
91
  onSuccess: () => queryClient.invalidateQueries({ queryKey: [EDITOR_CURRENT_USER_QUERY_KEY] })
73
92
  });
74
93
  };
94
+
95
+ // src/use-suppressed-message.ts
96
+ var useSuppressedMessage = (messageKey) => {
97
+ const { data } = useCurrentUser();
98
+ const { mutate } = useUpdateCurrentUser();
99
+ const isMessageSuppressed = !!data?.suppressedMessages.includes(messageKey);
100
+ const suppressMessage = () => {
101
+ if (!isMessageSuppressed) {
102
+ mutate({
103
+ suppressedMessages: [...data?.suppressedMessages ?? [], messageKey]
104
+ });
105
+ }
106
+ };
107
+ return [isMessageSuppressed, suppressMessage];
108
+ };
109
+
110
+ // src/index.ts
111
+ init();
75
112
  // Annotate the CommonJS export names for ESM import in node:
76
113
  0 && (module.exports = {
77
- useCurrentUser,
78
- useUpdateCurrentUser
114
+ useSuppressedMessage
79
115
  });
80
116
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/use-current-user.ts","../src/api.ts","../src/use-update-current-user.ts"],"sourcesContent":["export { useCurrentUser } from './use-current-user';\nexport { useUpdateCurrentUser } from './use-update-current-user';\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\treturn useQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: apiClient.get,\n\t} );\n};\n","import { httpService } from '@elementor/http';\n\nimport { type User } from './types';\n\nconst RESOURCE_URL = '/users/me';\n\ntype UserModel = {\n\telementor_introduction: Record< string, boolean >;\n};\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< UserModel >( 'wp/v2' + RESOURCE_URL )\n\t\t\t.then( ( res ) => {\n\t\t\t\treturn responseToUser( res.data );\n\t\t\t} ),\n\tupdate: ( data: User ) => httpService().patch< 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};\n};\n\nconst userToRequest = ( user: User ): 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 { 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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAyB;;;ACAzB,kBAA4B;AAI5B,IAAM,eAAe;AAMd,IAAM,YAAY;AAAA,EACxB,KAAK,UACJ,yBAAY,EACV,IAAkB,UAAU,YAAa,EACzC,KAAM,CAAE,QAAS;AACjB,WAAO,eAAgB,IAAI,IAAK;AAAA,EACjC,CAAE;AAAA,EACJ,QAAQ,CAAE,aAAgB,yBAAY,EAAE,MAAoB,UAAU,cAAc,cAAe,IAAK,CAAE;AAC3G;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,EACnC;AACD;AAEA,IAAM,gBAAgB,CAAE,SAA2B;AAClD,SAAO;AAAA,IACN,wBAAwB,KAAK,mBAAmB;AAAA,MAC/C,CAAE,KAAK,YAAa;AACnB,YAAK,OAAQ,IAAI;AAEjB,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;ADnCO,IAAM,gCAAgC;AAEtC,IAAM,iBAAiB,MAAM;AACnC,aAAO,uBAAU;AAAA,IAChB,UAAU,CAAE,6BAA8B;AAAA,IAC1C,SAAS,UAAU;AAAA,EACpB,CAAE;AACH;;;AEXA,IAAAA,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;","names":["import_query"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/init.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"],"sourcesContent":["import { init } from './init';\n\nexport { useSuppressedMessage } from './use-suppressed-message';\n\ninit();\n","import { injectIntoLogic } from '@elementor/editor';\n\nimport { PrefetchUserData } from './components/prefetch-user-data';\n\nexport const init = () => {\n\tinjectIntoLogic( {\n\t\tid: 'current-user-data',\n\t\tcomponent: PrefetchUserData,\n\t} );\n};\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';\n\nimport { type User } from './types';\n\nconst RESOURCE_URL = '/users/me';\n\ntype UserModel = {\n\telementor_introduction: Record< string, boolean >;\n};\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< UserModel >( 'wp/v2' + RESOURCE_URL )\n\t\t\t.then( ( res ) => {\n\t\t\t\treturn responseToUser( res.data );\n\t\t\t} ),\n\tupdate: ( data: User ) => httpService().patch< 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};\n};\n\nconst userToRequest = ( user: User ): 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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAgC;;;ACAhC,IAAAA,gBAA+B;;;ACA/B,kBAA4B;AAI5B,IAAM,eAAe;AAMd,IAAM,YAAY;AAAA,EACxB,KAAK,UACJ,yBAAY,EACV,IAAkB,UAAU,YAAa,EACzC,KAAM,CAAE,QAAS;AACjB,WAAO,eAAgB,IAAI,IAAK;AAAA,EACjC,CAAE;AAAA,EACJ,QAAQ,CAAE,aAAgB,yBAAY,EAAE,MAAoB,UAAU,cAAc,cAAe,IAAK,CAAE;AAC3G;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,EACnC;AACD;AAEA,IAAM,gBAAgB,CAAE,SAA2B;AAClD,SAAO;AAAA,IACN,wBAAwB,KAAK,mBAAmB;AAAA,MAC/C,CAAE,KAAK,YAAa;AACnB,YAAK,OAAQ,IAAI;AAEjB,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;ACvCA,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;;;ADVO,IAAM,OAAO,MAAM;AACzB,qCAAiB;AAAA,IAChB,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AACH;;;AITA,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;;;ANdA,KAAK;","names":["import_query","import_query"]}
package/dist/index.mjs CHANGED
@@ -1,5 +1,8 @@
1
- // src/use-current-user.ts
2
- import { useQuery } from "@elementor/query";
1
+ // src/init.ts
2
+ import { injectIntoLogic } from "@elementor/editor";
3
+
4
+ // src/components/prefetch-user-data.tsx
5
+ import { useQueryClient } from "@elementor/query";
3
6
 
4
7
  // src/api.ts
5
8
  import { httpService } from "@elementor/http";
@@ -28,25 +31,59 @@ var userToRequest = (user) => {
28
31
  };
29
32
 
30
33
  // src/use-current-user.ts
34
+ import { useQuery } from "@elementor/query";
31
35
  var EDITOR_CURRENT_USER_QUERY_KEY = "editor-current-user";
32
- var useCurrentUser = () => {
33
- return useQuery({
36
+ var useCurrentUser = () => useQuery({
37
+ queryKey: [EDITOR_CURRENT_USER_QUERY_KEY],
38
+ queryFn: apiClient.get
39
+ });
40
+
41
+ // src/components/prefetch-user-data.tsx
42
+ function PrefetchUserData() {
43
+ const queryClient = useQueryClient();
44
+ queryClient.prefetchQuery({
34
45
  queryKey: [EDITOR_CURRENT_USER_QUERY_KEY],
35
46
  queryFn: apiClient.get
36
47
  });
48
+ return null;
49
+ }
50
+
51
+ // src/init.ts
52
+ var init = () => {
53
+ injectIntoLogic({
54
+ id: "current-user-data",
55
+ component: PrefetchUserData
56
+ });
37
57
  };
38
58
 
39
59
  // src/use-update-current-user.ts
40
- import { useMutation, useQueryClient } from "@elementor/query";
60
+ import { useMutation, useQueryClient as useQueryClient2 } from "@elementor/query";
41
61
  var useUpdateCurrentUser = () => {
42
- const queryClient = useQueryClient();
62
+ const queryClient = useQueryClient2();
43
63
  return useMutation({
44
64
  mutationFn: apiClient.update,
45
65
  onSuccess: () => queryClient.invalidateQueries({ queryKey: [EDITOR_CURRENT_USER_QUERY_KEY] })
46
66
  });
47
67
  };
68
+
69
+ // src/use-suppressed-message.ts
70
+ var useSuppressedMessage = (messageKey) => {
71
+ const { data } = useCurrentUser();
72
+ const { mutate } = useUpdateCurrentUser();
73
+ const isMessageSuppressed = !!data?.suppressedMessages.includes(messageKey);
74
+ const suppressMessage = () => {
75
+ if (!isMessageSuppressed) {
76
+ mutate({
77
+ suppressedMessages: [...data?.suppressedMessages ?? [], messageKey]
78
+ });
79
+ }
80
+ };
81
+ return [isMessageSuppressed, suppressMessage];
82
+ };
83
+
84
+ // src/index.ts
85
+ init();
48
86
  export {
49
- useCurrentUser,
50
- useUpdateCurrentUser
87
+ useSuppressedMessage
51
88
  };
52
89
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/use-current-user.ts","../src/api.ts","../src/use-update-current-user.ts"],"sourcesContent":["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\treturn useQuery( {\n\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\tqueryFn: apiClient.get,\n\t} );\n};\n","import { httpService } from '@elementor/http';\n\nimport { type User } from './types';\n\nconst RESOURCE_URL = '/users/me';\n\ntype UserModel = {\n\telementor_introduction: Record< string, boolean >;\n};\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< UserModel >( 'wp/v2' + RESOURCE_URL )\n\t\t\t.then( ( res ) => {\n\t\t\t\treturn responseToUser( res.data );\n\t\t\t} ),\n\tupdate: ( data: User ) => httpService().patch< 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};\n};\n\nconst userToRequest = ( user: User ): 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 { 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"],"mappings":";AAAA,SAAS,gBAAgB;;;ACAzB,SAAS,mBAAmB;AAI5B,IAAM,eAAe;AAMd,IAAM,YAAY;AAAA,EACxB,KAAK,MACJ,YAAY,EACV,IAAkB,UAAU,YAAa,EACzC,KAAM,CAAE,QAAS;AACjB,WAAO,eAAgB,IAAI,IAAK;AAAA,EACjC,CAAE;AAAA,EACJ,QAAQ,CAAE,SAAgB,YAAY,EAAE,MAAoB,UAAU,cAAc,cAAe,IAAK,CAAE;AAC3G;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,EACnC;AACD;AAEA,IAAM,gBAAgB,CAAE,SAA2B;AAClD,SAAO;AAAA,IACN,wBAAwB,KAAK,mBAAmB;AAAA,MAC/C,CAAE,KAAK,YAAa;AACnB,YAAK,OAAQ,IAAI;AAEjB,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;ADnCO,IAAM,gCAAgC;AAEtC,IAAM,iBAAiB,MAAM;AACnC,SAAO,SAAU;AAAA,IAChB,UAAU,CAAE,6BAA8B;AAAA,IAC1C,SAAS,UAAU;AAAA,EACpB,CAAE;AACH;;;AEXA,SAAS,aAAa,sBAAsB;AAKrC,IAAM,uBAAuB,MAAM;AACzC,QAAM,cAAc,eAAe;AAEnC,SAAO,YAAa;AAAA,IACnB,YAAY,UAAU;AAAA,IACtB,WAAW,MAAM,YAAY,kBAAmB,EAAE,UAAU,CAAE,6BAA8B,EAAE,CAAE;AAAA,EACjG,CAAE;AACH;","names":[]}
1
+ {"version":3,"sources":["../src/init.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/index.ts"],"sourcesContent":["import { injectIntoLogic } from '@elementor/editor';\n\nimport { PrefetchUserData } from './components/prefetch-user-data';\n\nexport const init = () => {\n\tinjectIntoLogic( {\n\t\tid: 'current-user-data',\n\t\tcomponent: PrefetchUserData,\n\t} );\n};\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';\n\nimport { type User } from './types';\n\nconst RESOURCE_URL = '/users/me';\n\ntype UserModel = {\n\telementor_introduction: Record< string, boolean >;\n};\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< UserModel >( 'wp/v2' + RESOURCE_URL )\n\t\t\t.then( ( res ) => {\n\t\t\t\treturn responseToUser( res.data );\n\t\t\t} ),\n\tupdate: ( data: User ) => httpService().patch< 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};\n};\n\nconst userToRequest = ( user: User ): 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 { init } from './init';\n\nexport { useSuppressedMessage } from './use-suppressed-message';\n\ninit();\n"],"mappings":";AAAA,SAAS,uBAAuB;;;ACAhC,SAAS,sBAAsB;;;ACA/B,SAAS,mBAAmB;AAI5B,IAAM,eAAe;AAMd,IAAM,YAAY;AAAA,EACxB,KAAK,MACJ,YAAY,EACV,IAAkB,UAAU,YAAa,EACzC,KAAM,CAAE,QAAS;AACjB,WAAO,eAAgB,IAAI,IAAK;AAAA,EACjC,CAAE;AAAA,EACJ,QAAQ,CAAE,SAAgB,YAAY,EAAE,MAAoB,UAAU,cAAc,cAAe,IAAK,CAAE;AAC3G;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,EACnC;AACD;AAEA,IAAM,gBAAgB,CAAE,SAA2B;AAClD,SAAO;AAAA,IACN,wBAAwB,KAAK,mBAAmB;AAAA,MAC/C,CAAE,KAAK,YAAa;AACnB,YAAK,OAAQ,IAAI;AAEjB,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;ACvCA,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;;;ADVO,IAAM,OAAO,MAAM;AACzB,kBAAiB;AAAA,IAChB,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AACH;;;AITA,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;;;ACdA,KAAK;","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.1.0",
4
+ "version": "0.2.0",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -20,7 +20,7 @@
20
20
  "repository": {
21
21
  "type": "git",
22
22
  "url": "https://github.com/elementor/elementor-packages.git",
23
- "directory": "packages/libs/editor-current-user"
23
+ "directory": "packages/core/editor-current-user"
24
24
  },
25
25
  "bugs": {
26
26
  "url": "https://github.com/elementor/elementor-packages/issues"
@@ -37,6 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@elementor/http": "0.1.3",
40
+ "@elementor/editor": "0.18.0",
40
41
  "@elementor/query": "0.2.4"
41
42
  },
42
43
  "devDependencies": {
@@ -0,0 +1,61 @@
1
+ import { type UseQueryResult } from '@elementor/query';
2
+ import { act, renderHook } from '@testing-library/react';
3
+
4
+ import { type User } from '../types';
5
+ import { useCurrentUser } from '../use-current-user';
6
+ import { useSuppressedMessage } from '../use-suppressed-message';
7
+ import { useUpdateCurrentUser } from '../use-update-current-user';
8
+
9
+ jest.mock( '../use-current-user' );
10
+ jest.mock( '../use-update-current-user' );
11
+
12
+ describe( 'useSuppressedMessage', () => {
13
+ it( 'returns false and suppressMessage function when message is not suppressed', () => {
14
+ // Arrange.
15
+ jest.mocked( useCurrentUser ).mockReturnValue( {
16
+ data: { suppressedMessages: [ 'non-existing-message' ] },
17
+ } as UseQueryResult< User, Error > );
18
+
19
+ const mutate = jest.fn();
20
+ jest.mocked( useUpdateCurrentUser ).mockReturnValue( { mutate } as never );
21
+
22
+ // Act.
23
+ const { result } = renderHook( () => useSuppressedMessage( 'test-message' ) );
24
+
25
+ // Assert.
26
+ const [ isMessageSuppressed, suppressMessage ] = result.current;
27
+
28
+ expect( isMessageSuppressed ).toBe( false );
29
+
30
+ act( () => {
31
+ suppressMessage();
32
+ } );
33
+
34
+ expect( mutate ).toHaveBeenCalledWith( { suppressedMessages: [ 'non-existing-message', 'test-message' ] } );
35
+ } );
36
+
37
+ it( 'returns true and suppressMessage function when message is already suppressed', () => {
38
+ // Arrange.
39
+ jest.mocked( useCurrentUser ).mockReturnValue( {
40
+ data: { suppressedMessages: [ 'test-message' ] },
41
+ } as UseQueryResult< User, Error > );
42
+
43
+ const mutate = jest.fn();
44
+
45
+ jest.mocked( useUpdateCurrentUser ).mockReturnValue( { mutate } as never );
46
+
47
+ // Act.
48
+ const { result } = renderHook( () => useSuppressedMessage( 'test-message' ) );
49
+
50
+ // Assert.
51
+ const [ isMessageSuppressed, suppressMessage ] = result.current;
52
+
53
+ expect( isMessageSuppressed ).toBe( true );
54
+
55
+ act( () => {
56
+ suppressMessage();
57
+ } );
58
+
59
+ expect( mutate ).not.toHaveBeenCalled();
60
+ } );
61
+ } );
@@ -0,0 +1,15 @@
1
+ import { useQueryClient } from '@elementor/query';
2
+
3
+ import { apiClient } from '../api';
4
+ import { EDITOR_CURRENT_USER_QUERY_KEY } from '../use-current-user';
5
+
6
+ export function PrefetchUserData() {
7
+ const queryClient = useQueryClient();
8
+
9
+ queryClient.prefetchQuery( {
10
+ queryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],
11
+ queryFn: apiClient.get,
12
+ } );
13
+
14
+ return null;
15
+ }
package/src/index.ts CHANGED
@@ -1,2 +1,5 @@
1
- export { useCurrentUser } from './use-current-user';
2
- export { useUpdateCurrentUser } from './use-update-current-user';
1
+ import { init } from './init';
2
+
3
+ export { useSuppressedMessage } from './use-suppressed-message';
4
+
5
+ init();
package/src/init.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { injectIntoLogic } from '@elementor/editor';
2
+
3
+ import { PrefetchUserData } from './components/prefetch-user-data';
4
+
5
+ export const init = () => {
6
+ injectIntoLogic( {
7
+ id: 'current-user-data',
8
+ component: PrefetchUserData,
9
+ } );
10
+ };
@@ -4,9 +4,8 @@ import { apiClient } from './api';
4
4
 
5
5
  export const EDITOR_CURRENT_USER_QUERY_KEY = 'editor-current-user';
6
6
 
7
- export const useCurrentUser = () => {
8
- return useQuery( {
7
+ export const useCurrentUser = () =>
8
+ useQuery( {
9
9
  queryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],
10
10
  queryFn: apiClient.get,
11
11
  } );
12
- };
@@ -0,0 +1,19 @@
1
+ import { useCurrentUser } from './use-current-user';
2
+ import { useUpdateCurrentUser } from './use-update-current-user';
3
+
4
+ export const useSuppressedMessage = ( messageKey: string ) => {
5
+ const { data } = useCurrentUser();
6
+ const { mutate } = useUpdateCurrentUser();
7
+
8
+ const isMessageSuppressed = !! data?.suppressedMessages.includes( messageKey );
9
+
10
+ const suppressMessage = () => {
11
+ if ( ! isMessageSuppressed ) {
12
+ mutate( {
13
+ suppressedMessages: [ ...( data?.suppressedMessages ?? [] ), messageKey ],
14
+ } );
15
+ }
16
+ };
17
+
18
+ return [ isMessageSuppressed, suppressMessage ] as const;
19
+ };