@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.
- package/.turbo/turbo-build.log +10 -10
- package/CHANGELOG.md +6 -0
- package/dist/index.d.mts +2 -13
- package/dist/index.d.ts +2 -13
- package/dist/index.js +47 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +45 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
- package/src/__tests__/use-suppressed-message.test.ts +61 -0
- package/src/components/prefetch-user-data.tsx +15 -0
- package/src/index.ts +5 -2
- package/src/init.ts +10 -0
- package/src/use-current-user.ts +2 -3
- package/src/use-suppressed-message.ts +19 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @elementor/editor-current-user@0.
|
|
2
|
+
> @elementor/editor-current-user@0.2.0 build
|
|
3
3
|
> tsup --config=../../tsup.build.ts
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mESM[39m Build start
|
|
12
12
|
[34mCJS[39m Build start
|
|
13
|
-
[32mCJS[39m [1mdist/index.js [22m[
|
|
14
|
-
[32mCJS[39m [1mdist/index.js.map [22m[
|
|
15
|
-
[32mCJS[39m ⚡️ Build success in
|
|
16
|
-
[32mESM[39m [1mdist/index.mjs [22m[
|
|
17
|
-
[32mESM[39m [1mdist/index.mjs.map [22m[
|
|
18
|
-
[32mESM[39m ⚡️ Build success in
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m3.45 KB[39m
|
|
14
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m4.88 KB[39m
|
|
15
|
+
[32mCJS[39m ⚡️ Build success in 81ms
|
|
16
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m2.34 KB[39m
|
|
17
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m4.85 KB[39m
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 84ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
21
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[
|
|
22
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 13014ms
|
|
21
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m126.00 B[39m
|
|
22
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m126.00 B[39m
|
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
import * as axios from 'axios';
|
|
1
|
+
declare const useSuppressedMessage: (messageKey: string) => readonly [boolean, () => void];
|
|
3
2
|
|
|
4
|
-
|
|
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
|
-
|
|
2
|
-
import * as axios from 'axios';
|
|
1
|
+
declare const useSuppressedMessage: (messageKey: string) => readonly [boolean, () => void];
|
|
3
2
|
|
|
4
|
-
|
|
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
|
-
|
|
24
|
-
useUpdateCurrentUser: () => useUpdateCurrentUser
|
|
23
|
+
useSuppressedMessage: () => useSuppressedMessage
|
|
25
24
|
});
|
|
26
25
|
module.exports = __toCommonJS(index_exports);
|
|
27
26
|
|
|
28
|
-
// src/
|
|
29
|
-
var
|
|
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
|
-
|
|
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
|
|
86
|
+
var import_query3 = require("@elementor/query");
|
|
68
87
|
var useUpdateCurrentUser = () => {
|
|
69
|
-
const queryClient = (0,
|
|
70
|
-
return (0,
|
|
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
|
-
|
|
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/
|
|
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/
|
|
2
|
-
import {
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
50
|
-
useUpdateCurrentUser
|
|
87
|
+
useSuppressedMessage
|
|
51
88
|
};
|
|
52
89
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
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.
|
|
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/
|
|
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
package/src/init.ts
ADDED
package/src/use-current-user.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
+
};
|