Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@steven-tey
Copy link
Collaborator

@steven-tey steven-tey commented Jun 10, 2025

Summary by CodeRabbit

  • New Features

    • Added a new field to track when a program's lander is published.
    • Introduced scripts for processing lead event data and deleting links from data sources.
  • Improvements

    • Enhanced form submission and publish button logic in the branding form for better feedback and usability.
    • Refined criteria for displaying 404 pages and generating sitemaps based on the new lander publication field.
  • Bug Fixes

    • Improved consistency and clarity in variable naming within the branding form.
  • Chores

    • Updated database schema to include the new lander publication timestamp.

@vercel
Copy link
Contributor

vercel bot commented Jun 10, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Updated (UTC)
dub ✅ Ready (Inspect) Visit Preview Jun 10, 2025 8:17pm

@steven-tey steven-tey requested review from TWilson023 and Copilot and removed request for Copilot June 10, 2025 20:04
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 10, 2025

Walkthrough

The changes introduce a new landerPublishedAt field to the Program model and propagate its usage across the codebase. This includes schema updates, logic adjustments for filtering and publishing, UI improvements for form state handling, and the addition of two new scripts for lead event processing and Tinybird data deletion.

Changes

File(s) Change Summary
packages/prisma/schema/program.prisma Added optional landerPublishedAt DateTime field to the Program model.
apps/web/lib/zod/schemas/programs.ts Extended ProgramWithLanderDataSchema with optional landerPublishedAt date field.
apps/web/lib/actions/partners/update-program.ts Updated updateProgramAction to set landerPublishedAt based on landerData presence.
apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/apply/page.tsx Simplified notFound() trigger; now only checks if program is falsy.
apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/page.tsx Changed notFound() logic to check for program.landerPublishedAt instead of defaultRewardId.
apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/layout.tsx Removed Prisma import; generateStaticParams now fetches all programs without landerData filtering.
apps/web/app/sitemap.ts Added filter for non-null landerPublishedAt in program query for sitemap generation.
apps/web/ui/partners/design/branding-form.tsx Improved form state handling, renamed mutate to mutateProgram, refined publish button logic.
apps/web/scripts/framer/process-lead-events.ts New: Script to process lead event CSVs, map to customer/link data, output processed CSV.
apps/web/scripts/tinybird/delete-links.ts New: Script to delete Tinybird data source rows matching a domain condition using API requests.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant BrandingForm
    participant updateProgramAction
    participant PrismaDB

    User->>BrandingForm: Submit publish form
    BrandingForm->>updateProgramAction: Call with form data
    updateProgramAction->>PrismaDB: Update Program (set landerPublishedAt if landerData)
    PrismaDB-->>updateProgramAction: Return updated Program
    updateProgramAction-->>BrandingForm: Return result
    BrandingForm-->>User: Update UI, reset form state
Loading
sequenceDiagram
    participant Script
    participant CSVFile
    participant PrismaDB
    participant OutputCSV

    Script->>CSVFile: Read raw lead event data
    Script->>PrismaDB: Query Links by link IDs
    Script->>PrismaDB: Query Customers by customer IDs (in chunks)
    Script->>Script: Map events to link keys and customer external IDs
    Script->>OutputCSV: Write processed events
Loading

Poem

Oh, a field for landers, now published in time,
With forms that reset and buttons that chime.
Scripts that parse leads and clear out the old,
A database schema, more robust and bold.
The rabbit hops on, with code freshly spun,
Celebrating each change, another sprint done!
🐇✨


📜 Recent review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between bcbf4fe and 0d56135.

📒 Files selected for processing (1)
  • apps/web/scripts/framer/process-lead-events.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/scripts/framer/process-lead-events.ts
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build
✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • 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 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 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 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 for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@steven-tey
Copy link
Collaborator Author

@CodeRabbit final review pls

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 10, 2025

Tip

For best results, initiate chat on the files or code changes.

@steven-tey Sure thing! However, I still need to look at the concrete code changes introduced on this branch before I can give you an informed “final review” (e.g. double-check types, query consistency, unused vars, perf regressions, etc.).

