kinde-auth-react icon indicating copy to clipboard operation
kinde-auth-react copied to clipboard

feat: ProfileLink

Open DanielRivers opened this issue 7 months ago • 1 comments

Explain your changes

Feat: adds support for ProfileLink to access hosted user profile pages

Checklist

🛟 If you need help, consider asking for advice over in the Kinde community.

DanielRivers avatar May 29 '25 12:05 DanielRivers

## Walkthrough

A new `PortalLink` React component was introduced, along with its type definitions and unit tests. The central components index now exports `PortalLink`. The authentication context and provider were updated to support a `generatePortalUrl` method, which `PortalLink` uses to generate and navigate to a portal URL. Type definitions were extended accordingly.

## Changes

| File(s)                                      | Change Summary                                                                                                   |
|----------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
| src/components/PortalLink.tsx                 | Added new `PortalLink` React component that generates and navigates to a portal URL via the authentication context. |
| src/components/PortalLink.test.tsx            | Added unit tests for the `PortalLink` component using Vitest and React Testing Library.                          |
| src/components/index.ts                       | Exported `PortalLink` from the central components index.                                                         |
| src/state/KindeContext.ts                     | Added `generatePortalUrl` method to the `KindeContextProps` interface.                                           |
| src/state/KindeProvider.tsx                   | Implemented the `generatePortalUrl` method in the provider and exposed it via context.                           |
| src/state/types.ts                            | Added `PortalLinkProps` interface for the new component, extending button and portal URL parameter types.         |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
  participant User
  participant PortalLink (Component)
  participant useKindeAuth (Hook)
  participant KindeContext
  participant generatePortalUrl (Function)

  User->>PortalLink: Clicks button
  PortalLink->>useKindeAuth: Accesses auth context
  PortalLink->>KindeContext: Calls generatePortalUrl(options)
  KindeContext->>generatePortalUrl: Calls with domain and options
  generatePortalUrl-->>KindeContext: Returns { url }
  KindeContext-->>PortalLink: Returns { url }
  PortalLink->>User: Redirects window.location.href to url

Suggested reviewers

  • DaveOrDead
  • peterphanouvong

<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 1967f4337c53058df9f53a10feb3f35d4c43471d and 38012764bd57ebecafc770c3aa223ee26e92b537.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `package.json` is excluded by `!**/*.json`

</details>

<details>
<summary>📒 Files selected for processing (3)</summary>

* `CHANGELOG.md` (1 hunks)
* `src/components/PortalLink.test.tsx` (1 hunks)
* `src/components/PortalLink.tsx` (1 hunks)

</details>

<details>
<summary>✅ Files skipped from review due to trivial changes (1)</summary>

* CHANGELOG.md

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (2)</summary>

* src/components/PortalLink.tsx
* src/components/PortalLink.test.tsx

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=kinde-oss/kinde-auth-react&utm_content=148):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

coderabbitai[bot] avatar May 29 '25 12:05 coderabbitai[bot]