Skip to content
Open
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
34100b0
feat(myyoast-client): map 429/404 registration errors to typed except…
diedexx Jun 17, 2026
6d44bce
feat(myyoast-client): handle the OAuth authorization-code callback
diedexx Jun 17, 2026
c475fbe
feat(integrations-page): rewire the MyYoast REST layer to the new cli…
diedexx Jun 17, 2026
d2b9e23
feat(integrations-page): add the MyYoast connection card
diedexx Jun 17, 2026
ec34263
refactor(myyoast-client): rename registration verify to refresh-status
diedexx Jun 19, 2026
7f16647
refactor(myyoast-client): extract OAuth callback orchestration into t…
diedexx Jun 19, 2026
104de1e
feat(myyoast-client): throttle status refreshes and let callers set t…
diedexx Jun 19, 2026
064f31d
refactor(integrations-page): move the MyYoast connection into a featu…
diedexx Jun 22, 2026
b307876
fix(integrations-page): send the OAuth return URL from the MyYoast card
diedexx Jun 22, 2026
42556d7
fix(integrations-page): don't flash the verification notice while con…
diedexx Jun 23, 2026
40859bc
fix(integrations-page): clarify the MyYoast connection success message
diedexx Jun 23, 2026
5b28a97
refactor(myyoast-client): simplify the refresh-throttle transient key
diedexx Jun 23, 2026
5c9ba0e
fix(integrations-page): clarify the MyYoast connection card copy
diedexx Jun 23, 2026
ad58459
refactor(myyoast-client): add the HTTP_Response type hint to get_retr…
diedexx Jun 23, 2026
d618a48
fix(ai-authentication): log when the primary AI auth strategy fails w…
diedexx Jun 23, 2026
f75f210
fix(integrations-page): remove the divider above the MyYoast site con…
diedexx Jun 23, 2026
5e2601f
refactor(integrations-page): surface MyYoast OAuth flow outcomes as t…
diedexx Jun 23, 2026
f50b105
fix(integrations-page): keep the MyYoast verification tooltip inside …
diedexx Jun 23, 2026
27de57d
fix(myyoast-client): return invalid_user as HTTP 200 so the UI surfac…
diedexx Jun 24, 2026
7c216fd
docs(myyoast-client): correct redirect-URI docblocks and a @covers re…
diedexx Jun 24, 2026
bdb8dce
feat(myyoast-client): expose link params so the integrations card can…
diedexx Jun 24, 2026
79e9289
style(integrations-page): align the MyYoast learn-more link with the …
diedexx Jun 24, 2026
19940ce
fix(myyoast-connection): ignore a dropped concurrent action instead o…
diedexx Jun 24, 2026
2aa4e8b
refactor(myyoast-connection): drop the unused profileUrl and dead sel…
diedexx Jun 24, 2026
bdf2187
docs(myyoast-client): point the error-key docblock at the real JS fun…
diedexx Jun 24, 2026
f040a05
style(integrations-page): add the purple call-to-action border to the…
diedexx Jun 24, 2026
048fc59
Merge branch '1207-authenticate-yoast-ai-requests-with-myyoast-oauth-…
diedexx Jun 24, 2026
81a7eb7
Merge branch '1207-authenticate-yoast-ai-requests-with-myyoast-oauth-…
diedexx Jun 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/js/images/myyoast-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions packages/js/src/integrations-page.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@ import domReady from "@wordpress/dom-ready";

import { Root } from "@yoast/ui-library";
import IntegrationsGrid from "./integrations-page/integrations-grid";
import { registerMyyoastStore } from "./integrations-page/myyoast-connection/store";
import { registerReactComponent, renderReactRoot } from "./helpers/reactRoot";

window.YoastSEO = window.YoastSEO || {};
window.YoastSEO._registerReactComponent = registerReactComponent;

domReady( () => {
registerMyyoastStore();

const context = {
isRtl: Boolean( get( window, "wpseoScriptData.metabox.isRtl", false ) ),
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/**
* Keep constants centralized to avoid circular dependency problems.
*/

/**
* The Redux store name of the MyYoast connection.
* @type {string}
*/
export const MYYOAST_STORE_NAME = "yoast-seo/myyoast-connection";
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import ExclamationIcon from "@heroicons/react/outline/ExclamationIcon";
import { __ } from "@wordpress/i18n";
import { Button, Modal, useSvgAria } from "@yoast/ui-library";
import { noop } from "lodash";
import PropTypes from "prop-types";

/**
* Confirm modal for disconnecting the site from MyYoast.
*
* @param {boolean} isOpen Whether the modal is open.
* @param {function} onClose Cancel handler.
* @param {function} onConfirm Confirm handler.
* @returns {JSX.Element} The modal element.
*/
export const MyyoastConnectionDisconnectModal = ( {
isOpen,
onClose = noop,
onConfirm = noop,
} ) => {
const svgAriaProps = useSvgAria();

return (
<Modal isOpen={ isOpen } onClose={ onClose }>
<Modal.Panel className="yst-max-w-lg">
<div className="yst-flex yst-flex-col yst-items-center sm:yst-flex-row sm:yst-items-start sm:yst-columns-2 yst-gap-4">
<div className="yst-mx-auto yst-flex-shrink-0 yst-flex yst-items-center yst-justify-center yst-h-12 yst-w-12 yst-rounded-full yst-bg-red-100 sm:yst-mx-0">
<ExclamationIcon className="yst-h-6 yst-w-6 yst-text-red-600" { ...svgAriaProps } />
</div>
<div className="yst-text-center sm:yst-text-left yst-flex-1">
<Modal.Title className="yst-text-lg yst-leading-6 yst-font-medium yst-text-slate-900 yst-mb-3">
{ __( "Disconnect this site from MyYoast?", "wordpress-seo" ) }
</Modal.Title>
<Modal.Description className="yst-text-sm yst-text-slate-500">
{ __( "All connected users will be signed out and the site stops working with MyYoast until you connect it again.", "wordpress-seo" ) }
</Modal.Description>
</div>
</div>
<div className="yst-flex yst-flex-col sm:yst-flex-row-reverse yst-gap-3 yst-mt-6">
<Button
type="button"
variant="error"
onClick={ onConfirm }
className="yst-w-full sm:yst-w-auto"
>
{ __( "Disconnect", "wordpress-seo" ) }
</Button>
<Button type="button" variant="secondary" onClick={ onClose } className="yst-w-full sm:yst-w-auto">
{ __( "Cancel", "wordpress-seo" ) }
</Button>
</div>
</Modal.Panel>
</Modal>
);
};

MyyoastConnectionDisconnectModal.propTypes = {
isOpen: PropTypes.bool.isRequired,
onClose: PropTypes.func,
onConfirm: PropTypes.func,
};
Loading
Loading