woocommerce/plugins/woocommerce-admin/client/marketplace/contexts/notice-store.tsx

91 lines
1.7 KiB
TypeScript
Raw Normal View History

My subscriptions error notices (#41124) * Marketplace: Populate the table rows with components * Marketplace: add links to dropdown menu and fix fallback product icons * Marketplace: fix popover width * Add My subscriptions install (#40630) * Marketplace: add plugin install from the subscriptions page Co-authored-by: berislav grgičak <berislav.grgicak@gmail.com> * Marketplace: Use the activation function to show install button --------- Co-authored-by: raicem <unalancem@gmail.com> * Add WP updates script to the extensions page * Add update button * Add update data to subscriptions * Update plugins * Prevent update if license unavailable * Add changefile(s) from automation for the following project(s): woocommerce * Remove all data from API * Linter fixes * Linter fixes * Remove merge string * Update link style * Add comment for updates.js * Prevent updates if required data is missing * Return removed slug code * Add renew modal * Update install to run until new data loaded * Add activate modal * Add connect modal * Add renew button * Renewal button * Rename activate to connect * Add subscribe button * Add action buttons * Remove unused const * Add changefile(s) from automation for the following project(s): woocommerce * Switch to WP installer * Use WP installer * Remove install endpoint * Fix php warning * Add download_link if subscription exists * My subscriptions action modals (#40934) * Add renew modal * Update install to run until new data loaded * Add activate modal * Add connect modal * Add renew button * Renewal button * Rename activate to connect * Add subscribe button * Add action buttons * Remove unused const * Add changefile(s) from automation for the following project(s): woocommerce * Update plugins/woocommerce-admin/client/marketplace/components/my-subscriptions/my-subscriptions.scss Co-authored-by: And Finally <andfinally@users.noreply.github.com> * Update import path --------- Co-authored-by: And Finally <andfinally@users.noreply.github.com> Co-authored-by: github-actions <github-actions@github.com> * Use product slugs for installing * Add store for installing state * Add theme install support * Product activate endpoint * Activate after install * PHP warning * Update context * Debugging * Install context * Linter * Simplify context * Use Redux instead of context * Add changefile(s) from automation for the following project(s): woocommerce * Replace ~ with relative paths * Add error notices * Move update to functions * Add notice store * Fix linter errors * Remove temp file * Add changefile(s) from automation for the following project(s): woocommerce * Don't autoremove notices * Add status to notices * Send just required path field * Subvscribe hover color * Css linter fix * Fix error notice style * Update manage button text * Linter fixes --------- Co-authored-by: raicem <unalancem@gmail.com> Co-authored-by: github-actions <github-actions@github.com> Co-authored-by: And Finally <andfinally@users.noreply.github.com>
2023-11-07 08:21:12 +00:00
/**
* External dependencies
*/
import { createReduxStore, register } from '@wordpress/data';
import { Options } from '@wordpress/notices';
/**
* Internal dependencies
*/
import { NoticeState, Notice, NoticeStatus } from './types';
const NOTICE_STORE_NAME = 'woocommerce-admin/subscription-notices';
const DEFAULT_STATE: NoticeState = {
notices: {},
};
const store = createReduxStore( NOTICE_STORE_NAME, {
reducer( state: NoticeState | undefined = DEFAULT_STATE, action ) {
switch ( action.type ) {
case 'ADD_NOTICE':
return {
...state,
notices: {
...state.notices,
[ action.productKey ]: {
productKey: action.productKey,
message: action.message,
status: action.status,
options: action.options,
},
},
};
case 'REMOVE_NOTICE':
const notices = { ...state.notices };
if ( notices[ action.productKey ] ) {
delete notices[ action.productKey ];
}
return {
...state,
notices,
};
}
return state;
},
actions: {
addNotice(
productKey: string,
message: string,
status: NoticeStatus,
options?: Partial< Options >
) {
return {
type: 'ADD_NOTICE',
productKey,
message,
status,
options,
};
},
removeNotice( productKey: string ) {
return {
type: 'REMOVE_NOTICE',
productKey,
};
},
},
selectors: {
notices( state: NoticeState | undefined ): Notice[] {
if ( ! state ) {
return [];
}
return Object.values( state.notices );
},
getNotice(
state: NoticeState | undefined,
productKey: string
): Notice | undefined {
if ( ! state ) {
return;
}
return state.notices[ productKey ];
},
},
} );
register( store );
export { store as noticeStore, NOTICE_STORE_NAME };