Could you please re-run the bot with the repository checked out so I can inspect the actual diffs? Simply reply:

@coderabbitai review

(or “full review” if you prefer a ground-up sweep).
Once the repo is available inside the sandbox I’ll dive straight in and deliver the complete set of actionable comments, a high-level summary, and any finishing touches you requested.

@steven-tey
Copy link
Collaborator Author

@coderabbitai full review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 10, 2025

✅ Actions performed

Full review triggered.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (8)
packages/prisma/schema/program.prisma (1)

48-50: Consider indexing landerPublishedAt for frequent “is published?” look-ups

The sitemap, public pages, and application flow now filter on WHERE landerPublishedAt IS NOT NULL.
Adding a single-column index will keep those queries snappy once the table grows.

 model Program {
   ...
   landerData        Json?         @db.Json
   landerPublishedAt DateTime?
+  
+  @@index(landerPublishedAt)
   resources         Json?         @db.Json
   ...
 }
apps/web/lib/actions/partners/update-program.ts (1)

120-125: Revalidation trigger might fire spuriously

Because landerData is treated as truthy even when identical JSON is re-sent, every “save” causes expensive revalidatePath() calls. A deep-equality check (or at least JSON.stringify comparison) against program.landerData would reduce unnecessary cache invalidations.

apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/apply/page.tsx (1)

18-20: Fine for now – but consider symmetry with the landing page guard

The apply form no longer checks landerPublishedAt. If the landing page is hidden (unpublished) but /apply is guessed, users reach the form directly. Decide whether that’s intentional; if not, mirror the same guard as the landing page.

apps/web/app/sitemap.ts (1)

22-25: Consider guarding against future-dated landerPublishedAt and add an index for performance

  1. If landerPublishedAt can be set to a future timestamp (e.g. scheduled publishing), you probably want to exclude those programs from the sitemap:
-        landerPublishedAt: {
-          not: null,
-        },
+        landerPublishedAt: {
+          not: null,
+          lte: new Date(),     // exclude future-dated entries
+        },
  1. This field will now be part of a hot path that runs on every sitemap request. Add a composite database index on (landerPublishedAt, landerData) to avoid a sequential scan as the table grows.
apps/web/scripts/tinybird/delete-links.ts (1)

8-21: Build the data-source list once and loop – reduces duplication

Slight refactor eliminates repetition and makes adding/removing sources trivial.

-  const deleteRes = await Promise.allSettled([
-    deleteData({ dataSource: "dub_links_metadata", deleteCondition }),
-    deleteData({ dataSource: "dub_links_metadata_latest", deleteCondition }),
-    deleteData({ dataSource: "dub_regular_links_metadata_latest", deleteCondition }),
-  ]);
+  const sources = [
+    "dub_links_metadata",
+    "dub_links_metadata_latest",
+    "dub_regular_links_metadata_latest",
+  ];
+
+  const deleteRes = await Promise.allSettled(
+    sources.map((dataSource) => deleteData({ dataSource, deleteCondition })),
+  );
apps/web/scripts/framer/process-lead-events.ts (1)

99-103: Disconnect the Prisma client to allow Node to exit gracefully

