@elementor/editor-current-user 0.6.0 → 0.6.1
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 +8 -8
- package/CHANGELOG.md +6 -0
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/ensure-current-user.test.tsx +36 -0
- package/src/ensure-current-user.ts +10 -5
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @elementor/editor-current-user@0.6.
|
|
2
|
+
> @elementor/editor-current-user@0.6.1 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[32m4.
|
|
14
|
-
[32mCJS[39m [1mdist/index.js.map [22m[32m6.
|
|
15
|
-
[32mCJS[39m ⚡️ Build success in
|
|
16
|
-
[32mESM[39m [1mdist/index.mjs [22m[32m2.
|
|
17
|
-
[32mESM[39m [1mdist/index.mjs.map [22m[32m5.
|
|
18
|
-
[32mESM[39m ⚡️ Build success in
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m4.21 KB[39m
|
|
14
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m6.30 KB[39m
|
|
15
|
+
[32mCJS[39m ⚡️ Build success in 113ms
|
|
16
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m2.91 KB[39m
|
|
17
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m5.96 KB[39m
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 114ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 10261ms
|
|
21
21
|
[32mDTS[39m [1mdist/index.d.mts [22m[32m608.00 B[39m
|
|
22
22
|
[32mDTS[39m [1mdist/index.d.ts [22m[32m608.00 B[39m
|
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -108,10 +108,15 @@ var useCurrentUserCapabilities = () => {
|
|
|
108
108
|
var import_editor_v1_adapters = require("@elementor/editor-v1-adapters");
|
|
109
109
|
function ensureCurrentUser({ queryClient }) {
|
|
110
110
|
(0, import_editor_v1_adapters.registerDataHook)("after", "editor/documents/attach-preview", async () => {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
try {
|
|
112
|
+
await queryClient.ensureQueryData({
|
|
113
|
+
queryKey: [EDITOR_CURRENT_USER_QUERY_KEY],
|
|
114
|
+
queryFn: getCurrentUser,
|
|
115
|
+
retry: false
|
|
116
|
+
});
|
|
117
|
+
} catch {
|
|
118
|
+
queryClient.setQueryData([EDITOR_CURRENT_USER_QUERY_KEY], null);
|
|
119
|
+
}
|
|
115
120
|
});
|
|
116
121
|
return queryClient.getQueryData([EDITOR_CURRENT_USER_QUERY_KEY]);
|
|
117
122
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/use-current-user.ts","../src/api.ts","../src/get-current-user.ts","../src/use-update-current-user.ts","../src/use-suppressed-message.ts","../src/use-current-user-capabilities.ts","../src/ensure-current-user.ts"],"sourcesContent":["export { useSuppressedMessage } from './use-suppressed-message';\nexport { useCurrentUserCapabilities } from './use-current-user-capabilities';\nexport { getCurrentUser } from './get-current-user';\nexport { ensureCurrentUser } from './ensure-current-user';\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 { 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 { 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, capabilities: data?.capabilities };\n};\n","import { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { type QueryClient } from '@elementor/query';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/use-current-user.ts","../src/api.ts","../src/get-current-user.ts","../src/use-update-current-user.ts","../src/use-suppressed-message.ts","../src/use-current-user-capabilities.ts","../src/ensure-current-user.ts"],"sourcesContent":["export { useSuppressedMessage } from './use-suppressed-message';\nexport { useCurrentUserCapabilities } from './use-current-user-capabilities';\nexport { getCurrentUser } from './get-current-user';\nexport { ensureCurrentUser } from './ensure-current-user';\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 { 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 { 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, capabilities: data?.capabilities };\n};\n","import { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { type QueryClient } from '@elementor/query';\n\nimport { getCurrentUser } from './get-current-user';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from './use-current-user';\n\nexport function ensureCurrentUser( { queryClient }: { queryClient: QueryClient } ) {\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\ttry {\n\t\t\tawait queryClient.ensureQueryData( {\n\t\t\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\t\t\tqueryFn: getCurrentUser,\n\t\t\t\tretry: false,\n\t\t\t} );\n\t\t} catch {\n\t\t\tqueryClient.setQueryData( [ EDITOR_CURRENT_USER_QUERY_KEY ], null );\n\t\t}\n\t} );\n\n\treturn queryClient.getQueryData( [ EDITOR_CURRENT_USER_QUERY_KEY ] );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAyB;;;ACAzB,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;;;AC9CO,IAAM,iBAAiB,MAAM;AACnC,SAAO,UAAU,IAAI;AACtB;;;AFAO,IAAM,gCAAgC;AAEtC,IAAM,iBAAiB,UAC7B,uBAAU;AAAA,EACT,UAAU,CAAE,6BAA8B;AAAA,EAC1C,SAAS;AACV,CAAE;;;AGVH,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;;;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,SAAS,cAAc,MAAM,aAAa;AACpD;;;ACVA,gCAAiC;AAM1B,SAAS,kBAAmB,EAAE,YAAY,GAAkC;AAClF,kDAAkB,SAAS,mCAAmC,YAAY;AACzE,QAAI;AACH,YAAM,YAAY,gBAAiB;AAAA,QAClC,UAAU,CAAE,6BAA8B;AAAA,QAC1C,SAAS;AAAA,QACT,OAAO;AAAA,MACR,CAAE;AAAA,IACH,QAAQ;AACP,kBAAY,aAAc,CAAE,6BAA8B,GAAG,IAAK;AAAA,IACnE;AAAA,EACD,CAAE;AAEF,SAAO,YAAY,aAAc,CAAE,6BAA8B,CAAE;AACpE;","names":["import_query"]}
|
package/dist/index.mjs
CHANGED
|
@@ -79,10 +79,15 @@ var useCurrentUserCapabilities = () => {
|
|
|
79
79
|
import { registerDataHook } from "@elementor/editor-v1-adapters";
|
|
80
80
|
function ensureCurrentUser({ queryClient }) {
|
|
81
81
|
registerDataHook("after", "editor/documents/attach-preview", async () => {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
try {
|
|
83
|
+
await queryClient.ensureQueryData({
|
|
84
|
+
queryKey: [EDITOR_CURRENT_USER_QUERY_KEY],
|
|
85
|
+
queryFn: getCurrentUser,
|
|
86
|
+
retry: false
|
|
87
|
+
});
|
|
88
|
+
} catch {
|
|
89
|
+
queryClient.setQueryData([EDITOR_CURRENT_USER_QUERY_KEY], null);
|
|
90
|
+
}
|
|
86
91
|
});
|
|
87
92
|
return queryClient.getQueryData([EDITOR_CURRENT_USER_QUERY_KEY]);
|
|
88
93
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/use-current-user.ts","../src/api.ts","../src/get-current-user.ts","../src/use-update-current-user.ts","../src/use-suppressed-message.ts","../src/use-current-user-capabilities.ts","../src/ensure-current-user.ts"],"sourcesContent":["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 { 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 { 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, capabilities: data?.capabilities };\n};\n","import { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { type QueryClient } from '@elementor/query';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/use-current-user.ts","../src/api.ts","../src/get-current-user.ts","../src/use-update-current-user.ts","../src/use-suppressed-message.ts","../src/use-current-user-capabilities.ts","../src/ensure-current-user.ts"],"sourcesContent":["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 { 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 { 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, capabilities: data?.capabilities };\n};\n","import { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { type QueryClient } from '@elementor/query';\n\nimport { getCurrentUser } from './get-current-user';\nimport { EDITOR_CURRENT_USER_QUERY_KEY } from './use-current-user';\n\nexport function ensureCurrentUser( { queryClient }: { queryClient: QueryClient } ) {\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\ttry {\n\t\t\tawait queryClient.ensureQueryData( {\n\t\t\t\tqueryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],\n\t\t\t\tqueryFn: getCurrentUser,\n\t\t\t\tretry: false,\n\t\t\t} );\n\t\t} catch {\n\t\t\tqueryClient.setQueryData( [ EDITOR_CURRENT_USER_QUERY_KEY ], null );\n\t\t}\n\t} );\n\n\treturn queryClient.getQueryData( [ EDITOR_CURRENT_USER_QUERY_KEY ] );\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;;;ACAzB,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;;;AC9CO,IAAM,iBAAiB,MAAM;AACnC,SAAO,UAAU,IAAI;AACtB;;;AFAO,IAAM,gCAAgC;AAEtC,IAAM,iBAAiB,MAC7B,SAAU;AAAA,EACT,UAAU,CAAE,6BAA8B;AAAA,EAC1C,SAAS;AACV,CAAE;;;AGVH,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;;;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,SAAS,cAAc,MAAM,aAAa;AACpD;;;ACVA,SAAS,wBAAwB;AAM1B,SAAS,kBAAmB,EAAE,YAAY,GAAkC;AAClF,mBAAkB,SAAS,mCAAmC,YAAY;AACzE,QAAI;AACH,YAAM,YAAY,gBAAiB;AAAA,QAClC,UAAU,CAAE,6BAA8B;AAAA,QAC1C,SAAS;AAAA,QACT,OAAO;AAAA,MACR,CAAE;AAAA,IACH,QAAQ;AACP,kBAAY,aAAc,CAAE,6BAA8B,GAAG,IAAK;AAAA,IACnE;AAAA,EACD,CAAE;AAEF,SAAO,YAAY,aAAc,CAAE,6BAA8B,CAAE;AACpE;","names":[]}
|
package/package.json
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { registerDataHook } from '@elementor/editor-v1-adapters';
|
|
2
|
+
import { type QueryClient } from '@elementor/query';
|
|
3
|
+
|
|
4
|
+
import { ensureCurrentUser } from '../ensure-current-user';
|
|
5
|
+
|
|
6
|
+
jest.mock( '@elementor/editor-v1-adapters', () => ( {
|
|
7
|
+
...jest.requireActual( '@elementor/editor-v1-adapters' ),
|
|
8
|
+
registerDataHook: jest.fn(),
|
|
9
|
+
} ) );
|
|
10
|
+
|
|
11
|
+
describe( 'ensureCurrentUser', () => {
|
|
12
|
+
it( 'should not fail the attach preview command is user fetch failed', async () => {
|
|
13
|
+
// Arrange.
|
|
14
|
+
const queryClient = {
|
|
15
|
+
ensureQueryData: jest.fn().mockRejectedValue( new Error( 'Failed to fetch current user' ) ),
|
|
16
|
+
setQueryData: jest.fn(),
|
|
17
|
+
getQueryData: jest.fn().mockReturnValue( null ),
|
|
18
|
+
} as unknown as QueryClient;
|
|
19
|
+
|
|
20
|
+
jest.mocked( registerDataHook ).mockImplementation( ( _hook, _command, callback ) => {
|
|
21
|
+
return callback( {} ) as never;
|
|
22
|
+
} );
|
|
23
|
+
|
|
24
|
+
// Act.
|
|
25
|
+
const result = await ensureCurrentUser( { queryClient } );
|
|
26
|
+
|
|
27
|
+
// Assert.
|
|
28
|
+
expect( queryClient.ensureQueryData ).toHaveBeenCalledWith( {
|
|
29
|
+
queryKey: [ 'editor-current-user' ],
|
|
30
|
+
queryFn: expect.any( Function ),
|
|
31
|
+
retry: false,
|
|
32
|
+
} );
|
|
33
|
+
|
|
34
|
+
expect( result ).toBeNull();
|
|
35
|
+
} );
|
|
36
|
+
} );
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { registerDataHook } from '@elementor/editor-v1-adapters';
|
|
2
2
|
import { type QueryClient } from '@elementor/query';
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { getCurrentUser } from './get-current-user';
|
|
5
5
|
import { EDITOR_CURRENT_USER_QUERY_KEY } from './use-current-user';
|
|
6
6
|
|
|
7
7
|
export function ensureCurrentUser( { queryClient }: { queryClient: QueryClient } ) {
|
|
8
8
|
registerDataHook( 'after', 'editor/documents/attach-preview', async () => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
try {
|
|
10
|
+
await queryClient.ensureQueryData( {
|
|
11
|
+
queryKey: [ EDITOR_CURRENT_USER_QUERY_KEY ],
|
|
12
|
+
queryFn: getCurrentUser,
|
|
13
|
+
retry: false,
|
|
14
|
+
} );
|
|
15
|
+
} catch {
|
|
16
|
+
queryClient.setQueryData( [ EDITOR_CURRENT_USER_QUERY_KEY ], null );
|
|
17
|
+
}
|
|
13
18
|
} );
|
|
14
19
|
|
|
15
20
|
return queryClient.getQueryData( [ EDITOR_CURRENT_USER_QUERY_KEY ] );
|