diff --git a/.github/config.json b/.github/config.json
index c51b7d1402..91c61bec64 100644
--- a/.github/config.json
+++ b/.github/config.json
@@ -1 +1 @@
-{"runners":[{"versioning":{"source":"milestones","type":"SemVer"},"prereleaseName":"alpha","issue":{"labels":{"Team Managers Pod":{"conditions":[{"label":"Settings","type":"hasLabel","value":true},{"label":"Git Version Control","type":"hasLabel","value":true},{"label":"Home Page","type":"hasLabel","value":true},{"label":"Import-Export-App","type":"hasLabel","value":true},{"label":"Invite users","type":"hasLabel","value":true},{"label":"Realtime Commenting","type":"hasLabel","value":true},{"label":"SSO","type":"hasLabel","value":true},{"label":"Multi User Realtime","type":"hasLabel","value":true},{"label":"Business Edition","type":"hasLabel","value":true},{"label":"RBAC","type":"hasLabel","value":true},{"label":"ABAC","type":"hasLabel","value":true},{"label":"Billing","type":"hasLabel","value":true},{"label":"Audit Logs","type":"hasLabel","value":true}],"requires":1},"New Developers Pod":{"conditions":[{"label":"Fork App","type":"hasLabel","value":true},{"label":"Omnibar","type":"hasLabel","value":true},{"label":"Onboarding","type":"hasLabel","value":true},{"label":"Telemetry","type":"hasLabel","value":true},{"label":"Entity Explorer","type":"hasLabel","value":true},{"label":"Generate Page","type":"hasLabel","value":true},{"label":"IDE","type":"hasLabel","value":true},{"label":"In App Comms","type":"hasLabel","value":true},{"label":"Sniping Mode","type":"hasLabel","value":true},{"label":"Design System","type":"hasLabel","value":true},{"label":"Example Apps","type":"hasLabel","value":true},{"label":"i18n","type":"hasLabel","value":true},{"label":"Welcome Screen","type":"hasLabel","value":true},{"label":"Templates","type":"hasLabel","value":true},{"label":"IDE Navigation","type":"hasLabel","value":true},{"label":"Login / Signup","type":"hasLabel","value":true},{"label":"Clean URLs","type":"hasLabel","value":true},{"label":"Embedding Apps","type":"hasLabel","value":true}],"requires":1},"BE Coders Pod":{"conditions":[{"label":"SAAS Plugins","type":"hasLabel","value":true},{"label":"SAAS Manager App","type":"hasLabel","value":true},{"label":"Data Platform Pod","type":"hasLabel","value":true},{"label":"Integrations Pod","type":"hasLabel","value":true}],"requires":1},"FE Coders Pod":{"conditions":[{"label":"JS Linting & Errors","type":"hasLabel","value":true},{"label":"Debugger","type":"hasLabel","value":true},{"label":"JS Snippets","type":"hasLabel","value":true},{"label":"Autocomplete","type":"hasLabel","value":true},{"label":"Evaluated Value","type":"hasLabel","value":true},{"label":"Slash Command","type":"hasLabel","value":true},{"label":"New JS Function","type":"hasLabel","value":true},{"label":"JS Promises","type":"hasLabel","value":true},{"label":"Function execution","type":"hasLabel","value":true},{"label":"JS Usability","type":"hasLabel","value":true},{"label":"Code Refactoring","type":"hasLabel","value":true},{"label":"storeValue","type":"hasLabel","value":true},{"label":"OnPageLoad","type":"hasLabel","value":true},{"label":"Framework Functions","type":"hasLabel","value":true},{"label":"AST","type":"hasLabel","value":true},{"label":"Code Editor","type":"hasLabel","value":true},{"label":"JS Objects","type":"hasLabel","value":true},{"label":"JS Evaluation","type":"hasLabel","value":true}],"requires":1},"App Viewers Pod":{"conditions":[{"label":"Button Widget","type":"hasLabel","value":true},{"label":"Chart Widget","type":"hasLabel","value":true},{"label":"Checkbox Widget","type":"hasLabel","value":true},{"label":"Container Widget","type":"hasLabel","value":true},{"label":"Date Picker Widget","type":"hasLabel","value":true},{"label":"Select Widget","type":"hasLabel","value":true},{"label":"File Picker Widget","type":"hasLabel","value":true},{"label":"Form Widget","type":"hasLabel","value":true},{"label":"Image Widget","type":"hasLabel","value":true},{"label":"Input Widget","type":"hasLabel","value":true},{"label":"List Widget","type":"hasLabel","value":true},{"label":"MultiSelect Widget","type":"hasLabel","value":true},{"label":"Map Widget","type":"hasLabel","value":true},{"label":"Modal Widget","type":"hasLabel","value":true},{"label":"Radio Widget","type":"hasLabel","value":true},{"label":"Rich Text Editor Widget","type":"hasLabel","value":true},{"label":"Tab Widget","type":"hasLabel","value":true},{"label":"Table Widget","type":"hasLabel","value":true},{"label":"Text Widget","type":"hasLabel","value":true},{"label":"Video Widget","type":"hasLabel","value":true},{"label":"iFrame","type":"hasLabel","value":true},{"label":"Menu Button","type":"hasLabel","value":true},{"label":"Rating","type":"hasLabel","value":true},{"label":"Widget Validation","type":"hasLabel","value":true},{"label":"reallabel","type":"hasLabel","value":true},{"label":"New Widget","type":"hasLabel","value":true},{"label":"Switch widget","type":"hasLabel","value":true},{"label":"Widget Styling","type":"hasLabel","value":true},{"label":"Audio Widget","type":"hasLabel","value":true},{"label":"Icon Button Widget","type":"hasLabel","value":true},{"label":"Checkbox Group widget","type":"hasLabel","value":true},{"label":"Stat Box Widget","type":"hasLabel","value":true},{"label":"Voice Recorder Widget","type":"hasLabel","value":true},{"label":"Calendar Widget","type":"hasLabel","value":true},{"label":"Menu Button Widget","type":"hasLabel","value":true},{"label":"Divider Widget","type":"hasLabel","value":true},{"label":"Rating Widget","type":"hasLabel","value":true},{"label":"App Navigation","type":"hasLabel","value":true},{"label":"View Mode","type":"hasLabel","value":true},{"label":"Widget Property","type":"hasLabel","value":true},{"label":"Document Viewer Widget","type":"hasLabel","value":true},{"label":"Radio Group Widget","type":"hasLabel","value":true},{"label":"Currency Input Widget","type":"hasLabel","value":true},{"label":"TreeSelect","type":"hasLabel","value":true},{"label":"MultiTree Select Widget","type":"hasLabel","value":true},{"label":"Phone Input Widget","type":"hasLabel","value":true},{"label":"JSON Form","type":"hasLabel","value":true},{"label":"All Widgets","type":"hasLabel","value":true},{"label":"App Theming","type":"hasLabel","value":true},{"label":"Button Group widget","type":"hasLabel","value":true},{"label":"Progress bar widget","type":"hasLabel","value":true},{"label":"Audio Recorder Widget","type":"hasLabel","value":true},{"label":"Camera Widget","type":"hasLabel","value":true},{"label":"Table Widget V2","type":"hasLabel","value":true},{"label":"Branding","type":"hasLabel","value":true},{"label":"Map Chart Widget","type":"hasLabel","value":true},{"label":"Code Scanner Widget","type":"hasLabel","value":true},{"label":"Widget keyboard accessibility","type":"hasLabel","value":true},{"label":"List Widget V2","type":"hasLabel","value":true}],"requires":1},"UI Builders Pod":{"conditions":[{"label":"Property Pane","type":"hasLabel","value":true},{"label":"Pages","type":"hasLabel","value":true},{"label":"Copy Paste","type":"hasLabel","value":true},{"label":"Drag & Drop","type":"hasLabel","value":true},{"label":"Undo/Redo","type":"hasLabel","value":true},{"label":"Responsive Viewport","type":"hasLabel","value":true},{"label":"Widgets Pane","type":"hasLabel","value":true},{"label":"UI Performance","type":"hasLabel","value":true},{"label":"Widget Grouping","type":"hasLabel","value":true},{"label":"Reflow & Resize","type":"hasLabel","value":true},{"label":"Canvas / Grid","type":"hasLabel","value":true},{"label":"Canvas Zooms","type":"hasLabel","value":true},{"label":"Frontend Libraries Upgrade","type":"hasLabel","value":true},{"label":"Auto Height","type":"hasLabel","value":true}],"requires":1},"User Education Pod":{"conditions":[{"label":"Content","type":"hasLabel","value":true},{"label":"Documentation","type":"hasLabel","value":true}],"requires":1},"DevOps Pod":{"conditions":[{"label":"Docker","type":"hasLabel","value":true},{"label":"Super Admin","type":"hasLabel","value":true},{"label":"Deployment","type":"hasLabel","value":true},{"label":"K8s","type":"hasLabel","value":true},{"label":"Email Config","type":"hasLabel","value":true},{"label":"Backup & Restore","type":"hasLabel","value":true}],"requires":1},"Design System Pod":{"conditions":[{"label":"Design System Pod","type":"hasLabel","value":true},{"label":"ads migration","type":"hasLabel","value":true},{"label":"ads deduplication ","type":"hasLabel","value":true}],"requires":1},"Data Platform Pod":{"conditions":[{"label":"Datasource Environments","type":"hasLabel","value":true},{"label":"Datatype issue","type":"hasLabel","value":true},{"label":"Entity Refactor","type":"hasLabel","value":true},{"label":"Core Query Execution","type":"hasLabel","value":true},{"label":"Query Management","type":"hasLabel","value":true},{"label":"Query Settings","type":"hasLabel","value":true},{"label":"SmartSubstitution","type":"hasLabel","value":true},{"label":"Query Generation","type":"hasLabel","value":true},{"label":"Query performance","type":"hasLabel","value":true},{"label":"Suggested Widgets","type":"hasLabel","value":true},{"label":"Page load executions","type":"hasLabel","value":true}],"requires":1},"Integrations Pod":{"conditions":[{"label":"New Datasource","type":"hasLabel","value":true},{"label":"Firestore","type":"hasLabel","value":true},{"label":"Google Sheets","type":"hasLabel","value":true},{"label":"Mongo","type":"hasLabel","value":true},{"label":"Redshift","type":"hasLabel","value":true},{"label":"snowflake","type":"hasLabel","value":true},{"label":"S3","type":"hasLabel","value":true},{"label":"Redis","type":"hasLabel","value":true},{"label":"Postgres","type":"hasLabel","value":true},{"label":"GraphQL Plugin","type":"hasLabel","value":true},{"label":"ArangoDB","type":"hasLabel","value":true},{"label":"MsSQL","type":"hasLabel","value":true},{"label":"REST API plugin","type":"hasLabel","value":true},{"label":"Elastic Search","type":"hasLabel","value":true},{"label":"OAuth","type":"hasLabel","value":true},{"label":"Airtable","type":"hasLabel","value":true},{"label":"CURL","type":"hasLabel","value":true},{"label":"DynamoDB","type":"hasLabel","value":true},{"label":"Zendesk","type":"hasLabel","value":true},{"label":"Hubspot","type":"hasLabel","value":true},{"label":"Query Forms","type":"hasLabel","value":true},{"label":"Twilio","type":"hasLabel","value":true},{"label":"MySQL","type":"hasLabel","value":true},{"label":"Connection pool","type":"hasLabel","value":true},{"label":"Datasources","type":"hasLabel","value":true}],"requires":1}}},"root":"."}],"labels":{"Tab Widget":{"color":"e2c76c","name":"Tab Widget","description":""},"Dont merge":{"color":"ADB39C","name":"Dont merge","description":""},"Epic":{"color":"3E4B9E","name":"Epic","description":"A zenhub epic that describes a project"},"Menu Button Widget":{"color":"235708","name":"Menu Button Widget","description":"Issues related to Menu Button widget"},"Checkbox Group widget":{"color":"D2ACD2","name":"Checkbox Group widget","description":"Issues related to Checkbox Group Widget"},"Input Widget":{"color":"ae65d8","name":"Input Widget","description":""},"Security":{"color":"99139C","name":"Security","description":""},"QA":{"color":"e2ca68","name":"QA","description":""},"Verified":{"color":"9bf416","name":"Verified","description":""},"Wont Fix":{"color":"ffffff","name":"Wont Fix","description":"This will not be worked on"},"MySQL":{"color":"c9ddc6","name":"MySQL","description":"Issues related to MySQL plugin"},"Development":{"color":"9F8A02","name":"Development","description":""},"Help Wanted":{"color":"008672","name":"Help Wanted","description":"Extra attention is needed"},"Home Page":{"color":"9c0c8e","name":"Home Page","description":"Issues related to the application home page"},"Rating Widget":{"color":"235708","name":"Rating Widget","description":"Issues related to the rating widget"},"Stat Box Widget":{"color":"f1c9ce","name":"Stat Box Widget","description":"Issues related to stat box"},"Enhancement":{"color":"a2eeef","name":"Enhancement","description":"New feature or request"},"Settings":{"color":"f7ff60","name":"Settings","description":"organization, team & user settings"},"Fork App":{"color":"5369db","name":"Fork App","description":"Issues related to forking apps"},"Container Widget":{"color":"19AD0D","name":"Container Widget","description":"Container widget"},"Papercut":{"color":"B562F6","name":"Papercut","description":""},"community":{"color":"dded34","name":"community","description":"issues reported by community members"},"Needs Design":{"color":"bfd4f2","name":"Needs Design","description":"needs design or changes to design"},"i18n":{"color":"1799b0","name":"i18n","description":"Represents issues that need to be tackled to handle internationalization"},"Rich Text Editor Widget":{"color":"f72cac","name":"Rich Text Editor Widget","description":""},"Onboarding":{"color":"d5794b","name":"Onboarding","description":"Issues related to onboarding new developers"},"Pages":{"color":"d7fd80","name":"Pages","description":"Issues related to configuring pages"},"skip-changelog":{"color":"06086F","name":"skip-changelog","description":"Adding this label to a PR prevents it from being listed in the changelog"},"Low":{"color":"79e53b","name":"Low","description":"An issue that is neither critical nor breaks a user flow"},"potential-duplicate":{"color":"d3cb2e","name":"potential-duplicate","description":"This label marks issues that are potential duplicates of already open issues"},"Audio Widget":{"color":"447B9A","name":"Audio Widget","description":"Issues related to Audio Widget"},"Firestore":{"color":"8078b0","name":"Firestore","description":"Issues related to the firestore Integration"},"New Widget":{"color":"be4cf2","name":"New Widget","description":"A request for a new widget"},"Performance":{"color":"d30e53","name":"Performance","description":"Page Load and evaluations"},"Modal Widget":{"color":"03846f","name":"Modal Widget","description":""},"UX Improvement":{"color":"f4a089","name":"UX Improvement","description":""},"S3":{"color":"8078b0","name":"S3","description":"Issues related to the S3 plugin"},"Release Blocker":{"color":"5756bf","name":"Release Blocker","description":"This issue must be resolved before the release"},"safari":{"color":"51C6AA","name":"safari","description":"Bugs seen on safari browser"},"Example Apps":{"color":"1799b0","name":"Example Apps","description":"Example apps created for new signups"},"MultiSelect Widget":{"color":"AB62D4","name":"MultiSelect Widget","description":"Issues related to MultiSelect Widget"},"Widget Styling":{"color":"37EA75","name":"Widget Styling","description":"all about widget styling"},"Calendar Widget":{"color":"8c6644","name":"Calendar Widget","description":""},"Website":{"color":"151720","name":"Website","description":"Related to www.appsmith.com website"},"Low effort":{"color":"8B59F0","name":"Low effort","description":"Something that'll take a few days to build"},"App Viewers Pod":{"color":"cd8ef9","name":"App Viewers Pod","description":"This label assigns issues to the app viewers pod"},"Checkbox Widget":{"color":"074ac6","name":"Checkbox Widget","description":""},"Spam":{"color":"620faf","name":"Spam","description":""},"Voice Recorder Widget":{"color":"85bc87","name":"Voice Recorder Widget","description":""},"Select Widget":{"color":"0c669e","name":"Select Widget","description":"Select or dropdown widget"},"Bug":{"color":"d73a4a","name":"Bug","description":"Something isn't working"},"Widget Validation":{"color":"6990BC","name":"Widget Validation","description":"Issues related to widget property validation"},"Generate Page":{"color":"f14274","name":"Generate Page","description":"Issures related to page generation"},"File Picker Widget":{"color":"6ae4f2","name":"File Picker Widget","description":""},"snowflake":{"color":"8078b0","name":"snowflake","description":"Issues related to the snowflake Integration"},"Automation":{"color":"CCAF60","name":"Automation","description":""},"hotfix":{"color":"BA3F1D","name":"hotfix","description":""},"Team Managers Pod":{"color":"bddb81","name":"Team Managers Pod","description":"Issues that team managers care about for the security and efficiency of their teams"},"Import-Export-App":{"color":"a7768a","name":"Import-Export-App","description":"Issues related to importing and exporting apps"},"High effort":{"color":"A7E87B","name":"High effort","description":"Something that'll take more than a month to build"},"Telemetry":{"color":"bc70f9","name":"Telemetry","description":"Issues related to instrumenting appsmith"},"Radio Widget":{"color":"91ef15","name":"Radio Widget","description":""},"Omnibar":{"color":"10b5ce","name":"Omnibar","description":"Issues related to the omnibar for navigation"},"Button Widget":{"color":"34efae","name":"Button Widget","description":""},"Switch widget":{"color":"33A8CE","name":"Switch widget","description":"The switch widget"},"Map Widget":{"color":"7eef7a","name":"Map Widget","description":""},"Task":{"color":"085630","name":"Task","description":"A simple Todo"},"Design System":{"color":"12b715","name":"Design System","description":"Design system"},"opera":{"color":"C63F5B","name":"opera","description":"Any issues identified on the opera browser"},"Login / Signup":{"color":"771e69","name":"Login / Signup","description":"Authentication flows"},"Image Widget":{"color":"8de8ad","name":"Image Widget","description":""},"firefox":{"color":"6d56e2","name":"firefox","description":""},"Property Pane":{"color":"b356ff","name":"Property Pane","description":"Issues related to the behaviour of the property pane"},"Deployment":{"color":"93491f","name":"Deployment","description":"Installation process of appsmith"},"Critical":{"color":"9b1b28","name":"Critical","description":"This issue needs immediate attention. Drop everything else"},"IDE":{"color":"61b2ee","name":"IDE","description":"Issues related to the IDE"},"Production":{"color":"b60205","name":"Production","description":""},"Dependencies":{"color":"0366d6","name":"Dependencies","description":"Pull requests that update a dependency file"},"Google Sheets":{"color":"8078b0","name":"Google Sheets","description":"Issues related to Google Sheets"},"Icon Button Widget":{"color":"D319CE","name":"Icon Button Widget","description":"Issues related to the icon button widget"},"Mongo":{"color":"8078b0","name":"Mongo","description":"Issues related to Mongo DB plugin"},"Documentation":{"color":"a8dff7","name":"Documentation","description":"Improvements or additions to documentation"},"TestGap":{"color":"f28253","name":"TestGap","description":"Issues identified for test plan improvement"},"keyboard shortcut":{"color":"0688B6","name":"keyboard shortcut","description":""},"Git Version Control":{"color":"C4568E","name":"Git Version Control","description":"Issues related to version control"},"Reopen":{"color":"897548","name":"Reopen","description":""},"Redshift":{"color":"8078b0","name":"Redshift","description":"Issues related to the redshift integration"},"Date Picker Widget":{"color":"ef1ce1","name":"Date Picker Widget","description":""},"Entity Explorer":{"color":"a2e2f9","name":"Entity Explorer","description":"Issues related to navigation using the entity explorer"},"JS Linting & Errors":{"color":"E56AA5","name":"JS Linting & Errors","description":"Issues related to JS Linting and errors"},"iFrame":{"color":"3CD1DB","name":"iFrame","description":"Issues related to iFrame"},"Stale":{"color":"ededed","name":"Stale","description":null},"Debugger":{"color":"e79062","name":"Debugger","description":"Issues related to the debugger"},"Quick effort":{"color":"95ED65","name":"Quick effort","description":"Something that'll take a few hours to build"},"Text Widget":{"color":"d130d1","name":"Text Widget","description":""},"Video Widget":{"color":"23dd4b","name":"Video Widget","description":""},"Datasources":{"color":"2cc0d4","name":"Datasources","description":"Issues related to configuring datasource on appsmith"},"error":{"color":"B66773","name":"error","description":"All issues connected to error messages"},"Form Widget":{"color":"09ed77","name":"Form Widget","description":""},"Needs Triaging":{"color":"e8b851","name":"Needs Triaging","description":"Needs attention from maintainers to triage"},"Autocomplete":{"color":"235708","name":"Autocomplete","description":"Issues related to the autocomplete"},"hacktoberfest":{"color":"0052cc","name":"hacktoberfest","description":"All issues that can be solved by the community during Hacktoberfest"},"Medium effort":{"color":"D31156","name":"Medium effort","description":"Something that'll take more than a week but less than a month to build"},"Release":{"color":"57e5e0","name":"Release","description":""},"High":{"color":"c94d14","name":"High","description":"This issue blocks a user from building or impacts a lot of users"},"UI Performance":{"color":"1799b0","name":"UI Performance","description":"Issues related to UI performance"},"UI Builders Pod":{"color":"517fba","name":"UI Builders Pod","description":"Issues that UI Builders face using appsmith"},"Deploy Preview":{"color":"bfdadc","name":"Deploy Preview","description":"Issues found in Deploy Preview"},"Needs Tests":{"color":"8ee263","name":"Needs Tests","description":"Needs automated tests to assert a feature/bug fix"},"Refactor":{"color":"B96662","name":"Refactor","description":"needs refactoring of code"},"Divider Widget":{"color":"235708","name":"Divider Widget","description":"Issues related to the divider widget"},"Table Widget":{"color":"2eead1","name":"Table Widget","description":""},"Needs More Info":{"color":"e54c10","name":"Needs More Info","description":"Needs additional information"},"Good First Issue":{"color":"7057ff","name":"Good First Issue","description":"Good for newcomers"},"UI Improvement":{"color":"9aeef4","name":"UI Improvement","description":""},"Backend":{"color":"d4c5f9","name":"Backend","description":"This marks the issue or pull request to reference server code"},"Frontend":{"color":"87c7f2","name":"Frontend","description":"This label marks the issue or pull request to reference client code"},"In App Comms":{"color":"9168f4","name":"In App Comms","description":"Issues around communication with appsmith instances"},"Chart Widget":{"color":"616ecc","name":"Chart Widget","description":""},"regression":{"color":"ffe5bc","name":"regression","description":""},"List Widget":{"color":"8508A0","name":"List Widget","description":"Issues related to the list widget"},"Duplicate":{"color":"cfd3d7","name":"Duplicate","description":"This issue or pull request already exists"},"JS Snippets":{"color":"8d62d2","name":"JS Snippets","description":"issues related to JS Snippets"},"Copy Paste":{"name":"Copy Paste","description":"Issues related to copy paste","color":"b4f0a9"},"Drag & Drop":{"name":"Drag & Drop","description":"Issues related to the drag & drop experience","color":"92115a"},"BE Coders Pod":{"color":"5d9848","name":"BE Coders Pod","description":"Issues related to users writing code to fetch and update data"},"FE Coders Pod":{"color":"a7effc","name":"FE Coders Pod","description":"Issues related to users writing javascript in appsmith"},"New Developers Pod":{"color":"6310da","name":"New Developers Pod","description":"Issues that new developers face while exploring the IDE"},"Sniping Mode":{"name":"Sniping Mode","description":"Issues related to sniping mode","color":"6310da"},"Redis":{"name":"Redis","description":"Issues related to Redis","color":"8078b0"},"New Datasource":{"color":"60b14c","name":"New Datasource","description":"Requests for new datasources"},"Evaluated Value":{"name":"Evaluated Value","description":"Issues related to evaluated values","color":"39f6e7"},"Undo/Redo":{"name":"Undo/Redo","description":"Issues related to undo/redo","color":"f25880"},"App Navigation":{"name":"App Navigation","description":"Issues related to the topbar navigation and configuring it","color":"12b715"},"Responsive Viewport":{"color":"12b715","name":"Responsive Viewport","description":"Issues seen on different viewports like mobile"},"Widgets Pane":{"name":"Widgets Pane","description":"Issues related to the discovery and organisation of widgets","color":"ad5d78"},"Invite users":{"color":"1799b0","name":"Invite users","description":"Invite users flow and any associated actions"},"View Mode":{"color":"1799b0","name":"View Mode","description":"Issues related to the view mode"},"User Education Pod":{"name":"User Education Pod","description":"Issues related to user education","color":"1799b0"},"Content":{"name":"Content","description":"For content related topics i.e blogs, templates, videos","color":"a8dff7"},"Embedding Apps":{"name":"Embedding Apps","description":"Issues related to embedding","color":"26ef4f"},"Slash Command":{"name":"Slash Command","description":"Issues related to the slash command","color":"a0608e"},"Widget Property":{"name":"Widget Property","description":"Issues related to adding / modifying widget properties across widgets","color":"5e92cb"},"Windows":{"name":"Windows","description":"Issues related exclusively to Windows systems","color":"b4cb8a"},"Old App Issues":{"name":"Old App Issues","description":"Issues related to apps old apps a few weeks old and app issues in stale browser session","color":"87ab18"},"Document Viewer Widget":{"name":"Document Viewer Widget","description":"Issues related to Document Viewer Widget","color":"899d4b"},"Radio Group Widget":{"name":"Radio Group Widget","description":"Issues related to radio group widget","color":"b68495"},"Super Admin":{"name":"Super Admin","description":"Issues related to the super admin page","color":"aa95cf"},"Postgres":{"name":"Postgres","description":"Postgres related issues","color":"8078b0"},"REST API plugin":{"name":"REST API plugin","description":"REST API plugin related issues","color":"8078b0"},"New JS Function":{"name":"New JS Function","description":"Issues related to adding a JS Function","color":"8e8aa4"},"Cannot Reproduce Issue":{"color":"93c9cc","name":"Cannot Reproduce Issue","description":"Issues that cannot be reproduced"},"Widget Grouping":{"name":"Widget Grouping","description":"Issues related to Widget Grouping","color":"a49951"},"K8s":{"name":"K8s","description":"Kubernetes related issues","color":"5f318a"},"Docker":{"name":"Docker","description":"Issues related to docker","color":"89b808"},"Camera Widget":{"name":"Camera Widget","description":"Issues and enhancements related to camera widget","color":"e6038e"},"SAAS Plugins":{"name":"SAAS Plugins","description":"Issues related to SAAS Plugins","color":"ef9c9d"},"JS Promises":{"name":"JS Promises","description":"Issues related to promises","color":"d7771f"},"OnPageLoad":{"name":"OnPageLoad","description":"OnPageLoad issues on functions and queries","color":"50559d"},"Function execution":{"name":"Function execution","description":"JS function execution","color":"a302b0"},"JS Usability":{"name":"JS Usability","description":"usability issues with JS editor and JS elsewhere","color":"a302b0"},"Currency Input Widget":{"name":"Currency Input Widget","description":"Issues related to currency input widget","color":"b2164f"},"TreeSelect":{"name":"TreeSelect","description":"Issues related to TreeSelect Widget","color":"a1633e"},"MultiTree Select Widget":{"name":"MultiTree Select Widget","description":"Issues related to MultiTree Select Widget","color":"a1633e"},"Welcome Screen":{"name":"Welcome Screen","description":"Issues related to the welcome screen","color":"3897be"},"Realtime Commenting":{"color":"a70b86","name":"Realtime Commenting","description":"In-app communication between teams"},"Phone Input Widget":{"name":"Phone Input Widget","description":"Issues related to the Phone Input widget","color":"a70b86"},"JSON Form":{"name":"JSON Form","description":"Issue / features related to the JSON form wiget","color":"46b209"},"All Widgets":{"name":"All Widgets","description":"Issues related to all widgets","color":"972b36"},"V1":{"name":"V1","description":"V1","color":"67ab2e"},"Reflow & Resize":{"name":"Reflow & Resize","description":"All issues related to reflow and resize experience","color":"748a13"},"App Theming":{"name":"App Theming","description":"Items that are related to the App level theming controls epic","color":"8bf430"},"SSO":{"name":"SSO","description":"Issues, requests and enhancements around Single sign-on.","color":"bf019b"},"Multi User Realtime":{"name":"Multi User Realtime","description":"Issues related to multiple users using or editing an application","color":"e7b6ce"},"Templates":{"name":"Templates","description":"Issues related to Templates","color":"c3b541"},"Ready for design":{"name":"Ready for design","description":"this issue is ready for design: it contains clear problem statements and other required information","color":"ebf442"},"Support":{"name":"Support","description":"Issues created by the A-force team to address user queries","color":"1740f3"},"Button Group widget":{"name":"Button Group widget","description":"Issue and enhancements related to the button group widget","color":"f17025"},"GraphQL Plugin":{"name":"GraphQL Plugin","description":"Issues related to GraphQL plugin","color":"8078b0"},"DevOps Pod":{"name":"DevOps Pod","description":"Issues related to devops","color":"d956c7"},"medium":{"name":"medium","description":"Issues that frustrate users due to poor UX","color":"23dfd9"},"ArangoDB":{"name":"ArangoDB","description":"Issues related to arangoDB","color":"8078b0"},"Code Refactoring":{"name":"Code Refactoring","description":"Issues related to code refactoring","color":"76310e"},"Progress bar widget":{"name":"Progress bar widget","description":"To track issues related to progress bar","color":"2d7abf"},"Audio Recorder Widget":{"name":"Audio Recorder Widget","description":"Issues related to Audio Recorder Widget","color":"9accef"},"Airtable":{"name":"Airtable","description":"Issues for Airtable","color":"60885f"},"RBAC":{"name":"RBAC","description":"Issues, requests and enhancements around RBAC.","color":"9211c3"},"Canvas / Grid":{"name":"Canvas / Grid","description":"Issues related to the canvas","color":"16b092"},"Email Config":{"name":"Email Config","description":"Issues related to configuring the email service","color":"2a21d1"},"CURL":{"name":"CURL","description":"Issues related to CURL impor","color":"60885f"},"Canvas Zooms":{"name":"Canvas Zooms","description":"Issues related to zooming the canvas","color":"e6038e"},"business":{"name":"business","description":"Features that will be a part of our business edition","color":"cd59eb"},"Action Pod":{"name":"Action Pod","description":"","color":"ee2e36"},"AutomationGap1":{"color":"a5e07c","name":"AutomationGap1","description":"Issues that needs automated tests"},"A-Force11":{"name":"A-Force11","description":"Issues raised by A-Force team","color":"d667b6"},"A-Force":{"name":"A-Force","description":"Issues raised by A-Force team","color":"274ecc"},"Business Edition":{"name":"Business Edition","description":"Features that will be a part of our business edition","color":"55184d"},"storeValue":{"name":"storeValue","description":"Issues related to the store value function","color":"5d3e66"},"Tests":{"name":"Tests","description":"test item","color":"1c6990"},"DynamoDB":{"name":"DynamoDB","description":"Issues that are related to DynamoDB should have this label","color":"60885f"},"Design System Pod":{"name":"Design System Pod","description":"Design system related issues","color":"6d1c11"},"ABAC":{"color":"e009a5","name":"ABAC","description":"User permissions and access controls"},"Backup & Restore":{"name":"Backup & Restore","description":"Issues related to backup and restore","color":"86874d"},"ads migration":{"name":"ads migration","description":"All issues related to Appsmith design system migration","color":"6d1c11"},"Billing":{"name":"Billing","description":"Billing infrastructure and flows for Business Edition and Trial users","color":"41dd97"},"Datatype issue":{"name":"Datatype issue","description":"Issues that have risen because data types weren't handled","color":"60885f"},"OAuth":{"name":"OAuth","description":"OAuth related bugs or features","color":"60885f"},"Table Widget V2":{"name":"Table Widget V2","description":"Issues related to Table Widget V2","color":"3a7192"},"AST":{"name":"AST","description":"Issues related to maintaining AST logic","color":"418fa4"},"IDE Navigation":{"name":"IDE Navigation","description":"Issues/feature requests related to IDE navigation, and context switching","color":"bc0cba"},"Query performance":{"name":"Query performance","description":"Issues that have to do with lack in performance of query execution","color":"e4d966"},"SAAS Manager App":{"name":"SAAS Manager App","description":"Issues with the SAAS manager app","color":"d427db"},"Twilio":{"name":"Twilio","description":"Issues related to Twilio integration","color":"23ba8d"},"Hubspot":{"name":"Hubspot","description":"Issues related to Hubspot integration","color":"60885f"},"Zendesk":{"name":"Zendesk","description":"Issues related to Zendesk integration","color":"60885f"},"Entity Refactor":{"name":"Entity Refactor","description":"Issues related to refactor logic","color":"418fa4"},"Branding":{"name":"Branding","description":"All issues under branding and whitelabelling appsmith ecosystem","color":"7aaaf1"},"Map Chart Widget":{"name":"Map Chart Widget","description":"Issues related to Map Chart Widgets","color":"c8397f"},"Product Catchup":{"name":"Product Catchup","description":"Issues created in the product catchup","color":"29cd2c"},"Framework Functions":{"name":"Framework Functions","description":"Issues related to internal functions like showAlert(), navigateTo() etc...","color":"c25a09"},"Frontend Libraries Upgrade":{"name":"Frontend Libraries Upgrade","description":"Issues related to frontend libraries upgrade","color":"ede1fc"},"Audit Logs":{"name":"Audit Logs","description":"Audit trails to ensure data security","color":"f3fd62"},"MsSQL":{"name":"MsSQL","description":"Issues related to MsSQL plugin","color":"8078b0"},"Data Platform Pod":{"name":"Data Platform Pod","description":"Issues related to the underlying data platform","color":"3f8c3a"},"Integrations Pod":{"name":"Integrations Pod","description":"Issues related to a specific integration","color":"5dbbb1"},"Datasource Environments":{"name":"Datasource Environments","description":"Issues related to datasource environments","color":"bb7a14"},"Elastic Search":{"name":"Elastic Search","description":"Issues related to the elastic search datasource","color":"8078b0"},"Core Query Execution":{"color":"418fa4","name":"Core Query Execution","description":"Issues related to the execution of all queries"},"Query Management":{"name":"Query Management","description":"Issues related to the CRUD of actions or queries","color":"6a5b42"},"Query Settings":{"name":"Query Settings","description":"Issues related to the settings of all queries","color":"c7da7a"},"Code Editor":{"name":"Code Editor","description":"Issues related to the code editor","color":"4ca16e"},"Query Forms":{"color":"12b253","name":"Query Forms","description":"Isuses related to the query forms"},"JS Objects":{"color":"22962c","name":"JS Objects","description":"Issues related to JS Objects"},"JS Evaluation":{"color":"22962c","name":"JS Evaluation","description":"Issues related to JS evaluation on the platform"},"SmartSubstitution":{"name":"SmartSubstitution","description":"Issues related to Smart substitution of mustache bindings in queries","color":"e4d966"},"Query Generation":{"name":"Query Generation","description":"Issues related to query generation","color":"e4d966"},"Suggested Widgets":{"name":"Suggested Widgets","description":"Issues related to suggesting widgets based on query response","color":"e4d966"},"Page load executions":{"name":"Page load executions","description":"Issues related to page load execution","color":"5696b2"},"Code Scanner Widget":{"name":"Code Scanner Widget","description":"Issues related to code scanner widget","color":"9bc1a0"},"Clean URLs":{"name":"Clean URLs","description":"Issues related to clean URLs epic","color":"112623"},"Widget keyboard accessibility":{"name":"Widget keyboard accessibility","description":"All issues related to keyboard accessibility in widgets","color":"b626fd"},"Connection pool":{"name":"Connection pool","description":"issues to do with connection pooling of various plugins","color":"94fe36"},"List Widget V2":{"name":"List Widget V2","description":"Issues related to the list widget v2","color":"adaaf7"},"Auto Height":{"name":"Auto Height","description":"Issues related to dynamic height of widgets","color":"5149cf"},"cypress_failed_test":{"name":"cypress_failed_test","description":"Cypress failed tests","color":"4745d5"},"ads deduplication ":{"name":"ads deduplication ","description":"Replacing component with ADS components","color":"741fa1"},"Needs validation":{"name":"Needs validation","description":"Needs problem validation before being picked up","color":"66673d"}},"success":true}
\ No newline at end of file
+{"runners":[{"versioning":{"source":"milestones","type":"SemVer"},"prereleaseName":"alpha","issue":{"labels":{"Team Managers Pod":{"conditions":[{"label":"Settings","type":"hasLabel","value":true},{"label":"Git Version Control","type":"hasLabel","value":true},{"label":"Home Page","type":"hasLabel","value":true},{"label":"Import-Export-App","type":"hasLabel","value":true},{"label":"Invite users","type":"hasLabel","value":true},{"label":"Realtime Commenting","type":"hasLabel","value":true},{"label":"SSO","type":"hasLabel","value":true},{"label":"Multi User Realtime","type":"hasLabel","value":true},{"label":"Business Edition","type":"hasLabel","value":true},{"label":"RBAC","type":"hasLabel","value":true},{"label":"ABAC","type":"hasLabel","value":true},{"label":"Billing","type":"hasLabel","value":true},{"label":"Audit Logs","type":"hasLabel","value":true},{"label":"Multitenancy","type":"hasLabel","value":true}],"requires":1},"New Developers Pod":{"conditions":[{"label":"Fork App","type":"hasLabel","value":true},{"label":"Omnibar","type":"hasLabel","value":true},{"label":"Onboarding","type":"hasLabel","value":true},{"label":"Telemetry","type":"hasLabel","value":true},{"label":"Entity Explorer","type":"hasLabel","value":true},{"label":"Generate Page","type":"hasLabel","value":true},{"label":"IDE","type":"hasLabel","value":true},{"label":"In App Comms","type":"hasLabel","value":true},{"label":"Sniping Mode","type":"hasLabel","value":true},{"label":"Design System","type":"hasLabel","value":true},{"label":"Example Apps","type":"hasLabel","value":true},{"label":"i18n","type":"hasLabel","value":true},{"label":"Welcome Screen","type":"hasLabel","value":true},{"label":"Templates","type":"hasLabel","value":true},{"label":"IDE Navigation","type":"hasLabel","value":true},{"label":"Login / Signup","type":"hasLabel","value":true},{"label":"Clean URLs","type":"hasLabel","value":true},{"label":"Embedding Apps","type":"hasLabel","value":true}],"requires":1},"BE Coders Pod":{"conditions":[{"label":"SAAS Plugins","type":"hasLabel","value":true},{"label":"SAAS Manager App","type":"hasLabel","value":true},{"label":"Data Platform Pod","type":"hasLabel","value":true},{"label":"Integrations Pod","type":"hasLabel","value":true}],"requires":1},"FE Coders Pod":{"conditions":[{"label":"JS Linting & Errors","type":"hasLabel","value":true},{"label":"Debugger","type":"hasLabel","value":true},{"label":"JS Snippets","type":"hasLabel","value":true},{"label":"Autocomplete","type":"hasLabel","value":true},{"label":"Evaluated Value","type":"hasLabel","value":true},{"label":"Slash Command","type":"hasLabel","value":true},{"label":"New JS Function","type":"hasLabel","value":true},{"label":"JS Promises","type":"hasLabel","value":true},{"label":"Function execution","type":"hasLabel","value":true},{"label":"JS Usability","type":"hasLabel","value":true},{"label":"Code Refactoring","type":"hasLabel","value":true},{"label":"storeValue","type":"hasLabel","value":true},{"label":"OnPageLoad","type":"hasLabel","value":true},{"label":"Framework Functions","type":"hasLabel","value":true},{"label":"AST","type":"hasLabel","value":true},{"label":"Code Editor","type":"hasLabel","value":true},{"label":"JS Objects","type":"hasLabel","value":true},{"label":"JS Evaluation","type":"hasLabel","value":true}],"requires":1},"App Viewers Pod":{"conditions":[{"label":"Button Widget","type":"hasLabel","value":true},{"label":"Chart Widget","type":"hasLabel","value":true},{"label":"Checkbox Widget","type":"hasLabel","value":true},{"label":"Container Widget","type":"hasLabel","value":true},{"label":"Date Picker Widget","type":"hasLabel","value":true},{"label":"Select Widget","type":"hasLabel","value":true},{"label":"File Picker Widget","type":"hasLabel","value":true},{"label":"Form Widget","type":"hasLabel","value":true},{"label":"Image Widget","type":"hasLabel","value":true},{"label":"Input Widget","type":"hasLabel","value":true},{"label":"List Widget","type":"hasLabel","value":true},{"label":"MultiSelect Widget","type":"hasLabel","value":true},{"label":"Map Widget","type":"hasLabel","value":true},{"label":"Modal Widget","type":"hasLabel","value":true},{"label":"Radio Widget","type":"hasLabel","value":true},{"label":"Rich Text Editor Widget","type":"hasLabel","value":true},{"label":"Tab Widget","type":"hasLabel","value":true},{"label":"Table Widget","type":"hasLabel","value":true},{"label":"Text Widget","type":"hasLabel","value":true},{"label":"Video Widget","type":"hasLabel","value":true},{"label":"iFrame","type":"hasLabel","value":true},{"label":"Menu Button","type":"hasLabel","value":true},{"label":"Rating","type":"hasLabel","value":true},{"label":"Widget Validation","type":"hasLabel","value":true},{"label":"reallabel","type":"hasLabel","value":true},{"label":"New Widget","type":"hasLabel","value":true},{"label":"Switch widget","type":"hasLabel","value":true},{"label":"Widget Styling","type":"hasLabel","value":true},{"label":"Audio Widget","type":"hasLabel","value":true},{"label":"Icon Button Widget","type":"hasLabel","value":true},{"label":"Checkbox Group widget","type":"hasLabel","value":true},{"label":"Stat Box Widget","type":"hasLabel","value":true},{"label":"Voice Recorder Widget","type":"hasLabel","value":true},{"label":"Calendar Widget","type":"hasLabel","value":true},{"label":"Menu Button Widget","type":"hasLabel","value":true},{"label":"Divider Widget","type":"hasLabel","value":true},{"label":"Rating Widget","type":"hasLabel","value":true},{"label":"App Navigation","type":"hasLabel","value":true},{"label":"View Mode","type":"hasLabel","value":true},{"label":"Widget Property","type":"hasLabel","value":true},{"label":"Document Viewer Widget","type":"hasLabel","value":true},{"label":"Radio Group Widget","type":"hasLabel","value":true},{"label":"Currency Input Widget","type":"hasLabel","value":true},{"label":"TreeSelect","type":"hasLabel","value":true},{"label":"MultiTree Select Widget","type":"hasLabel","value":true},{"label":"Phone Input Widget","type":"hasLabel","value":true},{"label":"JSON Form","type":"hasLabel","value":true},{"label":"All Widgets","type":"hasLabel","value":true},{"label":"App Theming","type":"hasLabel","value":true},{"label":"Button Group widget","type":"hasLabel","value":true},{"label":"Progress bar widget","type":"hasLabel","value":true},{"label":"Audio Recorder Widget","type":"hasLabel","value":true},{"label":"Camera Widget","type":"hasLabel","value":true},{"label":"Table Widget V2","type":"hasLabel","value":true},{"label":"Branding","type":"hasLabel","value":true},{"label":"Map Chart Widget","type":"hasLabel","value":true},{"label":"Code Scanner Widget","type":"hasLabel","value":true},{"label":"Widget keyboard accessibility","type":"hasLabel","value":true},{"label":"List Widget V2","type":"hasLabel","value":true},{"label":"Slider Widget","type":"hasLabel","value":true}],"requires":1},"UI Builders Pod":{"conditions":[{"label":"Property Pane","type":"hasLabel","value":true},{"label":"Pages","type":"hasLabel","value":true},{"label":"Copy Paste","type":"hasLabel","value":true},{"label":"Drag & Drop","type":"hasLabel","value":true},{"label":"Undo/Redo","type":"hasLabel","value":true},{"label":"Responsive Viewport","type":"hasLabel","value":true},{"label":"Widgets Pane","type":"hasLabel","value":true},{"label":"UI Performance","type":"hasLabel","value":true},{"label":"Widget Grouping","type":"hasLabel","value":true},{"label":"Reflow & Resize","type":"hasLabel","value":true},{"label":"Canvas / Grid","type":"hasLabel","value":true},{"label":"Canvas Zooms","type":"hasLabel","value":true},{"label":"Frontend Libraries Upgrade","type":"hasLabel","value":true},{"label":"Auto Height","type":"hasLabel","value":true}],"requires":1},"User Education Pod":{"conditions":[{"label":"Content","type":"hasLabel","value":true},{"label":"Documentation","type":"hasLabel","value":true}],"requires":1},"DevOps Pod":{"conditions":[{"label":"Docker","type":"hasLabel","value":true},{"label":"Super Admin","type":"hasLabel","value":true},{"label":"Deployment","type":"hasLabel","value":true},{"label":"K8s","type":"hasLabel","value":true},{"label":"Email Config","type":"hasLabel","value":true},{"label":"Backup & Restore","type":"hasLabel","value":true}],"requires":1},"Design System Pod":{"conditions":[{"label":"Design System Pod","type":"hasLabel","value":true},{"label":"ads migration","type":"hasLabel","value":true},{"label":"ads deduplication ","type":"hasLabel","value":true},{"label":"ads revamp","type":"hasLabel","value":true},{"label":"ads deduplication","type":"hasLabel","value":true},{"label":"ads grayscale","type":"hasLabel","value":true}],"requires":1},"Data Platform Pod":{"conditions":[{"label":"Datasource Environments","type":"hasLabel","value":true},{"label":"Datatype issue","type":"hasLabel","value":true},{"label":"Entity Refactor","type":"hasLabel","value":true},{"label":"Core Query Execution","type":"hasLabel","value":true},{"label":"Query Management","type":"hasLabel","value":true},{"label":"Query Settings","type":"hasLabel","value":true},{"label":"SmartSubstitution","type":"hasLabel","value":true},{"label":"Query Generation","type":"hasLabel","value":true},{"label":"Query performance","type":"hasLabel","value":true},{"label":"Suggested Widgets","type":"hasLabel","value":true},{"label":"Page load executions","type":"hasLabel","value":true}],"requires":1},"Integrations Pod":{"conditions":[{"label":"New Datasource","type":"hasLabel","value":true},{"label":"Firestore","type":"hasLabel","value":true},{"label":"Google Sheets","type":"hasLabel","value":true},{"label":"Mongo","type":"hasLabel","value":true},{"label":"Redshift","type":"hasLabel","value":true},{"label":"snowflake","type":"hasLabel","value":true},{"label":"S3","type":"hasLabel","value":true},{"label":"Redis","type":"hasLabel","value":true},{"label":"Postgres","type":"hasLabel","value":true},{"label":"GraphQL Plugin","type":"hasLabel","value":true},{"label":"ArangoDB","type":"hasLabel","value":true},{"label":"MsSQL","type":"hasLabel","value":true},{"label":"REST API plugin","type":"hasLabel","value":true},{"label":"Elastic Search","type":"hasLabel","value":true},{"label":"OAuth","type":"hasLabel","value":true},{"label":"Airtable","type":"hasLabel","value":true},{"label":"CURL","type":"hasLabel","value":true},{"label":"DynamoDB","type":"hasLabel","value":true},{"label":"Zendesk","type":"hasLabel","value":true},{"label":"Hubspot","type":"hasLabel","value":true},{"label":"Query Forms","type":"hasLabel","value":true},{"label":"Twilio","type":"hasLabel","value":true},{"label":"MySQL","type":"hasLabel","value":true},{"label":"Connection pool","type":"hasLabel","value":true},{"label":"Datasources","type":"hasLabel","value":true}],"requires":1}}},"root":"."}],"labels":{"Tab Widget":{"color":"e2c76c","name":"Tab Widget","description":""},"Dont merge":{"color":"ADB39C","name":"Dont merge","description":""},"Epic":{"color":"3E4B9E","name":"Epic","description":"A zenhub epic that describes a project"},"Menu Button Widget":{"color":"235708","name":"Menu Button Widget","description":"Issues related to Menu Button widget"},"Checkbox Group widget":{"color":"D2ACD2","name":"Checkbox Group widget","description":"Issues related to Checkbox Group Widget"},"Input Widget":{"color":"ae65d8","name":"Input Widget","description":""},"Security":{"color":"99139C","name":"Security","description":""},"QA":{"color":"e2ca68","name":"QA","description":""},"Verified":{"color":"9bf416","name":"Verified","description":""},"Wont Fix":{"color":"ffffff","name":"Wont Fix","description":"This will not be worked on"},"MySQL":{"color":"c9ddc6","name":"MySQL","description":"Issues related to MySQL plugin"},"Development":{"color":"9F8A02","name":"Development","description":""},"Help Wanted":{"color":"008672","name":"Help Wanted","description":"Extra attention is needed"},"Home Page":{"color":"9c0c8e","name":"Home Page","description":"Issues related to the application home page"},"Rating Widget":{"color":"235708","name":"Rating Widget","description":"Issues related to the rating widget"},"Stat Box Widget":{"color":"f1c9ce","name":"Stat Box Widget","description":"Issues related to stat box"},"Enhancement":{"color":"a2eeef","name":"Enhancement","description":"New feature or request"},"Settings":{"color":"f7ff60","name":"Settings","description":"organization, team & user settings"},"Fork App":{"color":"5369db","name":"Fork App","description":"Issues related to forking apps"},"Container Widget":{"color":"19AD0D","name":"Container Widget","description":"Container widget"},"Papercut":{"color":"B562F6","name":"Papercut","description":""},"community":{"color":"dded34","name":"community","description":"issues reported by community members"},"Needs Design":{"color":"bfd4f2","name":"Needs Design","description":"needs design or changes to design"},"i18n":{"color":"1799b0","name":"i18n","description":"Represents issues that need to be tackled to handle internationalization"},"Rich Text Editor Widget":{"color":"f72cac","name":"Rich Text Editor Widget","description":""},"Onboarding":{"color":"d5794b","name":"Onboarding","description":"Issues related to onboarding new developers"},"Pages":{"color":"d7fd80","name":"Pages","description":"Issues related to configuring pages"},"skip-changelog":{"color":"06086F","name":"skip-changelog","description":"Adding this label to a PR prevents it from being listed in the changelog"},"Low":{"color":"79e53b","name":"Low","description":"An issue that is neither critical nor breaks a user flow"},"potential-duplicate":{"color":"d3cb2e","name":"potential-duplicate","description":"This label marks issues that are potential duplicates of already open issues"},"Audio Widget":{"color":"447B9A","name":"Audio Widget","description":"Issues related to Audio Widget"},"Firestore":{"color":"8078b0","name":"Firestore","description":"Issues related to the firestore Integration"},"New Widget":{"color":"be4cf2","name":"New Widget","description":"A request for a new widget"},"Performance":{"color":"d30e53","name":"Performance","description":"Page Load and evaluations"},"Modal Widget":{"color":"03846f","name":"Modal Widget","description":""},"UX Improvement":{"color":"f4a089","name":"UX Improvement","description":""},"S3":{"color":"8078b0","name":"S3","description":"Issues related to the S3 plugin"},"Release Blocker":{"color":"5756bf","name":"Release Blocker","description":"This issue must be resolved before the release"},"safari":{"color":"51C6AA","name":"safari","description":"Bugs seen on safari browser"},"Example Apps":{"color":"1799b0","name":"Example Apps","description":"Example apps created for new signups"},"MultiSelect Widget":{"color":"AB62D4","name":"MultiSelect Widget","description":"Issues related to MultiSelect Widget"},"Widget Styling":{"color":"37EA75","name":"Widget Styling","description":"all about widget styling"},"Calendar Widget":{"color":"8c6644","name":"Calendar Widget","description":""},"Website":{"color":"151720","name":"Website","description":"Related to www.appsmith.com website"},"Low effort":{"color":"8B59F0","name":"Low effort","description":"Something that'll take a few days to build"},"App Viewers Pod":{"color":"cd8ef9","name":"App Viewers Pod","description":"This label assigns issues to the app viewers pod"},"Checkbox Widget":{"color":"074ac6","name":"Checkbox Widget","description":""},"Spam":{"color":"620faf","name":"Spam","description":""},"Voice Recorder Widget":{"color":"85bc87","name":"Voice Recorder Widget","description":""},"Select Widget":{"color":"0c669e","name":"Select Widget","description":"Select or dropdown widget"},"Bug":{"color":"d73a4a","name":"Bug","description":"Something isn't working"},"Widget Validation":{"color":"6990BC","name":"Widget Validation","description":"Issues related to widget property validation"},"Generate Page":{"color":"f14274","name":"Generate Page","description":"Issures related to page generation"},"File Picker Widget":{"color":"6ae4f2","name":"File Picker Widget","description":""},"snowflake":{"color":"8078b0","name":"snowflake","description":"Issues related to the snowflake Integration"},"Automation":{"color":"CCAF60","name":"Automation","description":""},"hotfix":{"color":"BA3F1D","name":"hotfix","description":""},"Team Managers Pod":{"color":"bddb81","name":"Team Managers Pod","description":"Issues that team managers care about for the security and efficiency of their teams"},"Import-Export-App":{"color":"a7768a","name":"Import-Export-App","description":"Issues related to importing and exporting apps"},"High effort":{"color":"A7E87B","name":"High effort","description":"Something that'll take more than a month to build"},"Telemetry":{"color":"bc70f9","name":"Telemetry","description":"Issues related to instrumenting appsmith"},"Radio Widget":{"color":"91ef15","name":"Radio Widget","description":""},"Omnibar":{"color":"10b5ce","name":"Omnibar","description":"Issues related to the omnibar for navigation"},"Button Widget":{"color":"34efae","name":"Button Widget","description":""},"Switch widget":{"color":"33A8CE","name":"Switch widget","description":"The switch widget"},"Map Widget":{"color":"7eef7a","name":"Map Widget","description":""},"Task":{"color":"085630","name":"Task","description":"A simple Todo"},"Design System":{"color":"12b715","name":"Design System","description":"Design system"},"opera":{"color":"C63F5B","name":"opera","description":"Any issues identified on the opera browser"},"Login / Signup":{"color":"771e69","name":"Login / Signup","description":"Authentication flows"},"Image Widget":{"color":"8de8ad","name":"Image Widget","description":""},"firefox":{"color":"6d56e2","name":"firefox","description":""},"Property Pane":{"color":"b356ff","name":"Property Pane","description":"Issues related to the behaviour of the property pane"},"Deployment":{"color":"93491f","name":"Deployment","description":"Installation process of appsmith"},"Critical":{"color":"9b1b28","name":"Critical","description":"This issue needs immediate attention. Drop everything else"},"IDE":{"color":"61b2ee","name":"IDE","description":"Issues related to the IDE"},"Production":{"color":"b60205","name":"Production","description":""},"Dependencies":{"color":"0366d6","name":"Dependencies","description":"Pull requests that update a dependency file"},"Google Sheets":{"color":"8078b0","name":"Google Sheets","description":"Issues related to Google Sheets"},"Icon Button Widget":{"color":"D319CE","name":"Icon Button Widget","description":"Issues related to the icon button widget"},"Mongo":{"color":"8078b0","name":"Mongo","description":"Issues related to Mongo DB plugin"},"Documentation":{"color":"a8dff7","name":"Documentation","description":"Improvements or additions to documentation"},"TestGap":{"color":"f28253","name":"TestGap","description":"Issues identified for test plan improvement"},"keyboard shortcut":{"color":"0688B6","name":"keyboard shortcut","description":""},"Git Version Control":{"color":"C4568E","name":"Git Version Control","description":"Issues related to version control"},"Reopen":{"color":"897548","name":"Reopen","description":""},"Redshift":{"color":"8078b0","name":"Redshift","description":"Issues related to the redshift integration"},"Date Picker Widget":{"color":"ef1ce1","name":"Date Picker Widget","description":""},"Entity Explorer":{"color":"a2e2f9","name":"Entity Explorer","description":"Issues related to navigation using the entity explorer"},"JS Linting & Errors":{"color":"E56AA5","name":"JS Linting & Errors","description":"Issues related to JS Linting and errors"},"iFrame":{"color":"3CD1DB","name":"iFrame","description":"Issues related to iFrame"},"Stale":{"color":"ededed","name":"Stale","description":null},"Debugger":{"color":"e79062","name":"Debugger","description":"Issues related to the debugger"},"Quick effort":{"color":"95ED65","name":"Quick effort","description":"Something that'll take a few hours to build"},"Text Widget":{"color":"d130d1","name":"Text Widget","description":""},"Video Widget":{"color":"23dd4b","name":"Video Widget","description":""},"Datasources":{"color":"2cc0d4","name":"Datasources","description":"Issues related to configuring datasource on appsmith"},"error":{"color":"B66773","name":"error","description":"All issues connected to error messages"},"Form Widget":{"color":"09ed77","name":"Form Widget","description":""},"Needs Triaging":{"color":"e8b851","name":"Needs Triaging","description":"Needs attention from maintainers to triage"},"Autocomplete":{"color":"235708","name":"Autocomplete","description":"Issues related to the autocomplete"},"hacktoberfest":{"color":"0052cc","name":"hacktoberfest","description":"All issues that can be solved by the community during Hacktoberfest"},"Medium effort":{"color":"D31156","name":"Medium effort","description":"Something that'll take more than a week but less than a month to build"},"Release":{"color":"57e5e0","name":"Release","description":""},"High":{"color":"c94d14","name":"High","description":"This issue blocks a user from building or impacts a lot of users"},"UI Performance":{"color":"1799b0","name":"UI Performance","description":"Issues related to UI performance"},"UI Builders Pod":{"color":"517fba","name":"UI Builders Pod","description":"Issues that UI Builders face using appsmith"},"Deploy Preview":{"color":"bfdadc","name":"Deploy Preview","description":"Issues found in Deploy Preview"},"Needs Tests":{"color":"8ee263","name":"Needs Tests","description":"Needs automated tests to assert a feature/bug fix"},"Refactor":{"color":"B96662","name":"Refactor","description":"needs refactoring of code"},"Divider Widget":{"color":"235708","name":"Divider Widget","description":"Issues related to the divider widget"},"Table Widget":{"color":"2eead1","name":"Table Widget","description":""},"Needs More Info":{"color":"e54c10","name":"Needs More Info","description":"Needs additional information"},"Good First Issue":{"color":"7057ff","name":"Good First Issue","description":"Good for newcomers"},"UI Improvement":{"color":"9aeef4","name":"UI Improvement","description":""},"Backend":{"color":"d4c5f9","name":"Backend","description":"This marks the issue or pull request to reference server code"},"Frontend":{"color":"87c7f2","name":"Frontend","description":"This label marks the issue or pull request to reference client code"},"In App Comms":{"color":"9168f4","name":"In App Comms","description":"Issues around communication with appsmith instances"},"Chart Widget":{"color":"616ecc","name":"Chart Widget","description":""},"regression":{"color":"ffe5bc","name":"regression","description":""},"List Widget":{"color":"8508A0","name":"List Widget","description":"Issues related to the list widget"},"Duplicate":{"color":"cfd3d7","name":"Duplicate","description":"This issue or pull request already exists"},"JS Snippets":{"color":"8d62d2","name":"JS Snippets","description":"issues related to JS Snippets"},"Copy Paste":{"name":"Copy Paste","description":"Issues related to copy paste","color":"b4f0a9"},"Drag & Drop":{"name":"Drag & Drop","description":"Issues related to the drag & drop experience","color":"92115a"},"BE Coders Pod":{"color":"5d9848","name":"BE Coders Pod","description":"Issues related to users writing code to fetch and update data"},"FE Coders Pod":{"color":"a7effc","name":"FE Coders Pod","description":"Issues related to users writing javascript in appsmith"},"New Developers Pod":{"color":"6310da","name":"New Developers Pod","description":"Issues that new developers face while exploring the IDE"},"Sniping Mode":{"name":"Sniping Mode","description":"Issues related to sniping mode","color":"6310da"},"Redis":{"name":"Redis","description":"Issues related to Redis","color":"8078b0"},"New Datasource":{"color":"60b14c","name":"New Datasource","description":"Requests for new datasources"},"Evaluated Value":{"name":"Evaluated Value","description":"Issues related to evaluated values","color":"39f6e7"},"Undo/Redo":{"name":"Undo/Redo","description":"Issues related to undo/redo","color":"f25880"},"App Navigation":{"name":"App Navigation","description":"Issues related to the topbar navigation and configuring it","color":"12b715"},"Responsive Viewport":{"color":"12b715","name":"Responsive Viewport","description":"Issues seen on different viewports like mobile"},"Widgets Pane":{"name":"Widgets Pane","description":"Issues related to the discovery and organisation of widgets","color":"ad5d78"},"Invite users":{"color":"1799b0","name":"Invite users","description":"Invite users flow and any associated actions"},"View Mode":{"color":"1799b0","name":"View Mode","description":"Issues related to the view mode"},"User Education Pod":{"name":"User Education Pod","description":"Issues related to user education","color":"1799b0"},"Content":{"name":"Content","description":"For content related topics i.e blogs, templates, videos","color":"a8dff7"},"Embedding Apps":{"name":"Embedding Apps","description":"Issues related to embedding","color":"26ef4f"},"Slash Command":{"name":"Slash Command","description":"Issues related to the slash command","color":"a0608e"},"Widget Property":{"name":"Widget Property","description":"Issues related to adding / modifying widget properties across widgets","color":"5e92cb"},"Windows":{"name":"Windows","description":"Issues related exclusively to Windows systems","color":"b4cb8a"},"Old App Issues":{"name":"Old App Issues","description":"Issues related to apps old apps a few weeks old and app issues in stale browser session","color":"87ab18"},"Document Viewer Widget":{"name":"Document Viewer Widget","description":"Issues related to Document Viewer Widget","color":"899d4b"},"Radio Group Widget":{"name":"Radio Group Widget","description":"Issues related to radio group widget","color":"b68495"},"Super Admin":{"name":"Super Admin","description":"Issues related to the super admin page","color":"aa95cf"},"Postgres":{"name":"Postgres","description":"Postgres related issues","color":"8078b0"},"REST API plugin":{"name":"REST API plugin","description":"REST API plugin related issues","color":"8078b0"},"New JS Function":{"name":"New JS Function","description":"Issues related to adding a JS Function","color":"8e8aa4"},"Cannot Reproduce Issue":{"color":"93c9cc","name":"Cannot Reproduce Issue","description":"Issues that cannot be reproduced"},"Widget Grouping":{"name":"Widget Grouping","description":"Issues related to Widget Grouping","color":"a49951"},"K8s":{"name":"K8s","description":"Kubernetes related issues","color":"5f318a"},"Docker":{"name":"Docker","description":"Issues related to docker","color":"89b808"},"Camera Widget":{"name":"Camera Widget","description":"Issues and enhancements related to camera widget","color":"e6038e"},"SAAS Plugins":{"name":"SAAS Plugins","description":"Issues related to SAAS Plugins","color":"ef9c9d"},"JS Promises":{"name":"JS Promises","description":"Issues related to promises","color":"d7771f"},"OnPageLoad":{"name":"OnPageLoad","description":"OnPageLoad issues on functions and queries","color":"50559d"},"Function execution":{"name":"Function execution","description":"JS function execution","color":"a302b0"},"JS Usability":{"name":"JS Usability","description":"usability issues with JS editor and JS elsewhere","color":"a302b0"},"Currency Input Widget":{"name":"Currency Input Widget","description":"Issues related to currency input widget","color":"b2164f"},"TreeSelect":{"name":"TreeSelect","description":"Issues related to TreeSelect Widget","color":"a1633e"},"MultiTree Select Widget":{"name":"MultiTree Select Widget","description":"Issues related to MultiTree Select Widget","color":"a1633e"},"Welcome Screen":{"name":"Welcome Screen","description":"Issues related to the welcome screen","color":"3897be"},"Realtime Commenting":{"color":"a70b86","name":"Realtime Commenting","description":"In-app communication between teams"},"Phone Input Widget":{"name":"Phone Input Widget","description":"Issues related to the Phone Input widget","color":"a70b86"},"JSON Form":{"name":"JSON Form","description":"Issue / features related to the JSON form wiget","color":"46b209"},"All Widgets":{"name":"All Widgets","description":"Issues related to all widgets","color":"972b36"},"V1":{"name":"V1","description":"V1","color":"67ab2e"},"Reflow & Resize":{"name":"Reflow & Resize","description":"All issues related to reflow and resize experience","color":"748a13"},"App Theming":{"name":"App Theming","description":"Items that are related to the App level theming controls epic","color":"8bf430"},"SSO":{"name":"SSO","description":"Issues, requests and enhancements around Single sign-on.","color":"bf019b"},"Multi User Realtime":{"name":"Multi User Realtime","description":"Issues related to multiple users using or editing an application","color":"e7b6ce"},"Templates":{"name":"Templates","description":"Issues related to Templates","color":"c3b541"},"Ready for design":{"name":"Ready for design","description":"this issue is ready for design: it contains clear problem statements and other required information","color":"ebf442"},"Support":{"name":"Support","description":"Issues created by the A-force team to address user queries","color":"1740f3"},"Button Group widget":{"name":"Button Group widget","description":"Issue and enhancements related to the button group widget","color":"f17025"},"GraphQL Plugin":{"name":"GraphQL Plugin","description":"Issues related to GraphQL plugin","color":"8078b0"},"DevOps Pod":{"name":"DevOps Pod","description":"Issues related to devops","color":"d956c7"},"medium":{"name":"medium","description":"Issues that frustrate users due to poor UX","color":"23dfd9"},"ArangoDB":{"name":"ArangoDB","description":"Issues related to arangoDB","color":"8078b0"},"Code Refactoring":{"name":"Code Refactoring","description":"Issues related to code refactoring","color":"76310e"},"Progress bar widget":{"name":"Progress bar widget","description":"To track issues related to progress bar","color":"2d7abf"},"Audio Recorder Widget":{"name":"Audio Recorder Widget","description":"Issues related to Audio Recorder Widget","color":"9accef"},"Airtable":{"name":"Airtable","description":"Issues for Airtable","color":"60885f"},"RBAC":{"name":"RBAC","description":"Issues, requests and enhancements around RBAC.","color":"9211c3"},"Canvas / Grid":{"name":"Canvas / Grid","description":"Issues related to the canvas","color":"16b092"},"Email Config":{"name":"Email Config","description":"Issues related to configuring the email service","color":"2a21d1"},"CURL":{"name":"CURL","description":"Issues related to CURL impor","color":"60885f"},"Canvas Zooms":{"name":"Canvas Zooms","description":"Issues related to zooming the canvas","color":"e6038e"},"business":{"name":"business","description":"Features that will be a part of our business edition","color":"cd59eb"},"Action Pod":{"name":"Action Pod","description":"","color":"ee2e36"},"AutomationGap1":{"color":"a5e07c","name":"AutomationGap1","description":"Issues that needs automated tests"},"A-Force11":{"name":"A-Force11","description":"Issues raised by A-Force team","color":"d667b6"},"A-Force":{"name":"A-Force","description":"Issues raised by A-Force team","color":"274ecc"},"Business Edition":{"name":"Business Edition","description":"Features that will be a part of our business edition","color":"55184d"},"storeValue":{"name":"storeValue","description":"Issues related to the store value function","color":"5d3e66"},"Tests":{"name":"Tests","description":"test item","color":"1c6990"},"DynamoDB":{"name":"DynamoDB","description":"Issues that are related to DynamoDB should have this label","color":"60885f"},"Design System Pod":{"name":"Design System Pod","description":"Design system related issues","color":"6d1c11"},"ABAC":{"color":"e009a5","name":"ABAC","description":"User permissions and access controls"},"Backup & Restore":{"name":"Backup & Restore","description":"Issues related to backup and restore","color":"86874d"},"ads migration":{"name":"ads migration","description":"All issues related to Appsmith design system migration","color":"6d1c11"},"Billing":{"name":"Billing","description":"Billing infrastructure and flows for Business Edition and Trial users","color":"41dd97"},"Datatype issue":{"name":"Datatype issue","description":"Issues that have risen because data types weren't handled","color":"60885f"},"OAuth":{"name":"OAuth","description":"OAuth related bugs or features","color":"60885f"},"Table Widget V2":{"name":"Table Widget V2","description":"Issues related to Table Widget V2","color":"3a7192"},"AST":{"name":"AST","description":"Issues related to maintaining AST logic","color":"418fa4"},"IDE Navigation":{"name":"IDE Navigation","description":"Issues/feature requests related to IDE navigation, and context switching","color":"bc0cba"},"Query performance":{"name":"Query performance","description":"Issues that have to do with lack in performance of query execution","color":"e4d966"},"SAAS Manager App":{"name":"SAAS Manager App","description":"Issues with the SAAS manager app","color":"d427db"},"Twilio":{"name":"Twilio","description":"Issues related to Twilio integration","color":"23ba8d"},"Hubspot":{"name":"Hubspot","description":"Issues related to Hubspot integration","color":"60885f"},"Zendesk":{"name":"Zendesk","description":"Issues related to Zendesk integration","color":"60885f"},"Entity Refactor":{"name":"Entity Refactor","description":"Issues related to refactor logic","color":"418fa4"},"Branding":{"name":"Branding","description":"All issues under branding and whitelabelling appsmith ecosystem","color":"7aaaf1"},"Map Chart Widget":{"name":"Map Chart Widget","description":"Issues related to Map Chart Widgets","color":"c8397f"},"Product Catchup":{"name":"Product Catchup","description":"Issues created in the product catchup","color":"29cd2c"},"Framework Functions":{"name":"Framework Functions","description":"Issues related to internal functions like showAlert(), navigateTo() etc...","color":"c25a09"},"Frontend Libraries Upgrade":{"name":"Frontend Libraries Upgrade","description":"Issues related to frontend libraries upgrade","color":"ede1fc"},"Audit Logs":{"name":"Audit Logs","description":"Audit trails to ensure data security","color":"f3fd62"},"MsSQL":{"name":"MsSQL","description":"Issues related to MsSQL plugin","color":"8078b0"},"Data Platform Pod":{"name":"Data Platform Pod","description":"Issues related to the underlying data platform","color":"3f8c3a"},"Integrations Pod":{"name":"Integrations Pod","description":"Issues related to a specific integration","color":"5dbbb1"},"Datasource Environments":{"name":"Datasource Environments","description":"Issues related to datasource environments","color":"bb7a14"},"Elastic Search":{"name":"Elastic Search","description":"Issues related to the elastic search datasource","color":"8078b0"},"Core Query Execution":{"color":"418fa4","name":"Core Query Execution","description":"Issues related to the execution of all queries"},"Query Management":{"name":"Query Management","description":"Issues related to the CRUD of actions or queries","color":"6a5b42"},"Query Settings":{"name":"Query Settings","description":"Issues related to the settings of all queries","color":"c7da7a"},"Code Editor":{"name":"Code Editor","description":"Issues related to the code editor","color":"4ca16e"},"Query Forms":{"color":"12b253","name":"Query Forms","description":"Isuses related to the query forms"},"JS Objects":{"color":"22962c","name":"JS Objects","description":"Issues related to JS Objects"},"JS Evaluation":{"color":"22962c","name":"JS Evaluation","description":"Issues related to JS evaluation on the platform"},"SmartSubstitution":{"name":"SmartSubstitution","description":"Issues related to Smart substitution of mustache bindings in queries","color":"e4d966"},"Query Generation":{"name":"Query Generation","description":"Issues related to query generation","color":"e4d966"},"Suggested Widgets":{"name":"Suggested Widgets","description":"Issues related to suggesting widgets based on query response","color":"e4d966"},"Page load executions":{"name":"Page load executions","description":"Issues related to page load execution","color":"5696b2"},"Code Scanner Widget":{"name":"Code Scanner Widget","description":"Issues related to code scanner widget","color":"9bc1a0"},"Clean URLs":{"name":"Clean URLs","description":"Issues related to clean URLs epic","color":"112623"},"Widget keyboard accessibility":{"name":"Widget keyboard accessibility","description":"All issues related to keyboard accessibility in widgets","color":"b626fd"},"Connection pool":{"name":"Connection pool","description":"issues to do with connection pooling of various plugins","color":"94fe36"},"List Widget V2":{"name":"List Widget V2","description":"Issues related to the list widget v2","color":"adaaf7"},"Auto Height":{"name":"Auto Height","description":"Issues related to dynamic height of widgets","color":"5149cf"},"cypress_failed_test":{"name":"cypress_failed_test","description":"Cypress failed tests","color":"4745d5"},"ads deduplication ":{"name":"ads deduplication ","description":"Replacing component with ADS components","color":"741fa1"},"Needs validation":{"name":"Needs validation","description":"Needs problem validation before being picked up","color":"66673d"},"ads grayscale":{"name":"ads grayscale","description":"Support grayscale color changes","color":"66670c"},"ads revamp":{"name":"ads revamp","description":"All issues related to ads revamp. ","color":"6e41a2"},"ads deduplication":{"name":"ads deduplication","description":"Replacing component with ADS components","color":"7171b8"},"Slider Widget":{"name":"Slider Widget","description":"Issues raised for slider widgets.","color":"2eef5f"},"Multitenancy":{"name":"Multitenancy","description":"Support multitenancy within single appsmith instance","color":"8c49a9"}},"success":true}
\ No newline at end of file
diff --git a/.github/workflows/fat-migration.yml b/.github/workflows/fat-migration.yml
index 2f612d31be..ee7ceedc8c 100644
--- a/.github/workflows/fat-migration.yml
+++ b/.github/workflows/fat-migration.yml
@@ -218,11 +218,12 @@ jobs:
run: echo "I'm alive!" && exit 0
# Setup Java
- - name: Set up JDK 1.11
+ - name: Set up JDK 17
if: steps.run_result.outputs.run_result != 'success'
- uses: actions/setup-java@v1
+ uses: actions/setup-java@v3
with:
- java-version: "11.0.10"
+ distribution: 'temurin'
+ java-version: '17'
# Retrieve maven dependencies from cache. After a successful run, these dependencies are cached again
- name: Cache maven dependencies
@@ -485,11 +486,12 @@ jobs:
run: echo ${{ steps.run_result.outputs.run_result }}
# Setup Java
- - name: Set up JDK 1.11
+ - name: Set up JDK 17
if: steps.run_result.outputs.run_result != 'success'
- uses: actions/setup-java@v1
+ uses: actions/setup-java@v3
with:
- java-version: "11.0.10"
+ distribution: 'temurin'
+ java-version: '17'
- name: Download the react build artifact
uses: actions/download-artifact@v2
diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml
index bf00b365e5..440cfb7232 100644
--- a/.github/workflows/github-release.yml
+++ b/.github/workflows/github-release.yml
@@ -114,11 +114,11 @@ jobs:
with:
fetch-depth: 0
- - name: Set up JDK 1.11
+ - name: Set up JDK 17
uses: actions/setup-java@v3
with:
- java-version: "11.0.10"
- distribution: adopt
+ distribution: 'temurin'
+ java-version: '17'
# Retrieve maven dependencies from cache. After a successful run, these dependencies are cached again
- name: Cache maven dependencies
diff --git a/.github/workflows/integration-tests-command.yml b/.github/workflows/integration-tests-command.yml
index 1e25b2514c..ece7112df8 100644
--- a/.github/workflows/integration-tests-command.yml
+++ b/.github/workflows/integration-tests-command.yml
@@ -151,12 +151,12 @@ jobs:
run: echo ${{ steps.run_result.outputs.run_result }}
# Setup Java
- - name: Set up JDK 1.11
+ - name: Set up JDK 17
if: steps.run_result.outputs.run_result != 'success'
uses: actions/setup-java@v3
with:
- java-version: "11.0.10"
- distribution: adopt
+ distribution: 'temurin'
+ java-version: '17'
- name: Download the client build artifact
uses: actions/download-artifact@v3
@@ -226,6 +226,7 @@ jobs:
-v "$PWD/stacks:/appsmith-stacks" -e APPSMITH_LICENSE_KEY=$APPSMITH_LICENSE_KEY \
-e APPSMITH_AUDITLOG_ENABLED=true \
-e APPSMITH_CLOUD_SERVICES_BASE_URL=http://host.docker.internal:5001 \
+ --add-host=host.docker.internal:host-gateway \
fatcontainer
- name: Use Node.js 16.14.0
@@ -585,6 +586,13 @@ jobs:
if: steps.run_result.outputs.run_result != 'success'
run: yarn install --frozen-lockfile
+ # Setup Java
+ - name: Set up JDK 17
+ uses: actions/setup-java@v3
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+
- name: Download the react build artifact
if: steps.run_result.outputs.run_result != 'success'
uses: actions/download-artifact@v3
diff --git a/.github/workflows/label-checker.yml b/.github/workflows/label-checker.yml
index f2fab9a88d..6b03792d46 100644
--- a/.github/workflows/label-checker.yml
+++ b/.github/workflows/label-checker.yml
@@ -19,5 +19,5 @@ jobs:
- uses: docker://agilepathway/pull-request-label-checker:latest
with:
# Needs to have a Test Plan Approved label if not part of any of the pods below
- any_of: Test Plan Approved,App Viewers Pod,User Education Pod,New Developers Pod,Team Managers Pod,UI Builders Pod,Performance,Release Promotion,CI,Design System Pod,DevOps Pod,skip-testPlan
+ any_of: Test Plan Approved,User Education Pod,DevOps Pod,Performance,CI,Release Promotion,skip-testPlan
repo_token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/perf-test.yml b/.github/workflows/perf-test.yml
index 750985e8fc..d46d43a265 100644
--- a/.github/workflows/perf-test.yml
+++ b/.github/workflows/perf-test.yml
@@ -121,6 +121,14 @@ jobs:
if: steps.run_result.outputs.run_result != 'success'
run: yarn install --frozen-lockfile
+ # Setup Java
+ - name: Set up JDK 17
+ if: steps.run_result.outputs.run_result != 'success'
+ uses: actions/setup-java@v3
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+
- name: Download the react build artifact
if: steps.run_result.outputs.run_result != 'success'
uses: actions/download-artifact@v3
diff --git a/.github/workflows/server-build.yml b/.github/workflows/server-build.yml
index e43e1477b8..aab50f0a98 100644
--- a/.github/workflows/server-build.yml
+++ b/.github/workflows/server-build.yml
@@ -85,12 +85,12 @@ jobs:
run: echo "I'm alive!" && exit 0
# Setup Java
- - name: Set up JDK 1.11
+ - name: Set up JDK 17
if: steps.run_result.outputs.run_result != 'success'
uses: actions/setup-java@v3
with:
- java-version: "11.0.10"
- distribution: adopt
+ distribution: 'temurin'
+ java-version: '17'
# Retrieve maven dependencies from cache. After a successful run, these dependencies are cached again
- name: Cache maven dependencies
@@ -125,6 +125,7 @@ jobs:
- name: Build and test
if: steps.run_result.outputs.run_result != 'success'
env:
+ ACTIVE_PROFILE: test
APPSMITH_MONGODB_URI: "mongodb://localhost:27017/mobtools"
APPSMITH_CLOUD_SERVICES_BASE_URL: "https://release-cs.appsmith.com"
APPSMITH_REDIS_URL: "redis://127.0.0.1:6379"
diff --git a/.github/workflows/test-build-docker-image.yml b/.github/workflows/test-build-docker-image.yml
index 643f7e0191..38301b0b20 100644
--- a/.github/workflows/test-build-docker-image.yml
+++ b/.github/workflows/test-build-docker-image.yml
@@ -227,12 +227,12 @@ jobs:
run: echo "I'm alive!" && exit 0
# Setup Java
- - name: Set up JDK 1.11
+ - name: Set up JDK 17
if: steps.run_result.outputs.run_result != 'success'
uses: actions/setup-java@v3
with:
- java-version: "11.0.10"
- distribution: adopt
+ distribution: 'temurin'
+ java-version: '17'
# Retrieve maven dependencies from cache. After a successful run, these dependencies are cached again
- name: Cache maven dependencies
@@ -399,15 +399,235 @@ jobs:
- name: Save the status of the run
run: echo "run_result=success" >> $GITHUB_OUTPUT > ~/run_result
+
perf-test:
needs: [buildClient, buildServer, buildRts]
+
# Only run if the build step is successful
if: success()
- name: perf-test
- uses: ./.github/workflows/perf-test.yml
- secrets: inherit
- with:
- pr: ${{ github.event.client_payload.pull_request.number }}
+ runs-on: ubuntu-latest-4-cores
+
+ defaults:
+ run:
+ working-directory: app/client
+ shell: bash
+
+ # Service containers to run with this job. Required for running tests
+ services:
+ # Label used to access the service container
+ redis:
+ # Docker Hub image for Redis
+ image: redis
+ ports:
+ # Opens tcp port 6379 on the host and service container
+ - 6379:6379
+ mongo:
+ image: mongo
+ ports:
+ - 27017:27017
+ steps:
+ - name: Checkout the merged commit from PR and base branch
+ if: github.event_name == 'pull_request_review'
+ uses: actions/checkout@v3
+ with:
+ ref: refs/pull/${{ github.event.pull_request.number }}/merge
+
+ - name: Checkout the head commit of the branch
+ if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
+ uses: actions/checkout@v3
+
+ # Timestamp will be used to create cache key
+ - id: timestamp
+ run: echo "timestamp=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_OUTPUT
+
+ # In case this is second attempt try restoring status of the prior attempt from cache
+ - name: Restore the previous run result
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/run_result
+ key: ${{ github.run_id }}-${{ github.job }}-${{ steps.timestamp.outputs.timestamp }}
+ restore-keys: |
+ ${{ github.run_id }}-${{ github.job }}-
+ # Fetch prior run result
+ - name: Get the previous run result
+ id: run_result
+ run: cat ~/run_result 2>/dev/null || echo 'default'
+
+ # In case of prior failure run the job
+ - if: steps.run_result.outputs.run_result != 'success'
+ run: echo "I'm alive!" && exit 0
+
+ # Set status = success
+ - name: Save the status of the run
+ run: echo "run_result=success" >> $GITHUB_OUTPUT > ~/run_result
+
+ - name: Use Node.js 16.14.0
+ if: steps.run_result.outputs.run_result != 'success'
+ uses: actions/setup-node@v3
+ with:
+ node-version: "16.14.0"
+
+ - name: Get yarn cache directory path
+ if: steps.run_result.outputs.run_result != 'success'
+ id: yarn-dep-cache-dir-path
+ run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
+
+ # Retrieve npm dependencies from cache. After a successful run, these dependencies are cached again
+ - name: Cache npm dependencies
+ if: steps.run_result.outputs.run_result != 'success'
+ id: yarn-dep-cache
+ uses: actions/cache@v3
+ env:
+ cache-name: cache-yarn-dependencies
+ with:
+ path: |
+ ${{ steps.yarn-dep-cache-dir-path.outputs.dir }}
+ key: ${{ runner.os }}-yarn-dep-${{ hashFiles('**/yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-yarn-dep-
+ # Install all the dependencies
+ - name: Install dependencies
+ if: steps.run_result.outputs.run_result != 'success'
+ run: yarn install --frozen-lockfile
+ - name: Download the react build artifact
+ if: steps.run_result.outputs.run_result != 'success'
+ uses: actions/download-artifact@v3
+ with:
+ name: client-build
+ path: app/client/build
+
+ - name: Download the server build artifact
+ if: steps.run_result.outputs.run_result != 'success'
+ uses: actions/download-artifact@v3
+ with:
+ name: server-build
+ path: app/server/dist
+
+ # Start server
+ - name: start server
+ if: steps.run_result.outputs.run_result != 'success'
+ working-directory: app/server
+ env:
+ APPSMITH_MONGODB_URI: "mongodb://localhost:27017/mobtools"
+ APPSMITH_REDIS_URL: "redis://127.0.0.1:6379"
+ APPSMITH_ENCRYPTION_PASSWORD: "password"
+ APPSMITH_ENCRYPTION_SALT: "salt"
+ APPSMITH_IS_SELF_HOSTED: false
+ APPSMITH_CLOUD_SERVICES_BASE_URL: https://release-cs.appsmith.com
+ APPSMITH_CLOUD_SERVICES_USERNAME: ""
+ APPSMITH_CLOUD_SERVICES_PASSWORD: ""
+ APPSMITH_GIT_ROOT: "./container-volumes/git-storage"
+ APPSMITH_AUDITLOG_ENABLED: true
+ run: |
+ ls -l
+ ls -l scripts/
+ ls -l dist/
+ # Run the server in the background and redirect logs to a log file
+ ./scripts/start-dev-server.sh &> server-logs.log &
+ - name: Wait for 30 seconds for server to start
+ if: steps.run_result.outputs.run_result != 'success'
+ run: |
+ sleep 30s
+ - name: Installing Yarn serve
+ if: steps.run_result.outputs.run_result != 'success'
+ run: |
+ yarn global add serve
+ echo "$(yarn global bin)" >> $GITHUB_PATH
+ # Start rts
+ - name: Start RTS Server
+ if: steps.run_result.outputs.run_result != 'success'
+ working-directory: ./app/rts
+ run: |
+ cp .env.example .env
+ ./start-server.sh &
+ - name: Setting up the perf tests
+ if: steps.run_result.outputs.run_result != 'success'
+ shell: bash
+ env:
+ APPSMITH_SSL_CERTIFICATE: ${{ secrets.APPSMITH_SSL_CERTIFICATE }}
+ APPSMITH_SSL_KEY: ${{ secrets.APPSMITH_SSL_KEY }}
+ CYPRESS_URL: ${{ secrets.CYPRESS_URL }}
+ CYPRESS_USERNAME: ${{ secrets.CYPRESS_USERNAME }}
+ CYPRESS_PASSWORD: ${{ secrets.CYPRESS_PASSWORD }}
+ CYPRESS_TESTUSERNAME1: ${{ secrets.CYPRESS_TESTUSERNAME1 }}
+ CYPRESS_TESTPASSWORD1: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
+ CYPRESS_TESTUSERNAME2: ${{ secrets.CYPRESS_TESTUSERNAME2 }}
+ CYPRESS_TESTPASSWORD2: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
+ CYPRESS_TESTUSERNAME3: ${{ secrets.CYPRESS_TESTUSERNAME3 }}
+ CYPRESS_TESTPASSWORD3: ${{ secrets.CYPRESS_TESTPASSWORD3 }}
+ CYPRESS_TESTUSERNAME4: ${{ secrets.CYPRESS_TESTUSERNAME4 }}
+ CYPRESS_TESTPASSWORD4: ${{ secrets.CYPRESS_TESTPASSWORD4 }}
+ CYPRESS_S3_ACCESS_KEY: ${{ secrets.CYPRESS_S3_ACCESS_KEY }}
+ CYPRESS_S3_SECRET_KEY: ${{ secrets.CYPRESS_S3_SECRET_KEY }}
+ CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_ID }}
+ CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GOOGLE_CLIENT_SECRET }}
+ CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_ID: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_ID }}
+ CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET: ${{ secrets.CYPRESS_APPSMITH_OAUTH2_GITHUB_CLIENT_SECRET }}
+ APPSMITH_DISABLE_TELEMETRY: true
+ APPSMITH_GOOGLE_MAPS_API_KEY: ${{ secrets.APPSMITH_GOOGLE_MAPS_API_KEY }}
+ POSTGRES_PASSWORD: postgres
+ run: |
+ ./cypress/setup-test.sh
+ - name: Checkout Performance Infra code
+ uses: actions/checkout@v3
+ with:
+ repository: appsmithorg/performance-infra
+ token: ${{ secrets.APPSMITH_PERF_INFRA_REPO_PAT }}
+ ref: main
+ path: app/client/perf
+
+ - name: Installing performance tests dependencies
+ if: steps.run_result.outputs.run_result != 'success'
+ working-directory: app/client/perf
+ shell: bash
+ run: yarn install --frozen-lockfile
+
+ - name: Change test script permissions
+ if: steps.run_result.outputs.run_result != 'success'
+ working-directory: app/client/perf
+ run: chmod +x ./start-test.sh
+
+ - name: Run performance tests
+ if: steps.run_result.outputs.run_result != 'success'
+ working-directory: app/client/perf
+ shell: bash
+ env:
+ APPSMITH_SSL_CERTIFICATE: ${{ secrets.APPSMITH_SSL_CERTIFICATE }}
+ APPSMITH_SSL_KEY: ${{ secrets.APPSMITH_SSL_KEY }}
+ CYPRESS_TESTUSERNAME1: ${{ secrets.CYPRESS_TESTUSERNAME9 }}
+ CYPRESS_TESTPASSWORD1: ${{ secrets.CYPRESS_TESTPASSWORD9 }}
+ APPSMITH_PERFORMANCE_DB_CONFIG: ${{ secrets.APPSMITH_PERFORMANCE_DB_CONFIG }}
+ APPSMITH_PERFORMANCE_S3_KEY: ${{secrets.APPSMITH_PERFORMANCE_S3_KEY}}
+ APPSMITH_PERFORMANCE_S3_SECRET: ${{secrets.APPSMITH_PERFORMANCE_S3_SECRET}}
+ APPSMITH_PERFORMANCE_DB_PASSWORD: ${{secrets.APPSMITH_PERFORMANCE_DB_PASSWORD}}
+ APPSMITH_PERFORMANCE_DB_HOST: ${{secrets.APPSMITH_PERFORMANCE_DB_HOST}}
+ PERF_GITHUB_PAT: ${{ secrets.APPSMITH_PERF_INFRA_REPO_PAT }}
+ APPSMITH_DISABLE_TELEMETRY: true
+ POSTGRES_PASSWORD: postgres
+ NODE_TLS_REJECT_UNAUTHORIZED: "0"
+ MACHINE: ubuntu-latest-4-cores
+
+ run: ./start-test.sh
+
+ # Restore the previous built bundle if present. If not push the newly built into the cache
+ - name: Restore the previous bundle
+ uses: actions/cache@v3
+ with:
+ path: |
+ app/client/perf/traces
+ key: ${{ github.run_id }}-${{ github.job }}-${{ steps.timestamp.outputs.timestamp }}
+ restore-keys: |
+ ${{ github.run_id }}-${{ github.job }}
+ - uses: actions/upload-artifact@v3
+ with:
+ name: performance-summaries
+ path: app/client/perf/traces
+
+ # Set status = success
+ - name: Save the status of the run
+ run: echo "run_result=success" >> $GITHUB_OUTPUT > ~/run_result
+
fat-container-test:
needs: [buildClient, buildServer, buildRts]
@@ -514,12 +734,12 @@ jobs:
run: echo ${{ steps.run_result.outputs.run_result }}
# Setup Java
- - name: Set up JDK 1.11
+ - name: Set up JDK 17
if: steps.run_result.outputs.run_result != 'success'
uses: actions/setup-java@v3
with:
- java-version: "11.0.10"
- distribution: adopt
+ distribution: 'temurin'
+ java-version: '17'
- name: Download the react build artifact
uses: actions/download-artifact@v3
@@ -587,8 +807,9 @@ jobs:
cd fatcontainerlocal
docker run -d --name appsmith -p 80:80 -p 9001:9001 \
-v "$PWD/stacks:/appsmith-stacks" -e APPSMITH_LICENSE_KEY=$APPSMITH_LICENSE_KEY \
- -e APPSMITH_CLOUD_SERVICES_BASE_URL=http://host.docker.internal:5001 \
-e APPSMITH_AUDITLOG_ENABLED=true \
+ -e APPSMITH_CLOUD_SERVICES_BASE_URL=http://host.docker.internal:5001 \
+ --add-host=host.docker.internal:host-gateway \
fatcontainer
- name: Use Node.js 16.14.0
@@ -945,12 +1166,12 @@ jobs:
run: echo ${{ steps.run_result.outputs.run_result }}
# Setup Java
- - name: Set up JDK 1.11
+ - name: Set up JDK 17
if: steps.run_result.outputs.run_result != 'success'
uses: actions/setup-java@v3
with:
- java-version: "11.0.10"
- distribution: adopt
+ distribution: 'temurin'
+ java-version: '17'
- name: Download the server build artifact
if: steps.run_result.outputs.run_result != 'success'
diff --git a/Dockerfile b/Dockerfile
index c6b096d552..a8381c98cb 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,9 +13,12 @@ ENV LC_ALL C.UTF-8
RUN apt-get update \
&& apt-get upgrade --yes \
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --yes \
- supervisor curl cron certbot nginx gnupg netcat openssh-client \
- software-properties-common gettext openjdk-11-jdk \
+ supervisor curl cron certbot nginx gnupg wget netcat openssh-client \
+ software-properties-common gettext \
python3-pip python-setuptools git ca-certificates-java \
+ && wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | apt-key add - \
+ && echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list \
+ && apt-get update && apt-get install --no-install-recommends --yes temurin-17-jdk \
&& pip install --no-cache-dir git+https://github.com/coderanger/supervisor-stdout@973ba19967cdaf46d9c1634d1675fc65b9574f6e \
&& apt-get remove --yes git python3-pip
@@ -67,7 +70,7 @@ COPY ./deploy/docker/templates/nginx/* \
templates/
# Add bootstrapfile
-COPY ./deploy/docker/entrypoint.sh ./deploy/docker/scripts/* ./scripts/start-backend.sh ./
+COPY ./deploy/docker/entrypoint.sh ./deploy/docker/scripts/* ./
# Add util tools
COPY ./deploy/docker/utils ./utils
@@ -81,7 +84,7 @@ COPY ./deploy/docker/templates/supervisord/ templates/supervisord/
COPY ./deploy/docker/templates/cron.d /etc/cron.d/
RUN chmod 0644 /etc/cron.d/*
-RUN chmod +x entrypoint.sh renew-certificate.sh healthcheck.sh start-backend.sh
+RUN chmod +x entrypoint.sh renew-certificate.sh healthcheck.sh
# Disable setuid/setgid bits for the files inside container.
RUN find / \( -path /proc -prune \) -o \( \( -perm -2000 -o -perm -4000 \) -print -exec chmod -s '{}' + \) || true
diff --git a/README.md b/README.md
index abbec405bb..e348709c37 100644
--- a/README.md
+++ b/README.md
@@ -180,54 +180,55 @@ Lets build great software together.
[](https://github.com/nayan-rafiq)
[](https://github.com/jsartisan)
[](https://github.com/yaldram)
+[](https://github.com/Rishabh-Rathod)
[](https://github.com/aswathkk)
[](https://github.com/ankitakinger)
-[](https://github.com/Rishabh-Rathod)
[](https://github.com/sbalaji1192)
[](https://github.com/ohansFavour)
[](https://github.com/Aishwarya-U-R)
[](https://github.com/Irongade)
+[](https://github.com/SatishGandham)
[](https://github.com/prsidhu)
[](https://github.com/pranavkanade)
-[](https://github.com/SatishGandham)
+[](https://github.com/yatinappsmith)
[](https://github.com/somangshu)
[](https://github.com/ApekshaBhosale)
-[](https://github.com/yatinappsmith)
[](https://github.com/sidhantgoel)
[](https://github.com/rahulramesha)
+[](https://github.com/IAmAnubhavSaini)
[](https://github.com/Parthvi12)
[](https://github.com/marks0351)
[](https://github.com/albinAppsmith)
-[](https://github.com/ayushpahwa)
[](https://github.com/AmanAgarwal041)
+[](https://github.com/ayushpahwa)
[](https://github.com/ashit-rath)
[](https://github.com/areyabhishek)
[](https://github.com/ankurrsinghal)
[](https://github.com/rimildeyjsr)
[](https://github.com/vishnu-gp)
-[](https://github.com/cokoghenun)
[](https://github.com/keyurparalkar)
[](https://github.com/eco-monk)
+[](https://github.com/cokoghenun)
[](https://github.com/vihar)
[](https://github.com/ChandanBalajiBP)
+[](https://github.com/dhruvikn)
[](https://github.com/berzerkeer)
[](https://github.com/souma-ghosh)
-[](https://github.com/dhruvikn)
+[](https://github.com/tanvibhakta)
[](https://github.com/subrata71)
[](https://github.com/sum35h)
-[](https://github.com/tanvibhakta)
[](https://github.com/sneha122)
[](https://github.com/nsarupr)
[](https://github.com/pratapaprasanna)
[](https://github.com/sondermanish)
-[](https://github.com/Pranay105)
-[](https://github.com/vaibh1297)
-[](https://github.com/ankitsrivas14)
-[](https://github.com/NilanshBansal)
-[](https://github.com/ravikp7)
-[](https://github.com/gitstart-appsmith)
-[](https://github.com/kocharrahul7)
[](https://github.com/rohitagarwal88)
+[](https://github.com/vaibh1297)
+[](https://github.com/Pranay105)
+[](https://github.com/NilanshBansal)
+[](https://github.com/ankitsrivas14)
+[](https://github.com/gitstart-appsmith)
+[](https://github.com/ravikp7)
+[](https://github.com/kocharrahul7)
[](https://github.com/ramsaptami)
[](https://github.com/AS-Laguna)
[](https://github.com/vivonk)
@@ -238,7 +239,6 @@ Lets build great software together.
[](https://github.com/tejasahluwalia)
[](https://github.com/Vijetha-Kaja)
[](https://github.com/appsmithguru)
-[](https://github.com/IAmAnubhavSaini)
[](https://github.com/hiteshjoshi)
[](https://github.com/rlnorthcutt)
[](https://github.com/tomjose92)
@@ -334,6 +334,7 @@ Lets build great software together.
[](https://github.com/Bhavin789)
[](https://github.com/bhuvanaindukuri)
[](https://github.com/donno2048)
+[](https://github.com/jacobwgillespie)
[](https://github.com/reachtokish)
[](https://github.com/nuwan94)
[](https://github.com/OmkarPh)
@@ -341,6 +342,7 @@ Lets build great software together.
[](https://github.com/rafaeelaudibert)
[](https://github.com/samyakjain10)
[](https://github.com/Jain-Sanchit)
+[](https://github.com/irfan-ansari-au28)
[](https://github.com/sheetal2001p)
[](https://github.com/Hard-Coder05)
[](https://github.com/vj-codes)
@@ -370,7 +372,6 @@ Lets build great software together.
[](https://github.com/felixsuarez0727)
[](https://github.com/gitstart)
[](https://github.com/ishaanmehta4)
-[](https://github.com/jacobwgillespie)
[](https://github.com/JarLob)
[](https://github.com/JeffResc)
[](https://github.com/jmakhack)
@@ -421,6 +422,7 @@ Lets build great software together.
[](https://github.com/nupur-singhal1992)
[](https://github.com/nzidol)
[](https://github.com/onifs10)
+[](https://github.com/ps-xaf)
## License
diff --git a/app/client/cypress/fixtures/Templates/MockAppViewerUser.json b/app/client/cypress/fixtures/Templates/MockAppViewerUser.json
new file mode 100644
index 0000000000..e0145ac9b0
--- /dev/null
+++ b/app/client/cypress/fixtures/Templates/MockAppViewerUser.json
@@ -0,0 +1,230 @@
+{
+ "responseMeta": {
+ "status": 200,
+ "success": true
+ },
+ "data": {
+ "user": {
+ "id": "63abf1f3cf1ed12127ce3b01",
+ "userPermissions": [],
+ "name": "test1@sharklasers.com",
+ "email": "test1@sharklasers.com",
+ "source": "FORM",
+ "isEnabled": true,
+ "groupIds": [],
+ "permissions": [],
+ "isAnonymous": false,
+ "tenantId": "63abe1a2cf1ed12127ce3ac4",
+ "enabled": true,
+ "username": "test1@sharklasers.com",
+ "accountNonExpired": true,
+ "accountNonLocked": true,
+ "credentialsNonExpired": true,
+ "claims": {},
+ "address": {},
+ "new": false
+ },
+ "workspaceApplications": [
+ {
+ "workspace": {
+ "id": "63ad2c156e7a9012ada704c7",
+ "userPermissions": [
+ "inviteUsers:workspace",
+ "read:workspaces",
+ "execute:workspaceDatasources",
+ "read:workspaceApplications"
+ ],
+ "name": "Untitled workspace 1",
+ "email": "test@sharklasers.com",
+ "plugins": [
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19ecf1ed12127ce3a5a",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe1c5cf1ed12127ce3af5",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19fcf1ed12127ce3a69",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19ecf1ed12127ce3a55",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe1c5cf1ed12127ce3af4",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19ccf1ed12127ce3a38",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19fcf1ed12127ce3a64",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe1a0cf1ed12127ce3a92",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe1c5cf1ed12127ce3af6",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19ecf1ed12127ce3a4c",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe1a1cf1ed12127ce3aa3",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe1a3cf1ed12127ce3ae9",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19ccf1ed12127ce3a39",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19fcf1ed12127ce3a6d",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19ecf1ed12127ce3a5c",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe1a0cf1ed12127ce3a8a",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19fcf1ed12127ce3a84",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19ccf1ed12127ce3a3a",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19fcf1ed12127ce3a79",
+ "status": "FREE",
+ "new": true
+ },
+ {
+ "userPermissions": [],
+ "pluginId": "63abe19ecf1ed12127ce3a57",
+ "status": "FREE",
+ "new": true
+ }
+ ],
+ "slug": "untitled-workspace-1",
+ "tenantId": "63abe1a2cf1ed12127ce3ac4",
+ "logoUrl": "/api/v1/assets/null",
+ "new": false
+ },
+ "applications": [
+ {
+ "id": "63ad2c166e7a9012ada704cb",
+ "modifiedBy": "test@sharklasers.com",
+ "userPermissions": [
+ "canComment:applications",
+ "read:applications"
+ ],
+ "name": "Untitled application 1",
+ "workspaceId": "63ad2c156e7a9012ada704c7",
+ "isPublic": false,
+ "pages": [
+ {
+ "id": "63ad2c166e7a9012ada704ce",
+ "isDefault": true,
+ "slug": "page1",
+ "defaultPageId": "63ad2c166e7a9012ada704ce",
+ "default": true
+ }
+ ],
+ "appIsExample": false,
+ "unreadCommentThreads": 0,
+ "color": "#FBF4ED",
+ "icon": "dollar",
+ "slug": "untitled-application-1",
+ "unpublishedCustomJSLibs": [],
+ "publishedCustomJSLibs": [],
+ "evaluationVersion": 2,
+ "applicationVersion": 2,
+ "isManualUpdate": true,
+ "isAutoUpdate": false,
+ "new": false,
+ "modifiedAt": "2022-12-29T05:56:41.772Z"
+ }
+ ],
+ "users": [
+ {
+ "userId": "63abf1edcf1ed12127ce3af7",
+ "username": "test@sharklasers.com",
+ "name": "test@sharklasers.com",
+ "permissionGroupName": "Administrator - Untitled workspace 1",
+ "permissionGroupId": "63ad2c156e7a9012ada704c8"
+ },
+ {
+ "userId": "63abf1f3cf1ed12127ce3b01",
+ "username": "test1@sharklasers.com",
+ "name": "test1@sharklasers.com",
+ "permissionGroupName": "App Viewer - Untitled workspace 1",
+ "permissionGroupId": "63ad2c156e7a9012ada704ca"
+ }
+ ]
+ }
+ ],
+ "newReleasesCount": "1",
+ "releaseItems": [
+ {
+ "tagName": "v1.8.15",
+ "name": "Release v1.8.15 🌈",
+ "url": "https://github.com/appsmithorg/appsmith/releases/tag/v1.8.15",
+ "descriptionHtml": "
💪🏾 Improvements
\n
\n
Were your larger applications starting to feel like they took forever to load? We've shipped out a performance improvement to load these pages faster! [#19273]
\n
",
+ "publishedAt": "2022-12-28T12:36:48Z"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/client/cypress/fixtures/jsFunctionTriggerDsl.json b/app/client/cypress/fixtures/jsFunctionTriggerDsl.json
new file mode 100644
index 0000000000..2cd12f27f5
--- /dev/null
+++ b/app/client/cypress/fixtures/jsFunctionTriggerDsl.json
@@ -0,0 +1,146 @@
+{
+ "dsl": {
+ "widgetName": "MainContainer",
+ "backgroundColor": "none",
+ "rightColumn": 4896.0,
+ "snapColumns": 64.0,
+ "detachFromLayout": true,
+ "widgetId": "0",
+ "topRow": 0.0,
+ "bottomRow": 1292.0,
+ "containerStyle": "none",
+ "snapRows": 125.0,
+ "parentRowSpace": 1.0,
+ "type": "CANVAS_WIDGET",
+ "canExtend": true,
+ "version": 74.0,
+ "minHeight": 1292.0,
+ "dynamicTriggerPathList": [],
+ "parentColumnSpace": 1.0,
+ "dynamicBindingPathList": [],
+ "leftColumn": 0.0,
+ "children": [
+ {
+ "resetFormOnClick": false,
+ "boxShadow": "none",
+ "widgetName": "Button1",
+ "buttonColor": "{{appsmith.theme.colors.primaryColor}}",
+ "displayName": "Button",
+ "iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
+ "searchTags": ["click", "submit"],
+ "topRow": 8.0,
+ "bottomRow": 12.0,
+ "parentRowSpace": 10.0,
+ "type": "BUTTON_WIDGET",
+ "hideCard": false,
+ "animateLoading": true,
+ "parentColumnSpace": 10.0625,
+ "dynamicTriggerPathList": [],
+ "leftColumn": 7.0,
+ "dynamicBindingPathList": [
+ { "key": "buttonColor" },
+ { "key": "borderRadius" },
+ { "key": "text" }
+ ],
+ "text": "{{JSObject1.myFun1.data}}",
+ "isDisabled": false,
+ "key": "a1lbivvht8",
+ "isDeprecated": false,
+ "rightColumn": 23.0,
+ "isDefaultClickDisabled": true,
+ "widgetId": "wxkz5y9ypf",
+ "isVisible": true,
+ "recaptchaType": "V3",
+ "version": 1.0,
+ "parentId": "0",
+ "renderMode": "CANVAS",
+ "isLoading": false,
+ "disabledWhenInvalid": false,
+ "borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
+ "buttonVariant": "PRIMARY",
+ "placement": "CENTER"
+ },
+ {
+ "resetFormOnClick": false,
+ "boxShadow": "none",
+ "widgetName": "Button2",
+ "buttonColor": "{{appsmith.theme.colors.primaryColor}}",
+ "displayName": "Button",
+ "iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
+ "searchTags": ["click", "submit"],
+ "topRow": 8.0,
+ "bottomRow": 12.0,
+ "parentRowSpace": 10.0,
+ "type": "BUTTON_WIDGET",
+ "hideCard": false,
+ "animateLoading": true,
+ "parentColumnSpace": 10.0625,
+ "dynamicTriggerPathList": [],
+ "leftColumn": 39.0,
+ "dynamicBindingPathList": [
+ { "key": "buttonColor" },
+ { "key": "borderRadius" },
+ { "key": "text" }
+ ],
+ "text": "{{JSObject1.myFun2.data}}",
+ "isDisabled": false,
+ "key": "a1lbivvht8",
+ "isDeprecated": false,
+ "rightColumn": 55.0,
+ "isDefaultClickDisabled": true,
+ "widgetId": "ih110zq4c4",
+ "isVisible": true,
+ "recaptchaType": "V3",
+ "version": 1.0,
+ "parentId": "0",
+ "renderMode": "CANVAS",
+ "isLoading": false,
+ "disabledWhenInvalid": false,
+ "borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
+ "buttonVariant": "PRIMARY",
+ "placement": "CENTER"
+ },
+ {
+ "resetFormOnClick": false,
+ "boxShadow": "none",
+ "widgetName": "Button3",
+ "onClick": "{{JSObject1.myFun2()\n}}",
+ "buttonColor": "{{appsmith.theme.colors.primaryColor}}",
+ "dynamicPropertyPathList": [{ "key": "onClick" }],
+ "displayName": "Button",
+ "iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
+ "searchTags": ["click", "submit"],
+ "topRow": 23.0,
+ "bottomRow": 27.0,
+ "parentRowSpace": 10.0,
+ "type": "BUTTON_WIDGET",
+ "hideCard": false,
+ "animateLoading": true,
+ "parentColumnSpace": 10.0625,
+ "dynamicTriggerPathList": [{ "key": "onClick" }],
+ "leftColumn": 24.0,
+ "dynamicBindingPathList": [
+ { "key": "buttonColor" },
+ { "key": "borderRadius" }
+ ],
+ "text": "Submit",
+ "isDisabled": false,
+ "key": "a1lbivvht8",
+ "isDeprecated": false,
+ "rightColumn": 40.0,
+ "isDefaultClickDisabled": true,
+ "widgetId": "irxds8yzxq",
+ "isVisible": true,
+ "recaptchaType": "V3",
+ "version": 1.0,
+ "parentId": "0",
+ "renderMode": "CANVAS",
+ "isLoading": false,
+ "disabledWhenInvalid": false,
+ "borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
+ "buttonVariant": "PRIMARY",
+ "placement": "CENTER"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/client/cypress/fixtures/jsonFormDslWithSchema.json b/app/client/cypress/fixtures/jsonFormDslWithSchema.json
index 1c874074a6..c3c5c2e589 100644
--- a/app/client/cypress/fixtures/jsonFormDslWithSchema.json
+++ b/app/client/cypress/fixtures/jsonFormDslWithSchema.json
@@ -30,6 +30,7 @@
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
+ "useSourceData": false,
"parentColumnSpace": 18.0625,
"leftColumn": 22,
"text": "Label",
diff --git a/app/client/cypress/fixtures/jsonFormDslWithoutSchema.json b/app/client/cypress/fixtures/jsonFormDslWithoutSchema.json
index ec1faf97d0..43885d8376 100644
--- a/app/client/cypress/fixtures/jsonFormDslWithoutSchema.json
+++ b/app/client/cypress/fixtures/jsonFormDslWithoutSchema.json
@@ -30,6 +30,7 @@
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
+ "useSourceData": false,
"parentColumnSpace": 18.0625,
"leftColumn": 22,
"text": "Label",
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug15056_Spec.ts b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug15056_Spec.ts
new file mode 100644
index 0000000000..a0098ebdcf
--- /dev/null
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug15056_Spec.ts
@@ -0,0 +1,46 @@
+const dsl = require("../../../../fixtures/jsFunctionTriggerDsl.json");
+import { ObjectsRegistry } from "../../../../support/Objects/Registry";
+
+const agHelper = ObjectsRegistry.AggregateHelper;
+const jsEditor = ObjectsRegistry.JSEditor;
+const apiPage = ObjectsRegistry.ApiPage;
+const ee = ObjectsRegistry.EntityExplorer;
+
+describe("JS data update on button click", function() {
+ before(() => {
+ agHelper.AddDsl(dsl);
+ });
+
+ it("Populates js function data when triggered via button click", function() {
+ apiPage.CreateAndFillApi(
+ "https://jsonplaceholder.typicode.com/posts",
+ "Api1",
+ );
+
+ const jsObjectString = `export default {
+ myVar1: [],
+ myVar2: {},
+ myFun1: async () => {
+ //write code here
+ const data = await Api1.run()
+ return "myFun1 Data"
+ },
+ myFun2: async () => {
+ //use async-await or promises
+ await this.myFun1()
+ return "myFun2 Data"
+ }
+ }`;
+
+ jsEditor.CreateJSObject(jsObjectString, {
+ paste: true,
+ completeReplace: true,
+ toRun: false,
+ shouldCreateNewJSObj: true,
+ });
+ ee.SelectEntityByName("Button2", "Widgets");
+ agHelper.ClickButton("Submit");
+ agHelper.AssertContains("myFun1 Data", "exist");
+ agHelper.AssertContains("myFun2 Data", "exist");
+ });
+});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug18664_spec.ts b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug18664_spec.ts
deleted file mode 100644
index d740083669..0000000000
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug18664_spec.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { ObjectsRegistry } from "../../../../support/Objects/Registry";
-
-let dsName: any;
-
-const agHelper = ObjectsRegistry.AggregateHelper,
- dataSources = ObjectsRegistry.DataSources;
-
-describe("Bug 18664: datasource unsaved changes popup shows even without changes", function() {
- it("1. Create postgres datasource, save it and edit it and go back, now unsaved changes popup should not be shown", () => {
- dataSources.NavigateToDSCreateNew();
- agHelper.GenerateUUID();
- cy.get("@guid").then((uid) => {
- dataSources.CreatePlugIn("PostgreSQL");
- dsName = "Postgres" + uid;
- agHelper.RenameWithInPane(dsName, false);
- dataSources.SaveDatasource();
- cy.wait(1000);
- dataSources.EditDatasource();
- agHelper.GoBack();
- agHelper.AssertElementVisible(dataSources._activeDS);
- dataSources.DeleteDatasouceFromActiveTab(dsName);
- });
- });
-});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug19426_spec.ts b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug19426_spec.ts
new file mode 100644
index 0000000000..8290a60bcd
--- /dev/null
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/Bug19426_spec.ts
@@ -0,0 +1,12 @@
+import { ObjectsRegistry } from "../../../../support/Objects/Registry";
+
+const dataSources = ObjectsRegistry.DataSources;
+
+describe("Testing empty datasource without saving should not throw 404", function() {
+ it("Bug 19426: Create empty S3 datasource, test it", function() {
+ dataSources.NavigateToDSCreateNew();
+ dataSources.CreatePlugIn("S3");
+ dataSources.TestDatasource(false);
+ dataSources.SaveDSFromDialog(false);
+ });
+});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/DSDiscardBugs_spec.ts b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/DSDiscardBugs_spec.ts
new file mode 100644
index 0000000000..a6adc2e31a
--- /dev/null
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/BugTests/DSDiscardBugs_spec.ts
@@ -0,0 +1,96 @@
+import { ObjectsRegistry } from "../../../../support/Objects/Registry";
+
+let dsName: any;
+
+const agHelper = ObjectsRegistry.AggregateHelper,
+ dataSources = ObjectsRegistry.DataSources;
+
+const testString = "test";
+
+describe("datasource unsaved changes popup shows even without changes", function() {
+ // In case of postgres and other plugins, host address and port key values are initialized by default making form dirty
+ it("1. Bug 18664: Create postgres datasource, save it and edit it and go back, now unsaved changes popup should not be shown", () => {
+ dataSources.NavigateToDSCreateNew();
+ agHelper.GenerateUUID();
+ cy.get("@guid").then((uid) => {
+ // using CreatePlugIn function instead of CreateDatasource,
+ // because I do not need to fill the datasource form and use the same default data
+ dataSources.CreatePlugIn("PostgreSQL");
+ dsName = "Postgres" + uid;
+ agHelper.RenameWithInPane(dsName, false);
+ dataSources.SaveDatasource();
+ agHelper.Sleep();
+ dataSources.EditDatasource();
+ agHelper.GoBack();
+ agHelper.AssertElementVisible(dataSources._activeDS);
+ dataSources.DeleteDatasouceFromActiveTab(dsName);
+ });
+ });
+
+ // In case of Auth DS, headers, query parameters and custom query parameters are being initialized, which makes form dirty
+ it("2. Bug 18962: Create REST API datasource, save it and edit it and go back, now unsaved changes popup should not be shown", () => {
+ dataSources.NavigateToDSCreateNew();
+ agHelper.GenerateUUID();
+ cy.get("@guid").then((uid) => {
+ // using CreatePlugIn function instead of CreateDatasource,
+ // because I do not need to fill the datasource form and use the same default data
+ dataSources.CreatePlugIn("Authenticated API");
+ dsName = "AuthDS" + uid;
+ agHelper.RenameWithInPane(dsName, false);
+ dataSources.FillAuthAPIUrl();
+ dataSources.SaveDatasource();
+ agHelper.Sleep();
+
+ // Edit DS for the first time, we shouldnt see discard popup on back button
+ // Even if headers, and query parameters are being initialized, we shouldnt see the popup
+ // as those are not initialized by user
+ dataSources.EditDatasource();
+ agHelper.GoBack();
+ agHelper.AssertElementVisible(dataSources._activeDS);
+
+ // Edit DS from active tab and add oauth2 details
+ dataSources.EditDSFromActiveTab(dsName);
+ dataSources.AddOAuth2AuthorizationCodeDetails(
+ testString,
+ testString,
+ testString,
+ testString,
+ );
+ dataSources.UpdateDatasource();
+ agHelper.Sleep();
+
+ // Now edit DS, and ensure that discard popup is not shown on back button click
+ // Even if custom authentication params are being initialized, we shouldnt see the popup
+ // as those are not initialized by user
+ dataSources.EditDatasource();
+ agHelper.GoBack();
+ agHelper.AssertElementVisible(dataSources._activeDS);
+
+ dataSources.DeleteDatasouceFromActiveTab(dsName);
+ });
+ });
+
+ it("3. Bug 18998: Create mongoDB datasource, save it and edit it and change connection URI param, discard popup should be shown as user has made valid change", () => {
+ dataSources.NavigateToDSCreateNew();
+ agHelper.GenerateUUID();
+ cy.get("@guid").then((uid) => {
+ // using CreatePlugIn function instead of CreateDatasource,
+ // because I do not need to fill the datasource form and use the same default data
+ dataSources.CreatePlugIn("MongoDB");
+ dsName = "Mongo" + uid;
+ agHelper.RenameWithInPane(dsName, false);
+ dataSources.FillMongoDSForm();
+ dataSources.SaveDatasource();
+ agHelper.Sleep();
+
+ // Edit datasource, change connection string uri param and click on back button
+ dataSources.EditDatasource();
+ dataSources.FillMongoDatasourceFormWithURI(testString);
+
+ // Assert that popup is visible
+ dataSources.SaveDSFromDialog(false);
+
+ dataSources.DeleteDatasouceFromActiveTab(dsName);
+ });
+ });
+});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/IDE/MaintainContext&Focus_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/IDE/MaintainContext&Focus_spec.js
index bbfb209653..e4f7a4bd50 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/IDE/MaintainContext&Focus_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/IDE/MaintainContext&Focus_spec.js
@@ -166,7 +166,7 @@ describe("MaintainContext&Focus", function() {
it("9. Datasource edit mode has to be maintained", () => {
ee.SelectEntityByName("Appsmith", "Datasources");
dataSources.EditDatasource();
- dataSources.SaveDSFromDialog(false);
+ agHelper.GoBack();
ee.SelectEntityByName("Github", "Datasources");
dataSources.AssertViewMode();
ee.SelectEntityByName("Appsmith", "Datasources");
@@ -175,7 +175,7 @@ describe("MaintainContext&Focus", function() {
it("10. Datasource collapse state has to be maintained", () => {
// Create datasource 1
- dataSources.SaveDSFromDialog(false);
+ agHelper.GoBack();
dataSources.NavigateToDSCreateNew();
dataSources.CreatePlugIn("PostgreSQL");
agHelper.RenameWithInPane("Postgres1", false);
@@ -197,7 +197,7 @@ describe("MaintainContext&Focus", function() {
dataSources.AssertSectionCollapseState(1, false);
});
- it("10. Maintain focus of form control inputs", () => {
+ it("11. Maintain focus of form control inputs", () => {
ee.SelectEntityByName("SQL_Query");
dataSources.ToggleUsePreparedStatement(false);
cy.SearchEntityandOpen("S3_Query");
@@ -207,7 +207,8 @@ describe("MaintainContext&Focus", function() {
cy.SearchEntityandOpen("SQL_Query");
cy.get(".t--form-control-SWITCH input").should("be.focused");
cy.SearchEntityandOpen("S3_Query");
- cy.get(queryLocators.querySettingsTab).click();
+ agHelper.Sleep();
+ agHelper.GetNClick(dataSources._queryResponse("SETTINGS"));
cy.xpath(queryLocators.queryTimeout).should("be.focused");
});
});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Onboarding/CreateNewApp_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Onboarding/CreateNewApp_spec.js
index 8d6999348b..72e9d9e096 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Onboarding/CreateNewApp_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Onboarding/CreateNewApp_spec.js
@@ -12,7 +12,7 @@ describe("Creating new app after discontinuing guided tour should not start the
cy.get(commonlocators.homeIcon)
.click({ force: true })
.wait(8000); //for page to settle!
- datasources.CloseReconnectDataSourceModal() // Check if reconnect data source modal is visible and close it
+ datasources.CloseReconnectDataSourceModal(); // Check if reconnect data source modal is visible and close it
cy.get(guidedTourLocators.welcomeTour)
.click()
.wait(2000);
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Templates/Fork_Template_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Templates/Fork_Template_spec.js
index 94ace8b422..669af44642 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Templates/Fork_Template_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Templates/Fork_Template_spec.js
@@ -1,5 +1,7 @@
const commonlocators = require("../../../../locators/commonlocators.json");
const templateLocators = require("../../../../locators/TemplatesLocators.json");
+import { ObjectsRegistry } from "../../../../support/Objects/Registry";
+const { AggregateHelper, HomePage } = ObjectsRegistry;
describe("Fork a template to an workspace", () => {
it("Fork a template to an workspace", () => {
@@ -30,4 +32,21 @@ describe("Fork a template to an workspace", () => {
expect(location.search).to.eq("?showForkTemplateModal=true");
});
});
+ it("Hide template fork button if user does not have a valid workspace to fork", () => {
+ HomePage.NavigateToHome();
+ // Mock user with App Viewer permission
+ cy.intercept("/api/v1/applications/new", {
+ fixture: "Templates/MockAppViewerUser.json",
+ });
+ AggregateHelper.RefreshPage();
+ HomePage.SwitchToTemplatesTab();
+ AggregateHelper.AssertElementExist(templateLocators.templateCard);
+ AggregateHelper.AssertElementAbsence(templateLocators.templateForkButton);
+
+ AggregateHelper.GetNClick(templateLocators.templateCard);
+ AggregateHelper.AssertElementExist(templateLocators.templateCard);
+ AggregateHelper.AssertElementAbsence(
+ templateLocators.templateViewForkButton,
+ );
+ });
});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/ThemingTests/Basic_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/ThemingTests/Basic_spec.js
index 58b18d6230..1cf60401e1 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/ThemingTests/Basic_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/ThemingTests/Basic_spec.js
@@ -819,8 +819,8 @@ describe("App Theming funtionality", function() {
//Change Border & verify
- cy.get(".t--button-tab-0px").click();
- cy.get(".t--button-tab-0px")
+ cy.get(".t--button-group-0px").click();
+ cy.get(".t--button-group-0px")
.eq(0)
.invoke("css", "border-top-left-radius")
.then((borderRadius) => {
@@ -842,8 +842,8 @@ describe("App Theming funtionality", function() {
});
//Change Shadow & verify
- cy.get(".t--button-tab-0.10px").click();
- cy.get(".t--button-tab-0.10px div")
+ cy.get(".t--button-group-0.10px").click();
+ cy.get(".t--button-group-0.10px div")
.eq(0)
.invoke("css", "box-shadow")
.then((boxshadow) => {
@@ -1051,10 +1051,10 @@ describe("App Theming funtionality", function() {
//Change Border & verify
- cy.get(".t--button-tab-0\\.375rem")
+ cy.get(".t--button-group-0\\.375rem")
.click()
.wait(500);
- cy.get(".t--button-tab-0\\.375rem div")
+ cy.get(".t--button-group-0\\.375rem div")
.eq(0)
.invoke("css", "border-top-left-radius")
.then((borderRadius) => {
@@ -1076,10 +1076,10 @@ describe("App Theming funtionality", function() {
});
//Change Shadow & verify
- cy.get(".t--button-tab-0.1px")
+ cy.get(".t--button-group-0.1px")
.click()
.wait(500);
- cy.get(".t--button-tab-0.1px div")
+ cy.get(".t--button-group-0.1px div")
.invoke("css", "box-shadow")
.then((boxshadow) => {
cy.get(widgetsPage.widgetBtn)
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/ButtonGroup_MenuButton_Width_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/ButtonGroup_MenuButton_Width_spec.js
index f017266157..566a078274 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/ButtonGroup_MenuButton_Width_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/ButtonGroup_MenuButton_Width_spec.js
@@ -60,7 +60,7 @@ describe("In a button group widget, menu button width", function() {
const menuButtonId = "groupButton1";
// Change the first button type to menu
cy.editColumn(menuButtonId);
- cy.get(".t--button-tab-MENU").click({ force: true });
+ cy.get(".t--button-group-MENU").click({ force: true });
cy.get(".t--add-menu-item-btn").click();
// Get the newly converted menu button
cy.get(`.appsmith_widget_${widgetId} div.t--buttongroup-widget`)
@@ -126,7 +126,7 @@ describe("In a button group widget, menu button width", function() {
.click();
cy.moveToStyleTab();
// Change its orientation to vetical
- cy.get(".t--button-tab-vertical").click({ force: true });
+ cy.get(".t--button-group-vertical").click({ force: true });
// Get the default menu button
cy.get(`.appsmith_widget_${widgetId} div.t--buttongroup-widget`)
.children()
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/ButtonGroup_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/ButtonGroup_spec.js
index 47215225f3..ce45898c1d 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/ButtonGroup_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/ButtonGroup_spec.js
@@ -97,7 +97,7 @@ describe("Button Group Widget Functionality", function() {
it("Update icon alignment and Verify buttons alignments", function() {
// align right
- cy.get(".t--property-control-position .t--button-tab-left")
+ cy.get(".t--property-control-position .t--button-group-left")
.first()
.click();
cy.wait(200);
@@ -106,7 +106,7 @@ describe("Button Group Widget Functionality", function() {
.eq(1)
.should("have.css", "flex-direction", "row");
// align left
- cy.get(".t--property-control-position .t--button-tab-right")
+ cy.get(".t--property-control-position .t--button-group-right")
.last()
.click();
cy.wait(200);
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/Button_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/Button_spec.js
index 20f2005983..5a135c3e0b 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/Button_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Button/Button_spec.js
@@ -31,7 +31,7 @@ describe("Button Widget Functionality", function() {
// Assert if the icon exists
cy.get(`${widgetsPage.buttonWidget} .bp3-icon-add`).should("exist");
// Change icon alignment to right
- cy.get(`${iconAlignmentProperty} .t--button-tab-right`)
+ cy.get(`${iconAlignmentProperty} .t--button-group-right`)
.last()
.click({
force: true,
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/CodeScanner/CodeScanner_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/CodeScanner/CodeScanner_spec.js
index 787ca5083e..3e4ad93d8b 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/CodeScanner/CodeScanner_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/CodeScanner/CodeScanner_spec.js
@@ -119,7 +119,7 @@ describe("Code Scanner widget's functionality", () => {
// Select scanner layout as CLICK_TO_SCAN
cy.get(
- `${commonlocators.codeScannerScannerLayout} .t--button-tab-CLICK_TO_SCAN`,
+ `${commonlocators.codeScannerScannerLayout} .t--button-group-CLICK_TO_SCAN`,
)
.last()
.click({
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Form/Form_With_CheckBox_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Form/Form_With_CheckBox_spec.js
index 2f13d99e96..30a84ec360 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Form/Form_With_CheckBox_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Form/Form_With_CheckBox_spec.js
@@ -34,7 +34,7 @@ describe("Checkbox Widget Functionality", function() {
);
// align right
- cy.get(".t--property-control-alignment .t--button-tab-RIGHT")
+ cy.get(".t--property-control-alignment .t--button-group-RIGHT")
.first()
.click();
cy.get(publish.checkboxWidget + " " + ".t--checkbox-widget-label").should(
@@ -63,7 +63,7 @@ describe("Checkbox Widget Functionality", function() {
.last()
.click({ force: true });
cy.wait(200);
- cy.get(".t--button-tab-Left").click({ force: true });
+ cy.get(".t--button-group-Left").click({ force: true });
cy.wait(200);
cy.PublishtheApp();
@@ -110,7 +110,7 @@ describe("Checkbox Widget Functionality", function() {
it("6. Checkbox Functionality To change label style of checkbox", function() {
cy.openPropertyPane("checkboxwidget");
cy.moveToStyleTab();
- cy.get(".t--property-control-emphasis .t--button-tab-BOLD").click({
+ cy.get(".t--property-control-emphasis .t--button-group-BOLD").click({
force: true,
});
cy.PublishtheApp();
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/JSONForm/JSONForm_FormProperties_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/JSONForm/JSONForm_FormProperties_spec.js
index a03a691471..dc6c247c95 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/JSONForm/JSONForm_FormProperties_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/JSONForm/JSONForm_FormProperties_spec.js
@@ -190,4 +190,54 @@ describe("JSON Form Widget Form Bindings", () => {
cy.get(publishPage.backToEditor).click({ force: true });
});
+
+ it("8. Form value should contain hidden fields value if useSourceData is set to true", () => {
+ cy.addDsl(dslWithoutSchema);
+
+ const schema = {
+ name: "",
+ age: 10,
+ };
+
+ cy.openPropertyPane("jsonformwidget");
+ cy.testJsontext("sourcedata", JSON.stringify(schema));
+
+ cy.togglebar(`${propertyControlPrefix}-usesourcedata input`);
+
+ cy.openFieldConfiguration("age");
+ cy.togglebarDisable(`${propertyControlPrefix}-visible input`);
+
+ cy.openPropertyPane("textwidget");
+ cy.testJsontext("text", "{{JSON.stringify(JSONForm1.formData)}}");
+
+ cy.get(".t--widget-textwidget .bp3-ui-text").contains(
+ JSON.stringify(schema),
+ );
+ });
+
+ it("9. Form value should not contain hidden fields value if useSourceData is set to false", () => {
+ cy.addDsl(dslWithoutSchema);
+
+ const name = "JOHN";
+
+ const schema = {
+ name,
+ age: 10,
+ };
+
+ cy.openPropertyPane("jsonformwidget");
+ cy.testJsontext("sourcedata", JSON.stringify(schema));
+
+ cy.togglebarDisable(`${propertyControlPrefix}-usesourcedata input`);
+
+ cy.openFieldConfiguration("age");
+ cy.togglebarDisable(`${propertyControlPrefix}-visible input`);
+
+ cy.openPropertyPane("textwidget");
+ cy.testJsontext("text", "{{JSON.stringify(JSONForm1.formData)}}");
+
+ cy.get(".t--widget-textwidget .bp3-ui-text").contains(
+ JSON.stringify({ name }),
+ );
+ });
});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Others/MenuButton_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Others/MenuButton_spec.js
index f42f7770fd..ae6d19f72e 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Others/MenuButton_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Others/MenuButton_spec.js
@@ -23,7 +23,7 @@ describe("Menu Button Widget Functionality", () => {
// Assert if the icon exists
cy.get(`${formWidgetsPage.menuButtonWidget} .bp3-icon-add`).should("exist");
// Change its icon alignment to right
- cy.get(".t--property-control-position .t--button-tab-right")
+ cy.get(".t--property-control-position .t--button-group-right")
.last()
.click({ force: true });
cy.wait(200);
@@ -110,7 +110,9 @@ describe("Menu Button Widget Functionality", () => {
cy.moveToContentTab();
// Select menu items source as Dynamic
- cy.get(`${commonlocators.menuButtonMenuItemsSource} .t--button-tab-DYNAMIC`)
+ cy.get(
+ `${commonlocators.menuButtonMenuItemsSource} .t--button-group-DYNAMIC`,
+ )
.last()
.click({
force: true,
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Others/Progress_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Others/Progress_spec.js
index 2d4ec8fb62..fd0422d13d 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Others/Progress_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Others/Progress_spec.js
@@ -66,7 +66,7 @@ describe("Progress Widget", function() {
// Circular progress
it("Property: type, Change type to Circular", function() {
// Switch to circular mode
- cy.get(".t--button-tab-circular").click({ force: true });
+ cy.get(".t--button-group-circular").click({ force: true });
cy.get("[data-cy='circular']").should("exist");
});
it("Property: isIndeterminate, Toggle infinite loading", function() {
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/RTE/RichTextEditor_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/RTE/RichTextEditor_spec.js
index 699c5627c6..5f27f01583 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/RTE/RichTextEditor_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/RTE/RichTextEditor_spec.js
@@ -246,10 +246,10 @@ describe("RichTextEditor Widget Functionality", function() {
// Changing the input type to markdown and again testing the cursor position
cy.openPropertyPane("richtexteditorwidget");
- cy.get(".t--button-tab-markdown").click({ force: true });
+ cy.get(".t--button-group-markdown").click({ force: true });
setRTEContent(testString);
testCursorPoistion(testStringLen, tinyMceId);
- cy.get(".t--button-tab-html").click({ force: true });
+ cy.get(".t--button-group-html").click({ force: true });
});
it("13. Check if different font size texts are supported inside the RTE widget", function() {
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Switch/Switch_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Switch/Switch_spec.js
index e166e1c363..726ca6a5ca 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Switch/Switch_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Switch/Switch_spec.js
@@ -84,7 +84,7 @@ describe("Switch Widget Functionality", function() {
"left",
);
// align right
- cy.get(".t--property-control-alignment .t--button-tab-RIGHT")
+ cy.get(".t--property-control-alignment .t--button-group-RIGHT")
.first()
.click();
cy.wait(200);
@@ -106,7 +106,7 @@ describe("Switch Widget Functionality", function() {
.last()
.click({ force: true });
cy.wait(200);
- cy.get(".t--button-tab-Left").click({ force: true });
+ cy.get(".t--button-group-Left").click({ force: true });
cy.wait(200);
cy.PublishtheApp();
cy.get(publish.switchwidget + " " + ".bp3-align-right").should("exist");
@@ -150,7 +150,7 @@ describe("Switch Widget Functionality", function() {
it("11. Switch Functionality To change label style of switch", function() {
cy.openPropertyPane("switchwidget");
cy.moveToStyleTab();
- cy.get(".t--property-control-emphasis .t--button-tab-BOLD").click({
+ cy.get(".t--property-control-emphasis .t--button-group-BOLD").click({
force: true,
});
cy.PublishtheApp();
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Image_resize_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Image_resize_spec.js
index 527a108bb6..3862c9f182 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Image_resize_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Image_resize_spec.js
@@ -14,17 +14,17 @@ describe("Table Widget Image Resize feature validation", function() {
cy.editColumn("image");
cy.moveToStyleTab();
- cy.get(".t--button-tab-MEDIUM").click();
+ cy.get(".t--button-group-MEDIUM").click();
cy.getTableV2DataSelector("1", "3").then((selector) => {
cy.get(`${selector} img`).should("have.css", "height", "64px");
});
- cy.get(".t--button-tab-LARGE").click();
+ cy.get(".t--button-group-LARGE").click();
cy.getTableV2DataSelector("1", "3").then((selector) => {
cy.get(`${selector} img`).should("have.css", "height", "128px");
});
- cy.get(".t--button-tab-DEFAULT").click();
+ cy.get(".t--button-group-DEFAULT").click();
cy.getTableV2DataSelector("1", "3").then((selector) => {
cy.get(`${selector} img`).should("have.css", "height", "32px");
});
@@ -47,17 +47,17 @@ describe("Table Widget Image Resize feature validation", function() {
cy.editColumn("image");
cy.moveToStyleTab();
- cy.get(".t--button-tab-MEDIUM").click();
+ cy.get(".t--button-group-MEDIUM").click();
cy.getTableV2DataSelector("1", "3").then((selector) => {
cy.get(`${selector} img`).should("have.css", "height", "64px");
});
- cy.get(".t--button-tab-LARGE").click();
+ cy.get(".t--button-group-LARGE").click();
cy.getTableV2DataSelector("1", "3").then((selector) => {
cy.get(`${selector} img`).should("have.css", "height", "128px");
});
- cy.get(".t--button-tab-DEFAULT").click();
+ cy.get(".t--button-group-DEFAULT").click();
cy.getTableV2DataSelector("1", "3").then((selector) => {
cy.get(`${selector} img`).should("have.css", "height", "32px");
});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Inline_editing_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Inline_editing_spec.js
index 4eca007482..e1493cc660 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Inline_editing_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Inline_editing_spec.js
@@ -307,26 +307,26 @@ describe("Table widget inline editing functionality", () => {
cy.get(".t--property-control-updatemode .bp3-popover-target")
.last()
.click();
- cy.get(".t--button-tab-CUSTOM").click({ force: true });
+ cy.get(".t--button-group-CUSTOM").click({ force: true });
cy.get("[data-rbd-draggable-id='EditActions1']").should("not.exist");
cy.makeColumnEditable("task");
cy.get("[data-rbd-draggable-id='EditActions1']").should("not.exist");
cy.get(".t--property-control-updatemode .bp3-popover-target")
.last()
.click();
- cy.get(".t--button-tab-ROW_LEVEL").click({ force: true });
+ cy.get(".t--button-group-ROW_LEVEL").click({ force: true });
cy.get("[data-rbd-draggable-id='EditActions1']").should("exist");
cy.get(".t--property-control-updatemode .bp3-popover-target")
.last()
.click();
- cy.get(".t--button-tab-CUSTOM").click({ force: true });
+ cy.get(".t--button-group-CUSTOM").click({ force: true });
cy.get("[data-rbd-draggable-id='EditActions1']").should("not.exist");
cy.makeColumnEditable("step");
cy.makeColumnEditable("task");
cy.get(".t--property-control-updatemode .bp3-popover-target")
.last()
.click();
- cy.get(".t--button-tab-ROW_LEVEL").click({ force: true });
+ cy.get(".t--button-group-ROW_LEVEL").click({ force: true });
cy.get("[data-rbd-draggable-id='EditActions1']").should("not.exist");
});
@@ -787,7 +787,7 @@ describe("Table widget inline editing functionality", () => {
cy.openPropertyPane("tablewidgetv2");
cy.makeColumnEditable("step");
- cy.get(".t--button-tab-CUSTOM").click({ force: true });
+ cy.get(".t--button-group-CUSTOM").click({ force: true });
cy.wait(1000);
// case 1: check if updatedRowIndex is 0, when cell at row 0 is updated.
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/TableV2_GeneralProperty_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/TableV2_GeneralProperty_spec.js
index 4ec964242f..b589e0213b 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/TableV2_GeneralProperty_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/TableV2_GeneralProperty_spec.js
@@ -186,7 +186,7 @@ describe("Table Widget property pane feature validation", function() {
cy.get(widgetsPage.rowHeight)
.last()
.click({ force: true });
- cy.get(".t--button-tab-SHORT").click({ force: true });
+ cy.get(".t--button-group-SHORT").click({ force: true });
cy.wait(2000);
cy.PublishtheApp();
cy.readTableV2dataValidateCSS("0", "1", "height", "29px", true);
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/TableV2_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/TableV2_spec.js
index bf0ed0cb1d..11cddb29fa 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/TableV2_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/TableV2_spec.js
@@ -195,7 +195,7 @@ describe("Table Widget V2 Functionality", function() {
cy.get(".t--property-pane-back-btn").click();
cy.makeColumnEditable("step");
- cy.get(".t--button-tab-ROW_LEVEL").click();
+ cy.get(".t--button-group-ROW_LEVEL").click();
cy.get(".t--table-filter-columns-dropdown").click();
cy.get(".t--dropdown-option").should("not.contain", "Save / Discard");
});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Text_wrapping_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Text_wrapping_spec.js
index 14abeff504..57c7553585 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Text_wrapping_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/Text_wrapping_spec.js
@@ -30,7 +30,29 @@ describe("Table Widget text wrapping functionality", function() {
});
});
- it("2. should check that other cells in the row is not wrapped when one of the cell is wrapped", () => {
+ it("2. should check that a tooltip is shown when hovered on a ellipsised content", () => {
+ cy.get(
+ `.td[data-colindex=2][data-rowindex=0] .t--table-cell-tooltip-target`,
+ ).trigger("mouseenter");
+
+ cy.get(".bp3-tooltip").should("exist");
+ cy.get(".bp3-tooltip .bp3-popover-content").should(
+ "contain",
+ "michael.lawson@reqres.in",
+ );
+
+ cy.get(
+ `.td[data-colindex=2][data-rowindex=1] .t--table-cell-tooltip-target`,
+ ).trigger("mouseenter", { force: true });
+
+ cy.get(".bp3-tooltip").should("exist");
+ cy.get(".bp3-tooltip .bp3-popover-content").should(
+ "contain",
+ "lindsay.ferguson@reqres.in",
+ );
+ });
+
+ it("3. should check that other cells in the row is not wrapped when one of the cell is wrapped", () => {
cy.getTableCellHeight(2, 0).then((height) => {
expect(height).to.equal("28px");
});
@@ -52,7 +74,7 @@ describe("Table Widget text wrapping functionality", function() {
});
});
- it("3. should check that cell wrapping option is only available for plain text, number, date and URL", () => {
+ it("4. should check that cell wrapping option is only available for plain text, number, date and URL", () => {
cy.openPropertyPane("tablewidgetv2");
cy.editColumn("email");
[
@@ -105,7 +127,7 @@ describe("Table Widget text wrapping functionality", function() {
});
});
- it("4. should check that plain text, number, date and URL column is getting wrapped when cell wrapping is enabled", () => {
+ it("5. should check that plain text, number, date and URL column is getting wrapped when cell wrapping is enabled", () => {
cy.openPropertyPane("tablewidgetv2");
cy.editColumn("id");
@@ -134,7 +156,7 @@ describe("Table Widget text wrapping functionality", function() {
});
});
- it("5. should check that pageSize does not change when cell wrapping is enabled", () => {
+ it("6. should check that pageSize does not change when cell wrapping is enabled", () => {
cy.openPropertyPane("tablewidgetv2");
cy.editColumn("image");
let pageSizeBeforeWrapping;
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/columnTypes/checkboxCell_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/columnTypes/checkboxCell_spec.js
index 5c5a4c8213..161f8b96e4 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/columnTypes/checkboxCell_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/columnTypes/checkboxCell_spec.js
@@ -71,7 +71,7 @@ describe("Checkbox column type funtionality test", () => {
.contains("STYLE")
.click({ force: true });
// Check horizontal alignment
- cy.get(".t--property-control-horizontalalignment .t--button-tab-CENTER")
+ cy.get(".t--property-control-horizontalalignment .t--button-group-CENTER")
.first()
.click();
@@ -80,7 +80,7 @@ describe("Checkbox column type funtionality test", () => {
});
// Check vertical alignment
- cy.get(".t--property-control-verticalalignment .t--button-tab-BOTTOM")
+ cy.get(".t--property-control-verticalalignment .t--button-group-BOTTOM")
.first()
.click();
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/columnTypes/switchCell_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/columnTypes/switchCell_spec.js
index 9a3b247723..6215e506da 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/columnTypes/switchCell_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/columnTypes/switchCell_spec.js
@@ -71,7 +71,7 @@ describe("Switch column type funtionality test", () => {
.contains("STYLE")
.click({ force: true });
// Check horizontal alignment
- cy.get(".t--property-control-horizontalalignment .t--button-tab-CENTER")
+ cy.get(".t--property-control-horizontalalignment .t--button-group-CENTER")
.first()
.click();
@@ -80,7 +80,7 @@ describe("Switch column type funtionality test", () => {
});
// Check vertical alignment
- cy.get(".t--property-control-verticalalignment .t--button-tab-BOTTOM")
+ cy.get(".t--property-control-verticalalignment .t--button-group-BOTTOM")
.first()
.click();
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/pagesize_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/pagesize_spec.js
index 551394d6fd..5e9b04bce9 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/pagesize_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/TableV2/pagesize_spec.js
@@ -11,13 +11,13 @@ describe("Table widget v2", function() {
cy.openPropertyPane("tablewidgetv2");
cy.moveToStyleTab();
- cy.get(".t--button-tab-SHORT").click({ force: true });
+ cy.get(".t--button-group-SHORT").click({ force: true });
cy.get(".t--widget-textwidget .bp3-ui-text").should("contain", "7");
- cy.get(".t--button-tab-DEFAULT").click({ force: true });
+ cy.get(".t--button-group-DEFAULT").click({ force: true });
cy.get(".t--widget-textwidget .bp3-ui-text").should("contain", "5");
- cy.get(".t--button-tab-TALL").click({ force: true });
+ cy.get(".t--button-group-TALL").click({ force: true });
cy.get(".t--widget-textwidget .bp3-ui-text").should("contain", "4");
});
});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Text/Text_new_feature_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Text/Text_new_feature_spec.js
index d19a4eee98..07057540fb 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Text/Text_new_feature_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Text/Text_new_feature_spec.js
@@ -137,7 +137,7 @@ describe("Text Widget color/font/alignment Functionality", function() {
it("Test to validate enable scroll feature", function() {
cy.moveToContentTab();
- cy.get(".t--button-tab-SCROLL").click({ force: true });
+ cy.get(".t--button-group-SCROLL").click({ force: true });
cy.wait("@updateLayout");
cy.get(commonlocators.headingTextStyle).trigger("mouseover", {
force: true,
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Text/Text_truncate_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Text/Text_truncate_spec.js
index 24389115c7..fb5b9cdd92 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Text/Text_truncate_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/Text/Text_truncate_spec.js
@@ -8,7 +8,7 @@ describe("Text Widget Truncate Functionality", function() {
it("Check default overflow property is No overflow", function() {
cy.openPropertyPane("textwidget");
- cy.get(".t--button-tab-NONE")
+ cy.get(".t--button-group-NONE")
.last()
.should("have.attr", "aria-selected", "true");
cy.closePropertyPane();
@@ -34,7 +34,7 @@ describe("Text Widget Truncate Functionality", function() {
it("Enable Truncate Text option and Validate", function() {
cy.wait(2000);
cy.get("body").type("{esc}");
- cy.get(".t--button-tab-TRUNCATE").click({ force: true });
+ cy.get(".t--button-group-TRUNCATE").click({ force: true });
cy.wait("@updateLayout");
cy.get(
`.appsmith_widget_${dsl.dsl.children[0].widgetId} .t--widget-textwidget-truncate`,
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/WidgetCopyPaste_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/WidgetCopyPaste_spec.js
index ded2d5f201..60f6586f20 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/WidgetCopyPaste_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Widgets/WidgetCopyPaste_spec.js
@@ -166,4 +166,4 @@ describe("Widget Copy paste", function() {
//verify a pasted list widget
cy.get(widgetsPage.listWidget).should("have.length", 1);
});
-});
\ No newline at end of file
+});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/Datasources/MySQLNoiseTest_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/Datasources/MySQLNoiseTest_spec.js
index 7479016c4a..7bdf9db30e 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/Datasources/MySQLNoiseTest_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/Datasources/MySQLNoiseTest_spec.js
@@ -63,10 +63,8 @@ describe("MySQL noise test", function() {
expect(response.body.data.statusCode).to.eq("200 OK");
});
cy.wait("@postExecute").then(({ response }) => {
- expect(response.body.data.statusCode).to.eq("5004");
- expect(response.body.data.title).to.eq(
- "Datasource configuration is invalid",
- );
+ expect(response.body.data.statusCode).to.eq("5000");
+ expect(response.body.data.title).to.eq("Query execution error");
});
});
});
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/JsFunctionExecution/JSFunctionExecution_spec.ts b/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/JsFunctionExecution/JSFunctionExecution_spec.ts
index 3f51bc8a1b..62d8bb3d49 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/JsFunctionExecution/JSFunctionExecution_spec.ts
+++ b/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/JsFunctionExecution/JSFunctionExecution_spec.ts
@@ -437,13 +437,15 @@ describe("JS Function Execution", function() {
it("9. Bug 13197: Verify converting async functions to sync resets all settings", () => {
const asyncJSCode = `export default {
+name: "Appsmith",
asyncToSync : async ()=>{
return "yes";`;
const syncJSCode = `export default {
+ name: "Appsmith",
asyncToSync : ()=>{
return "yes";
- }
+ },
}`;
jsEditor.CreateJSObject(asyncJSCode, {
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/OnLoadTests/JSOnLoad2_Spec.ts b/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/OnLoadTests/JSOnLoad2_Spec.ts
index d5d1ce5623..d90e0727ff 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/OnLoadTests/JSOnLoad2_Spec.ts
+++ b/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/OnLoadTests/JSOnLoad2_Spec.ts
@@ -40,7 +40,7 @@ describe("JSObjects OnLoad Actions tests", function() {
AssertJSOnPageLoad(
"runWorldCountries",
false,
- "UncaughtPromiseRejection: getWorldCountries is not defined",
+ "ReferenceError: getWorldCountries is not defined",
);
});
});
@@ -51,7 +51,7 @@ describe("JSObjects OnLoad Actions tests", function() {
AssertJSOnPageLoad(
"runWorldCountries",
false,
- "UncaughtPromiseRejection: getWorldCountries is not defined",
+ "ReferenceError: getWorldCountries is not defined",
);
homePage.NavigateToHome();
@@ -59,7 +59,7 @@ describe("JSObjects OnLoad Actions tests", function() {
AssertJSOnPageLoad(
"runWorldCountries",
false,
- "UncaughtPromiseRejection: getWorldCountries is not defined",
+ "ReferenceError: getWorldCountries is not defined",
);
});
@@ -244,7 +244,7 @@ describe("JSObjects OnLoad Actions tests", function() {
function AssertJSOnPageLoad(
jsMethod: string,
shouldCheckImport = false,
- faliureMsg: string = "",
+ faliureMsg = "",
) {
agHelper.AssertElementVisible(
jsEditor._dialogBody("JSObject1." + jsMethod),
diff --git a/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/OnLoadTests/JSOnLoad_cyclic_dependency_errors_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/OnLoadTests/JSOnLoad_cyclic_dependency_errors_spec.js
index 455ecc4821..4b9a290ea8 100644
--- a/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/OnLoadTests/JSOnLoad_cyclic_dependency_errors_spec.js
+++ b/app/client/cypress/integration/Smoke_TestSuite/ServerSideTests/OnLoadTests/JSOnLoad_cyclic_dependency_errors_spec.js
@@ -40,7 +40,7 @@ describe("Cyclic Dependency Informational Error Messagaes", function() {
.last()
.find(`${datasource.createQuery}`)
.click({ force: true });
-
+
//Step5.1: Click the editing field
cy.get(".t--action-name-edit-field").click({ force: true });
@@ -170,4 +170,4 @@ describe("Cyclic Dependency Informational Error Messagaes", function() {
1,
);
});
-});
\ No newline at end of file
+});
diff --git a/app/client/cypress/locators/Widgets.json b/app/client/cypress/locators/Widgets.json
index 0979b26894..d550d7fa5d 100644
--- a/app/client/cypress/locators/Widgets.json
+++ b/app/client/cypress/locators/Widgets.json
@@ -58,7 +58,7 @@
"deleteWidget": ".t--modal-widget>div .t--widget-delete-control",
"textbuttonWidget": ".t--draggable-buttonwidget button.bp3-button[type='button']",
"textInputval": ".t--draggable-textwidget span.t--widget-name",
- "textCenterAlign": ".t--property-control-alignment .t--button-tab-CENTER",
+ "textCenterAlign": ".t--property-control-alignment .t--button-group-CENTER",
"ColumnAction": ".t--property-control-rowbutton button",
"SearchTextChangeAction": ".t--property-control-onsearchtextchanged button",
"tableSearchTextChangeSelected": ".t--property-control-onsearchtextchanged",
@@ -86,15 +86,15 @@
"editCreatedColumn": ".t--property-control-createdcolumns input",
"alignOpt": ".t--dropdown-option",
"tableCol": ".draggable-header ",
- "centerAlign": ".t--button-tab-CENTER",
- "rightAlign": ".t--button-tab-RIGHT",
- "leftAlign": ".t--button-tab-LEFT",
- "bold": ".t--button-tab-BOLD",
- "italics": ".t--button-tab-ITALIC",
- "underline": ".t--button-tab-UNDERLINE",
- "verticalTop": ".t--button-tab-TOP",
- "verticalCenter": ".t--button-tab-CENTER",
- "verticalBottom": ".t--button-tab-BOTTOM",
+ "centerAlign": ".t--button-group-CENTER",
+ "rightAlign": ".t--button-group-RIGHT",
+ "leftAlign": ".t--button-group-LEFT",
+ "bold": ".t--button-group-BOLD",
+ "italics": ".t--button-group-ITALIC",
+ "underline": ".t--button-group-UNDERLINE",
+ "verticalTop": ".t--button-group-TOP",
+ "verticalCenter": ".t--button-group-CENTER",
+ "verticalBottom": ".t--button-group-BOTTOM",
"textColor": ".t--property-control-textcolor input",
"boadercolorPicker": ".t--property-control-bordercolour input",
"boxShadowColorPicker": ".t--property-control-shadowcolor input",
diff --git a/app/client/cypress/support/Objects/mySqlData.ts b/app/client/cypress/support/Objects/mySqlData.ts
index 96e1e0d986..88f1106592 100644
--- a/app/client/cypress/support/Objects/mySqlData.ts
+++ b/app/client/cypress/support/Objects/mySqlData.ts
@@ -219,7 +219,7 @@ const mySqlData = {
["a", "abcdefghijklmnopqrst", "12345678912345", "true", "null"],
["a", "abcdefghij", "012345", "false", "NulL"],
["a", "b", "c"],
- ["0", "1"],
+ ["false", "true"],
[{"abc": "123"}, {}, [1, 2, 3, 4], [], ["a",true,0,12.34]],
],
query: {
diff --git a/app/client/cypress/support/Pages/AggregateHelper.ts b/app/client/cypress/support/Pages/AggregateHelper.ts
index 891561992d..5f1cf8502d 100644
--- a/app/client/cypress/support/Pages/AggregateHelper.ts
+++ b/app/client/cypress/support/Pages/AggregateHelper.ts
@@ -579,8 +579,8 @@ export class AggregateHelper {
cy.get(selector)
.contains(containsText)
.eq(index)
- .click()
- .wait(200);
+ .click({ force: true })
+ .wait(500);
}
public CheckUncheck(selector: string, check = true) {
diff --git a/app/client/cypress/support/Pages/DataSources.ts b/app/client/cypress/support/Pages/DataSources.ts
index 6fefeb51bc..e6816bec65 100644
--- a/app/client/cypress/support/Pages/DataSources.ts
+++ b/app/client/cypress/support/Pages/DataSources.ts
@@ -115,6 +115,22 @@ export class DataSources {
private _queryTimeout =
"//input[@name='actionConfiguration.timeoutInMillisecond']";
_getStructureReq = "/api/v1/datasources/*/structure?ignoreCache=true";
+ _editDatasourceFromActiveTab = (dsName: string) =>
+ ".t--datasource-name:contains('" + dsName + "')";
+ private _urlInputControl = "input[name='url']";
+
+ // Authenticated API locators
+ private _authType = "[data-cy=authType]";
+ private _oauth2 = ".t--dropdown-option:contains('OAuth 2.0')";
+ private _accessTokenUrl = "[data-cy='authentication.accessTokenUrl'] input";
+ private _clientID = "[data-cy='authentication.clientId'] input";
+ private _clientSecret = "[data-cy='authentication.clientSecret'] input";
+ private _authorizationCode =
+ ".t--dropdown-option:contains('Authorization Code')";
+ private _grantType = "[data-cy='authentication.grantType']";
+ private _authorizationURL =
+ "[data-cy='authentication.authorizationUrl'] input";
+
public _datasourceModalSave = ".t--datasource-modal-save";
public _datasourceModalDoNotSave = ".t--datasource-modal-do-not-save";
@@ -372,7 +388,9 @@ export class DataSources {
public TestDatasource(expectedRes = true) {
this.agHelper.GetNClick(this._testDs, 0, false, 0);
this.agHelper.ValidateNetworkDataSuccess("@testDatasource", expectedRes);
- this.agHelper.AssertContains("datasource is valid");
+ if (expectedRes) {
+ this.agHelper.AssertContains("datasource is valid");
+ }
}
public SaveDatasource() {
@@ -391,7 +409,7 @@ export class DataSources {
this.agHelper.ValidateNetworkStatus("@saveDatasource", 201);
}
- public updateDatasource() {
+ public UpdateDatasource() {
this.agHelper.GetNClick(this._saveDs);
// this.agHelper.ValidateNetworkStatus("@updateDatasource", 200);
this.agHelper.AssertContains("datasource updated");
@@ -519,11 +537,11 @@ export class DataSources {
}
public CloseReconnectDataSourceModal() {
- cy.get('body').then(($ele) =>{
- if($ele.find(this._reconnectDataSourceModal).length){
- this.agHelper.GetNClick(this._closeDataSourceModal)
+ cy.get("body").then(($ele) => {
+ if ($ele.find(this._reconnectDataSourceModal).length) {
+ this.agHelper.GetNClick(this._closeDataSourceModal);
}
- })
+ });
}
RunQuery(
@@ -760,7 +778,7 @@ export class DataSources {
) {
cy.intercept("GET", this._getStructureReq).as("getDSStructure");
if (isUpdate) {
- this.updateDatasource();
+ this.UpdateDatasource();
} else {
this.SaveDatasource();
}
@@ -772,6 +790,8 @@ export class DataSources {
public SaveDSFromDialog(save = true) {
this.agHelper.GoBack();
+ this.agHelper.AssertElementVisible(this._datasourceModalDoNotSave);
+ this.agHelper.AssertElementVisible(this._datasourceModalSave);
if (save) {
this.agHelper.GetNClick(
this.locator._visibleTextSpan("SAVE"),
@@ -790,7 +810,40 @@ export class DataSources {
);
}
- public getDSEntity(dSName: string){
+ public getDSEntity(dSName: string) {
return `[data-guided-tour-id="explorer-entity-${dSName}"]`;
}
+
+ public FillAuthAPIUrl() {
+ const URL = datasourceFormData["authenticatedApiUrl"];
+ this.agHelper.TypeText(this._urlInputControl, URL);
+ }
+
+ public AddOAuth2AuthorizationCodeDetails(
+ accessTokenUrl: string,
+ clientId: string,
+ clientSecret: string,
+ authURL: string,
+ ) {
+ this.agHelper.GetNClick(this._authType);
+ this.agHelper.GetNClick(this._oauth2);
+ this.agHelper.GetNClick(this._grantType);
+ this.agHelper.GetNClick(this._authorizationCode);
+ this.agHelper.TypeText(this._accessTokenUrl, accessTokenUrl);
+ this.agHelper.TypeText(this._clientID, clientId);
+ this.agHelper.TypeText(this._clientSecret, clientSecret);
+ this.agHelper.TypeText(this._authorizationURL, authURL);
+ }
+
+ public EditDSFromActiveTab(dsName: string) {
+ this.agHelper.GetNClick(this._editDatasourceFromActiveTab(dsName));
+ }
+
+ public FillMongoDatasourceFormWithURI(uri: string) {
+ this.ValidateNSelectDropdown("Use Mongo Connection String URI", "", "Yes");
+ this.agHelper.TypeText(
+ this.locator._inputFieldByName("Connection String URI") + "//input",
+ uri,
+ );
+ }
}
diff --git a/app/client/cypress/support/Pages/HomePage.ts b/app/client/cypress/support/Pages/HomePage.ts
index 9561c16881..1c7f5ebac5 100644
--- a/app/client/cypress/support/Pages/HomePage.ts
+++ b/app/client/cypress/support/Pages/HomePage.ts
@@ -80,6 +80,16 @@ export class HomePage {
private _deleteAppConfirm = '[data-cy="t--delete"]';
private _wsAction = (action: string) =>
"//span[text()='" + action + "']/ancestor::a";
+ private _homeTab = ".t--apps-tab";
+ private _templatesTab = ".t--templates-tab";
+
+ public SwitchToAppsTab() {
+ this.agHelper.GetNClick(this._homeTab);
+ }
+
+ public SwitchToTemplatesTab() {
+ this.agHelper.GetNClick(this._templatesTab);
+ }
public CreateNewWorkspace(workspaceNewName: string) {
let oldName = "";
diff --git a/app/client/cypress/support/commands.js b/app/client/cypress/support/commands.js
index 08d1e2c29d..6efd6291b0 100644
--- a/app/client/cypress/support/commands.js
+++ b/app/client/cypress/support/commands.js
@@ -1673,7 +1673,7 @@ Cypress.Commands.add("checkLabelForWidget", (options) => {
const containerSelector = `${widgetSelector} ${options.containerSelector}`;
const labelPositionSelector = ".t--property-control-position";
const labelAlignmentRightSelector =
- ".t--property-control-alignment .t--button-tab-right";
+ ".t--property-control-alignment .t--button-group-right";
const labelWidth = options.labelWidth;
// Drag a widget
@@ -1690,17 +1690,17 @@ Cypress.Commands.add("checkLabelForWidget", (options) => {
.contains(labelText);
// Set the label position: Auto
- cy.get(".t--button-tab-Auto").click({ force: true });
+ cy.get(".t--button-group-Auto").click({ force: true });
// Assert label position: Auto
cy.get(containerSelector).should("have.css", "flex-direction", "column");
// Change the label position to Top
- cy.get(".t--button-tab-Top").click({ force: true });
+ cy.get(".t--button-group-Top").click({ force: true });
// Assert label position: Top
cy.get(containerSelector).should("have.css", "flex-direction", "column");
// Change the label position to Left
- cy.get(".t--button-tab-Left").click({ force: true });
+ cy.get(".t--button-group-Left").click({ force: true });
// Assert label position: Left
cy.get(containerSelector).should("have.css", "flex-direction", "row");
diff --git a/app/client/package.json b/app/client/package.json
index 9558fd66c5..8f4cae2d27 100644
--- a/app/client/package.json
+++ b/app/client/package.json
@@ -46,7 +46,7 @@
"cypress-log-to-output": "^1.1.2",
"dayjs": "^1.10.6",
"deep-diff": "^1.0.2",
- "design-system": "npm:@appsmithorg/design-system@1.0.41",
+ "design-system": "npm:@appsmithorg/design-system@1.0.44",
"downloadjs": "^1.4.7",
"draft-js": "^0.11.7",
"exceljs-lightweight": "^1.14.0",
diff --git a/app/client/src/actions/datasourceActions.ts b/app/client/src/actions/datasourceActions.ts
index 5a703cf128..90540bc50a 100644
--- a/app/client/src/actions/datasourceActions.ts
+++ b/app/client/src/actions/datasourceActions.ts
@@ -338,6 +338,25 @@ export const toggleSaveActionFromPopupFlag = (isDSSavedFromPopup: boolean) => {
};
};
+// This function stores the config property for key value pairs in
+// datasource form which are initialized by default
+export const setDefaultKeyValPairFlag = (defaultKeyValArrayConfig: string) => {
+ return {
+ type: ReduxActionTypes.SET_DATASOURCE_DEFAULT_KEY_VALUE_PAIR_SET,
+ payload: defaultKeyValArrayConfig,
+ };
+};
+
+// This function resets the config property stored in redux for key value pairs in
+// datasource form which are initialized by default, once these key value pairs are initialized
+// in the datasource config form, store needs to reset those values
+export const resetDefaultKeyValPairFlag = () => {
+ return {
+ type: ReduxActionTypes.RESET_DATASOURCE_DEFAULT_KEY_VALUE_PAIR_SET,
+ payload: [],
+ };
+};
+
export default {
fetchDatasources,
initDatasourcePane,
diff --git a/app/client/src/actions/evaluationActions.ts b/app/client/src/actions/evaluationActions.ts
index dd402e2cd9..aca42ec15b 100644
--- a/app/client/src/actions/evaluationActions.ts
+++ b/app/client/src/actions/evaluationActions.ts
@@ -61,7 +61,7 @@ export const EVALUATE_REDUX_ACTIONS = [
ReduxActionTypes.FETCH_JS_ACTIONS_VIEW_MODE_SUCCESS,
ReduxActionErrorTypes.FETCH_JS_ACTIONS_VIEW_MODE_ERROR,
ReduxActionTypes.UPDATE_JS_ACTION_BODY_SUCCESS,
- ReduxActionTypes.EXECUTE_JS_FUNCTION_SUCCESS,
+ ReduxActionTypes.SET_JS_FUNCTION_EXECUTION_DATA,
// App Data
ReduxActionTypes.SET_APP_MODE,
ReduxActionTypes.FETCH_USER_DETAILS_SUCCESS,
diff --git a/app/client/src/ce/constants/ReduxActionConstants.tsx b/app/client/src/ce/constants/ReduxActionConstants.tsx
index d97a970b9d..e16881ac51 100644
--- a/app/client/src/ce/constants/ReduxActionConstants.tsx
+++ b/app/client/src/ce/constants/ReduxActionConstants.tsx
@@ -557,6 +557,7 @@ export const ReduxActionTypes = {
FETCH_JS_ACTIONS_VIEW_MODE_SUCCESS: "FETCH_JS_ACTIONS_VIEW_MODE_SUCCESS",
EXECUTE_JS_FUNCTION_INIT: "EXECUTE_JS_FUNCTION_INIT",
EXECUTE_JS_FUNCTION_SUCCESS: "EXECUTE_JS_FUNCTION_SUCCESS",
+ SET_JS_FUNCTION_EXECUTION_DATA: "SET_JS_FUNCTION_EXECUTION_DATA",
GET_PLUGIN_FORM_CONFIG_INIT: "GET_PLUGIN_FORM_CONFIG_INIT",
EXECUTE_DATASOURCE_QUERY_INIT: "EXECUTE_DATASOURCE_QUERY_INIT",
EXECUTE_DATASOURCE_QUERY_SUCCESS: "EXECUTE_DATASOURCE_QUERY_SUCCESS",
@@ -752,6 +753,10 @@ export const ReduxActionTypes = {
SET_DATASOURCE_SAVE_ACTION_FLAG: "SET_DATASOURCE_SAVE_ACTION_FLAG",
SET_DATASOURCE_SAVE_ACTION_FROM_POPUP_FLAG:
"SET_DATASOURCE_SAVE_ACTION_FROM_POPUP_FLAG",
+ SET_DATASOURCE_DEFAULT_KEY_VALUE_PAIR_SET:
+ "SET_DATASOURCE_DEFAULT_KEY_VALUE_PAIR_SET",
+ RESET_DATASOURCE_DEFAULT_KEY_VALUE_PAIR_SET:
+ "RESET_DATASOURCE_DEFAULT_KEY_VALUE_PAIR_SET",
};
export type ReduxActionType = typeof ReduxActionTypes[keyof typeof ReduxActionTypes];
diff --git a/app/client/src/ce/constants/messages.ts b/app/client/src/ce/constants/messages.ts
index f58c699b9d..967f7f9590 100644
--- a/app/client/src/ce/constants/messages.ts
+++ b/app/client/src/ce/constants/messages.ts
@@ -1190,6 +1190,8 @@ export const ADMIN_BRANDING_COLOR_TOOLTIP_FONT = () =>
`Used as text color for the buttons.`;
export const ADMIN_BRANDING_COLOR_TOOLTIP_DISABLED = () =>
`Used as background color for disabled buttons.`;
+export const ADMIN_BRANDING_UPGRADE_INTERCOM_MESSAGE = () =>
+ `I would like to enable Custom Branding for my workspace and am interested in Appsmith Business.`;
// Guided tour
// -- STEPS ---
diff --git a/app/client/src/ce/pages/AdminSettings/config/authentication/AuthPage.tsx b/app/client/src/ce/pages/AdminSettings/config/authentication/AuthPage.tsx
index 516f5ff220..819ca8f274 100644
--- a/app/client/src/ce/pages/AdminSettings/config/authentication/AuthPage.tsx
+++ b/app/client/src/ce/pages/AdminSettings/config/authentication/AuthPage.tsx
@@ -212,7 +212,7 @@ export function AuthPage({ authMethods }: { authMethods: AuthMethodType[] }) {
{
const { onUpgrade } = useOnUpgrade({
logEventName: "BRANDING_UPGRADE_CLICK",
- intercomMessage:
- "Hello, I would like to upgrade my appsmith instance to use the custom branding feature",
+ intercomMessage: createMessage(ADMIN_BRANDING_UPGRADE_INTERCOM_MESSAGE),
});
return (
diff --git a/app/client/src/ce/pages/workspace/WorkspaceInviteUsersForm.tsx b/app/client/src/ce/pages/workspace/WorkspaceInviteUsersForm.tsx
index 3862b1b47e..22769824f8 100644
--- a/app/client/src/ce/pages/workspace/WorkspaceInviteUsersForm.tsx
+++ b/app/client/src/ce/pages/workspace/WorkspaceInviteUsersForm.tsx
@@ -636,6 +636,7 @@ export default connect(
applicationId?: string;
workspaceId?: string;
isApplicationInvite?: boolean;
+ placeholder?: string;
}
>({
validate,
diff --git a/app/client/src/components/designSystems/appsmith/BaseButton.tsx b/app/client/src/components/designSystems/appsmith/BaseButton.tsx
index ff881bb5e6..d623ee1618 100644
--- a/app/client/src/components/designSystems/appsmith/BaseButton.tsx
+++ b/app/client/src/components/designSystems/appsmith/BaseButton.tsx
@@ -152,7 +152,7 @@ const StyledButton = styled((props) => (
} !important;
}
- &:hover:enabled, &:active:enabled {
+ &:hover:enabled, &:active:enabled. &:focus:enabled {
background: ${
buttonStyle === ButtonStyleTypes.WARNING
? buttonVariant === ButtonVariantTypes.SECONDARY
diff --git a/app/client/src/components/designSystems/appsmith/PositionedContainer.tsx b/app/client/src/components/designSystems/appsmith/PositionedContainer.tsx
index da5c6a7c63..59c0252008 100644
--- a/app/client/src/components/designSystems/appsmith/PositionedContainer.tsx
+++ b/app/client/src/components/designSystems/appsmith/PositionedContainer.tsx
@@ -22,7 +22,10 @@ import {
import { POSITIONED_WIDGET } from "constants/componentClassNameConstants";
import equal from "fast-deep-equal";
-const PositionedWidget = styled.div<{ zIndexOnHover: number }>`
+const PositionedWidget = styled.div<{
+ zIndexOnHover: number;
+ disabled?: boolean;
+}>`
&:hover {
z-index: ${(props) => props.zIndexOnHover} !important;
}
@@ -42,6 +45,8 @@ export type PositionedContainerProps = {
noContainerOffset?: boolean;
leftColumn: number;
parentColumnSpace: number;
+ isDisabled?: boolean;
+ isVisible?: boolean;
};
export const checkIsDropTarget = memoize(function isDropTarget(
@@ -163,7 +168,9 @@ export function PositionedContainer(props: PositionedContainerProps) {
return (
{
- const childNodes = navigationData.children;
+ const childNodes = navigationData.children || {};
if (Object.keys(childNodes).length) {
const token = editor.getTokenAt(
{
diff --git a/app/client/src/components/formControls/KeyValueArrayControl.tsx b/app/client/src/components/formControls/KeyValueArrayControl.tsx
index 913e19a452..cc4e67268a 100644
--- a/app/client/src/components/formControls/KeyValueArrayControl.tsx
+++ b/app/client/src/components/formControls/KeyValueArrayControl.tsx
@@ -21,6 +21,8 @@ import {
TextInputProps,
TextType,
} from "design-system";
+import { setDefaultKeyValPairFlag } from "actions/datasourceActions";
+import { useDispatch } from "react-redux";
export interface KeyValueArrayControlProps extends ControlProps {
name: string;
label: string;
@@ -88,6 +90,7 @@ function KeyValueRow(
const keyName = getFieldName(extraData[0]?.configProperty);
const valueName = getFieldName(extraData[1]?.configProperty);
const keyFieldProps = extraData[0];
+ const dispatch = useDispatch();
const addRow = useCallback(() => {
if (keyName && valueName) {
@@ -102,6 +105,9 @@ function KeyValueRow(
if (props.fields.length < 1) {
for (let i = props.fields.length; i < 1; i += 1) {
addRow();
+ // Since we are initializing one default key value pair, it needs to stored in redux store
+ // so that it can be used to initilize datasource config form as well
+ dispatch(setDefaultKeyValPairFlag(props.configProperty));
}
}
}, [props.fields, keyName, valueName]);
diff --git a/app/client/src/components/propertyControls/BorderRadiusOptionsControl.tsx b/app/client/src/components/propertyControls/BorderRadiusOptionsControl.tsx
index a4216c1ef7..cc576b81fb 100644
--- a/app/client/src/components/propertyControls/BorderRadiusOptionsControl.tsx
+++ b/app/client/src/components/propertyControls/BorderRadiusOptionsControl.tsx
@@ -1,9 +1,8 @@
import * as React from "react";
-import { TooltipComponent } from "design-system";
+import { ButtonGroup, TooltipComponent } from "design-system";
import BaseControl, { ControlData, ControlProps } from "./BaseControl";
import { borderRadiusOptions } from "constants/ThemeConstants";
-import { ButtonTab } from "design-system";
import {
DSEventDetail,
DSEventTypes,
@@ -64,7 +63,7 @@ class BorderRadiusOptionsControl extends BaseControl<
handleAdsEvent = (e: CustomEvent) => {
if (
- e.detail.component === "ButtonTab" &&
+ e.detail.component === "ButtonGroup" &&
e.detail.event === DSEventTypes.KEYPRESS
) {
emitInteractionAnalyticsEvent(this.componentRef.current, {
@@ -80,7 +79,7 @@ class BorderRadiusOptionsControl extends BaseControl<
public render() {
return (
- {
diff --git a/app/client/src/components/propertyControls/BoxShadowOptionsControl.tsx b/app/client/src/components/propertyControls/BoxShadowOptionsControl.tsx
index da2e8bb236..ec4cae863e 100644
--- a/app/client/src/components/propertyControls/BoxShadowOptionsControl.tsx
+++ b/app/client/src/components/propertyControls/BoxShadowOptionsControl.tsx
@@ -1,10 +1,9 @@
import * as React from "react";
import BaseControl, { ControlData, ControlProps } from "./BaseControl";
-import { TooltipComponent } from "design-system";
+import { ButtonGroup, TooltipComponent } from "design-system";
import { boxShadowOptions } from "constants/ThemeConstants";
import CloseLineIcon from "remixicon-react/CloseLineIcon";
-import { ButtonTab } from "design-system";
import {
DSEventDetail,
DSEventTypes,
@@ -58,7 +57,7 @@ class BoxShadowOptionsControl extends BaseControl<
handleAdsEvent = (e: CustomEvent) => {
if (
- e.detail.component === "ButtonTab" &&
+ e.detail.component === "ButtonGroup" &&
e.detail.event === DSEventTypes.KEYPRESS
) {
emitInteractionAnalyticsEvent(this.componentRef.current, {
@@ -74,7 +73,7 @@ class BoxShadowOptionsControl extends BaseControl<
public render() {
return (
- {
diff --git a/app/client/src/components/propertyControls/ButtonTabControl.tsx b/app/client/src/components/propertyControls/ButtonTabControl.tsx
index 8b5020647e..1258cf88bd 100644
--- a/app/client/src/components/propertyControls/ButtonTabControl.tsx
+++ b/app/client/src/components/propertyControls/ButtonTabControl.tsx
@@ -1,6 +1,6 @@
import React from "react";
import BaseControl, { ControlData, ControlProps } from "./BaseControl";
-import { ButtonTab, ButtonTabOption } from "design-system";
+import { ButtonGroup, ButtonGroupOption } from "design-system";
import produce from "immer";
import {
DSEventDetail,
@@ -28,7 +28,7 @@ class ButtonTabControl extends BaseControl {
handleAdsEvent = (e: CustomEvent) => {
if (
- e.detail.component === "ButtonTab" &&
+ e.detail.component === "ButtonGroup" &&
e.detail.event === DSEventTypes.KEYPRESS
) {
emitInteractionAnalyticsEvent(this.componentRef.current, {
@@ -67,7 +67,7 @@ class ButtonTabControl extends BaseControl {
render() {
const { options, propertyValue } = this.props;
return (
- {
}
static getControlType() {
- return "BUTTON_TABS";
+ return "BUTTON_GROUP";
}
static canDisplayValueInUI(config: ControlData, value: any): boolean {
@@ -98,7 +98,7 @@ class ButtonTabControl extends BaseControl {
}
export interface ButtonTabControlProps extends ControlProps {
- options: ButtonTabOption[];
+ options: ButtonGroupOption[];
defaultValue: string;
}
diff --git a/app/client/src/components/propertyControls/IconTabControl.tsx b/app/client/src/components/propertyControls/IconTabControl.tsx
index 50c7aa9aac..cb18d79b02 100644
--- a/app/client/src/components/propertyControls/IconTabControl.tsx
+++ b/app/client/src/components/propertyControls/IconTabControl.tsx
@@ -1,6 +1,6 @@
import React from "react";
import BaseControl, { ControlData, ControlProps } from "./BaseControl";
-import { ButtonTab, ButtonTabOption } from "design-system";
+import { ButtonGroup, ButtonGroupOption } from "design-system";
import {
DSEventDetail,
DSEventTypes,
@@ -27,7 +27,7 @@ class IconTabControl extends BaseControl {
handleAdsEvent = (e: CustomEvent) => {
if (
- e.detail.component === "ButtonTab" &&
+ e.detail.component === "ButtonGroup" &&
e.detail.event === DSEventTypes.KEYPRESS
) {
emitInteractionAnalyticsEvent(this.componentRef.current, {
@@ -52,7 +52,7 @@ class IconTabControl extends BaseControl {
render() {
const { fullWidth, options, propertyValue } = this.props;
return (
- {
}
export interface IconTabControlProps extends ControlProps {
- options: ButtonTabOption[];
+ options: ButtonGroupOption[];
defaultValue: string;
fullWidth: boolean;
}
diff --git a/app/client/src/components/propertyControls/LabelAlignmentOptionsControl.tsx b/app/client/src/components/propertyControls/LabelAlignmentOptionsControl.tsx
index ffd8cfd6c5..9d5aa72c68 100644
--- a/app/client/src/components/propertyControls/LabelAlignmentOptionsControl.tsx
+++ b/app/client/src/components/propertyControls/LabelAlignmentOptionsControl.tsx
@@ -3,7 +3,7 @@ import styled from "styled-components";
import { Alignment } from "@blueprintjs/core";
import BaseControl, { ControlProps } from "./BaseControl";
-import { ButtonTab, ButtonTabOption } from "design-system";
+import { ButtonGroup, ButtonGroupOption } from "design-system";
import {
DSEventDetail,
DSEventTypes,
@@ -22,7 +22,7 @@ const ControlContainer = styled.div`
export interface LabelAlignmentOptionsControlProps extends ControlProps {
propertyValue?: Alignment;
- options: ButtonTabOption[];
+ options: ButtonGroupOption[];
defaultValue: Alignment;
}
@@ -52,7 +52,7 @@ class LabelAlignmentOptionsControl extends BaseControl<
handleAdsEvent = (e: CustomEvent) => {
if (
- e.detail.component === "ButtonTab" &&
+ e.detail.component === "ButtonGroup" &&
e.detail.event === DSEventTypes.KEYPRESS
) {
emitInteractionAnalyticsEvent(this.componentRef.current, {
@@ -70,7 +70,7 @@ class LabelAlignmentOptionsControl extends BaseControl<
const { options, propertyValue } = this.props;
return (
- {
@@ -115,6 +133,7 @@ class MenuButtonDynamicItemsControl extends BaseControl<
if (value && !propertyValue) {
this.onTextChange(value);
}
+
return (
{
- return `{{${menuButtonId}.sourceData.map((currentItem, currentIndex) => ( `;
+ static getBindingPrefix = (
+ widgetName: string,
+ widgetType?: string,
+ primaryColumns?: Record,
+ ) => {
+ if (widgetType === "TABLE_WIDGET_V2" && primaryColumns) {
+ const columnName = Object.keys(primaryColumns)?.[0];
+
+ return `{{${widgetName}.processedTableData.map((currentRow, currentRowIndex) => {
+ let primaryColumnData = [];
+
+ if (${widgetName}.primaryColumns.${columnName}.sourceData[currentRowIndex].length) {
+ primaryColumnData = ${widgetName}.primaryColumns.${columnName}.sourceData[currentRowIndex];
+ } else if (${widgetName}.primaryColumns.${columnName}.sourceData.length) {
+ primaryColumnData = ${widgetName}.primaryColumns.${columnName}.sourceData;
+ }
+
+ return primaryColumnData.map((currentItem, currentIndex) => `;
+ } else {
+ return `{{${widgetName}.sourceData.map((currentItem, currentIndex) => ( `;
+ }
};
- static bindingSuffix = `))}}`;
+ static getBindingSuffix = (widgetType?: string) =>
+ widgetType === "TABLE_WIDGET_V2" ? `);});}}` : `))}}`;
static getInputComputedValue = (
propertyValue: string,
- menuButtonId: string,
+ widgetName: string,
+ widgetType?: string,
+ primaryColumns?: Record,
) => {
- if (!propertyValue.includes(this.getBindingPrefix(menuButtonId))) {
+ if (
+ !propertyValue.includes(
+ this.getBindingPrefix(widgetName, widgetType, primaryColumns),
+ )
+ ) {
return propertyValue;
}
const value = `${propertyValue.substring(
- this.getBindingPrefix(menuButtonId).length,
- propertyValue.length - this.bindingSuffix.length,
+ this.getBindingPrefix(widgetName, widgetType, primaryColumns).length,
+ propertyValue.length - this.getBindingSuffix(widgetType).length,
)}`;
const stringValue = JSToString(value);
return stringValue;
};
- getComputedValue = (value: string, menuButtonId: string) => {
+ getComputedValue = (
+ value: string,
+ widgetName: string,
+ widgetType?: string,
+ primaryColumns?: Record,
+ ) => {
if (!isDynamicValue(value)) {
return value;
}
@@ -166,8 +216,12 @@ class MenuButtonDynamicItemsControl extends BaseControl<
}
return `${MenuButtonDynamicItemsControl.getBindingPrefix(
- menuButtonId,
- )}${stringToEvaluate}${MenuButtonDynamicItemsControl.bindingSuffix}`;
+ widgetName,
+ widgetType,
+ primaryColumns,
+ )}${stringToEvaluate}${MenuButtonDynamicItemsControl.getBindingSuffix(
+ widgetType,
+ )}`;
};
onTextChange = (event: React.ChangeEvent | string) => {
@@ -181,6 +235,8 @@ class MenuButtonDynamicItemsControl extends BaseControl<
const output = this.getComputedValue(
value,
this.props.widgetProperties.widgetName,
+ this.props.widgetProperties.type,
+ this.props.widgetProperties.primaryColumns,
);
this.updateProperty(this.props.propertyName, output);
diff --git a/app/client/src/components/propertyControls/OpenConfigPanelControl.tsx b/app/client/src/components/propertyControls/OpenConfigPanelControl.tsx
index 37705ca0da..cca6515a43 100644
--- a/app/client/src/components/propertyControls/OpenConfigPanelControl.tsx
+++ b/app/client/src/components/propertyControls/OpenConfigPanelControl.tsx
@@ -44,7 +44,7 @@ class OpenConfigPanelControl extends BaseControl {
| string) => {
let value = "";
+
if (typeof event !== "string") {
value = event.target?.value;
} else {
value = event;
}
+
if (isString(value)) {
const output = this.getComputedValue(
value,
diff --git a/app/client/src/components/wds/Checkbox/index.tsx b/app/client/src/components/wds/Checkbox/index.tsx
index d5c27cb1a1..fbc6ba769f 100644
--- a/app/client/src/components/wds/Checkbox/index.tsx
+++ b/app/client/src/components/wds/Checkbox/index.tsx
@@ -59,7 +59,8 @@ const Checkbox = styled(BlueprintCheckbox)`
}
// hover
- &.bp3-control.bp3-checkbox:hover input:not(:checked) ~ .bp3-control-indicator {
+ &.bp3-control.bp3-checkbox:hover input:not(:checked) ~ .bp3-control-indicator,
+ input:not(:checked):focus ~ .bp3-control-indicator {
box-shadow: 0px 0px 0px 1px ${
hasError
? "var(--wds-color-border-danger-hover)"
@@ -68,7 +69,10 @@ const Checkbox = styled(BlueprintCheckbox)`
}
// hover on checked
- &.bp3-control.bp3-checkbox:hover input:checked ~ .bp3-control-indicator, &.bp3-control.bp3-checkbox:hover input:indeterminate ~ .bp3-control-indicator {
+ &.bp3-control.bp3-checkbox:hover input:checked ~ .bp3-control-indicator,
+ &.bp3-control.bp3-checkbox:hover input:indeterminate ~ .bp3-control-indicator,
+ &.bp3-control.bp3-checkbox input:checked:focus ~ .bp3-control-indicator,
+ &.bp3-control.bp3-checkbox input:indeterminate:focus ~ .bp3-control-indicator {
box-shadow: none;
background: ${darkenColor(accentColor)} !important;
}
diff --git a/app/client/src/constants/DefaultTheme.tsx b/app/client/src/constants/DefaultTheme.tsx
index 15106c970a..d517d9a717 100644
--- a/app/client/src/constants/DefaultTheme.tsx
+++ b/app/client/src/constants/DefaultTheme.tsx
@@ -105,10 +105,9 @@ export const BlueprintControlTransform = css`
border: 1px solid var(--wds-color-border-disabled) !important;
}
- &:hover {
- & input:not(:checked):not(:disabled) ~ .bp3-control-indicator {
- border: 1px solid ${Colors.GREY_6} !important;
- }
+ &:hover input:not(:checked):not(:disabled) ~ .bp3-control-indicator,
+ & input:not(:checked):not(:disabled):focus ~ .bp3-control-indicator {
+ border: 1px solid var(--wds-color-bg-disabled-strong) !important;
}
}
@@ -137,11 +136,10 @@ export const BlueprintControlTransform = css`
}
}
- &:hover {
- & input:not(:checked):not(:disabled) ~ .bp3-control-indicator {
- background: var(--wds-color-bg-strong-hover);
- border: 1px solid var(--wds-color-border-hover) !important;
- }
+ &:hover input:not(:checked):not(:disabled) ~ .bp3-control-indicator,
+ input:not(:checked):not(:disabled):focus ~ .bp3-control-indicator {
+ background: var(--wds-color-bg-strong-hover);
+ border: 1px solid var(--wds-color-border-hover) !important;
}
}
diff --git a/app/client/src/constants/WidgetConstants.tsx b/app/client/src/constants/WidgetConstants.tsx
index bb2888ff07..b3b2173532 100644
--- a/app/client/src/constants/WidgetConstants.tsx
+++ b/app/client/src/constants/WidgetConstants.tsx
@@ -70,7 +70,7 @@ export const layoutConfigurations: LayoutConfigurations = {
FLUID: { minWidth: -1, maxWidth: -1 },
};
-export const LATEST_PAGE_VERSION = 74;
+export const LATEST_PAGE_VERSION = 75;
export const GridDefaults = {
DEFAULT_CELL_SIZE: 1,
diff --git a/app/client/src/constants/componentClassNameConstants.ts b/app/client/src/constants/componentClassNameConstants.ts
index fb79f40505..9a874924d8 100644
--- a/app/client/src/constants/componentClassNameConstants.ts
+++ b/app/client/src/constants/componentClassNameConstants.ts
@@ -1,8 +1,8 @@
-export function getStickyCanvasName(widgetId: string) {
+export function getSlidingArenaName(widgetId: string) {
return `div-selection-${widgetId}`;
}
-export function getSlidingCanvasName(widgetId: string) {
+export function getStickyCanvasName(widgetId: string) {
return `canvas-selection-${widgetId}`;
}
diff --git a/app/client/src/entities/Datasource/RestAPIForm.ts b/app/client/src/entities/Datasource/RestAPIForm.ts
index 91189f5987..bc875bb082 100644
--- a/app/client/src/entities/Datasource/RestAPIForm.ts
+++ b/app/client/src/entities/Datasource/RestAPIForm.ts
@@ -70,7 +70,7 @@ export interface Oauth2Common {
isAuthorizationHeader: boolean;
audience: string;
resource: string;
- sendScopeWithRefreshToken: string;
+ sendScopeWithRefreshToken: boolean;
refreshTokenClientCredentialsLocation: string;
useSelfSignedCert?: boolean;
}
diff --git a/app/client/src/pages/AppViewer/index.tsx b/app/client/src/pages/AppViewer/index.tsx
index 3ccf9c8b35..61bf7f1301 100644
--- a/app/client/src/pages/AppViewer/index.tsx
+++ b/app/client/src/pages/AppViewer/index.tsx
@@ -49,6 +49,7 @@ import {
checkContainersForAutoHeightAction,
updateWidgetAutoHeightAction,
} from "actions/autoHeightActions";
+import useWidgetFocus from "utils/hooks/useWidgetFocus/useWidgetFocus";
const AppViewerBody = styled.section<{
hasPages: boolean;
@@ -96,6 +97,8 @@ function AppViewer(props: Props) {
const prevValues = usePrevious({ branch, location: props.location, pageId });
const { hideWatermark } = getAppsmithConfigs();
+ const focusRef = useWidgetFocus();
+
/**
* initializes the widgets factory and registers all widgets
*/
@@ -268,6 +271,7 @@ function AppViewer(props: Props) {
className={CANVAS_SELECTOR}
hasPages={pages.length > 1}
headerHeight={headerHeight}
+ ref={focusRef}
showGuidedTourMessage={showGuidedTourMessage}
>
{isInitialized && registered && }
diff --git a/app/client/src/pages/Applications/ImportApplicationModalOld.tsx b/app/client/src/pages/Applications/ImportApplicationModalOld.tsx
index 4fca60fed5..1598153da0 100644
--- a/app/client/src/pages/Applications/ImportApplicationModalOld.tsx
+++ b/app/client/src/pages/Applications/ImportApplicationModalOld.tsx
@@ -104,7 +104,7 @@ function ImportApplicationModal(props: ImportApplicationModalProps) {
{
backgroundForCanvas = selectedTheme.properties.colors.backgroundColor;
}
+ const focusRef = useWidgetFocus();
+
try {
return (
{
);
!!data && delayedShareMousePointer(data);
}}
+ ref={focusRef}
style={{
width: canvasWidth,
}}
diff --git a/app/client/src/pages/Editor/DataSourceEditor/SaveOrDiscardDatasourceModal.tsx b/app/client/src/pages/Editor/DataSourceEditor/SaveOrDiscardDatasourceModal.tsx
index cb12fbf1f2..f2fea68ae0 100644
--- a/app/client/src/pages/Editor/DataSourceEditor/SaveOrDiscardDatasourceModal.tsx
+++ b/app/client/src/pages/Editor/DataSourceEditor/SaveOrDiscardDatasourceModal.tsx
@@ -56,7 +56,7 @@ function SaveOrDiscardDatasourceModal(props: SaveOrDiscardModalProps) {