-        fs.writeFileSync(
+        fs.writeFileSync(
           `processed_framer_lead_events_${BATCH}.csv`,
           Papa.unparse(processedData),
         );
+
+        await prisma.$disconnect();
apps/web/ui/partners/design/branding-form.tsx (2)

127-129: getValues is only needed for reset – avoid re-render triggers

getValues causes a subscription; you can snapshot values inside onSuccess without storing the function in formState.

-    formState: { isDirty, isSubmitting, isSubmitSuccessful },
-    getValues,
+    formState: { isDirty, isSubmitting, isSubmitSuccessful },

and inside onSuccess:

-      const currentValues = getValues();
-      reset(currentValues);
+      reset(undefined); // resets using latest defaultValues (already mutated)

157-162: Simplify disablePublishButton – remove the ternary

Lint flagged this; boolean coercion is sufficient.

-  const disablePublishButton =
-    !isDirty && program.landerPublishedAt ? true : false;
+  const disablePublishButton = !isDirty && Boolean(program.landerPublishedAt);
🧰 Tools
🪛 Biome (1.9.4)

[error] 161-161: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 6e2a174 and bcbf4fe.

📒 Files selected for processing (10)
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/apply/page.tsx (1 hunks)
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/layout.tsx (0 hunks)
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/page.tsx (1 hunks)
  • apps/web/app/sitemap.ts (1 hunks)
  • apps/web/lib/actions/partners/update-program.ts (1 hunks)
  • apps/web/lib/zod/schemas/programs.ts (1 hunks)
  • apps/web/scripts/framer/process-lead-events.ts (1 hunks)
  • apps/web/scripts/tinybird/delete-links.ts (1 hunks)
  • apps/web/ui/partners/design/branding-form.tsx (6 hunks)
  • packages/prisma/schema/program.prisma (1 hunks)
💤 Files with no reviewable changes (1)
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/layout.tsx
🧰 Additional context used
🧬 Code Graph Analysis (1)
apps/web/ui/partners/design/branding-form.tsx (3)
apps/web/lib/swr/use-program.ts (1)
  • useProgram (6-37)
apps/web/lib/types.ts (1)
  • ProgramWithLanderDataProps (412-414)
apps/web/lib/actions/partners/update-program.ts (1)
  • updateProgramAction (26-134)
🪛 Biome (1.9.4)
apps/web/ui/partners/design/branding-form.tsx

[error] 161-161: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build
🔇 Additional comments (4)
apps/web/lib/zod/schemas/programs.ts (1)

47-50: landerPublishedAt field added correctly – remember downstream serialization nuances

👍 The new nullable date is declared consistently with landerData (nullish() covers both null & undefined).
Just double-check all API layers that serialize this schema to JSON stringify Date objects (they’ll otherwise arrive as "2024-06-03T15:00:00.000Z" strings). If any client code still expects a Date instance, add explicit transform() calls here.

apps/web/lib/actions/partners/update-program.ts (1)

84-86:

Details

❓ Verification inconclusive

landerPublishedAt is overwritten on every save – persist original publish time

Each update where landerData is truthy assigns a fresh new Date(), erasing the original publish timestamp (e.g., tweaking copy or color inadvertently resets “published” history).

-        landerPublishedAt: landerData ? new Date() : undefined,
+        // Set only the first time a lander is published
+        landerPublishedAt:
+          landerData && !program.landerPublishedAt
+            ? new Date()
+            : undefined,

This preserves the initial publish date while still allowing manual null-reset via landerData: null.


🏁 Script executed:

#!/bin/bash
# Locate the update-program.ts file and display context around lines 1-200
file=$(rg -l "updateProgram" -g "apps/web/lib/actions/partners/update-program.ts")
echo "Found file: $file"
sed -n '1,200p' "$file"

Length of output: 4301


🏁 Script executed:

#!/bin/bash
# Display the contents of get-program-or-throw.ts to verify that landerPublishedAt is selected
sed -n '1,200p' apps/web/lib/api/programs/get-program-or-throw.ts

Length of output: 1866


🏁 Script executed:

#!/bin/bash
# Locate and display schemas for ProgramSchema and ProgramWithLanderDataSchema
sed -n '1,300p' apps/web/lib/zod/schemas/programs.ts

Length of output: 4840


Persist original landerPublishedAt only on first publish and allow explicit reset

updateProgramAction currently always overwrites landerPublishedAt whenever landerData is truthy—and because you’re not loading the existing landerPublishedAt, you cannot check if it’s already set. To fix:

• In apps/web/lib/actions/partners/update-program.ts, load the old timestamp:

const program = await getProgramOrThrow(
  { workspaceId: workspace.id, programId },
  { includeLanderData: true }
);

• In the prisma.program.update call, replace the one-liner with conditional data branching:

await prisma.program.update({
  where: { id: programId },
  data: {
    // …other fields…
    landerData: landerData === null ? Prisma.JsonNull : landerData,
    // explicit null-reset
    ...(landerData === null
      ? { landerPublishedAt: null }
      // first-time publish only
      : program.landerPublishedAt == null
      ? { landerPublishedAt: new Date() }
      : {}),
    domain,
    // …remaining fields…
  },
});

This ensures:

  • The first time you provide landerData, the timestamp is set.
  • Subsequent updates (even if you tweak the data) won’t reset it.
  • Passing landerData: null explicitly clears both the JSON and the publish date.

[fixed_required]

apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/page.tsx (1)

21-23: Ensure landerPublishedAt is actually selected by getProgram

getProgram() is invoked with include: ["rewards", "defaultDiscount"], but landerPublishedAt is now critical for the 404 gate.
Verify the fetcher always returns this column; otherwise legitimately published programs might 404.

apps/web/ui/partners/design/branding-form.tsx (1)

131-138: Minor: reset after mutate can race – await both

Ensure the cache is updated before resetting form state.

-      await mutateProgram();
-      toast.success("Program updated successfully.");
-      // Reset form state to clear isSubmitSuccessful
-      const currentValues = getValues();
-      reset(currentValues);
+      await mutateProgram();
+      reset(getValues());            // clear dirty / submit flags
+      toast.success("Program updated successfully.");

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (3)
apps/web/scripts/tinybird/delete-links.ts (2)

37-38: Fail fast when TINYBIRD_API_KEY is missing
Same concern raised on the previous commit still applies – the request silently 401s if the env-var is not provided. Guard before fetch.

+if (!process.env.TINYBIRD_API_KEY) {
+  throw new Error("TINYBIRD_API_KEY is not set");
+}

40-40: URL-encode the form body to avoid malformed requests
deleteCondition can contain spaces/quotes. Use URLSearchParams instead of string interpolation.

-      body: `delete_condition=${deleteCondition}`,
+      body: new URLSearchParams({ delete_condition: deleteCondition }).toString(),
apps/web/scripts/framer/process-lead-events.ts (1)

30-31: ⚠️ Potential issue

fs.createReadStream second arg is mis-used (duplicate of earlier note)

Passing the string "utf-8" is treated as a file-system flag, not encoding.
Use an options object instead:

-    fs.createReadStream(`get_framer_lead_events_${BATCH}.csv`, "utf-8"),
+    fs.createReadStream(`get_framer_lead_events_${BATCH}.csv`, {
+      encoding: "utf-8",
+    }),
🧹 Nitpick comments (4)
apps/web/scripts/tinybird/delete-links.ts (1)

45-45: Add top-level error handling to avoid unhandled-rejection noise

-main();
+main().catch((err) => {
+  console.error(err);
+  process.exit(1);
+});
packages/prisma/schema/program.prisma (1)

49-49: Consider indexing landerPublishedAt for query performance

Both the sitemap generator and several UI checks now filter on landerPublishedAt IS NOT NULL. Adding an index will keep those queries fast as data grows.

   @@index(domain)
+  @@index(landerPublishedAt)
apps/web/scripts/framer/process-lead-events.ts (1)

25-27: Hard-coded workspace ID

const FRAMER_WORKSPACE_ID = "xxx"; risks accidental commit of internal IDs.
Consider reading from an env var:

-const FRAMER_WORKSPACE_ID = "xxx";
+const FRAMER_WORKSPACE_ID =
+  process.env.FRAMER_WORKSPACE_ID ?? (() => { throw new Error("FRAMER_WORKSPACE_ID missing"); })();
apps/web/ui/partners/design/branding-form.tsx (1)

158-163: Simplify boolean expression & satisfy linter

The ternary is unnecessary and flagged by Biome. A concise, type-safe alternative:

-const disablePublishButton =
-  !isDirty && program.landerPublishedAt ? true : false;
+const disablePublishButton = !isDirty && !!program.landerPublishedAt;
🧰 Tools
🪛 Biome (1.9.4)

[error] 161-161: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 6e2a174 and bcbf4fe.

📒 Files selected for processing (10)
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/apply/page.tsx (1 hunks)
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/layout.tsx (0 hunks)
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/page.tsx (1 hunks)
  • apps/web/app/sitemap.ts (1 hunks)
  • apps/web/lib/actions/partners/update-program.ts (1 hunks)
  • apps/web/lib/zod/schemas/programs.ts (1 hunks)
  • apps/web/scripts/framer/process-lead-events.ts (1 hunks)
  • apps/web/scripts/tinybird/delete-links.ts (1 hunks)
  • apps/web/ui/partners/design/branding-form.tsx (6 hunks)
  • packages/prisma/schema/program.prisma (1 hunks)
💤 Files with no reviewable changes (1)
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/layout.tsx
🧰 Additional context used
🧬 Code Graph Analysis (1)
apps/web/ui/partners/design/branding-form.tsx (3)
apps/web/lib/swr/use-program.ts (1)
  • useProgram (6-37)
apps/web/lib/types.ts (1)
  • ProgramWithLanderDataProps (412-414)
apps/web/lib/actions/partners/update-program.ts (1)
  • updateProgramAction (26-134)
🪛 Biome (1.9.4)
apps/web/ui/partners/design/branding-form.tsx

[error] 161-161: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)

