PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.7.2
Jetpack – WP Security, Backup, Speed, & Growth v13.7.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / extensions / store / wordpress-com / index.ts
jetpack / extensions / store / wordpress-com Last commit date
actions.ts 2 years ago constants.ts 2 years ago index.ts 2 years ago reducer.ts 2 years ago types.ts 2 years ago
index.ts
117 lines
1 /**
2 * External dependencies
3 */
4 import { createReduxStore, register, select } from '@wordpress/data';
5 /**
6 * Internal dependencies
7 */
8 import actions from './actions';
9 import reducer from './reducer';
10 /**
11 * Types
12 */
13 import type { AiFeatureProps, PlanStateProps } from './types';
14
15 const store = 'wordpress-com/plans';
16
17 export const selectors = {
18 /*
19 * Return the plan with the given slug.
20 *
21 * @param {Object} state - The Plans state tree.
22 * @param {string} planSlug - The plan slug to find.
23 * @return {Object} The plan.
24 */
25 getPlan( state: PlanStateProps, planSlug: string ) {
26 return state.plans.find( plan => plan.product_slug === planSlug );
27 },
28
29 /**
30 * Return the AI Assistant feature.
31 *
32 * @param {PlanStateProps} state - The Plans state tree.
33 * @returns {AiFeatureProps} The AI Assistant feature data.
34 */
35 getAiAssistantFeature( state: PlanStateProps ): AiFeatureProps {
36 // Clean up the _meta property.
37 const data = { ...state.features.aiAssistant };
38 delete data._meta;
39
40 return data;
41 },
42
43 /**
44 * Get the isRequesting flag for the AI Assistant feature.
45 *
46 * @param {PlanStateProps} state - The Plans state tree.
47 * @returns {boolean} The isRequesting flag.
48 */
49 getIsRequestingAiAssistantFeature( state: PlanStateProps ): boolean {
50 return state.features.aiAssistant?._meta?.isRequesting;
51 },
52
53 getAsyncRequestCountdownValue( state: PlanStateProps ): number {
54 return state.features.aiAssistant?._meta?.asyncRequestCountdown;
55 },
56
57 getAsyncRequestCountdownTimerId( state: PlanStateProps ): number {
58 return state.features.aiAssistant?._meta?.asyncRequestTimerId;
59 },
60 };
61
62 export const wordpressPlansStore = createReduxStore( store, {
63 actions,
64
65 reducer,
66
67 selectors,
68
69 controls: {
70 FETCH_FROM_API( { url } ) {
71 // We cannot use `@wordpress/api-fetch` here since it unconditionally sends
72 // the `X-WP-Nonce` header, which is disallowed by WordPress.com.
73 // (To reproduce, note that you need to call `apiFetch` with `
74 // `{ credentials: 'same-origin', mode: 'cors' }`, since its defaults are
75 // different from `fetch`'s.)
76 return fetch( url ).then( response => response.json() );
77 },
78 },
79
80 resolvers: {
81 *getPlan() {
82 const url = 'https://public-api.wordpress.com/rest/v1.5/plans';
83 const plans = yield actions.fetchFromAPI( url );
84 return actions.setPlans( plans );
85 },
86
87 getAiAssistantFeature: ( state: PlanStateProps ) => {
88 if ( state?.features?.aiAssistant ) {
89 return;
90 }
91
92 return actions.fetchAiAssistantFeature();
93 },
94 },
95 } );
96
97 register( wordpressPlansStore );
98
99 /*
100 * Ensure to request the AI Assistant feature data
101 * by calling the selector. Resolver will take care.
102 */
103 if ( window.Jetpack_Editor_Initial_State?.[ 'ai-assistant' ]?.[ 'is-enabled' ] ) {
104 select( store ).getAiAssistantFeature();
105 }
106
107 // Types
108
109 // eslint-disable-next-line @typescript-eslint/no-explicit-any
110 type OmitFirstArg< F > = F extends ( _: any, ...args: infer P ) => infer R
111 ? ( ...args: P ) => R
112 : never;
113
114 export type WordPressPlansSelectors = {
115 [ key in keyof typeof selectors ]: OmitFirstArg< ( typeof selectors )[ key ] >;
116 };
117