PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.0.2
Jetpack – WP Security, Backup, Speed, & Growth v13.0.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 / actions.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
actions.ts
195 lines
1 /**
2 * External dependencies
3 */
4 import apiFetch from '@wordpress/api-fetch';
5 /**
6 * Types & Constants
7 */
8 import {
9 ACTION_DECREASE_NEW_ASYNC_REQUEST_COUNTDOWN,
10 ACTION_DEQUEUE_ASYNC_REQUEST,
11 ACTION_ENQUEUE_ASYNC_REQUEST,
12 ACTION_FETCH_FROM_API,
13 ACTION_INCREASE_AI_ASSISTANT_REQUESTS_COUNT,
14 ACTION_REQUEST_AI_ASSISTANT_FEATURE,
15 ACTION_SET_PLANS,
16 ACTION_SET_AI_ASSISTANT_FEATURE_REQUIRE_UPGRADE,
17 ACTION_STORE_AI_ASSISTANT_FEATURE,
18 ENDPOINT_AI_ASSISTANT_FEATURE,
19 NEW_ASYNC_REQUEST_TIMER_INTERVAL,
20 ACTION_SET_TIER_PLANS_ENABLED,
21 } from './constants';
22 import type { Plan } from './types';
23 import type { AiFeatureProps } from './types';
24 import type { SiteAIAssistantFeatureEndpointResponseProps } from '../../types';
25
26 /**
27 * Map the response from the `sites/$site/ai-assistant-feature`
28 * endpoint to the AI Assistant feature props.
29 * @param { SiteAIAssistantFeatureEndpointResponseProps } response - The response from the endpoint.
30 * @returns { AiFeatureProps } The AI Assistant feature props.
31 */
32 export function mapAiFeatureResponseToAiFeatureProps(
33 response: SiteAIAssistantFeatureEndpointResponseProps
34 ): AiFeatureProps {
35 return {
36 hasFeature: !! response[ 'has-feature' ],
37 isOverLimit: !! response[ 'is-over-limit' ],
38 requestsCount: response[ 'requests-count' ],
39 requestsLimit: response[ 'requests-limit' ],
40 requireUpgrade: !! response[ 'site-require-upgrade' ],
41 errorMessage: response[ 'error-message' ],
42 errorCode: response[ 'error-code' ],
43 upgradeType: response[ 'upgrade-type' ],
44 usagePeriod: {
45 currentStart: response[ 'usage-period' ]?.[ 'current-start' ],
46 nextStart: response[ 'usage-period' ]?.[ 'next-start' ],
47 requestsCount: response[ 'usage-period' ]?.[ 'requests-count' ] || 0,
48 },
49 currentTier: response[ 'current-tier' ],
50 nextTier: response[ 'next-tier' ],
51 tierPlansEnabled: !! response[ 'tier-plans-enabled' ],
52 };
53 }
54
55 const actions = {
56 setPlans( plans: Array< Plan > ) {
57 return {
58 type: ACTION_SET_PLANS,
59 plans,
60 };
61 },
62
63 fetchFromAPI( url: string ) {
64 return {
65 type: ACTION_FETCH_FROM_API,
66 url,
67 };
68 },
69
70 storeAiAssistantFeature( feature: AiFeatureProps ) {
71 return {
72 type: ACTION_STORE_AI_ASSISTANT_FEATURE,
73 feature,
74 };
75 },
76
77 /**
78 * Thunk action to fetch the AI Assistant feature from the API.
79 *
80 * @returns {Function} The thunk action.
81 */
82 fetchAiAssistantFeature() {
83 return async ( { dispatch } ) => {
84 // Dispatch isFetching action.
85 dispatch( { type: ACTION_REQUEST_AI_ASSISTANT_FEATURE } );
86
87 try {
88 const response: SiteAIAssistantFeatureEndpointResponseProps = await apiFetch( {
89 path: ENDPOINT_AI_ASSISTANT_FEATURE,
90 } );
91
92 // Store the feature in the store.
93 dispatch(
94 actions.storeAiAssistantFeature( mapAiFeatureResponseToAiFeatureProps( response ) )
95 );
96 } catch ( err ) {
97 // @todo: Handle error.
98 console.error( err ); // eslint-disable-line no-console
99 }
100 };
101 },
102
103 /**
104 * This thunk action is used to increase
105 * the requests count for the current usage period.
106 * @param {number} count - The number of requests to increase. Default is 1.
107 * @returns {Function} The thunk action.
108 */
109 increaseAiAssistantRequestsCount( count: number = 1 ) {
110 return ( { dispatch } ) => {
111 dispatch( {
112 type: ACTION_INCREASE_AI_ASSISTANT_REQUESTS_COUNT,
113 count,
114 } );
115
116 // Every time the requests count is increased, decrease the countdown
117 dispatch( actions.decreaseAsyncRequestCountdownValue() );
118 };
119 },
120
121 /**
122 * This thunk action is used to decrease
123 * the countdown value for the new async request.
124 * When the countdown reaches 0, enqueue a new async request.
125 *
126 * @returns {Function} The thunk action.
127 */
128 decreaseAsyncRequestCountdownValue() {
129 return async ( { dispatch, select } ) => {
130 dispatch( { type: ACTION_DECREASE_NEW_ASYNC_REQUEST_COUNTDOWN } );
131
132 const asyncCoundown = select.getAsyncRequestCountdownValue();
133 if ( asyncCoundown <= 0 ) {
134 dispatch( actions.enqueueAiAssistantFeatureAyncRequest() );
135 }
136 };
137 },
138
139 /**
140 * This thunk action is used to enqueue a new async request.
141 * If already exist an enqueue request, clear it and enqueue a new one.
142 *
143 * @returns {Function} The thunk action.
144 */
145 enqueueAiAssistantFeatureAyncRequest() {
146 return ( { dispatch } ) => {
147 // Check if there is already a timer running
148 dispatch.dequeueAiAssistantFeatureAyncRequest();
149
150 const contdownTimerId = setTimeout( () => {
151 dispatch( actions.fetchAiAssistantFeature() );
152 }, NEW_ASYNC_REQUEST_TIMER_INTERVAL ); // backend process requires a delay to be able to see the new value
153
154 dispatch( { type: ACTION_ENQUEUE_ASYNC_REQUEST, timerId: contdownTimerId } );
155 };
156 },
157
158 /**
159 * This thunk action is used to dequeue a new async request.
160 * It will clear the timer if there is one,
161 * canceling the enqueue async request.
162 *
163 * @returns {Function} The thunk action.
164 */
165 dequeueAiAssistantFeatureAyncRequest() {
166 return ( { dispatch, select } ) => {
167 dispatch( { type: ACTION_DEQUEUE_ASYNC_REQUEST, timerId: 0 } );
168
169 const timerId = select.getAsyncRequestCountdownTimerId();
170 // If there is no timer, there is nothing to clear
171 if ( ! timerId ) {
172 return;
173 }
174
175 window?.clearTimeout( timerId );
176 };
177 },
178
179 setAiAssistantFeatureRequireUpgrade( requireUpgrade: boolean = true ) {
180 return {
181 type: ACTION_SET_AI_ASSISTANT_FEATURE_REQUIRE_UPGRADE,
182 requireUpgrade,
183 };
184 },
185
186 setTierPlansEnabled( tierPlansEnabled: boolean = true ) {
187 return {
188 type: ACTION_SET_TIER_PLANS_ENABLED,
189 tierPlansEnabled,
190 };
191 },
192 };
193
194 export default actions;
195