🔇 Additional comments (7)
apps/web/lib/zod/schemas/programs.ts (1)

48-50: Schema extension looks good
landerPublishedAt is correctly typed as z.date().nullish(), mirroring the Prisma model. No further action needed.

apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/page.tsx (1)

21-22: Logic switch to landerPublishedAt is sensible
The new guard aligns the 404 behaviour with the publish flag. Looks correct.

apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/apply/page.tsx (1)

18-20: Removal of defaultRewardId guard – double-check downstream assumptions

Dropping the program.defaultRewardId check means the page now renders even when no default reward is configured. Make sure every component on this page (ProgramRewardList, ProgramApplicationForm, etc.) behaves correctly when defaultDiscount (or any reward-related props) are null/undefined; otherwise users could hit runtime errors or see broken UI.

If those components still require a default reward, consider re-introducing a guard or adding internal null handling.

apps/web/app/sitemap.ts (1)

22-24: LGTM – tighter filter improves sitemap correctness

Adding landerPublishedAt: { not: null } ensures only published programs appear in partner sitemaps. Nice alignment with the new publication flow.

apps/web/ui/partners/design/branding-form.tsx (3)

43-46: Renamed mutatemutateProgram improves clarity

Good call; avoids shadowing and makes intent explicit.


127-138: Resetting with getValues() – confirm draft sync

Using current values clears isSubmitSuccessful, but it also resets the isDirty flag even when local draft differs from remote state. Verify that the draft-saving logic still triggers when needed after a publish.


241-243: Disable condition now matches simplified flag

After adopting the simplification above, remember to keep disabled={disablePublishButton} as is—no further change needed.

@bug0-qa-agent
Copy link

bug0-qa-agent bot commented Jun 10, 2025

🤖 Bug0 QA Agent

Here are the results of the automated tests for PR #2511:

To re-run the tests, please comment /bug0 run or push a new commit to this PR.

@steven-tey steven-tey merged commit b6e7d25 into main Jun 10, 2025
7 of 8 checks passed
Copy link
Collaborator

@TWilson023 TWilson023 left a comment

Choose a reason for hiding this comment

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

LGTM, will just highlight this comment in case you want to address that

@steven-tey steven-tey deleted the lander-published-at branch June 10, 2025 20:18
@bug0-qa-agent
Copy link

bug0-qa-agent bot commented Jun 10, 2025

🤖 Bug0 QA Agent

Here are the results of the automated tests for PR #2511:

To re-run the tests, please comment /bug0 run or push a new commit to this PR.

@coderabbitai coderabbitai bot mentioned this pull request Oct 15, 2025
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.

3 participants