Skip to content

Move VPP instructions out of UI and into guides - #43641

Merged
noahtalerman merged 3 commits into
mainfrom
move-vpp
Apr 17, 2026
Merged

Move VPP instructions out of UI and into guides#43641
noahtalerman merged 3 commits into
mainfrom
move-vpp

Conversation

@noahtalerman

@noahtalerman noahtalerman commented Apr 15, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features

    • Added external documentation routes linking to step-by-step guides for adding and renewing Apple MDM VPP.
  • Changes

    • Replaced embedded VPP setup steps in modals with concise descriptive text and links to the new guides.
    • Removed organization-specific naming from the renewal flow, showing a generic instruction with a "Learn how" link.
  • Style

    • Adjusted modal spacing and description layout for cleaner presentation.

@noahtalerman
noahtalerman requested a review from a team as a code owner April 15, 2026 21:53
@fleet-release
fleet-release requested a review from eashaw April 15, 2026 21:53

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Review Summary by Qodo

Move VPP setup instructions from UI to external guides

✨ Enhancement 📝 Documentation

Grey Divider

Walkthroughs

Description
• Remove VPP setup instructions from UI components
• Replace inline steps with links to external guides
• Add routing for VPP guide links in website config
• Clean up unused component exports and styling
Diagram
flowchart LR
  A["VPP UI Components"] -->|Remove inline steps| B["AddVppModal & RenewVppModal"]
  B -->|Add guide links| C["CustomLink to guides"]
  C -->|Route to| D["website/guides/apple-mdm-setup"]
  E["VppSetupSteps Component"] -->|Delete| F["Unused Component"]
Loading

Grey Divider

File Changes

1. frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/VppSetupSteps/index.ts Miscellaneous +0/-1

Remove VppSetupSteps component export

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/VppSetupSteps/index.ts


2. frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/VppSetupSteps/VppSetupSteps.tsx ✨ Enhancement +0/-67

Delete VppSetupSteps component entirely

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/VppSetupSteps/VppSetupSteps.tsx


3. frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/VppSetupSteps/_styles.scss ✨ Enhancement +0/-20

Remove VppSetupSteps styling rules

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/VppSetupSteps/_styles.scss


View more (6)
4. frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/AddVppModal.tsx ✨ Enhancement +9/-2

Replace setup steps with guide link

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/AddVppModal.tsx


5. frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/_styles.scss Formatting +0/-1

Remove left margin from file uploader

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/_styles.scss


6. frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx ✨ Enhancement +8/-6

Replace setup steps with guide link

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx


7. frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/_styles.scss Formatting +0/-1

Remove left margin from file uploader

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/_styles.scss


8. frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/VppPage.tsx ✨ Enhancement +0/-1

Remove orgName prop from RenewVppModal

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/VppPage.tsx


9. website/config/routes.js ⚙️ Configuration changes +2/-0

Add routing for VPP guide links

website/config/routes.js


Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Apr 15, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Broken VPP guide anchors🐞 Bug ≡ Correctness
Description
The new learn-more-about routes redirect to /guides/apple-mdm-setup#add-vpp and #renew-vpp, but the
target guide doesn’t generate headings with those IDs, so users clicking the new “Learn how” links
won’t land on the intended VPP instructions section.
Code

website/config/routes.js[R1164-1165]

+  'GET /learn-more-about/add-vpp': '/guides/apple-mdm-setup#add-vpp',
+  'GET /learn-more-about/renew-vpp': '/guides/apple-mdm-setup#renew-vpp',
Evidence
The routes added in website/config/routes.js point to fragment IDs #add-vpp and #renew-vpp. The
apple-mdm-setup guide’s VPP section headings are “Volume Purchasing Program (VPP)” and “To renew a
VPP token:”, so with the website’s markdown heading-id generation (kebab-case of heading text), the
generated IDs will not be add-vpp/renew-vpp, making the redirect fragments invalid.

website/config/routes.js[1161-1167]
articles/apple-mdm-setup.md[106-123]
website/api/helpers/strings/to-html.js[78-94]
frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/AddVppModal.tsx[60-67]
frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx[68-75]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The learn-more redirects for VPP point to `#add-vpp` and `#renew-vpp`, but the target guide (`/guides/apple-mdm-setup`) does not have headings that generate those IDs, so the redirects don’t jump to the right place.
### Issue Context
The website generates heading IDs by kebab-casing the rendered heading text. The VPP guide section currently has headings like “Volume Purchasing Program (VPP)” and “To renew a VPP token:”, which will not produce `add-vpp`/`renew-vpp`.
### Fix Focus Areas
- website/config/routes.js[1161-1167]
- articles/apple-mdm-setup.md[106-123]
- website/api/helpers/strings/to-html.js[78-94]
### Suggested fix
Choose one of:
1) Update the guide to include explicit headings that generate the desired anchors, e.g. add `### Add VPP` before the add steps and change/add `### Renew VPP` before the renewal steps, so the generated IDs become `add-vpp` and `renew-vpp`.
OR
2) Update the redirect fragments in `website/config/routes.js` to match the actual generated heading IDs in the guide.
Afterward, verify the UI links in AddVppModal/RenewVppModal land on the correct guide sections.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Renew modal spacing regressed🐞 Bug ⚙ Maintainability
Description
RenewVppModal removed the ${baseClass}__description class from its description paragraph, so the
existing SCSS spacing rule no longer applies and is now orphaned, likely changing modal layout
spacing.
Code

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx[R68-75]

+      <p>
+        Follow the step-by-step guide to renew.{" "}
+        <CustomLink
+          url="https://fleetdm.com/learn-more-about/renew-vpp"
+          text="Learn how"
+          newTab
+        />
   </p>
-      <VppSetupSteps />
Evidence
The SCSS defines styling for &__description (margin bottom), but the component no longer renders
any element with the renew-vpp-modal__description class, so the rule won’t apply and becomes dead
code.

frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx[60-78]
frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/_styles.scss[3-9]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`RenewVppModal` removed the description paragraph class, so the `renew-vpp-modal__description` styling no longer applies and the SCSS rule is now unused.
### Issue Context
The SCSS currently sets spacing via `&__description { margin: 0 0 $pad-large; }`, but the JSX now uses a plain `<p>` without that class.
### Fix Focus Areas
- frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx[60-78]
- frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/_styles.scss[3-9]
### Suggested fix
Either:
- Re-add `className={`${baseClass}__description`}` to the `<p>` in `RenewVppModal.tsx` to preserve intended spacing.
OR
- If the spacing is no longer desired, delete the `&__description` block from the SCSS to avoid dead styles (and ensure the new layout still looks correct).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@codecov

codecov Bot commented Apr 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 66.91%. Comparing base (3ef0a3f) to head (5ddc8ac).
⚠️ Report is 28 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #43641   +/-   ##
=======================================
  Coverage   66.90%   66.91%           
=======================================
  Files        2600     2600           
  Lines      208430   208361   -69     
  Branches     9225     9207   -18     
=======================================
- Hits       139448   139415   -33     
+ Misses      56296    56272   -24     
+ Partials    12686    12674   -12     
Flag Coverage Δ
frontend 54.75% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai

coderabbitai Bot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: beee7dde-6152-438e-aeab-d91c1b95210f

📥 Commits

Reviewing files that changed from the base of the PR and between b333b8a and 5ddc8ac.

📒 Files selected for processing (1)
  • website/config/routes.js
✅ Files skipped from review due to trivial changes (1)
  • website/config/routes.js

Walkthrough

Removed the VppSetupSteps component and its styles. Replaced VppSetupSteps usages in AddVppModal and RenewVppModal with descriptive text that includes CustomLink targets; removed the orgName prop from RenewVppModal and updated its description. Adjusted modal styles by removing left margins on file uploader elements and changing description margins. Added two website redirect routes: /learn-more-about/add-vpp and /learn-more-about/renew-vpp.

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The PR description is minimal, containing only a reference to issue #43435 with no details about changes made, testing performed, or implementation specifics. Add details about what was changed, why, and any testing performed. Include a summary of the changes and confirmation of completed checklist items.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: moving VPP instructions from the UI into documentation guides.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch move-vpp

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Comment thread website/config/routes.js Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx (1)

71-71: Consider centralizing the guide URL

Line 71 hardcodes the Fleet website URL. Since this link pattern is now part of the UX, consider extracting it to a shared constant to avoid drift if routes/domains change later.

Refactor example
+const RENEW_VPP_GUIDE_URL = "https://fleetdm.com/learn-more-about/renew-vpp";
...
-        <CustomLink
-          url="https://fleetdm.com/learn-more-about/renew-vpp"
+        <CustomLink
+          url={RENEW_VPP_GUIDE_URL}
           text="Learn how"
           newTab
         />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx`
at line 71, The hardcoded guide URL in the RenewVppModal component should be
extracted into a shared constant so it can be updated across the app; create (or
add to) a central constant like GUIDE_URLS.RENEW_VPP (or a ROUTES/EXTERNAL_LINKS
export) and replace the inline string in RenewVppModal.tsx with an import of
that constant (update the import in RenewVppModal and any other components that
use the same Fleet learn-more URL), ensure the new constant is well-named and
documented, and run/update any tests or snapshots that reference the original
hardcoded URL.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In
`@frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx`:
- Line 71: The hardcoded guide URL in the RenewVppModal component should be
extracted into a shared constant so it can be updated across the app; create (or
add to) a central constant like GUIDE_URLS.RENEW_VPP (or a ROUTES/EXTERNAL_LINKS
export) and replace the inline string in RenewVppModal.tsx with an import of
that constant (update the import in RenewVppModal and any other components that
use the same Fleet learn-more URL), ensure the new constant is well-named and
documented, and run/update any tests or snapshots that reference the original
hardcoded URL.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: bb14168c-5186-4f35-9cb0-70693f2d78fc

📥 Commits

Reviewing files that changed from the base of the PR and between 8398b8d and b333b8a.

📒 Files selected for processing (4)
  • frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/AddVppModal.tsx
  • frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/_styles.scss
  • frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/RenewVppModal.tsx
  • frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/_styles.scss
✅ Files skipped from review due to trivial changes (3)
  • frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/_styles.scss
  • frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/RenewVppModal/_styles.scss
  • frontend/pages/admin/IntegrationsPage/cards/MdmSettings/VppPage/components/AddVppModal/AddVppModal.tsx

Comment thread website/config/routes.js Outdated
@noahtalerman
noahtalerman merged commit 51af71f into main Apr 17, 2026
20 checks passed
@noahtalerman
noahtalerman deleted the move-vpp branch April 17, 2026 17:23
noahtalerman added a commit that referenced this pull request Apr 20, 2026
…out of UI and into guides (#43813)

## Cherry-picks for 4.84 RC

- 1fe982a Move APNs instructions out of UI and into guides (#43434)
- 51af71f Move VPP instructions out of UI and into guides (#43641)
- fa796cd Move Apple Business instructions out of UI and into guides
(#43638)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants