diff --git a/.github/config.json b/.github/config.json
index 28c550304b10..d5e17dc2d4ef 100644
--- a/.github/config.json
+++ b/.github/config.json
@@ -1 +1 @@
-{"runners":[{"versioning":{"source":"milestones","type":"SemVer"},"prereleaseName":"alpha","issue":{"labels":{"Widgets Product":{"conditions":[{"label":"Button Widget","type":"hasLabel","value":true},{"label":"Chart 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":"New Widget","type":"hasLabel","value":true},{"label":"Switch widget","type":"hasLabel","value":true},{"label":"Audio Widget","type":"hasLabel","value":true},{"label":"Icon Button 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":"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":"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":"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},{"label":"One-click Binding","type":"hasLabel","value":true},{"label":"Old widget version","type":"hasLabel","value":true},{"label":"Widget Discoverability","type":"hasLabel","value":true},{"label":"Switch Group Widget","type":"hasLabel","value":true},{"label":"Checkbox Group widget","type":"hasLabel","value":true},{"label":"Checkbox Widget","type":"hasLabel","value":true},{"label":"Table Inline Edit","type":"hasLabel","value":true},{"label":"Custom Widgets","type":"hasLabel","value":true}],"requires":1},"Javascript Product":{"conditions":[{"label":"JS Linting & Errors","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 Usability","type":"hasLabel","value":true},{"label":"Framework Functions","type":"hasLabel","value":true},{"label":"JS Objects","type":"hasLabel","value":true},{"label":"JS Evaluation","type":"hasLabel","value":true},{"label":"Custom JS Libraries","type":"hasLabel","value":true},{"label":"Action Selector","type":"hasLabel","value":true},{"label":"Widget setter method","type":"hasLabel","value":true},{"label":"Entity Refactor","type":"hasLabel","value":true},{"label":"AST-frontend","type":"hasLabel","value":true},{"label":"Sniping Mode","type":"hasLabel","value":true},{"label":"AST-backend","type":"hasLabel","value":true}],"requires":1},"IDE Product":{"conditions":[{"label":"IDE Product","type":"hasLabel","value":true},{"label":"IDE Infra","type":"hasLabel","value":true},{"label":"IDE Navigation","type":"hasLabel","value":true},{"label":"IDE tabs","type":"hasLabel","value":true},{"label":"Omnibar","type":"hasLabel","value":true},{"label":"Entity Explorer","type":"hasLabel","value":true},{"label":"Page Management","type":"hasLabel","value":true},{"label":"Preview mode","type":"hasLabel","value":true}],"requires":1},"Accelerators Product":{"conditions":[{"label":"Generate Page","type":"hasLabel","value":true},{"label":"Building blocks","type":"hasLabel","value":true}],"requires":1},"Templates Product":{"conditions":[{"label":"Partial-import-export","type":"hasLabel","value":true},{"label":"Templates Product","type":"hasLabel","value":true}],"requires":1},"Design System Product":{"conditions":[{"label":"Design System Product","type":"hasLabel","value":true},{"label":"ADS Component Issue","type":"hasLabel","value":true},{"label":"Keyboard accessibility ","type":"hasLabel","value":true},{"label":"Toggle button","type":"hasLabel","value":true},{"label":"ADS Category Token","type":"hasLabel","value":true},{"label":"ADS Component Documentation","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 Unit Test","type":"hasLabel","value":true},{"label":"ADS Components","type":"hasLabel","value":true},{"label":"ADS Grayscale","type":"hasLabel","value":true},{"label":"Design System","type":"hasLabel","value":true},{"label":"ADS Typography","type":"hasLabel","value":true},{"label":"ADS Visual Styles","type":"hasLabel","value":true},{"label":"ADS Component Design","type":"hasLabel","value":true},{"label":"Modal Component","type":"hasLabel","value":true},{"label":"ADS Spacing","type":"hasLabel","value":true},{"label":"ads unit test","type":"hasLabel","value":true},{"label":"ads revamp","type":"hasLabel","value":true},{"label":"ads deduplication","type":"hasLabel","value":true}],"requires":1},"RBAC Product":{"conditions":[{"label":"Invite users","type":"hasLabel","value":true},{"label":"RBAC Product","type":"hasLabel","value":true}],"requires":1},"Workspace Product":{"conditions":[{"label":"Home Page","type":"hasLabel","value":true},{"label":"Workspace Product","type":"hasLabel","value":true}],"requires":1},"Billing & Licensing Product":{"conditions":[{"label":"Customer Portal","type":"hasLabel","value":true},{"label":"Cloud Services","type":"hasLabel","value":true},{"label":"Billing","type":"hasLabel","value":true},{"label":"Self Serve","type":"hasLabel","value":true},{"label":"Enterprise Billing","type":"hasLabel","value":true},{"label":"Analytics Improvements","type":"hasLabel","value":true},{"label":"Self Serve 1.0","type":"hasLabel","value":true},{"label":"License","type":"hasLabel","value":true},{"label":"BE instance","type":"hasLabel","value":true},{"label":"Invite flow","type":"hasLabel","value":true},{"label":"CE Instance Usage","type":"hasLabel","value":true},{"label":"Feature Flagging","type":"hasLabel","value":true}],"requires":1},"Packages Product":{"conditions":[{"label":"Packages Product","type":"hasLabel","value":true}],"requires":1},"Environments Product":{"conditions":[{"label":"Environments Product","type":"hasLabel","value":true}],"requires":1},"UI Building Product":{"conditions":[{"label":"Property Pane","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":"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":"Auto Height","type":"hasLabel","value":true},{"label":"Browser specific","type":"hasLabel","value":true},{"label":"Auto Layout","type":"hasLabel","value":true},{"label":"Fixed layout","type":"hasLabel","value":true},{"label":"App Navigation","type":"hasLabel","value":true}],"requires":1},"Onboarding Product":{"conditions":[{"label":"Welcome Screen","type":"hasLabel","value":true}],"requires":1},"Git Product":{"conditions":[{"label":"Git Product","type":"hasLabel","value":true},{"label":"Git Auto-commit","type":"hasLabel","value":true},{"label":"Auto-commit","type":"hasLabel","value":true},{"label":"Continuous Deployment","type":"hasLabel","value":true},{"label":"Branch protection","type":"hasLabel","value":true},{"label":"Default branch","type":"hasLabel","value":true},{"label":"Git status","type":"hasLabel","value":true},{"label":"Git performance","type":"hasLabel","value":true},{"label":"SDLC","type":"hasLabel","value":true},{"label":"Git IA","type":"hasLabel","value":true}],"requires":1},"Embedding Apps Product":{"conditions":[{"label":"Embedding Apps Product","type":"hasLabel","value":true}],"requires":1},"Integrations Product":{"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":"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":"MariaDB","type":"hasLabel","value":true},{"label":"Integrations Pod General","type":"hasLabel","value":true},{"label":"SMTP plugin","type":"hasLabel","value":true},{"label":"Oracle SQL DB","type":"hasLabel","value":true},{"label":"Query filter","type":"hasLabel","value":true},{"label":"Activation - datasources","type":"hasLabel","value":true},{"label":"REST API","type":"hasLabel","value":true},{"label":"REST API","type":"hasLabel","value":true},{"label":"Datasources","type":"hasLabel","value":true},{"label":"REST API plugin","type":"hasLabel","value":true},{"label":"Prepared statements","type":"hasLabel","value":true},{"label":"Query Generation","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":"Query performance","type":"hasLabel","value":true},{"label":"Datatype issue","type":"hasLabel","value":true},{"label":"SmartSubstitution","type":"hasLabel","value":true},{"label":"Suggested Widgets","type":"hasLabel","value":true},{"label":"SAAS Plugins","type":"hasLabel","value":true},{"label":"Reconnect DS modal","type":"hasLabel","value":true},{"label":"OnPageLoad","type":"hasLabel","value":true},{"label":"File upload issues","type":"hasLabel","value":true},{"label":"AI","type":"hasLabel","value":true},{"label":"Appsmith AI","type":"hasLabel","value":true},{"label":"Database Schema","type":"hasLabel","value":true}],"requires":1},"Identity & Authentication Product":{"conditions":[{"label":"Login / Signup","type":"hasLabel","value":true},{"label":"SSO","type":"hasLabel","value":true},{"label":"SCIM","type":"hasLabel","value":true},{"label":"Email verification","type":"hasLabel","value":true}],"requires":1},"Artifact Platform Product":{"conditions":[{"label":"Fork App","type":"hasLabel","value":true},{"label":"Publish App","type":"hasLabel","value":true},{"label":"Secret Management","type":"hasLabel","value":true},{"label":"Import-Export-App","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},{"label":"AWS AMI","type":"hasLabel","value":true},{"label":"Observability","type":"hasLabel","value":true},{"label":"Heroku","type":"hasLabel","value":true},{"label":"New Deployment Mode","type":"hasLabel","value":true},{"label":"Supervisor","type":"hasLabel","value":true},{"label":"Deployment Certificates","type":"hasLabel","value":true},{"label":"Mock Data","type":"hasLabel","value":true},{"label":"AWS ECS","type":"hasLabel","value":true},{"label":"Ingress","type":"hasLabel","value":true},{"label":"Nginx","type":"hasLabel","value":true}],"requires":1},"Performance Pod":{"conditions":[{"label":"Performance","type":"hasLabel","value":true},{"label":"Performance infra","type":"hasLabel","value":true}],"requires":1},"Git Platform Pod":{"conditions":[{"label":"Environments Product","type":"hasLabel","value":true},{"label":"Git Product","type":"hasLabel","value":true},{"label":"Artifact Platform Product","type":"hasLabel","value":true}],"requires":1},"IDE Pod":{"conditions":[{"label":"Telemetry","type":"hasLabel","value":true},{"label":"i18n","type":"hasLabel","value":true},{"label":"IDE Product","type":"hasLabel","value":true},{"label":"App setting","type":"hasLabel","value":true},{"label":"Debugger Product","type":"hasLabel","value":true},{"label":"Embedding Apps Product","type":"hasLabel","value":true}],"requires":1},"Platform Administration Pod":{"conditions":[{"label":"Airgap","type":"hasLabel","value":true},{"label":"Enterprise Edition","type":"hasLabel","value":true},{"label":"Invite flow","type":"hasLabel","value":true},{"label":"User Profile","type":"hasLabel","value":true},{"label":"User Session ","type":"hasLabel","value":true},{"label":"User Session","type":"hasLabel","value":true},{"label":"Admin Settings Product","type":"hasLabel","value":true},{"label":"RBAC Product","type":"hasLabel","value":true},{"label":"Workspace Product","type":"hasLabel","value":true},{"label":"Branding Product","type":"hasLabel","value":true},{"label":"Audit Logs Product","type":"hasLabel","value":true},{"label":"Identity & Authentication Product","type":"hasLabel","value":true}],"requires":1},"DB Infrastructure Pod":{"conditions":[{"label":"Move to Postgres","type":"hasLabel","value":true}],"requires":1},"Widgets & Accelerators Pod":{"conditions":[{"label":"Accelerators Product","type":"hasLabel","value":true},{"label":"Templates Product","type":"hasLabel","value":true},{"label":"Widgets Product","type":"hasLabel","value":true},{"label":"App Theming Product","type":"hasLabel","value":true}],"requires":1},"Packages Pod":{"conditions":[{"label":"Module creator","type":"hasLabel","value":true},{"label":"Module consumer","type":"hasLabel","value":true},{"label":"Package versioning","type":"hasLabel","value":true},{"label":"Convert to module","type":"hasLabel","value":true},{"label":"Query module","type":"hasLabel","value":true},{"label":"JS module","type":"hasLabel","value":true},{"label":"UI module","type":"hasLabel","value":true},{"label":"Packages Pod","type":"hasLabel","value":true},{"label":"Packages Product","type":"hasLabel","value":true}],"requires":1},"Workflows Pod":{"conditions":[{"label":"Workflows Product","type":"hasLabel","value":true}],"requires":1},"Query & JS Pod":{"conditions":[{"label":"Javascript Product","type":"hasLabel","value":true},{"label":"Onboarding Product","type":"hasLabel","value":true},{"label":"Integrations Product","type":"hasLabel","value":true}],"requires":1},"QA Pod":{"conditions":[{"label":"QA","type":"hasLabel","value":true},{"label":"Automation Test","type":"hasLabel","value":true},{"label":"TestGap","type":"hasLabel","value":true},{"label":"Automation failures","type":"hasLabel","value":true},{"label":"Needs automation","type":"hasLabel","value":true}],"requires":1},"Anvil POD":{"conditions":[{"label":"Checkbox Component","type":"hasLabel","value":true},{"label":"WDS team","type":"hasLabel","value":true},{"label":"Anvil POD","type":"hasLabel","value":true},{"label":"WDS - all widgets","type":"hasLabel","value":true},{"label":"WDS - input widget","type":"hasLabel","value":true},{"label":"WDS - paragraph widget","type":"hasLabel","value":true},{"label":"WDS - statbox widget","type":"hasLabel","value":true},{"label":"WDS - modal widget","type":"hasLabel","value":true},{"label":"WDS - icon widget","type":"hasLabel","value":true},{"label":"WDS - checkbox widget","type":"hasLabel","value":true},{"label":"WDS - table widget","type":"hasLabel","value":true},{"label":"WDS - keyValue widget","type":"hasLabel","value":true},{"label":"WDS - switch group widget","type":"hasLabel","value":true},{"label":"WDS - theming","type":"hasLabel","value":true},{"label":"Anvil layout","type":"hasLabel","value":true},{"label":"Anvil - theming","type":"hasLabel","value":true},{"label":"Anvil - vertical alignment","type":"hasLabel","value":true},{"label":"Anvil - layout component","type":"hasLabel","value":true},{"label":"Anvil - drag & drop","type":"hasLabel","value":true},{"label":"Anvil - zones & sections","type":"hasLabel","value":true},{"label":"Anvil - copy paste experience","type":"hasLabel","value":true},{"label":"WDS - phone widget","type":"hasLabel","value":true},{"label":"WDS - responsive widget","type":"hasLabel","value":true},{"label":"Anvil - responsive viewport","type":"hasLabel","value":true},{"label":"WDS - widget styling","type":"hasLabel","value":true},{"label":"Anvil - spacing","type":"hasLabel","value":true},{"label":"Anvil - responsive canvas","type":"hasLabel","value":true},{"label":"WDS - inline button widget","type":"hasLabel","value":true},{"label":"Anvil team","type":"hasLabel","value":true}],"requires":1},"Activation Pod":{"conditions":[{"label":"Activation","type":"hasLabel","value":true}],"requires":1},"Stability Pod":{"conditions":[{"label":"Stability Issue","type":"hasLabel","value":true},{"label":"cypress-flaky-fix","type":"hasLabel","value":true},{"label":"Cypress flaky tests","type":"hasLabel","value":true}],"requires":1},"Documentation Pod":{"conditions":[{"label":"Documentation","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":"bbeecd","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":"","name":"QA","description":"Needs QA attention"},"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":"","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"},"Fork App":{"color":"af87c7","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":""},"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":""},"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"},"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"},"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"},"Checkbox Widget":{"color":"bbeecd","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":"8ba6fd","name":"Bug","description":"Something isn't right"},"Widget Validation":{"color":"6990BC","name":"Widget Validation","description":"Issues related to widget property validation"},"Generate Page":{"color":"2b4664","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":""},"Import-Export-App":{"color":"48883f","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":"1bb96a","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":"2958a4","name":"Design System","description":"Design system"},"opera":{"color":"C63F5B","name":"opera","description":"Any issues identified on the opera browser"},"Login / Signup":{"color":"","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"},"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":"","name":"TestGap","description":"Issues identified for test plan improvement"},"keyboard shortcut":{"color":"0688B6","name":"keyboard shortcut","description":""},"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":"1bb96a","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},"Text Widget":{"color":"d130d1","name":"Text Widget","description":""},"Video Widget":{"color":"23dd4b","name":"Video Widget","description":""},"Datasources":{"color":"3d590f","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"},"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"},"Chart Widget":{"color":"616ecc","name":"Chart Widget","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"},"Sniping Mode":{"name":"Sniping Mode","description":"Issues related to sniping mode","color":"48883f"},"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":"4773ab"},"Widgets Pane":{"name":"Widgets Pane","description":"Issues related to the discovery and organisation of widgets","color":"ad5d78"},"View Mode":{"color":"1799b0","name":"View Mode","description":"Issues related to the view mode"},"Content":{"name":"Content","description":"For content related topics i.e blogs, templates, videos","color":"a8dff7"},"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"},"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":"80e18f"},"JS Promises":{"name":"JS Promises","description":"Issues related to promises","color":"d7771f"},"OnPageLoad":{"name":"OnPageLoad","description":"OnPageLoad issues on functions and queries","color":"2b4664"},"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":"48883f"},"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"},"SSO":{"name":"SSO","description":"Issues, requests and enhancements around Single sign-on.","color":""},"Multi User Realtime":{"name":"Multi User Realtime","description":"Issues related to multiple users using or editing an application","color":"e7b6ce"},"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"},"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"},"Business Edition":{"name":"Business Edition","description":"Features that will be a part of our business edition","color":"89bb6c"},"storeValue":{"name":"storeValue","description":"Issues related to the store value function","color":"5d3e66"},"DynamoDB":{"name":"DynamoDB","description":"Issues that are related to DynamoDB should have this label","color":"60885f"},"Backup & Restore":{"name":"Backup & Restore","description":"Issues related to backup and restore","color":"86874d"},"Billing":{"name":"Billing","description":"Billing infrastructure and flows for Business Edition and Trial users","color":"d2bc40"},"Datatype issue":{"name":"Datatype issue","description":"Issues that have risen because data types weren't handled","color":"cef66b"},"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"},"IDE Navigation":{"name":"IDE Navigation","description":"Issues/feature requests related to IDE navigation, and context switching","color":"1bb96a"},"Query performance":{"name":"Query performance","description":"Issues that have to do with lack in performance of query execution","color":"cef66b"},"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":"705a2c"},"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"},"MsSQL":{"name":"MsSQL","description":"Issues related to MsSQL plugin","color":"8078b0"},"Elastic Search":{"name":"Elastic Search","description":"Issues related to the elastic search datasource","color":"8078b0"},"Core Query Execution":{"color":"cef66b","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":"cef66b"},"Query Settings":{"name":"Query Settings","description":"Issues related to the settings of all queries","color":"cef66b"},"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":"bae511"},"Query Generation":{"name":"Query Generation","description":"Issues related to query generation","color":"cef66b"},"Suggested Widgets":{"name":"Suggested Widgets","description":"Issues related to suggesting widgets based on query response","color":"6ac063"},"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"},"Needs validation":{"name":"Needs validation","description":"Needs problem validation before being picked up","color":"66673d"},"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"},"Conversion Algorithm":{"name":"Conversion Algorithm","description":"All issue related to converting app from fixed to flex mode & vice versa","color":"d12d2e"},"Browser specific":{"name":"Browser specific","description":"All issue related to browser","color":"d12d2e"},"Performance infra":{"name":"Performance infra","description":"all issue related to the performance infra","color":"8a60f6"},"DSL Update":{"name":"DSL Update","description":"Issues related to storing and updating the DSL","color":"e16cf3"},"AST-frontend":{"name":"AST-frontend","description":"Issues related to maintaining AST logic","color":"2b4664"},"AST-backend":{"name":"AST-backend","description":"Backend issues related to AST parsing","color":"48883f"},"MariaDB":{"name":"MariaDB","description":"MariaDB datasource","color":"8428c3"},"ADS Component Issue":{"name":"ADS Component Issue","description":"Issues which are caused due to ADS components","color":"d89119"},"Regressed":{"color":"723fd0","name":"Regressed","description":"Scenarios that were working before but have now regressed"},"Needs RCA":{"name":"Needs RCA","description":"a critical or high priority issue that needs an RCA","color":"2cc68f"},"Custom JS Libraries":{"name":"Custom JS Libraries","description":"Issues related to adding custom JS library","color":"bacb6d"},"Integrations Pod General":{"name":"Integrations Pod General","description":"Issues related to the Integrations Pod that don't fit into other tags.","color":"287823"},"Performance Pod":{"name":"Performance Pod","description":"All things related to Appsmith performance","color":"b5a25d"},"Performance":{"name":"Performance","description":"Issues related to performance","color":"9a18d7"},"File upload issues":{"name":"File upload issues","description":"Issues related to uploading any type of files from within Appsmith","color":"2b4664"},"Action Selector":{"name":"Action Selector","description":"Issues related to action selector on the property pane","color":"2f9e20"},"Community Reported":{"name":"Community Reported","description":"issues reported by community members","color":"1402e5"},"JS Function execution":{"name":"JS Function execution","description":"JS function execution","color":"7c2de1"},"Self Serve":{"name":"Self Serve","description":"For all issues related to self-serve flow for business edition","color":"4dacfc"},"Self Serve 1.0":{"name":"Self Serve 1.0","description":"For all issues related to v1 of the self serve project","color":"ae839e"},"Customer Portal":{"name":"Customer Portal","description":"For all tasks/issues pertaining to customer.appsmith.com","color":"d2bc40"},"Cloud Services":{"name":"Cloud Services","description":"For all tasks/issues on Appsmith cloud-services relating to licensing, usage and billing","color":"d2bc40"},"One-click Binding":{"name":"One-click Binding","description":"Issues related to the One click binding epic","color":"f1661c"},"Airgap":{"name":"Airgap","description":"Tickets related to supporting air-gapped Appsmith instances","color":"1cb294"},"SMTP plugin":{"name":"SMTP plugin","description":"Issues related to SMTP plugin","color":"541457"},"AWS AMI":{"name":"AWS AMI","description":"Issues Related to AWS AMI","color":"b44680"},"Old widget version":{"name":"Old widget version","description":"Use this label to raise issue specific only to an older version of a widget","color":"ff3814"},"Enterprise Billing":{"name":"Enterprise Billing","description":"To track all tasks/issues related to licensing & billing for enterprise customers","color":"14c156"},"Oracle SQL DB":{"name":"Oracle SQL DB","description":"Issues related to the Oracle plugin","color":"cbabcb"},"Community Contributor":{"name":"Community Contributor","description":"Meant to track issues that are assigned to external contributors","color":"149ab6"},"widget vertical alignment":{"name":"widget vertical alignment","description":"All issue related widget vertical alignment on the auto layout canvas","color":"d12d2e"},"Observability":{"name":"Observability","description":"Issues related to observability on the Appsmith instance","color":"dff913"},"Checkbox Component":{"name":"Checkbox Component","description":"This labels deals with checkbox component in wds package","color":"75a401"},"Analytics Improvements":{"name":"Analytics Improvements","description":"For all tasks focused on improving our overall analytics and fixing any issues ","color":"29b8ed"},"WDS team":{"name":"WDS team","description":"","color":"8d675a"},"Enterprise Edition":{"name":"Enterprise Edition","description":"Features that will be supported in Enterprise Edition only","color":"984f5e"},"Query filter":{"name":"Query filter","description":"Issues related to query filtering, e.g., WHERE clause","color":"a15134"},"Keyboard accessibility ":{"name":"Keyboard accessibility ","description":"All issue related to ADS component keyboard accessibility","color":"2ba696"},"Toggle button":{"name":"Toggle button","description":"All issue related to ADS toggle button","color":"edc47f"},"SCIM":{"name":"SCIM","description":"Label to collate our SCIM issues","color":"48883f"},"ADS Category Token":{"name":"ADS Category Token","description":"All issues related appsmith design system category tokens","color":"920961"},"ADS Component Documentation":{"name":"ADS Component Documentation","description":"All issues Appsmith design system component documentation","color":"64c46a"},"ADS Migration":{"name":"ADS Migration","description":"All issues related to Appsmith design system migration","color":"b082d6"},"ADS Deduplication ":{"name":"ADS Deduplication ","description":"Replacing component with ADS components","color":"b082d6"},"ADS Revamp":{"name":"ADS Revamp","description":"All issues related to ads revamp. ","color":"b082d6"},"ADS Deduplication":{"name":"ADS Deduplication","description":"Replacing component with ADS components","color":"b082d6"},"ADS Grayscale":{"name":"ADS Grayscale","description":"Support grayscale color changes","color":"b03577"},"ADS Unit Test":{"name":"ADS Unit Test","description":"All issue related ads unit cases ","color":"b082d6"},"ADS Components":{"name":"ADS Components","description":"All issues related ADS components","color":"b082d6"},"Widget Discoverability":{"name":"Widget Discoverability","description":"Issues related to Widget Discoverability","color":"7b55ce"},"Widget setter method":{"name":"Widget setter method","description":"Issues with widget property setters","color":"8dce87"},"License":{"name":"License","description":"For all issues/tasks related to licensing of appsmith-ee edition","color":"90ee98"},"Platformization":{"name":"Platformization","description":"Issues or tasks related to platformization of Appsmith codebase","color":"4e972b"},"Activation - datasources":{"name":"Activation - datasources","description":"issues related to activation projects","color":"7c7ace"},"Partial-import-export":{"name":"Partial-import-export","description":"Label for granular reusability.","color":"717732"},"AI":{"name":"AI","description":"All tasks related to AI","color":"2b4664"},"ADS Typography":{"name":"ADS Typography","description":"All issue related typographical changes","color":"2dbe8d"},"Auto Layout":{"name":"Auto Layout","description":"Issues relates to auto layout","color":"92cf8c"},"Heroku":{"name":"Heroku","description":"Issues related to Heroku","color":"a81b69"},"ADS Visual Styles":{"name":"ADS Visual Styles","description":"All issues related to ADS visual styles","color":"d3da89"},"ADS Component Design":{"name":"ADS Component Design","description":"All issue related to component design","color":"5cc91e"},"Modal Component":{"name":"Modal Component","description":"All issue related to ads modal component","color":"ee63f3"},"App setting":{"name":"App setting","description":"Related to app settings panel within the app","color":"174f98"},"BE instance":{"name":"BE instance","description":"For all issues related to license, billing on BE instance","color":"ae8f98"},"Fixed layout":{"name":"Fixed layout","description":"issues related to fixed layout","color":"b66681"},"Anvil layout":{"name":"Anvil layout","description":"issues related to the new layout system anvil","color":"5e0904"},"New Deployment Mode":{"name":"New Deployment Mode","description":"Support a new mode of deployment","color":"108033"},"Custom widgets":{"name":"Custom widgets","description":"For all issues related to the custom widget project","color":"c9db9c"},"Homepage Experience V2":{"name":"Homepage Experience V2","description":"Label for reporting new tasks and bug fixes related to revamped homepage experience","color":"c55d54"},"Customer Success":{"name":"Customer Success","description":"Issues that the success team cares about","color":"6ccabd"},"Invite flow":{"name":"Invite flow","description":"Invite users flow and any associated actions","color":"881b35"},"Invite users":{"name":"Invite users","description":"Invite users flow and any associated actions","color":""},"Workflows Pod":{"name":"Workflows Pod","description":"Issues that the workflows team owns","color":"446925"},"DailyPromotionBlocker":{"name":"DailyPromotionBlocker","description":"DailyPromotion Blocker","color":"9b2280"},"JS Binding":{"name":"JS Binding","description":"All issues related to the JS Binding experience","color":"422fed"},"REST API":{"name":"REST API","description":"REST API plugin related issues","color":"e3ede5"},"Critical":{"color":"a1e3db","name":"Critical","description":"This issue breaks existing apps. Drop everything else to resolve"},"Module creator":{"name":"Module creator","description":"Issues related to the module creator side","color":"bb2c05"},"Module consumer":{"name":"Module consumer","description":"Issues related to the module consumer side","color":"83d3c5"},"Package versioning":{"name":"Package versioning","description":"ISsues related to how we manage versions for packages","color":"4c5218"},"Convert to module":{"name":"Convert to module","description":"Issues related to the module creation flow using conversion","color":"4c5218"},"Query module":{"name":"Query module","description":"Issues affecting query modules or its instances","color":"b11a7e"},"JS module":{"name":"JS module","description":"Issues affecting JS modules or its instances","color":"bf76f6"},"Secret Management":{"name":"Secret Management","description":"Issues related to secret management","color":"2b4664"},"REST API plugin":{"name":"REST API plugin","description":"REST API plugin related issues","color":"b5948a"},"UI module":{"name":"UI module","description":"Issues affecting UI modules or its instances","color":"d2acee"},"Preview mode":{"name":"Preview mode","description":"Issues related to app previews","color":"48883f"},"Git Auto-commit":{"name":"Git Auto-commit","description":"Issues related to autocommit","color":"717732"},"QA Pod":{"name":"QA Pod","description":"Issues under the QA Pod","color":"717732"},"Automation Test":{"name":"Automation Test","description":"","color":""},"Automation failures":{"name":"Automation failures","description":"","color":""},"Needs automation":{"name":"Needs automation","description":"Issues that needs automated tests","color":""},"Prepared statements":{"name":"Prepared statements","description":"Issues related to prepared statement flow","color":""},"Switch Group Widget":{"name":"Switch Group Widget","description":"Issues related to Switch group Widget","color":""},"Supervisor":{"name":"Supervisor","description":"Issues related to supervisor","color":"2c5813"},"Deployment Certificates":{"name":"Deployment Certificates","description":"Issues related to lets encrypt","color":"e148aa"},"Mock Data":{"name":"Mock Data","description":"Issues related to mock databases","color":"ebf251"},"AWS ECS":{"name":"AWS ECS","description":"Issues related to ECS Fargate","color":"e506ff"},"Publish App":{"name":"Publish App","description":"Issues related to app deployment","color":"2b4664"},"IDE Infra":{"name":"IDE Infra","description":"Issues related to the IDE infrastructure like saving changes","color":"1bb96a"},"User Profile":{"name":"User Profile","description":"Issues related to a user profile","color":"a60d34"},"Page Management":{"color":"1bb96a","name":"Page Management","description":"Issues related to configuring pages"},"Ingress":{"name":"Ingress","description":"Ingress Controller","color":"a86802"},"Nginx":{"name":"Nginx","description":"Issues related to Nginx","color":"e54195"},"Building blocks":{"name":"Building blocks","description":"Building blocks on cavas, on templates listing or drag and drop of building blocks.","color":"48883f"},"Table Inline Edit":{"name":"Table Inline Edit","description":"Issues related to inline editing","color":"60895a"},"User Session ":{"name":"User Session ","description":"For all issues/tasks related to user sessions","color":"65a3f5"},"WDS - all widgets":{"name":"WDS - all widgets","description":"all widget present in WDS","color":"2670ae"},"WDS - input widget":{"name":"WDS - input widget","description":"Issues related to input widget on WDS","color":"2670ae"},"WDS - paragraph widget":{"name":"WDS - paragraph widget","description":"issues related to paragraph widget on WDS","color":"2670ae"},"WDS - statbox widget":{"name":"WDS - statbox widget","description":"issues related to statbox widget on WDS","color":"2670ae"},"WDS - modal widget":{"name":"WDS - modal widget","description":"Issues related to modal widget on WDS","color":"2670ae"},"WDS - icon widget":{"name":"WDS - icon widget","description":"Issues related to icon widget on WDS","color":"2670ae"},"WDS - checkbox widget":{"name":"WDS - checkbox widget","description":"Issues related to checkbox widget on WDS","color":"2670ae"},"WDS - table widget":{"name":"WDS - table widget","description":"Issues related to table widget on WDS","color":"2670ae"},"WDS - keyValue widget":{"name":"WDS - keyValue widget","description":"Issues related to key-value widget on WDS","color":"2670ae"},"WDS - switch group widget":{"name":"WDS - switch group widget","description":"Issues related to switch group widget on WDS","color":"2670ae"},"WDS - theming":{"name":"WDS - theming","description":"Issues related to theming on the Anvil instance","color":"2670ae"},"Anvil POD":{"name":"Anvil POD","description":"Issue related to Anvil project","color":"5e0904"},"Anvil - theming":{"name":"Anvil - theming","description":"Issues related to theming on the Anvil instance","color":"c28de5"},"Anvil - vertical alignment":{"name":"Anvil - vertical alignment","description":"Issues related to vertical alignment on the Anvil layout","color":"c28de5"},"Anvil - layout component":{"name":"Anvil - layout component","description":"Issues related to layout component on the Anvil layout","color":"c28de5"},"Anvil - drag & drop":{"name":"Anvil - drag & drop","description":"Issues related to drag & drop experience on Anvil","color":"c28de5"},"Anvil - zones & sections":{"name":"Anvil - zones & sections","description":"Issues related to zones and sections on the Anvil layout","color":"c28de5"},"Anvil - copy paste experience":{"name":"Anvil - copy paste experience","description":"Issues related to copy paste experience on the Anvil layout","color":"c28de5"},"WDS - phone widget":{"name":"WDS - phone widget","description":"Issues related to phone widget on WDS","color":"c28de5"},"WDS - responsive widget":{"name":"WDS - responsive widget","description":"All issues related to widget responsiveness","color":"11ee05"},"Anvil - responsive viewport":{"color":"11ee05","name":"Anvil - responsive viewport","description":"Issues seen on different viewports like mobile"},"WDS - widget styling":{"color":"11ee05","name":"WDS - widget styling","description":"all about widget styling"},"Anvil - spacing":{"name":"Anvil - spacing","description":"Related to spacing between widgets in auto layout","color":"11ee05"},"Anvil - responsive canvas":{"name":"Anvil - responsive canvas","description":"All issues related to canvas responsiveness","color":"11ee05"},"WDS - inline button widget":{"name":"WDS - inline button widget","description":"Issues related to inline button widget on WDS","color":"7cef83"},"Activation Pod":{"name":"Activation Pod","description":"for Activation group","color":"d67d00"},"Activation":{"name":"Activation","description":"for Activation group","color":"d67d00"},"Tests":{"name":"Tests","description":"Test issues","color":"4fc7b6"},"Ballpark: XXS":{"name":"Ballpark: XXS","description":"~1xDev in 1/2xSprint","color":""},"Ballpark: XS":{"name":"Ballpark: XS","description":"~1xDev in 1xSprint","color":"53bf71"},"Ballpark: S":{"name":"Ballpark: S","description":"~2xDev in 1xSprint","color":"6e9e65"},"Ballpark: M":{"name":"Ballpark: M","description":"~1xPOD in 1xSprint","color":"2229e6"},"Ballpark: L":{"name":"Ballpark: L","description":"~1xPOD in 3xSprint or 2xPODs in 1xSprint","color":"49962f"},"Ballpark: XL":{"name":"Ballpark: XL","description":"~1xPOD in 1xQuarter or 2xPODs in 2xSprint","color":"b524c9"},"Ballpark: XXL":{"name":"Ballpark: XXL","description":"~2xPODs in 1xQuarter","color":"22092c"},"Auto-commit":{"name":"Auto-commit","description":"Issues related to auto-generated commits showing up on git ","color":"e25b89"},"Continuous Deployment":{"name":"Continuous Deployment","description":"Issues related to CD pipeline on git","color":"aea47c"},"Branch protection":{"name":"Branch protection","description":"Issues related to using a protected branch on git","color":"ab511a"},"Default branch":{"name":"Default branch","description":"Issues related to using a default branch on git","color":"195737"},"Git status":{"name":"Git status","description":"Issues related to information shown on git status modal or number of changes appearing in a branch","color":"c851b8"},"Git performance":{"name":"Git performance","description":"Issues related to perceived performance on any git operation","color":"189af6"},"Anvil team":{"name":"Anvil team","description":"issues related to the new layout system anvil","color":"798200"},"SDLC":{"name":"SDLC","description":"Issues related to software development lifecycle experiences","color":"bae511"},"Reconnect DS modal":{"name":"Reconnect DS modal","description":"Issues related to reconnect datasource modal post app import","color":"2e398b"},"Stability Pod":{"name":"Stability Pod","description":"For all issues/tasks to be prioritized under Stability pod","color":"86ddf6"},"Stability Issue":{"name":"Stability Issue","description":"Every issue handle by Stability Pod","color":"4d024a"},"Move to Postgres":{"name":"Move to Postgres","description":"Issues required to be solved for the move to Postgres as repository layer","color":"4e13ac"},"User Session":{"name":"User Session","description":"Issues related to user sessions","color":"8255e5"},"IDE tabs":{"name":"IDE tabs","description":"query and js tabs","color":"1bb96a"},"Inviting Contribution":{"name":"Inviting Contribution","description":"Issues that we would like contributions to","color":""},"cypress-flaky-fix":{"name":"cypress-flaky-fix","description":"This label is auto-added when a PR which only has Cypress fixes are merged to release","color":"722cbc"},"Cypress flaky tests":{"name":"Cypress flaky tests","description":"Test scripts that need to be fixed on Cypress by dev or SDET","color":"722cbc"},"Help enterprise":{"name":"Help enterprise","description":"Requested by Appsmith customers or prospects","color":"FF8C00"},"Learnability":{"name":"Learnability","description":"Issues affecting the product learnability, making the product harder for new users.","color":"800c2f"},"ADS Spacing":{"name":"ADS Spacing","description":"","color":"686ebb"},"ads unit test":{"name":"ads unit test","description":"All issue related ads unit cases","color":"686ebb"},"ads revamp":{"name":"ads revamp","description":"All issues related to ads revamp.","color":"686ebb"},"Javascript Product":{"color":"709a21","name":"Javascript Product","description":"Issues related to users writing javascript in appsmith"},"IDE Product":{"color":"1bb96a","name":"IDE Product","description":"Issues related to the IDE Product"},"IDE Pod":{"color":"1bb96a","name":"IDE Pod","description":"Issues that new developers face while exploring the IDE"},"Accelerators Product":{"name":"Accelerators Product","description":"Issues related to app building accelerators","color":"f3fce6"},"Templates Product":{"name":"Templates Product","description":"Issues related to Templates","color":"f3fce6"},"Design System Product":{"name":"Design System Product","description":"Appsmith design system related issues","color":"2b4664"},"ads deduplication":{"name":"ads deduplication","description":"Replacing component with ADS components","color":"708943"},"Admin Settings Product":{"color":"708943","name":"Admin Settings Product","description":"Issues in admin settings pages"},"Appsmith AI":{"name":"Appsmith AI","description":"All issues related to the Appsmith AI datasource","color":"708943"},"Query & JS Pod":{"color":"709a21","name":"Query & JS Pod","description":"Issues related to the query & JS Pod"},"RBAC Product":{"name":"RBAC Product","description":"Issues, requests and enhancements around RBAC.","color":""},"Workspace Product":{"name":"Workspace Product","description":"Issues related to workspaces","color":""},"CE Instance Usage":{"name":"CE Instance Usage","description":"For all issues relating to usage, licensing or billing on the CE instance","color":""},"Billing & Licensing Product":{"name":"Billing & Licensing Product","description":"Issues pertaining to licensing, billing and usage across self serve and enterprise customers","color":"446925"},"Platform Administration Pod":{"color":"446925","name":"Platform Administration Pod","description":"Issues related to platform administration & management"},"DB Infrastructure Pod":{"name":"DB Infrastructure Pod","description":"Pod to handle database infrastructure","color":"446925"},"Packages Product":{"name":"Packages Product","description":"Issues related to packages","color":"446925"},"Workflows Product":{"name":"Workflows Product","description":"Issues related to the workflows product","color":"446925"},"Debugger Product":{"color":"857f58","name":"Debugger Product","description":"Issues related to the debugger"},"Packages Pod":{"name":"Packages Pod","description":"issues that belong to the packages pod","color":"857f58"},"Environments Product":{"name":"Environments Product","description":"Issues related to datasource environments","color":"857f58"},"Custom Widgets":{"name":"Custom Widgets","description":"For all issues related to the custom widget project","color":"857f58"},"Branding Product":{"name":"Branding Product","description":"All issues under branding and whitelabelling appsmith ecosystem","color":"857f58"},"Widgets & Accelerators Pod":{"name":"Widgets & Accelerators Pod","description":"Issues related to widgets & Accelerators","color":"27496a"},"Widgets Product":{"name":"Widgets Product","description":"This label groups issues related to widgets","color":"f3fce6"},"App Theming Product":{"name":"App Theming Product","description":"Items that are related to the App level theming controls epic","color":"48883f"},"UI Building Product":{"color":"48883f","name":"UI Building Product","description":"Issues related to the UI Building experience"},"Onboarding Product":{"color":"48883f","name":"Onboarding Product","description":"Issues related to onboarding new developers"},"Database Schema":{"name":"Database Schema","description":"Issues related to database schema","color":"48883f"},"Git Product":{"color":"48883f","name":"Git Product","description":"Issues related to version control product"},"Git Platform Pod":{"name":"Git Platform Pod","description":"Issues related to the git & the app platform ","color":"48883f"},"Embedding Apps Product":{"name":"Embedding Apps Product","description":"Issues related to embedding","color":"48883f"},"Integrations Product":{"name":"Integrations Product","description":"Issues related to a specific integration","color":"b9f21c"},"Feature Flagging":{"name":"Feature Flagging","description":"Anything related feature flagging","color":"4574ae"},"Audit Logs Product":{"name":"Audit Logs Product","description":"Audit trails to ensure data security","color":"4574ae"},"Identity & Authentication Product":{"name":"Identity & Authentication Product","description":"Issues related to user identity & authentication","color":"4574ae"},"Email verification":{"name":"Email verification","description":"Email verification issues","color":"4574ae"},"Artifact Platform Product":{"name":"Artifact Platform Product","description":"Issues related to the application platform","color":"4574ae"},"Git IA":{"name":"Git IA","description":"Issues related to Git IA changes","color":"df8bd6"},"Documentation Pod":{"name":"Documentation Pod","description":"Issues related to user education","color":"8c8c02"}},"success":true}
\ No newline at end of file
+{"runners":[{"versioning":{"source":"milestones","type":"SemVer"},"prereleaseName":"alpha","issue":{"labels":{"Widgets Product":{"conditions":[{"label":"Button Widget","type":"hasLabel","value":true},{"label":"Chart 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":"New Widget","type":"hasLabel","value":true},{"label":"Switch widget","type":"hasLabel","value":true},{"label":"Audio Widget","type":"hasLabel","value":true},{"label":"Icon Button 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":"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":"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":"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},{"label":"One-click Binding","type":"hasLabel","value":true},{"label":"Old widget version","type":"hasLabel","value":true},{"label":"Widget Discoverability","type":"hasLabel","value":true},{"label":"Switch Group Widget","type":"hasLabel","value":true},{"label":"Checkbox Group widget","type":"hasLabel","value":true},{"label":"Checkbox Widget","type":"hasLabel","value":true},{"label":"Table Inline Edit","type":"hasLabel","value":true},{"label":"Custom Widgets","type":"hasLabel","value":true}],"requires":1},"Javascript Product":{"conditions":[{"label":"JS Linting & Errors","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 Usability","type":"hasLabel","value":true},{"label":"Framework Functions","type":"hasLabel","value":true},{"label":"JS Objects","type":"hasLabel","value":true},{"label":"JS Evaluation","type":"hasLabel","value":true},{"label":"Custom JS Libraries","type":"hasLabel","value":true},{"label":"Action Selector","type":"hasLabel","value":true},{"label":"Widget setter method","type":"hasLabel","value":true},{"label":"Entity Refactor","type":"hasLabel","value":true},{"label":"AST-frontend","type":"hasLabel","value":true},{"label":"Sniping Mode","type":"hasLabel","value":true},{"label":"AST-backend","type":"hasLabel","value":true}],"requires":1},"IDE Product":{"conditions":[{"label":"IDE Product","type":"hasLabel","value":true},{"label":"IDE Infra","type":"hasLabel","value":true},{"label":"IDE Navigation","type":"hasLabel","value":true},{"label":"IDE tabs","type":"hasLabel","value":true},{"label":"Omnibar","type":"hasLabel","value":true},{"label":"Entity Explorer","type":"hasLabel","value":true},{"label":"Page Management","type":"hasLabel","value":true},{"label":"Preview mode","type":"hasLabel","value":true}],"requires":1},"Accelerators Product":{"conditions":[{"label":"Generate Page","type":"hasLabel","value":true},{"label":"Building blocks","type":"hasLabel","value":true}],"requires":1},"Templates Product":{"conditions":[{"label":"Partial-import-export","type":"hasLabel","value":true},{"label":"Templates Product","type":"hasLabel","value":true}],"requires":1},"Design System Product":{"conditions":[{"label":"Design System Product","type":"hasLabel","value":true},{"label":"ADS Component Issue","type":"hasLabel","value":true},{"label":"Keyboard accessibility ","type":"hasLabel","value":true},{"label":"Toggle button","type":"hasLabel","value":true},{"label":"ADS Category Token","type":"hasLabel","value":true},{"label":"ADS Component Documentation","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 Unit Test","type":"hasLabel","value":true},{"label":"ADS Components","type":"hasLabel","value":true},{"label":"ADS Grayscale","type":"hasLabel","value":true},{"label":"Design System","type":"hasLabel","value":true},{"label":"ADS Typography","type":"hasLabel","value":true},{"label":"ADS Visual Styles","type":"hasLabel","value":true},{"label":"ADS Component Design","type":"hasLabel","value":true},{"label":"Modal Component","type":"hasLabel","value":true},{"label":"ADS Spacing","type":"hasLabel","value":true},{"label":"ads unit test","type":"hasLabel","value":true},{"label":"ads revamp","type":"hasLabel","value":true},{"label":"ads deduplication","type":"hasLabel","value":true}],"requires":1},"RBAC Product":{"conditions":[{"label":"Invite users","type":"hasLabel","value":true},{"label":"RBAC Product","type":"hasLabel","value":true}],"requires":1},"Workspace Product":{"conditions":[{"label":"Home Page","type":"hasLabel","value":true},{"label":"Workspace Product","type":"hasLabel","value":true}],"requires":1},"Billing & Licensing Product":{"conditions":[{"label":"Customer Portal","type":"hasLabel","value":true},{"label":"Cloud Services","type":"hasLabel","value":true},{"label":"Billing","type":"hasLabel","value":true},{"label":"Self Serve","type":"hasLabel","value":true},{"label":"Enterprise Billing","type":"hasLabel","value":true},{"label":"Analytics Improvements","type":"hasLabel","value":true},{"label":"Self Serve 1.0","type":"hasLabel","value":true},{"label":"License","type":"hasLabel","value":true},{"label":"BE instance","type":"hasLabel","value":true},{"label":"Invite flow","type":"hasLabel","value":true},{"label":"CE Instance Usage","type":"hasLabel","value":true},{"label":"Feature Flagging","type":"hasLabel","value":true}],"requires":1},"Packages Product":{"conditions":[{"label":"Packages Product","type":"hasLabel","value":true}],"requires":1},"Environments Product":{"conditions":[{"label":"Environments Product","type":"hasLabel","value":true}],"requires":1},"UI Building Product":{"conditions":[{"label":"Property Pane","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":"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":"Auto Height","type":"hasLabel","value":true},{"label":"Browser specific","type":"hasLabel","value":true},{"label":"Auto Layout","type":"hasLabel","value":true},{"label":"Fixed layout","type":"hasLabel","value":true},{"label":"App Navigation","type":"hasLabel","value":true}],"requires":1},"Onboarding Product":{"conditions":[{"label":"Welcome Screen","type":"hasLabel","value":true}],"requires":1},"Git Product":{"conditions":[{"label":"Git Product","type":"hasLabel","value":true},{"label":"Git Auto-commit","type":"hasLabel","value":true},{"label":"Auto-commit","type":"hasLabel","value":true},{"label":"Continuous Deployment","type":"hasLabel","value":true},{"label":"Default branch","type":"hasLabel","value":true},{"label":"Git status","type":"hasLabel","value":true},{"label":"Git performance","type":"hasLabel","value":true},{"label":"SDLC","type":"hasLabel","value":true},{"label":"Git IA","type":"hasLabel","value":true},{"label":"Branch management","type":"hasLabel","value":true}],"requires":1},"Embedding Apps Product":{"conditions":[{"label":"Embedding Apps Product","type":"hasLabel","value":true}],"requires":1},"Integrations Product":{"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":"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":"MariaDB","type":"hasLabel","value":true},{"label":"Integrations Pod General","type":"hasLabel","value":true},{"label":"SMTP plugin","type":"hasLabel","value":true},{"label":"Oracle SQL DB","type":"hasLabel","value":true},{"label":"Query filter","type":"hasLabel","value":true},{"label":"Activation - datasources","type":"hasLabel","value":true},{"label":"REST API","type":"hasLabel","value":true},{"label":"REST API","type":"hasLabel","value":true},{"label":"Datasources","type":"hasLabel","value":true},{"label":"REST API plugin","type":"hasLabel","value":true},{"label":"Prepared statements","type":"hasLabel","value":true},{"label":"Query Generation","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":"Query performance","type":"hasLabel","value":true},{"label":"Datatype issue","type":"hasLabel","value":true},{"label":"SmartSubstitution","type":"hasLabel","value":true},{"label":"Suggested Widgets","type":"hasLabel","value":true},{"label":"SAAS Plugins","type":"hasLabel","value":true},{"label":"Reconnect DS modal","type":"hasLabel","value":true},{"label":"OnPageLoad","type":"hasLabel","value":true},{"label":"File upload issues","type":"hasLabel","value":true},{"label":"AI","type":"hasLabel","value":true},{"label":"Appsmith AI","type":"hasLabel","value":true},{"label":"Database Schema","type":"hasLabel","value":true}],"requires":1},"Identity & Authentication Product":{"conditions":[{"label":"Login / Signup","type":"hasLabel","value":true},{"label":"SSO","type":"hasLabel","value":true},{"label":"SCIM","type":"hasLabel","value":true},{"label":"Email verification","type":"hasLabel","value":true}],"requires":1},"Artifact Platform Product":{"conditions":[{"label":"Fork App","type":"hasLabel","value":true},{"label":"Publish App","type":"hasLabel","value":true},{"label":"Secret Management","type":"hasLabel","value":true},{"label":"Import-Export-App","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},{"label":"AWS AMI","type":"hasLabel","value":true},{"label":"Observability","type":"hasLabel","value":true},{"label":"Heroku","type":"hasLabel","value":true},{"label":"New Deployment Mode","type":"hasLabel","value":true},{"label":"Supervisor","type":"hasLabel","value":true},{"label":"Deployment Certificates","type":"hasLabel","value":true},{"label":"Mock Data","type":"hasLabel","value":true},{"label":"AWS ECS","type":"hasLabel","value":true},{"label":"Ingress","type":"hasLabel","value":true},{"label":"Nginx","type":"hasLabel","value":true}],"requires":1},"Performance Pod":{"conditions":[{"label":"Performance","type":"hasLabel","value":true},{"label":"Performance infra","type":"hasLabel","value":true}],"requires":1},"Git Platform Pod":{"conditions":[{"label":"Environments Product","type":"hasLabel","value":true},{"label":"Git Product","type":"hasLabel","value":true},{"label":"Artifact Platform Product","type":"hasLabel","value":true}],"requires":1},"IDE Pod":{"conditions":[{"label":"Telemetry","type":"hasLabel","value":true},{"label":"i18n","type":"hasLabel","value":true},{"label":"IDE Product","type":"hasLabel","value":true},{"label":"App setting","type":"hasLabel","value":true},{"label":"Debugger Product","type":"hasLabel","value":true},{"label":"Embedding Apps Product","type":"hasLabel","value":true}],"requires":1},"Platform Administration Pod":{"conditions":[{"label":"Airgap","type":"hasLabel","value":true},{"label":"Enterprise Edition","type":"hasLabel","value":true},{"label":"Invite flow","type":"hasLabel","value":true},{"label":"User Profile","type":"hasLabel","value":true},{"label":"User Session ","type":"hasLabel","value":true},{"label":"User Session","type":"hasLabel","value":true},{"label":"Admin Settings Product","type":"hasLabel","value":true},{"label":"RBAC Product","type":"hasLabel","value":true},{"label":"Workspace Product","type":"hasLabel","value":true},{"label":"Branding Product","type":"hasLabel","value":true},{"label":"Audit Logs Product","type":"hasLabel","value":true},{"label":"Identity & Authentication Product","type":"hasLabel","value":true}],"requires":1},"DB Infrastructure Pod":{"conditions":[{"label":"Move to Postgres","type":"hasLabel","value":true}],"requires":1},"Widgets & Accelerators Pod":{"conditions":[{"label":"Accelerators Product","type":"hasLabel","value":true},{"label":"Templates Product","type":"hasLabel","value":true},{"label":"Widgets Product","type":"hasLabel","value":true},{"label":"App Theming Product","type":"hasLabel","value":true}],"requires":1},"Packages Pod":{"conditions":[{"label":"Module creator","type":"hasLabel","value":true},{"label":"Module consumer","type":"hasLabel","value":true},{"label":"Package versioning","type":"hasLabel","value":true},{"label":"Convert to module","type":"hasLabel","value":true},{"label":"Query module","type":"hasLabel","value":true},{"label":"JS module","type":"hasLabel","value":true},{"label":"UI module","type":"hasLabel","value":true},{"label":"Packages Pod","type":"hasLabel","value":true},{"label":"Packages Product","type":"hasLabel","value":true}],"requires":1},"Workflows Pod":{"conditions":[{"label":"Workflows Product","type":"hasLabel","value":true}],"requires":1},"Query & JS Pod":{"conditions":[{"label":"Javascript Product","type":"hasLabel","value":true},{"label":"Onboarding Product","type":"hasLabel","value":true},{"label":"Integrations Product","type":"hasLabel","value":true}],"requires":1},"QA Pod":{"conditions":[{"label":"QA","type":"hasLabel","value":true},{"label":"Automation Test","type":"hasLabel","value":true},{"label":"TestGap","type":"hasLabel","value":true},{"label":"Automation failures","type":"hasLabel","value":true},{"label":"Needs automation","type":"hasLabel","value":true}],"requires":1},"Anvil POD":{"conditions":[{"label":"Checkbox Component","type":"hasLabel","value":true},{"label":"WDS team","type":"hasLabel","value":true},{"label":"Anvil POD","type":"hasLabel","value":true},{"label":"WDS - all widgets","type":"hasLabel","value":true},{"label":"WDS - input widget","type":"hasLabel","value":true},{"label":"WDS - paragraph widget","type":"hasLabel","value":true},{"label":"WDS - statbox widget","type":"hasLabel","value":true},{"label":"WDS - modal widget","type":"hasLabel","value":true},{"label":"WDS - icon widget","type":"hasLabel","value":true},{"label":"WDS - checkbox widget","type":"hasLabel","value":true},{"label":"WDS - table widget","type":"hasLabel","value":true},{"label":"WDS - keyValue widget","type":"hasLabel","value":true},{"label":"WDS - switch group widget","type":"hasLabel","value":true},{"label":"WDS - theming","type":"hasLabel","value":true},{"label":"Anvil layout","type":"hasLabel","value":true},{"label":"Anvil - theming","type":"hasLabel","value":true},{"label":"Anvil - vertical alignment","type":"hasLabel","value":true},{"label":"Anvil - layout component","type":"hasLabel","value":true},{"label":"Anvil - drag & drop","type":"hasLabel","value":true},{"label":"Anvil - zones & sections","type":"hasLabel","value":true},{"label":"Anvil - copy paste experience","type":"hasLabel","value":true},{"label":"WDS - phone widget","type":"hasLabel","value":true},{"label":"WDS - responsive widget","type":"hasLabel","value":true},{"label":"Anvil - responsive viewport","type":"hasLabel","value":true},{"label":"WDS - widget styling","type":"hasLabel","value":true},{"label":"Anvil - spacing","type":"hasLabel","value":true},{"label":"Anvil - responsive canvas","type":"hasLabel","value":true},{"label":"WDS - inline button widget","type":"hasLabel","value":true},{"label":"Anvil team","type":"hasLabel","value":true}],"requires":1},"Activation Pod":{"conditions":[{"label":"Activation","type":"hasLabel","value":true}],"requires":1},"Stability Pod":{"conditions":[{"label":"Stability Issue","type":"hasLabel","value":true},{"label":"cypress-flaky-fix","type":"hasLabel","value":true},{"label":"Cypress flaky tests","type":"hasLabel","value":true}],"requires":1},"Documentation Pod":{"conditions":[{"label":"Documentation","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":"bbeecd","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":"","name":"QA","description":"Needs QA attention"},"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":"","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"},"Fork App":{"color":"af87c7","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":""},"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":""},"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"},"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"},"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"},"Checkbox Widget":{"color":"bbeecd","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":"8ba6fd","name":"Bug","description":"Something isn't right"},"Widget Validation":{"color":"6990BC","name":"Widget Validation","description":"Issues related to widget property validation"},"Generate Page":{"color":"2b4664","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":""},"Import-Export-App":{"color":"48883f","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":"1bb96a","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":"2958a4","name":"Design System","description":"Design system"},"opera":{"color":"C63F5B","name":"opera","description":"Any issues identified on the opera browser"},"Login / Signup":{"color":"","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"},"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":"","name":"TestGap","description":"Issues identified for test plan improvement"},"keyboard shortcut":{"color":"0688B6","name":"keyboard shortcut","description":""},"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":"1bb96a","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},"Text Widget":{"color":"d130d1","name":"Text Widget","description":""},"Video Widget":{"color":"23dd4b","name":"Video Widget","description":""},"Datasources":{"color":"3d590f","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"},"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"},"Chart Widget":{"color":"616ecc","name":"Chart Widget","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"},"Sniping Mode":{"name":"Sniping Mode","description":"Issues related to sniping mode","color":"48883f"},"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":"4773ab"},"Widgets Pane":{"name":"Widgets Pane","description":"Issues related to the discovery and organisation of widgets","color":"ad5d78"},"View Mode":{"color":"1799b0","name":"View Mode","description":"Issues related to the view mode"},"Content":{"name":"Content","description":"For content related topics i.e blogs, templates, videos","color":"a8dff7"},"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"},"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":"80e18f"},"JS Promises":{"name":"JS Promises","description":"Issues related to promises","color":"d7771f"},"OnPageLoad":{"name":"OnPageLoad","description":"OnPageLoad issues on functions and queries","color":"2b4664"},"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":"48883f"},"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"},"SSO":{"name":"SSO","description":"Issues, requests and enhancements around Single sign-on.","color":""},"Multi User Realtime":{"name":"Multi User Realtime","description":"Issues related to multiple users using or editing an application","color":"e7b6ce"},"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"},"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"},"Business Edition":{"name":"Business Edition","description":"Features that will be a part of our business edition","color":"89bb6c"},"storeValue":{"name":"storeValue","description":"Issues related to the store value function","color":"5d3e66"},"DynamoDB":{"name":"DynamoDB","description":"Issues that are related to DynamoDB should have this label","color":"60885f"},"Backup & Restore":{"name":"Backup & Restore","description":"Issues related to backup and restore","color":"86874d"},"Billing":{"name":"Billing","description":"Billing infrastructure and flows for Business Edition and Trial users","color":"d2bc40"},"Datatype issue":{"name":"Datatype issue","description":"Issues that have risen because data types weren't handled","color":"cef66b"},"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"},"IDE Navigation":{"name":"IDE Navigation","description":"Issues/feature requests related to IDE navigation, and context switching","color":"1bb96a"},"Query performance":{"name":"Query performance","description":"Issues that have to do with lack in performance of query execution","color":"cef66b"},"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":"705a2c"},"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"},"MsSQL":{"name":"MsSQL","description":"Issues related to MsSQL plugin","color":"8078b0"},"Elastic Search":{"name":"Elastic Search","description":"Issues related to the elastic search datasource","color":"8078b0"},"Core Query Execution":{"color":"cef66b","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":"cef66b"},"Query Settings":{"name":"Query Settings","description":"Issues related to the settings of all queries","color":"cef66b"},"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":"bae511"},"Query Generation":{"name":"Query Generation","description":"Issues related to query generation","color":"cef66b"},"Suggested Widgets":{"name":"Suggested Widgets","description":"Issues related to suggesting widgets based on query response","color":"6ac063"},"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"},"Needs validation":{"name":"Needs validation","description":"Needs problem validation before being picked up","color":"66673d"},"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"},"Conversion Algorithm":{"name":"Conversion Algorithm","description":"All issue related to converting app from fixed to flex mode & vice versa","color":"d12d2e"},"Browser specific":{"name":"Browser specific","description":"All issue related to browser","color":"d12d2e"},"Performance infra":{"name":"Performance infra","description":"all issue related to the performance infra","color":"8a60f6"},"DSL Update":{"name":"DSL Update","description":"Issues related to storing and updating the DSL","color":"e16cf3"},"AST-frontend":{"name":"AST-frontend","description":"Issues related to maintaining AST logic","color":"2b4664"},"AST-backend":{"name":"AST-backend","description":"Backend issues related to AST parsing","color":"48883f"},"MariaDB":{"name":"MariaDB","description":"MariaDB datasource","color":"8428c3"},"ADS Component Issue":{"name":"ADS Component Issue","description":"Issues which are caused due to ADS components","color":"d89119"},"Regressed":{"color":"723fd0","name":"Regressed","description":"Scenarios that were working before but have now regressed"},"Needs RCA":{"name":"Needs RCA","description":"a critical or high priority issue that needs an RCA","color":"2cc68f"},"Custom JS Libraries":{"name":"Custom JS Libraries","description":"Issues related to adding custom JS library","color":"bacb6d"},"Integrations Pod General":{"name":"Integrations Pod General","description":"Issues related to the Integrations Pod that don't fit into other tags.","color":"287823"},"Performance Pod":{"name":"Performance Pod","description":"All things related to Appsmith performance","color":"b5a25d"},"Performance":{"name":"Performance","description":"Issues related to performance","color":"9a18d7"},"File upload issues":{"name":"File upload issues","description":"Issues related to uploading any type of files from within Appsmith","color":"2b4664"},"Action Selector":{"name":"Action Selector","description":"Issues related to action selector on the property pane","color":"2f9e20"},"Community Reported":{"name":"Community Reported","description":"issues reported by community members","color":"1402e5"},"JS Function execution":{"name":"JS Function execution","description":"JS function execution","color":"7c2de1"},"Self Serve":{"name":"Self Serve","description":"For all issues related to self-serve flow for business edition","color":"4dacfc"},"Self Serve 1.0":{"name":"Self Serve 1.0","description":"For all issues related to v1 of the self serve project","color":"ae839e"},"Customer Portal":{"name":"Customer Portal","description":"For all tasks/issues pertaining to customer.appsmith.com","color":"d2bc40"},"Cloud Services":{"name":"Cloud Services","description":"For all tasks/issues on Appsmith cloud-services relating to licensing, usage and billing","color":"d2bc40"},"One-click Binding":{"name":"One-click Binding","description":"Issues related to the One click binding epic","color":"f1661c"},"Airgap":{"name":"Airgap","description":"Tickets related to supporting air-gapped Appsmith instances","color":"1cb294"},"SMTP plugin":{"name":"SMTP plugin","description":"Issues related to SMTP plugin","color":"541457"},"AWS AMI":{"name":"AWS AMI","description":"Issues Related to AWS AMI","color":"b44680"},"Old widget version":{"name":"Old widget version","description":"Use this label to raise issue specific only to an older version of a widget","color":"ff3814"},"Enterprise Billing":{"name":"Enterprise Billing","description":"To track all tasks/issues related to licensing & billing for enterprise customers","color":"14c156"},"Oracle SQL DB":{"name":"Oracle SQL DB","description":"Issues related to the Oracle plugin","color":"cbabcb"},"Community Contributor":{"name":"Community Contributor","description":"Meant to track issues that are assigned to external contributors","color":"149ab6"},"widget vertical alignment":{"name":"widget vertical alignment","description":"All issue related widget vertical alignment on the auto layout canvas","color":"d12d2e"},"Observability":{"name":"Observability","description":"Issues related to observability on the Appsmith instance","color":"dff913"},"Checkbox Component":{"name":"Checkbox Component","description":"This labels deals with checkbox component in wds package","color":"75a401"},"Analytics Improvements":{"name":"Analytics Improvements","description":"For all tasks focused on improving our overall analytics and fixing any issues ","color":"29b8ed"},"WDS team":{"name":"WDS team","description":"","color":"8d675a"},"Enterprise Edition":{"name":"Enterprise Edition","description":"Features that will be supported in Enterprise Edition only","color":"984f5e"},"Query filter":{"name":"Query filter","description":"Issues related to query filtering, e.g., WHERE clause","color":"a15134"},"Keyboard accessibility ":{"name":"Keyboard accessibility ","description":"All issue related to ADS component keyboard accessibility","color":"2ba696"},"Toggle button":{"name":"Toggle button","description":"All issue related to ADS toggle button","color":"edc47f"},"SCIM":{"name":"SCIM","description":"Label to collate our SCIM issues","color":"48883f"},"ADS Category Token":{"name":"ADS Category Token","description":"All issues related appsmith design system category tokens","color":"920961"},"ADS Component Documentation":{"name":"ADS Component Documentation","description":"All issues Appsmith design system component documentation","color":"64c46a"},"ADS Migration":{"name":"ADS Migration","description":"All issues related to Appsmith design system migration","color":"b082d6"},"ADS Deduplication ":{"name":"ADS Deduplication ","description":"Replacing component with ADS components","color":"b082d6"},"ADS Revamp":{"name":"ADS Revamp","description":"All issues related to ads revamp. ","color":"b082d6"},"ADS Deduplication":{"name":"ADS Deduplication","description":"Replacing component with ADS components","color":"b082d6"},"ADS Grayscale":{"name":"ADS Grayscale","description":"Support grayscale color changes","color":"b03577"},"ADS Unit Test":{"name":"ADS Unit Test","description":"All issue related ads unit cases ","color":"b082d6"},"ADS Components":{"name":"ADS Components","description":"All issues related ADS components","color":"b082d6"},"Widget Discoverability":{"name":"Widget Discoverability","description":"Issues related to Widget Discoverability","color":"7b55ce"},"Widget setter method":{"name":"Widget setter method","description":"Issues with widget property setters","color":"8dce87"},"License":{"name":"License","description":"For all issues/tasks related to licensing of appsmith-ee edition","color":"90ee98"},"Platformization":{"name":"Platformization","description":"Issues or tasks related to platformization of Appsmith codebase","color":"4e972b"},"Activation - datasources":{"name":"Activation - datasources","description":"issues related to activation projects","color":"7c7ace"},"Partial-import-export":{"name":"Partial-import-export","description":"Label for granular reusability.","color":"717732"},"AI":{"name":"AI","description":"All tasks related to AI","color":"2b4664"},"ADS Typography":{"name":"ADS Typography","description":"All issue related typographical changes","color":"2dbe8d"},"Auto Layout":{"name":"Auto Layout","description":"Issues relates to auto layout","color":"92cf8c"},"Heroku":{"name":"Heroku","description":"Issues related to Heroku","color":"a81b69"},"ADS Visual Styles":{"name":"ADS Visual Styles","description":"All issues related to ADS visual styles","color":"d3da89"},"ADS Component Design":{"name":"ADS Component Design","description":"All issue related to component design","color":"5cc91e"},"Modal Component":{"name":"Modal Component","description":"All issue related to ads modal component","color":"ee63f3"},"App setting":{"name":"App setting","description":"Related to app settings panel within the app","color":"174f98"},"BE instance":{"name":"BE instance","description":"For all issues related to license, billing on BE instance","color":"ae8f98"},"Fixed layout":{"name":"Fixed layout","description":"issues related to fixed layout","color":"b66681"},"Anvil layout":{"name":"Anvil layout","description":"issues related to the new layout system anvil","color":"5e0904"},"New Deployment Mode":{"name":"New Deployment Mode","description":"Support a new mode of deployment","color":"108033"},"Custom widgets":{"name":"Custom widgets","description":"For all issues related to the custom widget project","color":"c9db9c"},"Homepage Experience V2":{"name":"Homepage Experience V2","description":"Label for reporting new tasks and bug fixes related to revamped homepage experience","color":"c55d54"},"Customer Success":{"name":"Customer Success","description":"Issues that the success team cares about","color":"6ccabd"},"Invite flow":{"name":"Invite flow","description":"Invite users flow and any associated actions","color":"881b35"},"Invite users":{"name":"Invite users","description":"Invite users flow and any associated actions","color":""},"Workflows Pod":{"name":"Workflows Pod","description":"Issues that the workflows team owns","color":"446925"},"DailyPromotionBlocker":{"name":"DailyPromotionBlocker","description":"DailyPromotion Blocker","color":"9b2280"},"JS Binding":{"name":"JS Binding","description":"All issues related to the JS Binding experience","color":"422fed"},"REST API":{"name":"REST API","description":"REST API plugin related issues","color":"e3ede5"},"Critical":{"color":"a1e3db","name":"Critical","description":"This issue breaks existing apps. Drop everything else to resolve"},"Module creator":{"name":"Module creator","description":"Issues related to the module creator side","color":"bb2c05"},"Module consumer":{"name":"Module consumer","description":"Issues related to the module consumer side","color":"83d3c5"},"Package versioning":{"name":"Package versioning","description":"ISsues related to how we manage versions for packages","color":"4c5218"},"Convert to module":{"name":"Convert to module","description":"Issues related to the module creation flow using conversion","color":"4c5218"},"Query module":{"name":"Query module","description":"Issues affecting query modules or its instances","color":"b11a7e"},"JS module":{"name":"JS module","description":"Issues affecting JS modules or its instances","color":"bf76f6"},"Secret Management":{"name":"Secret Management","description":"Issues related to secret management","color":"2b4664"},"REST API plugin":{"name":"REST API plugin","description":"REST API plugin related issues","color":"b5948a"},"UI module":{"name":"UI module","description":"Issues affecting UI modules or its instances","color":"d2acee"},"Preview mode":{"name":"Preview mode","description":"Issues related to app previews","color":"48883f"},"Git Auto-commit":{"name":"Git Auto-commit","description":"Issues related to autocommit","color":"717732"},"QA Pod":{"name":"QA Pod","description":"Issues under the QA Pod","color":"717732"},"Automation Test":{"name":"Automation Test","description":"","color":""},"Automation failures":{"name":"Automation failures","description":"","color":""},"Needs automation":{"name":"Needs automation","description":"Issues that needs automated tests","color":""},"Prepared statements":{"name":"Prepared statements","description":"Issues related to prepared statement flow","color":""},"Switch Group Widget":{"name":"Switch Group Widget","description":"Issues related to Switch group Widget","color":""},"Supervisor":{"name":"Supervisor","description":"Issues related to supervisor","color":"2c5813"},"Deployment Certificates":{"name":"Deployment Certificates","description":"Issues related to lets encrypt","color":"e148aa"},"Mock Data":{"name":"Mock Data","description":"Issues related to mock databases","color":"ebf251"},"AWS ECS":{"name":"AWS ECS","description":"Issues related to ECS Fargate","color":"e506ff"},"Publish App":{"name":"Publish App","description":"Issues related to app deployment","color":"2b4664"},"IDE Infra":{"name":"IDE Infra","description":"Issues related to the IDE infrastructure like saving changes","color":"1bb96a"},"User Profile":{"name":"User Profile","description":"Issues related to a user profile","color":"a60d34"},"Page Management":{"color":"1bb96a","name":"Page Management","description":"Issues related to configuring pages"},"Ingress":{"name":"Ingress","description":"Ingress Controller","color":"a86802"},"Nginx":{"name":"Nginx","description":"Issues related to Nginx","color":"e54195"},"Building blocks":{"name":"Building blocks","description":"Building blocks on cavas, on templates listing or drag and drop of building blocks.","color":"48883f"},"Table Inline Edit":{"name":"Table Inline Edit","description":"Issues related to inline editing","color":"60895a"},"User Session ":{"name":"User Session ","description":"For all issues/tasks related to user sessions","color":"65a3f5"},"WDS - all widgets":{"name":"WDS - all widgets","description":"all widget present in WDS","color":"2670ae"},"WDS - input widget":{"name":"WDS - input widget","description":"Issues related to input widget on WDS","color":"2670ae"},"WDS - paragraph widget":{"name":"WDS - paragraph widget","description":"issues related to paragraph widget on WDS","color":"2670ae"},"WDS - statbox widget":{"name":"WDS - statbox widget","description":"issues related to statbox widget on WDS","color":"2670ae"},"WDS - modal widget":{"name":"WDS - modal widget","description":"Issues related to modal widget on WDS","color":"2670ae"},"WDS - icon widget":{"name":"WDS - icon widget","description":"Issues related to icon widget on WDS","color":"2670ae"},"WDS - checkbox widget":{"name":"WDS - checkbox widget","description":"Issues related to checkbox widget on WDS","color":"2670ae"},"WDS - table widget":{"name":"WDS - table widget","description":"Issues related to table widget on WDS","color":"2670ae"},"WDS - keyValue widget":{"name":"WDS - keyValue widget","description":"Issues related to key-value widget on WDS","color":"2670ae"},"WDS - switch group widget":{"name":"WDS - switch group widget","description":"Issues related to switch group widget on WDS","color":"2670ae"},"WDS - theming":{"name":"WDS - theming","description":"Issues related to theming on the Anvil instance","color":"2670ae"},"Anvil POD":{"name":"Anvil POD","description":"Issue related to Anvil project","color":"5e0904"},"Anvil - theming":{"name":"Anvil - theming","description":"Issues related to theming on the Anvil instance","color":"c28de5"},"Anvil - vertical alignment":{"name":"Anvil - vertical alignment","description":"Issues related to vertical alignment on the Anvil layout","color":"c28de5"},"Anvil - layout component":{"name":"Anvil - layout component","description":"Issues related to layout component on the Anvil layout","color":"c28de5"},"Anvil - drag & drop":{"name":"Anvil - drag & drop","description":"Issues related to drag & drop experience on Anvil","color":"c28de5"},"Anvil - zones & sections":{"name":"Anvil - zones & sections","description":"Issues related to zones and sections on the Anvil layout","color":"c28de5"},"Anvil - copy paste experience":{"name":"Anvil - copy paste experience","description":"Issues related to copy paste experience on the Anvil layout","color":"c28de5"},"WDS - phone widget":{"name":"WDS - phone widget","description":"Issues related to phone widget on WDS","color":"c28de5"},"WDS - responsive widget":{"name":"WDS - responsive widget","description":"All issues related to widget responsiveness","color":"11ee05"},"Anvil - responsive viewport":{"color":"11ee05","name":"Anvil - responsive viewport","description":"Issues seen on different viewports like mobile"},"WDS - widget styling":{"color":"11ee05","name":"WDS - widget styling","description":"all about widget styling"},"Anvil - spacing":{"name":"Anvil - spacing","description":"Related to spacing between widgets in auto layout","color":"11ee05"},"Anvil - responsive canvas":{"name":"Anvil - responsive canvas","description":"All issues related to canvas responsiveness","color":"11ee05"},"WDS - inline button widget":{"name":"WDS - inline button widget","description":"Issues related to inline button widget on WDS","color":"7cef83"},"Activation Pod":{"name":"Activation Pod","description":"for Activation group","color":"d67d00"},"Activation":{"name":"Activation","description":"for Activation group","color":"d67d00"},"Tests":{"name":"Tests","description":"Test issues","color":"4fc7b6"},"Ballpark: XXS":{"name":"Ballpark: XXS","description":"~1xDev in 1/2xSprint","color":""},"Ballpark: XS":{"name":"Ballpark: XS","description":"~1xDev in 1xSprint","color":"53bf71"},"Ballpark: S":{"name":"Ballpark: S","description":"~2xDev in 1xSprint","color":"6e9e65"},"Ballpark: M":{"name":"Ballpark: M","description":"~1xPOD in 1xSprint","color":"2229e6"},"Ballpark: L":{"name":"Ballpark: L","description":"~1xPOD in 3xSprint or 2xPODs in 1xSprint","color":"49962f"},"Ballpark: XL":{"name":"Ballpark: XL","description":"~1xPOD in 1xQuarter or 2xPODs in 2xSprint","color":"b524c9"},"Ballpark: XXL":{"name":"Ballpark: XXL","description":"~2xPODs in 1xQuarter","color":"22092c"},"Auto-commit":{"name":"Auto-commit","description":"Issues related to auto-generated commits showing up on git ","color":"e25b89"},"Continuous Deployment":{"name":"Continuous Deployment","description":"Issues related to CD pipeline on git","color":"aea47c"},"Default branch":{"name":"Default branch","description":"Issues related to using a default branch on git","color":"195737"},"Git status":{"name":"Git status","description":"Issues related to information shown on git status modal or number of changes appearing in a branch","color":"c851b8"},"Git performance":{"name":"Git performance","description":"Issues related to perceived performance on any git operation","color":"189af6"},"Anvil team":{"name":"Anvil team","description":"issues related to the new layout system anvil","color":"798200"},"SDLC":{"name":"SDLC","description":"Issues related to software development lifecycle experiences","color":"bae511"},"Reconnect DS modal":{"name":"Reconnect DS modal","description":"Issues related to reconnect datasource modal post app import","color":"2e398b"},"Stability Pod":{"name":"Stability Pod","description":"For all issues/tasks to be prioritized under Stability pod","color":"86ddf6"},"Stability Issue":{"name":"Stability Issue","description":"Every issue handle by Stability Pod","color":"4d024a"},"Move to Postgres":{"name":"Move to Postgres","description":"Issues required to be solved for the move to Postgres as repository layer","color":"4e13ac"},"User Session":{"name":"User Session","description":"Issues related to user sessions","color":"8255e5"},"IDE tabs":{"name":"IDE tabs","description":"query and js tabs","color":"1bb96a"},"Inviting Contribution":{"name":"Inviting Contribution","description":"Issues that we would like contributions to","color":""},"cypress-flaky-fix":{"name":"cypress-flaky-fix","description":"This label is auto-added when a PR which only has Cypress fixes are merged to release","color":"722cbc"},"Cypress flaky tests":{"name":"Cypress flaky tests","description":"Test scripts that need to be fixed on Cypress by dev or SDET","color":"722cbc"},"Help enterprise":{"name":"Help enterprise","description":"Requested by Appsmith customers or prospects","color":"FF8C00"},"Learnability":{"name":"Learnability","description":"Issues affecting the product learnability, making the product harder for new users.","color":"800c2f"},"ADS Spacing":{"name":"ADS Spacing","description":"","color":"686ebb"},"ads unit test":{"name":"ads unit test","description":"All issue related ads unit cases","color":"686ebb"},"ads revamp":{"name":"ads revamp","description":"All issues related to ads revamp.","color":"686ebb"},"Javascript Product":{"color":"709a21","name":"Javascript Product","description":"Issues related to users writing javascript in appsmith"},"IDE Product":{"color":"1bb96a","name":"IDE Product","description":"Issues related to the IDE Product"},"IDE Pod":{"color":"1bb96a","name":"IDE Pod","description":"Issues that new developers face while exploring the IDE"},"Accelerators Product":{"name":"Accelerators Product","description":"Issues related to app building accelerators","color":"f3fce6"},"Templates Product":{"name":"Templates Product","description":"Issues related to Templates","color":"f3fce6"},"Design System Product":{"name":"Design System Product","description":"Appsmith design system related issues","color":"2b4664"},"ads deduplication":{"name":"ads deduplication","description":"Replacing component with ADS components","color":"708943"},"Admin Settings Product":{"color":"708943","name":"Admin Settings Product","description":"Issues in admin settings pages"},"Appsmith AI":{"name":"Appsmith AI","description":"All issues related to the Appsmith AI datasource","color":"708943"},"Query & JS Pod":{"color":"709a21","name":"Query & JS Pod","description":"Issues related to the query & JS Pod"},"RBAC Product":{"name":"RBAC Product","description":"Issues, requests and enhancements around RBAC.","color":""},"Workspace Product":{"name":"Workspace Product","description":"Issues related to workspaces","color":""},"CE Instance Usage":{"name":"CE Instance Usage","description":"For all issues relating to usage, licensing or billing on the CE instance","color":""},"Billing & Licensing Product":{"name":"Billing & Licensing Product","description":"Issues pertaining to licensing, billing and usage across self serve and enterprise customers","color":"446925"},"Platform Administration Pod":{"color":"446925","name":"Platform Administration Pod","description":"Issues related to platform administration & management"},"DB Infrastructure Pod":{"name":"DB Infrastructure Pod","description":"Pod to handle database infrastructure","color":"446925"},"Packages Product":{"name":"Packages Product","description":"Issues related to packages","color":"446925"},"Workflows Product":{"name":"Workflows Product","description":"Issues related to the workflows product","color":"446925"},"Debugger Product":{"color":"857f58","name":"Debugger Product","description":"Issues related to the debugger"},"Packages Pod":{"name":"Packages Pod","description":"issues that belong to the packages pod","color":"857f58"},"Environments Product":{"name":"Environments Product","description":"Issues related to datasource environments","color":"857f58"},"Custom Widgets":{"name":"Custom Widgets","description":"For all issues related to the custom widget project","color":"857f58"},"Branding Product":{"name":"Branding Product","description":"All issues under branding and whitelabelling appsmith ecosystem","color":"857f58"},"Widgets & Accelerators Pod":{"name":"Widgets & Accelerators Pod","description":"Issues related to widgets & Accelerators","color":"27496a"},"Widgets Product":{"name":"Widgets Product","description":"This label groups issues related to widgets","color":"f3fce6"},"App Theming Product":{"name":"App Theming Product","description":"Items that are related to the App level theming controls epic","color":"48883f"},"UI Building Product":{"color":"48883f","name":"UI Building Product","description":"Issues related to the UI Building experience"},"Onboarding Product":{"color":"48883f","name":"Onboarding Product","description":"Issues related to onboarding new developers"},"Database Schema":{"name":"Database Schema","description":"Issues related to database schema","color":"48883f"},"Git Product":{"color":"48883f","name":"Git Product","description":"Issues related to version control product"},"Git Platform Pod":{"name":"Git Platform Pod","description":"Issues related to the git & the app platform ","color":"48883f"},"Embedding Apps Product":{"name":"Embedding Apps Product","description":"Issues related to embedding","color":"48883f"},"Integrations Product":{"name":"Integrations Product","description":"Issues related to a specific integration","color":"b9f21c"},"Feature Flagging":{"name":"Feature Flagging","description":"Anything related feature flagging","color":"4574ae"},"Audit Logs Product":{"name":"Audit Logs Product","description":"Audit trails to ensure data security","color":"4574ae"},"Identity & Authentication Product":{"name":"Identity & Authentication Product","description":"Issues related to user identity & authentication","color":"4574ae"},"Email verification":{"name":"Email verification","description":"Email verification issues","color":"4574ae"},"Artifact Platform Product":{"name":"Artifact Platform Product","description":"Issues related to the application platform","color":"4574ae"},"Git IA":{"name":"Git IA","description":"Issues related to Git IA changes","color":"df8bd6"},"Documentation Pod":{"name":"Documentation Pod","description":"Issues related to user education","color":"8c8c02"},"Branch management":{"name":"Branch management","description":"Issues related to using a branch management on git","color":"ebe6af"}},"success":true}
\ No newline at end of file
diff --git a/.github/workflows/build-client-server-count.yml b/.github/workflows/build-client-server-count.yml
index b2ad99cac36e..7f2210f32063 100644
--- a/.github/workflows/build-client-server-count.yml
+++ b/.github/workflows/build-client-server-count.yml
@@ -16,6 +16,7 @@ jobs:
runId: ${{steps.args.outputs.runId}}
matrix_count: ${{steps.matrix.outputs.matrix_count}}
run_count: ${{ steps.countArgs.outputs.run_count }}
+ is-pg-build: ${{steps.args.outputs.is-pg-build}}
steps:
- name: Checkout the head commit of the branch
uses: actions/checkout@v4
@@ -29,6 +30,7 @@ jobs:
id: args
run: |
echo "pr=${{ github.event.client_payload.pull_request.number }}" >> $GITHUB_OUTPUT
+ echo "is-pg-build=${{ github.event.client_payload.pull_request.base.ref == 'pg' }}" >> $GITHUB_OUTPUT
checkArg=${{ github.event.client_payload.slash_command.args.named.runId }}
if [[ -z "$checkArg" ]]; then
echo "runId=0" >> $GITHUB_OUTPUT
@@ -106,6 +108,7 @@ jobs:
with:
pr: ${{fromJson(needs.file-check.outputs.pr)}}
skip-tests: "true"
+ is-pg-build: ${{fromJson(needs.file-check.outputs.is-pg-build)}}
client-build:
name: client-build
@@ -252,6 +255,18 @@ jobs:
echo "$new_failed_spec_env" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
+ - name: Download the client build artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: cypress-repeat-logs
+ path: app/client
+
+ - name: Read and Set File Content as ENV Variable
+ id: set-summary-content
+ run: |
+ summary_content=$(cat app/client/cy-repeat-summary.txt | tr '\n' ' ')
+ echo "summary_content=$summary_content" >> $GITHUB_ENV
+
- name: Add a comment on the PR with new CI failures
if: needs.ci-test-limited.result != 'success' && needs.file-check.outputs.pr != '0'
uses: peter-evans/create-or-update-comment@v3
@@ -262,6 +277,9 @@ jobs:
Cypress dashboard: Click here!
The following are new failures, please fix them before merging the PR: ${{env.new_failed_spec_env}}
To know the list of identified flaky tests - Refer here
+ ```
+ ${{ env.summary_content }}
+ ```
- name: Add a comment on the PR when ci-test-limited is success
if: needs.ci-test-limited.result == 'success' && needs.file-check.outputs.pr != '0'
@@ -272,6 +290,9 @@ jobs:
Workflow run: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>.
Cypress dashboard url: Click here!
All cypress tests have passed 🎉🎉🎉
+ ```
+ ${{ env.summary_content }}
+ ```
- name: Check ci-test-limited set status
if: needs.ci-test-limited.result != 'success'
@@ -369,6 +390,19 @@ jobs:
echo "new_failed_spec_env<> $GITHUB_ENV
echo "$new_failed_spec_env" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
+
+ - name: Download the client build artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: cypress-repeat-logs
+ path: app/client
+
+ - name: Read and Set File Content as ENV Variable
+ id: set-summary-content
+ run: |
+ summary_content=$(cat app/client/cy-repeat-summary.txt | tr '\n' ' ')
+ echo "summary_content=$summary_content" >> $GITHUB_ENV
+
- name: Add a comment on the PR with new CI failures
if: needs.ci-test-limited-existing-docker-image.result != 'success' && needs.file-check.outputs.pr != '0'
@@ -380,6 +414,9 @@ jobs:
Cypress dashboard: Click here!
The following are new failures, please fix them before merging the PR: ${{env.new_failed_spec_env}}
To know the list of identified flaky tests - Refer here
+ ```
+ ${{ env.summary_content }}
+ ```
- name: Add a comment on the PR when ci-test-limited-existing-docker-image is success
if: needs.ci-test-limited-existing-docker-image.result == 'success' && needs.file-check.outputs.pr != '0'
@@ -390,7 +427,10 @@ jobs:
Workflow run: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>.
Cypress dashboard url: Click here!
All cypress tests have passed 🎉🎉🎉
-
+ ```
+ ${{ env.summary_content }}
+ ```
+
- name: Check ci-test-limited-existing-docker-image set status
if: needs.ci-test-limited-existing-docker-image.result != 'success'
run: exit 1
\ No newline at end of file
diff --git a/.github/workflows/build-client-server.yml b/.github/workflows/build-client-server.yml
index 550758e0fcbd..b3191415e7da 100644
--- a/.github/workflows/build-client-server.yml
+++ b/.github/workflows/build-client-server.yml
@@ -14,6 +14,7 @@ jobs:
pr: ${{steps.args.outputs.pr}}
runId: ${{steps.args.outputs.runId}}
matrix_count: ${{steps.matrix.outputs.matrix_count}}
+ is-pg-build: ${{steps.args.outputs.is-pg-build}}
steps:
- name: Checkout the head commit of the branch
uses: actions/checkout@v4
@@ -27,6 +28,7 @@ jobs:
id: args
run: |
echo "pr=${{ github.event.client_payload.pull_request.number }}" >> $GITHUB_OUTPUT
+ echo "is-pg-build=${{ github.event.client_payload.pull_request.base.ref == 'pg' }}" >> $GITHUB_OUTPUT
checkArg=`echo '${{toJSON(github.event.client_payload.slash_command.args.named)}}' | jq 'has("runId")'`
if [[ $checkArg == 'true' ]]; then
echo "runId=${{ github.event.client_payload.slash_command.args.named.runId }}" >> $GITHUB_OUTPUT
@@ -92,6 +94,7 @@ jobs:
with:
pr: ${{fromJson(needs.file-check.outputs.pr)}}
skip-tests: "true"
+ is-pg-build: ${{fromJson(needs.file-check.outputs.is-pg-build)}}
client-build:
name: client-build
diff --git a/.github/workflows/ci-test-limited-with-count.yml b/.github/workflows/ci-test-limited-with-count.yml
index 8790ca231881..3399eaddb703 100644
--- a/.github/workflows/ci-test-limited-with-count.yml
+++ b/.github/workflows/ci-test-limited-with-count.yml
@@ -346,15 +346,29 @@ jobs:
NODE_ENV: development
run: |
cd app/client
- npx cypress-repeat run -n ${{ inputs.run_count }} --force \
+ npx cypress-repeat-pro run -n ${{ inputs.run_count }} --force \
--spec ${{ env.specs_to_run }} \
- --config-file "cypress_ci_custom.config.ts"
+ --config-file "cypress_ci_custom.config.ts"
+ cat cy-repeat-summary.txt
+ # Check if "Total Failed: 0" is present
+ if ! grep -q "Total Failed: 0" cy-repeat-summary.txt; then
+ echo "Tests failed, failing the GitHub Action."
+ exit 1 # Fails the step if tests failed
+ fi
- name: Trim number of cypress log files
if: failure()
run: |
find ${{ github.workspace }}/app/client/cypress/cypress-logs -name '*.json' -type f | tail -n +11 | xargs -I {} rm -- {}
+ - name: Upload repeat-pro logs artifact
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: cypress-repeat-logs
+ path: ${{ github.workspace }}/app/client/cy-repeat-summary.txt
+ overwrite: true
+
- name: Upload failed test cypress logs artifact
if: failure()
uses: actions/upload-artifact@v4
diff --git a/.github/workflows/sync-release-to-pg.yml b/.github/workflows/sync-release-to-pg.yml
index b3a9c6ab3991..2e50073a07b1 100644
--- a/.github/workflows/sync-release-to-pg.yml
+++ b/.github/workflows/sync-release-to-pg.yml
@@ -14,9 +14,13 @@ jobs:
uses: actions/checkout@v3
with:
ref: release # Checkout the release branch
+ fetch-depth: 0
- - name: Fetch all branches
- run: git fetch origin pg
+ - name: Set Git config values
+ run: |
+ git config pull.rebase false
+ git config user.email "automated@github.com"
+ git config user.name "Automated Github Action"
- name: Checkout pg branch
run: git checkout pg
@@ -24,16 +28,12 @@ jobs:
- name: Merge release to pg
id: merge_commits
run: |
-
PG_HEAD=$(git rev-parse pg)
RELEASE_HEAD=$(git rev-parse release)
echo "PG_HEAD=$PG_HEAD"
echo "RELEASE_HEAD=$RELEASE_HEAD"
- # Checkout the pg branch
- git checkout pg
-
# Attempt to merge release into pg
if ! git merge release; then
echo "Merge conflict detected during merge"
@@ -42,7 +42,6 @@ jobs:
CONFLICTING_COMMIT=$(git log -1 --pretty=format:"%H")
echo "CONFLICTING_COMMIT=$CONFLICTING_COMMIT" >> $GITHUB_ENV
- git merge --abort
echo "MERGE_CONFLICT=true" >> $GITHUB_ENV
else
echo "MERGE_CONFLICT=false" >> $GITHUB_ENV
@@ -68,6 +67,8 @@ jobs:
# This unwieldy horror of a sed command, converts standard Markdown links to Slack's unwieldy link syntax.
slack_message="$(echo "$message" | sed -E 's/\[([^]]+)\]\(([^)]+)\)/<\2|\1>/g')"
+ echo "$slack_message"
+
# This is the ChannelId of the proj postgres channel.
body="$(jq -nc \
--arg channel C06Q3A97USE \
diff --git a/.github/workflows/test-build-docker-image.yml b/.github/workflows/test-build-docker-image.yml
index 2a874e3e5167..9384df2101e2 100644
--- a/.github/workflows/test-build-docker-image.yml
+++ b/.github/workflows/test-build-docker-image.yml
@@ -21,9 +21,9 @@ on:
type: string
default: latest
- # trigger for pushes to master
+ # trigger for pushes to master and pg
push:
- branches: [master]
+ branches: [master, pg]
paths:
- "app/client/**"
- "app/server/**"
@@ -100,7 +100,7 @@ jobs:
ci-test:
needs: [setup, build-docker-image]
# Only run if the build step is successful
- if: success() && ( github.event_name != 'push' || github.ref == 'refs/heads/master' )
+ if: success() && ( github.event_name != 'push' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/pg' )
name: ci-test
uses: ./.github/workflows/ci-test-custom-script.yml
secrets: inherit
@@ -113,7 +113,7 @@ jobs:
server-unit-tests:
name: server-unit-tests
needs: [build-docker-image]
- if: success() && ( github.event_name != 'push' || github.ref == 'refs/heads/master' )
+ if: success() && ( github.event_name != 'push' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/pg' )
uses: ./.github/workflows/server-build.yml
secrets: inherit
with:
@@ -123,7 +123,7 @@ jobs:
client-unit-tests:
name: client-unit-tests
needs: [build-docker-image]
- if: success() && ( github.event_name != 'push' || github.ref == 'refs/heads/master' )
+ if: success() && ( github.event_name != 'push' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/pg' )
uses: ./.github/workflows/client-unit-tests.yml
secrets: inherit
with:
@@ -341,6 +341,12 @@ jobs:
scripts/generate_info_json.sh
fi
+ - name: Place server artifacts-es
+ run: |
+ if [[ -f scripts/prepare_server_artifacts.sh ]]; then
+ scripts/prepare_server_artifacts.sh
+ fi
+
- name: Set up Depot CLI
uses: depot/setup-action@v1
@@ -362,7 +368,7 @@ jobs:
APPSMITH_CLOUD_SERVICES_BASE_URL=https://release-cs.appsmith.com
BASE=${{ vars.DOCKER_HUB_ORGANIZATION }}/base-${{ vars.EDITION }}:release
tags: |
- ${{ vars.DOCKER_HUB_ORGANIZATION }}/appsmith-${{ vars.EDITION }}:release
+ ${{ vars.DOCKER_HUB_ORGANIZATION }}/appsmith-${{ vars.EDITION }}:${{ github.ref_name }}
package-master:
needs: [ci-test, client-unit-tests, server-unit-tests]
diff --git a/app/client/cypress/e2e/GSheet/AllAccess_Spec.ts b/app/client/cypress/e2e/GSheet/AllAccess_Spec.ts
index 0f4ac2f2d2a1..aca3a5ab40df 100644
--- a/app/client/cypress/e2e/GSheet/AllAccess_Spec.ts
+++ b/app/client/cypress/e2e/GSheet/AllAccess_Spec.ts
@@ -15,7 +15,7 @@ const workspaceName = "gsheet apps";
const dataSourceName = "gsheet-all";
let appName = "gsheet-app";
let spreadSheetName = "test-sheet";
-describe(
+describe.skip(
"GSheet-Functional Tests With All Access",
{ tags: ["@tag.Datasource", "@tag.GSheet"] },
function () {
diff --git a/app/client/cypress/e2e/GSheet/GsheetMisc_Spec.ts b/app/client/cypress/e2e/GSheet/GsheetMisc_Spec.ts
index 479c3b65b52e..b54a27b257c2 100644
--- a/app/client/cypress/e2e/GSheet/GsheetMisc_Spec.ts
+++ b/app/client/cypress/e2e/GSheet/GsheetMisc_Spec.ts
@@ -21,7 +21,7 @@ const workspaceName = "gsheet apps";
const dataSourceName = "gsheet-all";
let appName = "gsheet-app";
let spreadSheetName = "test-sheet";
-describe(
+describe.skip(
"GSheet Miscellaneous Tests",
{ tags: ["@tag.Datasource", "@tag.GSheet"] },
function () {
diff --git a/app/client/cypress/e2e/GSheet/ReadNWrite_Access_Spec.ts b/app/client/cypress/e2e/GSheet/ReadNWrite_Access_Spec.ts
index 38bfcc82f85e..8d5a72c78b33 100644
--- a/app/client/cypress/e2e/GSheet/ReadNWrite_Access_Spec.ts
+++ b/app/client/cypress/e2e/GSheet/ReadNWrite_Access_Spec.ts
@@ -11,7 +11,7 @@ import {
appSettings,
} from "../../support/Objects/ObjectsCore";
-describe(
+describe.skip(
"GSheet-Functional Tests With Read/Write Access",
{ tags: ["@tag.Datasource", "@tag.GSheet"] },
function () {
diff --git a/app/client/cypress/e2e/GSheet/ReadOnly_Access_Spec.ts b/app/client/cypress/e2e/GSheet/ReadOnly_Access_Spec.ts
index 95ad0629d440..e90840f7d3ca 100644
--- a/app/client/cypress/e2e/GSheet/ReadOnly_Access_Spec.ts
+++ b/app/client/cypress/e2e/GSheet/ReadOnly_Access_Spec.ts
@@ -11,7 +11,7 @@ import {
appSettings,
} from "../../support/Objects/ObjectsCore";
-describe(
+describe.skip(
"GSheet-Functional Tests With Read Access",
{ tags: ["@tag.Datasource", "@tag.GSheet"] },
function () {
diff --git a/app/client/cypress/e2e/GSheet/WidgetBinding_AllAccess_Spec.ts b/app/client/cypress/e2e/GSheet/WidgetBinding_AllAccess_Spec.ts
index 1bf593992248..a3afbd77610c 100644
--- a/app/client/cypress/e2e/GSheet/WidgetBinding_AllAccess_Spec.ts
+++ b/app/client/cypress/e2e/GSheet/WidgetBinding_AllAccess_Spec.ts
@@ -21,7 +21,7 @@ const workspaceName = "gsheet apps";
const dataSourceName = "gsheet-all";
let appName = "gsheet-app";
let spreadSheetName = "test-sheet";
-describe(
+describe.skip(
"GSheet-widget binding",
{ tags: ["@tag.Datasource", "@tag.GSheet"] },
function () {
diff --git a/app/client/cypress/e2e/Regression/ClientSide/ActionExecution/StoreValue_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/ActionExecution/StoreValue_spec.ts
index 8ce32c6a015e..e13c374025a3 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/ActionExecution/StoreValue_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/ActionExecution/StoreValue_spec.ts
@@ -238,7 +238,7 @@ describe("storeValue Action test", { tags: ["@tag.JS"] }, () => {
});
agHelper.ClickButton("Test store logs");
- debuggerHelper.ClickDebuggerIcon();
+ debuggerHelper.OpenDebugger();
debuggerHelper.ClickLogsTab();
debuggerHelper.changeLogsGroup("System logs");
debuggerHelper.DoesConsoleLogExist("storeValue('xyz', '123', true)");
diff --git a/app/client/cypress/e2e/Regression/ClientSide/BugTests/Bug29566_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/BugTests/Bug29566_Spec.ts
deleted file mode 100644
index e4e8d6d378cf..000000000000
--- a/app/client/cypress/e2e/Regression/ClientSide/BugTests/Bug29566_Spec.ts
+++ /dev/null
@@ -1,114 +0,0 @@
-import largeJSONData from "../../../../fixtures/largeJSONData.json";
-import {
- agHelper,
- deployMode,
- jsEditor,
-} from "../../../../support/Objects/ObjectsCore";
-
-describe("JS Function execution data mutation", function () {
- before(() => {
- agHelper.AddDsl("listwidgetData");
- });
-
- it("1. List widget gets populated on page load", function () {
- const APIJS = `export default {
-
- async runFetch(dataRequest) {
- return fetch(dataRequest.url, dataRequest.config)
- .then(response => {
- return response.json();
- }).catch(error => {
- showAlert('API error')
- });
- },
-
- async getConditionGroups() {
- const dataRequest = {
- url: "https://api.jsonbin.io/v3/b/656ed15d54105e766fd9ca52",
- config: {
- method: 'GET',
- },
- name: 'getConditionGroups'
- };
- return await this.runFetch(dataRequest);
- },
-
- async getConditionListData() {
- const dataRequest = {
- url: "https://api.jsonbin.io/v3/b/656ed18454105e766fd9ca6c",
- config: {
- method: 'GET',
- },
- name: 'getConditionGroups'
- };
- return await this.runFetch(dataRequest);
- },
-
- }`;
- const PAGE1JS = `export default {
-
- conditionGroups: [],
- allConditionGroups: [],
- maxItemsOnPageMachineConditionGroups: 6,
- startIndex_MCG: 0,
- conditionGroupsToShow: [],
- splittingDataOf_MCG_ToShowIntoThreeColumns: [[],[],[]],
- selectedMachineConditionGroups: [],
-
- async getAllConditionGroupsData() {
- const conditionGroups = await ApiJS.getConditionGroups()|| [];
- this.conditionGroups = conditionGroups.record
- console.log("conditionGroups ====> ",conditionGroups);
- this.conditionGroups.filter((item) => {
- this.allConditionGroups.push(item.conditionGroup);
- });
- this.allConditionGroupsSplitedIntoThreeColumns()
- },
-
- allConditionGroupsSplitedIntoThreeColumns() {
- let tmpCounter_MCG = 0;
- for(let i = 0; i < this.maxItemsOnPageMachineConditionGroups; i++) {
- this.conditionGroupsToShow.push([this.allConditionGroups[this.startIndex_MCG]]);
- this.splittingDataOf_MCG_ToShowIntoThreeColumns[tmpCounter_MCG].push(this.allConditionGroups[this.startIndex_MCG]);
- this.startIndex_MCG++;
- tmpCounter_MCG === 2 ? tmpCounter_MCG = 0 : tmpCounter_MCG++;
- }
- },
-
- setBgSelected_MCG(id) {
- return this.selectedMachineConditionGroups.includes(id) ? '#0d9be2' : '#383838';
- },
- test(){
- this.splittingDataOf_MCG_ToShowIntoThreeColumns = [[],[],[]]
- return this.splittingDataOf_MCG_ToShowIntoThreeColumns
- }
-
- }`;
- jsEditor.CreateJSObject(APIJS, {
- paste: true,
- completeReplace: true,
- toRun: false,
- shouldCreateNewJSObj: true,
- prettify: false,
- });
- jsEditor.RenameJSObjFromPane("ApiJS");
- cy.wait(5000);
-
- jsEditor.CreateJSObject(PAGE1JS, {
- paste: true,
- completeReplace: true,
- toRun: false,
- shouldCreateNewJSObj: true,
- prettify: false,
- });
- jsEditor.RenameJSObjFromPane("Page1JS");
- cy.wait(5000);
- jsEditor.EnableDisableAsyncFuncSettings(
- "getAllConditionGroupsData",
- true,
- false,
- );
- deployMode.DeployApp();
- agHelper.AssertContains("MK Condition");
- });
-});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/BugTests/InputTruncateCheck_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/BugTests/InputTruncateCheck_Spec.ts
index df67f114d67a..d3c7ca26b1d4 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/BugTests/InputTruncateCheck_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/BugTests/InputTruncateCheck_Spec.ts
@@ -11,6 +11,7 @@ import {
draggableWidgets,
fakerHelper,
dataManager,
+ debuggerHelper,
} from "../../../../support/Objects/ObjectsCore";
const widgetsToTest = {
@@ -180,8 +181,18 @@ Object.entries(widgetsToTest).forEach(([widgetSelector, testConfig], index) => {
agHelper.GetNClick(locators._widgetInputSelector(widgetSelector));
agHelper.PressDelete();
+ //Since widget is removed & Button is still holding its reference
+ debuggerHelper.AssertDebugError(
+ `'${testConfig.widgetPrefixName}1' is not defined.`,
+ "",
+ true,
+ false,
+ );
+ debuggerHelper.CloseBottomBar();
agHelper.GetNClick(getWidgetSelector(draggableWidgets.BUTTON));
- agHelper.AssertContains("is not defined"); //Since widget is removed & Button is still holding its reference
+ agHelper.ValidateToastMessage(
+ `${testConfig.widgetPrefixName}1 is not defined`,
+ );
agHelper.PressDelete();
agHelper.GetNClick(getWidgetSelector(draggableWidgets.TEXT)).click();
diff --git a/app/client/cypress/e2e/Regression/ClientSide/BugTests/ListWidgetOnPageLoad_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/BugTests/ListWidgetOnPageLoad_Spec.ts
new file mode 100644
index 000000000000..4826088ab6d7
--- /dev/null
+++ b/app/client/cypress/e2e/Regression/ClientSide/BugTests/ListWidgetOnPageLoad_Spec.ts
@@ -0,0 +1,59 @@
+import {
+ agHelper,
+ dataSources,
+ deployMode,
+ locators,
+ propPane,
+} from "../../../../support/Objects/ObjectsCore";
+import EditorNavigation, {
+ AppSidebar,
+ AppSidebarButton,
+ EntityType,
+ PageLeftPane,
+ PagePaneSegment,
+} from "../../../../support/Pages/EditorNavigation";
+
+describe(
+ "JS Function execution data mutation",
+ { tags: ["@tag.Widget", "@tag.List"] },
+ function () {
+ before(() => {
+ agHelper.AddDsl("Listv2/simpleList");
+ });
+
+ it("1. List widget gets populated on page load. Bug: 29566", function () {
+ dataSources.CreateDataSource("Postgres");
+ cy.get("@dsName").then(() => {
+ dataSources.CreateQueryAfterDSSaved(
+ "SELECT id,name FROM public.users LIMIT 10;",
+ );
+ dataSources.ToggleUsePreparedStatement(false);
+ dataSources.RunQuery();
+ });
+ AppSidebar.navigate(AppSidebarButton.Editor);
+ PageLeftPane.switchSegment(PagePaneSegment.UI);
+ EditorNavigation.SelectEntityByName("List1", EntityType.Widget);
+ propPane.UpdatePropertyFieldValue("Items", "{{Query1.data}}");
+ propPane.TogglePropertyState("Server side pagination", "Off");
+ propPane.SelectPropertiesDropDown("Data Identifier", "id");
+ agHelper
+ .GetText(locators._widgetInCanvas("textwidget") + " span")
+ .then((initialTexts: string[]) => {
+ deployMode.DeployApp();
+ agHelper.AssertElementLength(locators._textWidgetInDeployed, 6);
+ agHelper
+ .GetText(locators._textWidgetInDeployed)
+ .then((deployedTexts: string[]) => {
+ expect(deployedTexts).to.deep.equal(initialTexts);
+ });
+ agHelper.CypressReload();
+ agHelper.AssertElementLength(locators._textWidgetInDeployed, 6);
+ agHelper
+ .GetText(locators._textWidgetInDeployed)
+ .then((deployedTexts: string[]) => {
+ expect(deployedTexts).to.deep.equal(initialTexts);
+ });
+ });
+ });
+ },
+);
diff --git a/app/client/cypress/e2e/Regression/ClientSide/BugTests/Moment_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/BugTests/Moment_Spec.ts
index 9cb9c89457fe..a17f26f09537 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/BugTests/Moment_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/BugTests/Moment_Spec.ts
@@ -122,7 +122,7 @@ describe(
deployMode.NavigateBacktoEditor();
//verify runAstros triggered on PageLaoad of Edit page!
- debuggerHelper.ClickDebuggerIcon();
+ debuggerHelper.OpenDebugger();
debuggerHelper.ClickLogsTab();
debuggerHelper.DebuggerLogsFilter("JSObject1.runAstros");
debuggerHelper.DoesConsoleLogExist("JS Function executed successfully");
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Debugger/Api_pane_navigation_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Debugger/Api_pane_navigation_spec.ts
index d8d690583351..5bacf30fa3d1 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Debugger/Api_pane_navigation_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Debugger/Api_pane_navigation_spec.ts
@@ -27,7 +27,7 @@ describe(
apiPage.EnterHeader("test", "test");
debuggerHelper.AssertErrorCount(1);
EditorNavigation.ShowCanvas();
- debuggerHelper.ClickDebuggerIcon();
+ debuggerHelper.OpenDebugger();
debuggerHelper.ClicklogEntityLink();
agHelper.AssertElementVisibility(apiPage._nextCursorValue);
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Debugger/JSObjects_navigation_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Debugger/JSObjects_navigation_spec.ts
index 0446d7cb696a..6d00f9aecd6d 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Debugger/JSObjects_navigation_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Debugger/JSObjects_navigation_spec.ts
@@ -30,7 +30,7 @@ describe("JSObjects", () => {
shouldCreateNewJSObj: true,
});
- debuggerHelper.ClickDebuggerIcon();
+ debuggerHelper.OpenDebugger();
debuggerHelper.ClicklogEntityLink();
agHelper.AssertCursorInput(".js-editor", { ch: 20, line: 6 });
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Debugger/Query_pane_navigation.ts b/app/client/cypress/e2e/Regression/ClientSide/Debugger/Query_pane_navigation.ts
index 4dc7732fb30c..5ba9fa87bc5f 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Debugger/Query_pane_navigation.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Debugger/Query_pane_navigation.ts
@@ -66,8 +66,7 @@ describe(
);
debuggerHelper.AssertErrorCount(2);
- debuggerHelper.ClickDebuggerIcon();
- debuggerHelper.ClicklogEntityLink();
+ debuggerHelper.OpenDebugger();
agHelper.AssertElementVisibility(
".t--actionConfiguration\\.formData\\.limitDocuments\\.data",
);
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Debugger/Widget_property_navigation_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Debugger/Widget_property_navigation_spec.ts
index 1f9699579c2c..30a27209444a 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Debugger/Widget_property_navigation_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Debugger/Widget_property_navigation_spec.ts
@@ -14,7 +14,7 @@ describe(
_.debuggerHelper.AssertErrorCount(1);
_.propPane.ToggleSection("general");
_.agHelper.AssertElementAbsence("animateloading");
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.ClicklogEntityLink();
_.propPane.AssertIfPropertyIsVisible("animateloading");
@@ -28,7 +28,7 @@ describe(
_.propPane.EnterJSContext("visible", "{{test}}", true, false);
_.debuggerHelper.AssertErrorCount(1);
_.propPane.NavigateBackToPropertyPane();
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.ClicklogEntityLink();
_.agHelper.GetNAssertContains(_.propPane._paneTitle, "Tab 2");
_.propPane.AssertIfPropertyIsVisible("visible");
@@ -48,7 +48,7 @@ describe(
_.debuggerHelper.AssertErrorCount(1);
_.propPane.NavigateBackToPropertyPane(false);
_.propPane.NavigateBackToPropertyPane();
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.ClicklogEntityLink();
_.agHelper.GetNAssertContains(_.propPane._paneTitle, "Menu Item");
_.propPane.AssertIfPropertyIsVisible("icon");
@@ -65,7 +65,7 @@ describe(
_.propPane.MoveToTab("Style");
_.debuggerHelper.AssertErrorCount(1);
_.propPane.NavigateBackToPropertyPane();
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.ClicklogEntityLink();
_.agHelper.GetNAssertContains(_.propPane._paneTitle, "Second Menu Item");
_.propPane.AssertIfPropertyIsVisible("disabled");
@@ -110,7 +110,7 @@ describe(
_.propPane.NavigateBackToPropertyPane(false);
_.propPane.NavigateBackToPropertyPane();
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.ClicklogEntityLink();
_.agHelper.GetNAssertContains(_.propPane._paneTitle, "Custom Field 2");
_.propPane.AssertIfPropertyIsVisible("borderradius");
@@ -133,7 +133,7 @@ describe(
_.propPane.EnterJSContext("disabled", "{{test}}", true, false);
_.debuggerHelper.AssertErrorCount(2);
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.ClicklogEntityLink(true);
_.agHelper.GetNAssertContains(_.propPane._paneTitle, "First Menu Item");
_.debuggerHelper.CloseBottomBar();
@@ -173,7 +173,7 @@ describe(
_.propPane.ToggleSection("validation");
_.propPane.NavigateBackToPropertyPane();
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.ClicklogEntityLink();
_.agHelper.GetNAssertContains(_.propPane._paneTitle, "imdb_id");
_.debuggerHelper.CloseBottomBar();
diff --git a/app/client/cypress/e2e/Regression/ClientSide/ExplorerTests/Pages_spec.js b/app/client/cypress/e2e/Regression/ClientSide/ExplorerTests/Pages_spec.js
index ed8b4056207f..cf1d77b9dd19 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/ExplorerTests/Pages_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/ExplorerTests/Pages_spec.js
@@ -3,9 +3,6 @@ import EditorNavigation, {
EntityType,
} from "../../../../support/Pages/EditorNavigation";
import PageList from "../../../../support/Pages/PageList";
-const locators = {
- errorPageTitle: ".t--error-page-title",
-};
describe("Pages", { tags: ["@tag.IDE"] }, function () {
let veryLongPageName = `abcdefghijklmnopqrstuvwxyz1234`;
@@ -36,7 +33,7 @@ describe("Pages", { tags: ["@tag.IDE"] }, function () {
EditorNavigation.SelectEntityByName("Page1 Copy", EntityType.Page);
//Checks if 404 is showing correct route
cy.visit("/route-that-does-not-exist");
- cy.get(locators.errorPageTitle).should(($x) => {
+ cy.get(_.locators.errorPageTitle).should(($x) => {
expect($x).contain(Cypress.env("MESSAGES").PAGE_NOT_FOUND());
});
});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Git/GitAutocommit_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Git/GitAutocommit_spec.ts
new file mode 100644
index 000000000000..fbc7b921c5a3
--- /dev/null
+++ b/app/client/cypress/e2e/Regression/ClientSide/Git/GitAutocommit_spec.ts
@@ -0,0 +1,57 @@
+import ReconnectLocators from "../../../../locators/ReconnectLocators";
+import { featureFlagIntercept } from "../../../../support/Objects/FeatureFlags";
+import {
+ agHelper,
+ gitSync,
+ homePage,
+} from "../../../../support/Objects/ObjectsCore";
+
+let wsName: string;
+let repoName: string = "TED-testrepo1";
+
+describe(
+ "Git Autocommit",
+ { tags: ["@tag.Git", "@tag.GitAutocommit"] },
+ function () {
+ it("Check if autocommit progress bar is visible and network requests are properly called", function () {
+ featureFlagIntercept({
+ release_git_autocommit_feature_enabled: true,
+ });
+ agHelper.GenerateUUID();
+ cy.get("@guid").then((uid) => {
+ wsName = "GitAC-" + uid;
+ homePage.CreateNewWorkspace(wsName, true);
+
+ cy.intercept({
+ method: "POST",
+ url: "/api/v1/git/auto-commit/app/*",
+ }).as("gitAutocommitTriggerApi");
+
+ cy.intercept(
+ {
+ method: "GET",
+ url: "/api/v1/git/auto-commit/progress/app/*",
+ },
+ (req) => {
+ req.on("response", (res) => {
+ res.setDelay(500);
+ });
+ },
+ ).as("gitAutocommitProgressApi");
+
+ gitSync.ImportAppFromGit(wsName, repoName);
+ agHelper.GetNClick(ReconnectLocators.SkipToAppBtn);
+ cy.wait("@gitAutocommitTriggerApi").then((interception) => {
+ expect(interception?.response?.statusCode).to.equal(200);
+ expect(
+ interception?.response?.body?.data?.autoCommitResponse,
+ ).to.equal("PUBLISHED");
+ agHelper.WaitUntilEleAppear(gitSync._autocommitStatusbar);
+ });
+ cy.wait("@gitAutocommitProgressApi").then((interceptions) => {
+ expect(interceptions?.response?.statusCode).to.equal(200);
+ });
+ });
+ });
+ },
+);
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Git/GitSync/GitBranchProtect_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Git/GitSync/GitBranchProtect_spec.ts
index 92c3858ea3e2..6a27f57bb7b1 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Git/GitSync/GitBranchProtect_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Git/GitSync/GitBranchProtect_spec.ts
@@ -36,10 +36,7 @@ describe("Git Branch Protection", { tags: ["@tag.Git"] }, function () {
cy.wait("@gitProtectApi").then((res1) => {
_.agHelper.GetNClick(_.gitSync._closeGitSettingsModal);
expect(res1.response).to.have.property("statusCode", 200);
- _.agHelper.AssertElementVisibility(
- AppSidebar.locators.sidebar,
- false,
- );
+ _.agHelper.AssertElementAbsence(AppSidebar.locators.sidebar);
_.agHelper.AssertElementVisibility(
PageLeftPane.locators.selector,
false,
diff --git a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/EntityBottomBar_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/EntityBottomBar_spec.ts
index fae97f66f8e2..23d9464dffc1 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/EntityBottomBar_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/EntityBottomBar_spec.ts
@@ -7,7 +7,7 @@ describe("Entity bottom bar", { tags: ["@tag.IDE"] }, () => {
//Verify if bottom bar is closed.
_.debuggerHelper.AssertClosed();
//verify if bottom bar is open on clicking debugger icon in canvas.
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.AssertOpen(PageType.Canvas);
//Verify if selected tab is errors in tab title.
_.debuggerHelper.AssertSelectedTab(
@@ -48,7 +48,7 @@ describe("Entity bottom bar", { tags: ["@tag.IDE"] }, () => {
//Verify that the errors tab is still closed.
_.debuggerHelper.AssertClosed();
//Verify if bottom bar opens on clicking debugger icon in api page.
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.AssertOpen(PageType.API);
//Verify if selected tab is errors in tab title.
_.debuggerHelper.AssertSelectedTab(
@@ -70,7 +70,7 @@ describe("Entity bottom bar", { tags: ["@tag.IDE"] }, () => {
//Expecting errors tab to be closed as this is now a datasource
_.debuggerHelper.AssertClosed();
//Verify if bottom bar opens on clicking debugger icon in datasource page.
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.AssertOpen(PageType.DataSources);
});
@@ -91,7 +91,7 @@ describe("Entity bottom bar", { tags: ["@tag.IDE"] }, () => {
_.debuggerHelper.AssertClosed();
//Verify if bottom bar opens on clicking debugger icon in query page.
_.dataSources.CreateQueryAfterDSSaved();
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.AssertOpen(PageType.Query);
//Verify if bottom bar is closed on clicking close icon in query page.
_.debuggerHelper.CloseBottomBar();
@@ -130,7 +130,7 @@ describe("Entity bottom bar", { tags: ["@tag.IDE"] }, () => {
_.debuggerHelper.AssertClosed();
//Verify if bottom bar opens on clicking debugger icon in query page.
_.dataSources.CreateQueryAfterDSSaved();
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.AssertOpen(PageType.Query);
//Verify if bottom bar is closed on clicking close icon in query page.
_.debuggerHelper.CloseBottomBar();
diff --git a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/ErrorMessages_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/ErrorMessages_spec.ts
index c0e974e15a03..6bc10f52d431 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/ErrorMessages_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/ErrorMessages_spec.ts
@@ -33,13 +33,21 @@ describe("Sanitise toast error messages", () => {
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
_.propPane.EnterJSContext("onClick", "{{a.kjbfjdfbkds()}}");
_.agHelper.ClickButton("Submit");
- _.agHelper.WaitUntilToastDisappear("a is not defined");
+ _.debuggerHelper.AssertDebugError("'a' is not defined.", "", true, false);
});
it("2. Does not show type error label when js obj function does not exist", () => {
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
_.propPane.EnterJSContext("onClick", "{{JSObject1.myFun1efef()}}");
+ // Assert the lint error that shows up
+ _.debuggerHelper.AssertDebugError(
+ `"myFun1efef" doesn't exist in JSObject1`,
+ "",
+ false,
+ false,
+ );
_.agHelper.ClickButton("Submit");
+ // Assert the execution error that shows up
_.agHelper.WaitUntilToastDisappear("Object1.myFun1efef is not a function");
});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Inspect_Element_spec.js b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Inspect_Element_spec.js
index ca9ba9a553fc..b4f51bc7282f 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Inspect_Element_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Inspect_Element_spec.js
@@ -7,7 +7,7 @@ describe("Inspect Entity", function () {
it("1. Check whether depedencies and references are shown correctly", function () {
cy.openPropertyPane("inputwidgetv2");
cy.testJsontext("defaultvalue", "{{Button1.text}}");
- _.agHelper.GetNClick(".t--debugger-count");
+ _.debuggerHelper.OpenDebugger();
cy.contains(".ads-v2-tabs__list-tab", "Inspect entity").click();
cy.contains(".t--dependencies-item", "Button1").click();
cy.contains(".t--dependencies-item", "Input1");
diff --git a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Logs1_spec.js b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Logs1_spec.js
index a3e7ffa11e78..42b84b43474b 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Logs1_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Logs1_spec.js
@@ -1,5 +1,3 @@
-import commonlocators from "../../../../locators/commonlocators.json";
-import { homePage } from "../../../../support/Objects/ObjectsCore";
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
import EditorNavigation, {
EntityType,
@@ -26,18 +24,18 @@ describe("Debugger logs", function () {
logString = generateTestLogString();
});
- it("3. Console log on button click with normal moustache binding", function () {
+ it("1. Console log on button click with normal moustache binding", function () {
ee.DragDropWidgetNVerify("buttonwidget", 200, 200);
// Testing with normal log in moustache binding
propPane.EnterJSContext("onClick", `{{console.log("${logString}")}}`);
agHelper.Sleep(2000);
agHelper.ClickButton("Submit");
- debuggerHelper.ClickDebuggerIcon();
+ debuggerHelper.OpenDebugger();
agHelper.GetNClick(jsEditor._logsTab);
debuggerHelper.DoesConsoleLogExist(logString);
});
- it("4. Console log on button click with arrow function IIFE", function () {
+ it("2. Console log on button click with arrow function IIFE", function () {
debuggerHelper.ClearLogs();
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
// Testing with normal log in iifee
@@ -51,7 +49,7 @@ describe("Debugger logs", function () {
debuggerHelper.DoesConsoleLogExist(logString);
});
- it("5. Console log on button click with function keyword IIFE", function () {
+ it("3. Console log on button click with function keyword IIFE", function () {
debuggerHelper.ClearLogs();
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
// Testing with normal log in iifee
@@ -65,7 +63,7 @@ describe("Debugger logs", function () {
debuggerHelper.DoesConsoleLogExist(logString);
});
- it("6. Console log on button click with async function IIFE", function () {
+ it("4. Console log on button click with async function IIFE", function () {
debuggerHelper.ClearLogs();
// Testing with normal log in iifee
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
@@ -79,7 +77,7 @@ describe("Debugger logs", function () {
debuggerHelper.DoesConsoleLogExist(logString);
});
- it("7. Console log on button click with mixed function IIFE", function () {
+ it("5. Console log on button click with mixed function IIFE", function () {
debuggerHelper.ClearLogs();
// Testing with normal log in iifee
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
@@ -96,7 +94,7 @@ describe("Debugger logs", function () {
debuggerHelper.DoesConsoleLogExist(logStringChild);
});
- it("8. Console log grouping on button click", function () {
+ it("6. Console log grouping on button click", function () {
debuggerHelper.ClearLogs();
// Testing with normal log in iifee
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
@@ -116,7 +114,7 @@ describe("Debugger logs", function () {
debuggerHelper.AssertConsecutiveConsoleLogCount(5);
});
- it("9. Console log grouping on button click with different log in between", function () {
+ it("7. Console log grouping on button click with different log in between", function () {
debuggerHelper.ClearLogs();
// Testing with normal log in iifee
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
@@ -135,7 +133,7 @@ describe("Debugger logs", function () {
debuggerHelper.AssertConsecutiveConsoleLogCount(2);
});
- it("10. Console log grouping on button click from different source", function () {
+ it("8. Console log grouping on button click from different source", function () {
debuggerHelper.ClearLogs();
// Testing with normal log in iifee
EditorNavigation.SelectEntityByName("Button1", EntityType.Widget);
diff --git a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Logs2_spec.js b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Logs2_spec.js
index 84207474a4c8..fa3358209b5d 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Logs2_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Logs2_spec.js
@@ -34,7 +34,7 @@ describe("Debugger logs", { tags: ["@tag.IDE"] }, function () {
_.agHelper.RefreshPage();
// Wait for the debugger icon to be visible
_.agHelper.AssertElementVisibility(".t--debugger-count");
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.agHelper.GetNClick(_.jsEditor._logsTab);
_.debuggerHelper.DoesConsoleLogExist(logString);
});
@@ -286,7 +286,7 @@ describe("Debugger logs", { tags: ["@tag.IDE"] }, function () {
EditorNavigation.SelectEntityByName("Page1", EntityType.Page);
_.agHelper.AssertElementVisibility(".t--debugger-count");
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
_.debuggerHelper.ClicklogEntityLink();
diff --git a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Widget_Error_spec.js b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Widget_Error_spec.js
index ae53291a32a1..5b35f24d7960 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Widget_Error_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/OtherUIFeatures/Widget_Error_spec.js
@@ -23,7 +23,7 @@ describe("Widget error state", function () {
//Check if the current value is shown in the debugger
- _.debuggerHelper.ClickDebuggerIcon();
+ _.debuggerHelper.OpenDebugger();
cy.get("[data-testid=t--tab-ERROR]").click();
//This feature is disabled in updated error log - epic 17720
// _.debuggerHelper.LogStateContains("Test");
@@ -44,8 +44,8 @@ describe("Widget error state", function () {
);
// All errors should be expanded by default
- //Updated count to 1 as the decision not to show triggerexecution/uncaughtpromise error in - epic 17720
- _.debuggerHelper.AssertVisibleErrorMessagesCount(1);
+ //Updated count to 2 as the decision to show the widget trigger lint errors to show in the debugger
+ _.debuggerHelper.AssertVisibleErrorMessagesCount(2);
// Recent errors are shown at the top of the list
cy.testJsontext("label", "{{[]}}");
@@ -63,7 +63,7 @@ describe("Widget error state", function () {
cy.deleteWidget();
_.debuggerHelper.AssertVisibleErrorMessagesCount(0);
cy.get("body").type(`{${modifierKey}}z`);
- _.debuggerHelper.AssertVisibleErrorMessagesCount(2);
+ _.debuggerHelper.AssertVisibleErrorMessagesCount(3);
//Bug-2760: Error log on a widget property not clearing out when the widget property is deleted
_.entityExplorer.DragDropWidgetNVerify(WIDGET.TABLE, 150, 300);
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Templates/Fork_Template_To_App_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Templates/Fork_Template_To_App_spec.ts
index 2838e49a8674..46bd1a99a335 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Templates/Fork_Template_To_App_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Templates/Fork_Template_To_App_spec.ts
@@ -15,17 +15,14 @@ describe(
it("1. Fork a template to the current app + Bug 17477", () => {
PageList.AddNewPage("Add page from template");
agHelper.AssertElementVisibility(template.templateDialogBox);
- agHelper.GetNClick("//h1[text()='Applicant Tracker-test']");
+ agHelper.GetNClick(template.templateCard, 0, true);
agHelper.FailIfErrorToast("INTERNAL_SERVER_ERROR");
agHelper.GetNClick(template.templateViewForkButton);
agHelper.WaitUntilToastDisappear("template added successfully");
assertHelper.AssertNetworkStatus("updateLayout");
- // [Bug]: Getting 'Resource not found' error on deploying template #17477
+ PageList.AddNewPage("Generate page with data");
deployMode.DeployApp();
- agHelper.GetNClickByContains(
- ".t--page-switch-tab",
- "1 Track Applications",
- );
+ agHelper.GetNClick(locators._deployedPage, 0, true);
deployMode.NavigateBacktoEditor();
homePage.NavigateToHome();
agHelper.WaitUntilAllToastsDisappear();
@@ -35,14 +32,13 @@ describe(
homePage.CreateNewApplication();
PageList.AddNewPage("Add page from template");
agHelper.AssertElementVisibility(template.templateDialogBox);
- agHelper.GetNClick("//h1[text()='Applicant Tracker-test']");
+ agHelper.GetNClick(template.templateCard, 0, true);
agHelper.FailIfErrorToast(
"Internal server error while processing request",
);
assertHelper.AssertNetworkStatus("getTemplatePages");
agHelper.CheckUncheck(template.selectAllPages, false);
agHelper.GetNClick(template.selectCheckbox, 1);
- // [Bug]: On forking selected pages from a template, resource not found error is shown #17270
agHelper.GetNClick(template.templateViewForkButton);
agHelper.AssertElementAbsence(
locators._visibleTextSpan("Setting up the template"),
diff --git a/app/client/cypress/e2e/Regression/ClientSide/ThemingTests/Theme_MultiSelectWidget_spec.js b/app/client/cypress/e2e/Regression/ClientSide/ThemingTests/Theme_MultiSelectWidget_spec.js
index ecf774670d18..0f149cf2179a 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/ThemingTests/Theme_MultiSelectWidget_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/ThemingTests/Theme_MultiSelectWidget_spec.js
@@ -1,6 +1,7 @@
const commonlocators = require("../../../../locators/commonlocators.json");
const themelocator = require("../../../../locators/ThemeLocators.json");
+import { multiSelectWidgetLocators } from "../../../../locators/WidgetLocators";
import {
agHelper,
locators,
@@ -26,49 +27,19 @@ describe(
agHelper.GetNClick(locators._canvas);
appSettings.OpenAppSettings();
appSettings.GoToThemeSettings();
- //Border validation
- //cy.contains("Border").click({ force: true });
- cy.get(themelocator.border).should("have.length", "3");
- cy.borderMouseover(0, "none");
- cy.borderMouseover(1, "M");
- cy.borderMouseover(2, "L");
- cy.get(themelocator.border).eq(1).click({ force: true });
- cy.wait("@updateTheme").should(
- "have.nested.property",
- "response.body.responseMeta.status",
- 200,
- );
- cy.wait(1000);
- cy.contains("Border").click({ force: true });
-
- //Shadow validation
- //cy.contains("Shadow").click({ force: true });
- cy.wait(2000);
- cy.xpath(theme.locators._boxShadow("L")).click({ force: true });
- cy.wait("@updateTheme").should(
- "have.nested.property",
- "response.body.responseMeta.status",
- 200,
- );
- cy.wait(1000);
- cy.contains("Shadow").click({ force: true });
- //Font
cy.xpath(
"//p[text()='App font']/following-sibling::section//div//input",
).then(($elem) => {
- cy.get($elem).click({ force: true });
- cy.wait(250);
- cy.fixture("fontData").then(function (testdata) {
- this.testdata = testdata;
- });
+ agHelper.GetNClick($elem);
- cy.get(themelocator.fontsSelected)
- //.eq(10)
+ agHelper
+ .GetElement(themelocator.fontsSelected)
.should("contain.text", "Nunito Sans");
- cy.get(".rc-virtual-list .rc-select-item-option")
- .find(".leading-normal")
+ agHelper
+ .GetElement(themelocator.fontOption)
+ .find(themelocator.fontsSelected)
.eq(3)
.then(($childElem) => {
cy.get($childElem).click({ force: true });
@@ -80,60 +51,46 @@ describe(
themeFont = `Inter, sans-serif`;
});
});
- cy.contains("Font").click({ force: true });
- //Color - Bug 23501 - hence skipping
- // cy.wait(1000);
- // theme.ChangeThemeColor("purple", "Primary");
- // cy.get(themelocator.inputColor).should("have.value", "purple");
- // cy.wait(1000);
+ cy.contains("Font").click({ force: true });
- // theme.ChangeThemeColor("brown", "Background");
- // cy.get(themelocator.inputColor).should("have.value", "brown");
- // cy.wait(1000);
- // cy.contains("Color").click({ force: true });
appSettings.ClosePane();
});
- //Skipping due to mentioned bug
- it.skip("2. Publish the App and validate Font across the app + Bug 15007", function () {
+ it("2. Publish the App and validate Font across the app", function () {
deployMode.DeployApp();
- cy.get(".rc-select-selection-item > .rc-select-selection-item-content")
+ agHelper
+ .GetElement(
+ multiSelectWidgetLocators.multiSelectWidgetSelectedOptionContent,
+ )
.first()
.should("have.css", "font-family", themeFont);
- cy.get(".rc-select-selection-item > .rc-select-selection-item-content")
+ agHelper
+ .GetElement(
+ multiSelectWidgetLocators.multiSelectWidgetSelectedOptionContent,
+ )
.last()
.should("have.css", "font-family", themeFont);
deployMode.NavigateBacktoEditor();
});
- it.skip("3. Validate current theme feature", function () {
- cy.get("#canvas-selection-0").click({ force: true });
+ it("3. Apply theme and validate the color", function () {
appSettings.OpenAppSettings();
appSettings.GoToThemeSettings();
- //Change the Theme
- cy.get(commonlocators.changeThemeBtn).click({ force: true });
- cy.get(themelocator.currentTheme).click({ force: true });
- cy.get(".t--theme-card main > main")
- .first()
- .invoke("css", "background-color")
- .then(() => {
- cy.get(".t--draggable-multiselectwidgetv2:contains('more')")
- .last()
- .invoke("css", "background-color")
- .then((selectedBackgroudColor) => {
- expect("rgba(0, 0, 0, 0)").to.equal(selectedBackgroudColor);
- appSettings.ClosePane();
- });
- });
+ agHelper.GetNClick(commonlocators.changeThemeBtn, 0, true);
+ agHelper.GetNClick(
+ `${themelocator.featuredThemeSection} [data-testid='t--theme-card-Sunrise']`,
+ );
- //Publish the App and validate change of Theme across the app in publish mode
deployMode.DeployApp();
- cy.xpath("//div[@id='root']//section/parent::div").should(
- "have.css",
- "background-color",
- "rgb(165, 42, 42)",
- );
+
+ agHelper.GetNClick(multiSelectWidgetLocators.multiSelectWidgetTrigger);
+ agHelper
+ .GetElement(
+ multiSelectWidgetLocators.multiSelectWidgetDropdownOptionCheckbox,
+ )
+ .first()
+ .should("have.css", "background-color", "rgb(239, 68, 68)");
});
},
);
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Button/ButtonLintErrorValidation_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Button/ButtonLintErrorValidation_spec.js
index c65da1768296..93bcb3dbd81d 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Button/ButtonLintErrorValidation_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Button/ButtonLintErrorValidation_spec.js
@@ -43,13 +43,7 @@ describe(
.should("be.visible")
.contains("'lintError' is not defined.");
- cy.get(commonlocators.debugger)
- .should("be.visible")
- .click({ force: true });
-
- cy.get(commonlocators.errorTab)
- .should("be.visible")
- .click({ force: true });
+ _.debuggerHelper.OpenDebugger();
cy.get(commonlocators.debugErrorMsg).should("have.length", 3);
});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckboxGroup2_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckboxGroup2_spec.js
index cbdab81e2ce3..10c00970efb8 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckboxGroup2_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Checkbox/CheckboxGroup2_spec.js
@@ -77,8 +77,6 @@ describe(
it("3. handleSelectAllChange: unchecked", function () {
const selectAllSelector = formWidgetsPage.selectAllCheckboxControl;
const uncheckedOptionInputs = `${formWidgetsPage.checkboxGroupOptionInputs} input:not(:checked)`;
- // Deselect all
- cy.get(selectAllSelector).click();
// Should get 2 unchecked option inputs
cy.get(uncheckedOptionInputs).should("have.length", 2);
//handleSelectAllChange: checked", function () {
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/List/ListWidgetLintErrorValidation.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/List/ListWidgetLintErrorValidation.js
index 60b164133a0a..87c5d382fdd9 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/List/ListWidgetLintErrorValidation.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/List/ListWidgetLintErrorValidation.js
@@ -43,13 +43,7 @@ describe(
.should("be.visible")
.contains("'DATA' is not defined.");
- cy.get(commonlocators.debugger)
- .should("be.visible")
- .click({ force: true });
-
- cy.get(commonlocators.errorTab)
- .should("be.visible")
- .click({ force: true });
+ _.debuggerHelper.OpenDebugger();
cy.get(commonlocators.debugErrorMsg).should("have.length", 6);
});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Childwigets/List_Select_Widgets_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Childwigets/List_Select_Widgets_spec.js
index 88681abef13e..d734b16281c0 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Childwigets/List_Select_Widgets_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Childwigets/List_Select_Widgets_spec.js
@@ -149,12 +149,7 @@ describe("Select Widgets", { tags: ["@tag.Widget", "@tag.List"] }, function () {
.first()
.should("have.text", `undefined_undefined_true_false`);
- cy.get(`${widgetSelectorByType("selectwidget")} .cancel-icon`).click({
- force: true,
- });
- cy.get(`${widgetSelector("Select_Widget")} ${commonlocators.bodyTextStyle}`)
- .first()
- .should("have.text", `__true_false`);
+ cy.get(_.locators._selectClearButton_dataTestId).should("not.exist");
});
it("3. Select Widgets onOptionChange", function () {
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/DataIdentifier_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/DataIdentifier_spec.ts
index d0f15f8e521b..1d64e70592b6 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/DataIdentifier_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/DataIdentifier_spec.ts
@@ -91,10 +91,11 @@ describe(
1,
);
//Open debugger by clicking debugger icon in canvas.
- debuggerHelper.ClickDebuggerIcon();
- agHelper.GetNAssertContains(
- debuggerHelper.locators._debuggerList,
+ debuggerHelper.AssertDebugError(
"This data identifier is evaluating to a duplicate value. Please use an identifier that evaluates to a unique value.",
+ "",
+ true,
+ false,
);
});
},
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/ListV2_NestedList_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/ListV2_NestedList_spec.ts
index 2ce68154fbc8..594f05b44743 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/ListV2_NestedList_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/ListV2_NestedList_spec.ts
@@ -9,6 +9,7 @@ import {
import EditorNavigation, {
EntityType,
} from "../../../../../support/Pages/EditorNavigation";
+import * as _ from "../../../../../support/Objects/ObjectsCore";
describe(
"Nested List widget V2 ",
@@ -40,8 +41,11 @@ describe(
"List3",
]);
agHelper.GetElement("body").type(`{${agHelper._modifierKey}}{v}`);
- agHelper.ValidateToastMessage(
+ _.debuggerHelper.OpenDebugger();
+ _.debuggerHelper.ClickLogsTab();
+ _.debuggerHelper.DoesConsoleLogExist(
"Cannot have more than 3 levels of nesting in the list widget",
+ true,
);
});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/ListV2_nested_List_widget_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/ListV2_nested_List_widget_spec.js
index 6c42b5af52d1..4d6a2525baa6 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/ListV2_nested_List_widget_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/ListV2_nested_List_widget_spec.js
@@ -6,9 +6,11 @@ const commonlocators = require("../../../../../locators/commonlocators.json");
import {
agHelper,
assertHelper,
+ debuggerHelper,
entityExplorer,
propPane,
} from "../../../../../support/Objects/ObjectsCore";
+import * as _ from "../../../../../support/Objects/ObjectsCore";
const widgetsPage = require("../../../../../locators/Widgets.json");
const widgetSelector = (name) => `[data-widgetname-cy="${name}"]`;
@@ -72,7 +74,12 @@ describe(
.type(`{${modifierKey}}{v}`);
cy.wait(500);
- cy.validateToastMessage("Cannot have more than 3 levels of nesting");
+ _.debuggerHelper.OpenDebugger();
+ _.debuggerHelper.ClickLogsTab();
+ _.debuggerHelper.DoesConsoleLogExist(
+ "Cannot have more than 3 levels of nesting",
+ true,
+ );
cy.get(`${widgetSelector("List2Copy1")}`).should("not.exist");
});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_BasicClientSideData_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_BasicClientSideData_spec.js
index b35dc5683c7c..f6c14c63db3c 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_BasicClientSideData_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_BasicClientSideData_spec.js
@@ -42,14 +42,19 @@ describe(
_.debuggerHelper.AssertErrorCount(0);
});
- it("2. shows correct number of items", () => {
- _.agHelper.AddDsl("Listv2/simpleList");
+ it("2. test delete of list widget without errors", () => {
+ cy.get(commonlocators.deleteWidget).click({ force: true });
+ _.debuggerHelper.AssertErrorCount(0);
+ });
+
+ it("3. shows correct number of items", () => {
+ cy.dragAndDropToCanvas("listwidgetv2", { x: 200, y: 200 });
cy.get(publishLocators.containerWidget).should("have.length", 3);
cy.get(publishLocators.imageWidget).should("have.length", 3);
cy.get(publishLocators.textWidget).should("have.length", 6);
});
- it("3. shows correct text from binding", () => {
+ it("4. shows correct text from binding", () => {
cy.get(publishLocators.containerWidget).each(($containerEl, index) => {
cy.wrap($containerEl)
.find(publishLocators.textWidget)
@@ -62,7 +67,7 @@ describe(
});
});
- it("4. retains input values when pages are switched", () => {
+ it("5. retains input values when pages are switched", () => {
_.agHelper.AddDsl("Listv2/simpleListWithInputAndButton");
cy.get(publishLocators.inputWidget).should("have.length", 2);
@@ -125,7 +130,7 @@ describe(
});
});
- it("5. Reset pageNo when serverside pagination is enabled", () => {
+ it("6. Reset pageNo when serverside pagination is enabled", () => {
cy.get(`${widgetSelector("List1")} .rc-pagination-item-3`).click({
force: true,
});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Select/Select2_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Select/Select2_Spec.ts
index 426c5ca04afe..30f1a3f108df 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Select/Select2_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Select/Select2_Spec.ts
@@ -316,13 +316,7 @@ describe(
agHelper.AssertExistingToggleState("Required", "false");
propPane.TogglePropertyState("Required", "On");
deployMode.DeployApp(locators._widgetInDeployed(draggableWidgets.FORM));
- agHelper.GetNClick(widgetLocators.selectWidgetClear, 1);
- agHelper.AssertCSS(
- widgetLocators.selectWidgetBtn,
- "border-color",
- "rgb(217, 25, 33)",
- 1,
- );
+ cy.get(locators._selectClearButton_testId).should("not.exist");
});
it("10.Validate using function inside label key and value key returns correct label options", () => {
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/Inline_editing_3_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/Inline_editing_3_spec.js
index 22b09155681a..40da3f138e35 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/Inline_editing_3_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/Inline_editing_3_spec.js
@@ -3,7 +3,9 @@ const widgetsPage = require("../../../../../locators/Widgets.json");
import {
agHelper,
table as tableHelper,
+ propPane,
} from "../../../../../support/Objects/ObjectsCore";
+import { PROPERTY_SELECTOR } from "../../../../../locators/WidgetLocators";
describe(
"Table widget inline editing functionality",
@@ -161,7 +163,12 @@ describe(
it("6. should check that onsubmit event is available for the columns that are editable", () => {
cy.openPropertyPane("tablewidgetv2");
cy.editColumn("step");
- cy.wait(500);
+ cy.get(commonlocators.changeColType).last().click();
+ cy.get(tableHelper._dropdownText)
+ .children()
+ .contains("Plain text")
+ .click();
+ propPane.TogglePropertyState("Editable", "Off", "");
[
{
columnType: "URL",
@@ -206,8 +213,7 @@ describe(
.contains(data.columnType)
.click();
cy.wait("@updateLayout");
- cy.wait(500);
- cy.get(".t--property-control-onsubmit").should(data.expected);
+ cy.get(PROPERTY_SELECTOR.onSubmit).should(data.expected);
});
cy.get(propPaneBack).click();
@@ -262,8 +268,7 @@ describe(
.contains(data.columnType)
.click();
cy.wait("@updateLayout");
- cy.wait(500);
- cy.get(".t--property-control-onsubmit").should(data.expected);
+ cy.get(PROPERTY_SELECTOR.onSubmit).should(data.expected);
});
});
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/columnTypes/Select1_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/columnTypes/Select1_spec.ts
index fafe2da10f90..f65933708669 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/columnTypes/Select1_spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/columnTypes/Select1_spec.ts
@@ -162,6 +162,7 @@ describe(
});
it("6. should check that on option select is working", () => {
+ _.agHelper.CheckForPageSaveError();
featureFlagIntercept({ release_table_cell_label_value_enabled: true });
cy.openPropertyPane("tablewidgetv2");
cy.editColumn("step");
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Text/TextWidget_LintErrorValidation_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Text/TextWidget_LintErrorValidation_spec.js
index 2a941b2004c2..b473a01b24d6 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Text/TextWidget_LintErrorValidation_spec.js
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Text/TextWidget_LintErrorValidation_spec.js
@@ -44,15 +44,7 @@ describe(
.should("be.visible")
.contains("'lintErrror' is not defined.");
- cy.get(commonlocators.debugger)
- .should("be.visible")
- .click({ force: true });
-
- cy.get(commonlocators.errorTab)
- .should("be.visible")
- .click({ force: true });
-
- cy.get(commonlocators.debugErrorMsg).should("have.length", 3);
+ _.debuggerHelper.AssertErrorCount(3);
});
},
);
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Video/Video2_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Video/Video2_Spec.ts
index 6490f5c8af53..55ab1a650cd0 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Video/Video2_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Video/Video2_Spec.ts
@@ -49,34 +49,7 @@ describe(
agHelper.AssertProperty(widgetLocators.video, "ended", true);
});
- it("2. Verify Basic Functionality of Video Widget - muted", function () {
- deployMode.NavigateBacktoEditor();
- EditorNavigation.SelectEntityByName("Video1", EntityType.Widget);
- //Validate video for youtube url
- propPane.TypeTextIntoField("URL", testdata.videoUrl);
- deployMode.DeployApp(locators._widgetInDeployed(draggableWidgets.VIDEO));
- agHelper.GetNClick(locators._widgetInDeployed(draggableWidgets.VIDEO));
- agHelper.Sleep(2000);
- agHelper.GetElement(widgetLocators.iFrame).then(($iframe) => {
- const doc = $iframe.contents();
- const video = doc.find(widgetLocators.video);
- //Check play, mute & unmute, volume buttons
- cy.wrap(
- doc.find(widgetLocators.videoWidgetYoutubeLargePlayBtn),
- ).click();
- cy.wrap(video).click();
- agHelper.Sleep(1000);
- cy.wrap(doc.find(widgetLocators.videoWidgetYoutubeMuteBtn)).click();
- agHelper.AssertProperty(video, "muted", true);
- agHelper.AssertProperty(video, "paused", true);
- cy.wrap(doc.find(widgetLocators.videoWidgetYoutubeVolumeBtn)).type(
- "{rightarrow}{rightarrow}",
- );
- agHelper.AssertProperty(video, "muted", false);
- });
- });
-
- it("3. Verify widget for invalid URL's", function () {
+ it("2. Verify widget for invalid URL's", function () {
deployMode.NavigateBacktoEditor();
EditorNavigation.SelectEntityByName("Video1", EntityType.Widget);
propPane.RemoveText("URL");
@@ -107,7 +80,7 @@ describe(
});
});
- it("4. Verify auto play property", function () {
+ it("3. Verify auto play property", function () {
deployMode.NavigateBacktoEditor();
EditorNavigation.SelectEntityByName("Video1", EntityType.Widget);
agHelper.AssertExistingToggleState("Autoplay", "false");
@@ -128,7 +101,7 @@ describe(
agHelper.AssertProperty(widgetLocators.video, "paused", true);
});
- it("5. Verify visible property", function () {
+ it("4. Verify visible property", function () {
deployMode.NavigateBacktoEditor();
EditorNavigation.SelectEntityByName("Video1", EntityType.Widget);
agHelper.AssertExistingToggleState("Visible", "true");
@@ -154,7 +127,7 @@ describe(
);
});
- it("6. Verify OnPlay, OnPause, OnEnd events are JS convertible", function () {
+ it("5. Verify OnPlay, OnPause, OnEnd events are JS convertible", function () {
deployMode.NavigateBacktoEditor();
EditorNavigation.SelectEntityByName("Video1", EntityType.Widget);
propPane.EnterJSContext(
@@ -193,7 +166,7 @@ describe(
});
});
- it("7. Verify video styles", function () {
+ it("6. Verify video styles", function () {
deployMode.NavigateBacktoEditor();
EditorNavigation.SelectEntityByName("Video1", EntityType.Widget);
propPane.MoveToTab("Style");
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Workspace/MemberRoles_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Workspace/MemberRoles_Spec.ts
index b43881d53c75..5154a056401d 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Workspace/MemberRoles_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Workspace/MemberRoles_Spec.ts
@@ -202,7 +202,6 @@ describe(
);
if (CURRENT_REPO === REPO.EE)
_.adminSettings.EnableGAC(false, true, "home");
- _.homePage.SelectWorkspace(workspaceId);
_.homePage.LeaveWorkspace(workspaceId);
});
},
diff --git a/app/client/cypress/e2e/Regression/ClientSide/Workspace/ShareAppTests_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Workspace/ShareAppTests_Spec.ts
index 9dbc5a43a009..ee6b2466475f 100644
--- a/app/client/cypress/e2e/Regression/ClientSide/Workspace/ShareAppTests_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ClientSide/Workspace/ShareAppTests_Spec.ts
@@ -124,7 +124,17 @@ describe(
Cypress.env("TESTPASSWORD2"),
);
agHelper.VisitNAssert(currentUrl);
- agHelper.ValidateToastMessage("Resource Not Found"); //for 404 screen
+ cy.get(locators.errorPageTitle).should(($x) => {
+ //for 404 screen
+ expect($x).contain(Cypress.env("MESSAGES").PAGE_NOT_FOUND());
+ });
+ cy.get(locators.errorPageDescription).should(($x) => {
+ //for 404 screen
+ expect($x).contain(
+ "Either this page doesn't exist, or you don't have access to this page",
+ );
+ });
+ agHelper.ValidateToastMessage("Resource Not Found");
homePage.LogOutviaAPI();
// visit the app as anonymous user and validate redirection to login page
agHelper.VisitNAssert(currentUrl);
diff --git a/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_All_Verb_spec.js b/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_All_Verb_spec.js
index e16c4acebbd9..d88c2c7ba3e8 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_All_Verb_spec.js
+++ b/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_All_Verb_spec.js
@@ -5,6 +5,7 @@ import {
const testdata = require("../../../../fixtures/testdata.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
+import apiLocators from "../../../../locators/ApiEditor";
import {
agHelper,
@@ -17,6 +18,7 @@ describe(
"API Panel Test Functionality",
{ tags: ["@tag.Datasource"] },
function () {
+ const successMsg = "Executed successfully from user request";
afterEach(function () {
agHelper.ActionContextMenuWithInPane({
action: "Delete",
@@ -39,12 +41,8 @@ describe(
agHelper.AssertAutoSave();
apiPage.RunAPI();
apiPage.ResponseStatusCheck("200 OK");
- cy.validateRequest(
- "Executed successfully",
- testdata.baseUrl,
- testdata.echoMethod,
- testdata.Put,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
});
cy.ResponseCheck("updatedAt");
});
@@ -63,12 +61,8 @@ describe(
agHelper.AssertAutoSave();
apiPage.RunAPI();
apiPage.ResponseStatusCheck("200 OK");
- cy.validateRequest(
- "Executed successfully",
- testdata.baseUrl,
- testdata.echoMethod,
- testdata.Post,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
});
cy.ResponseCheck("createdAt");
});
@@ -87,12 +81,8 @@ describe(
agHelper.AssertAutoSave();
apiPage.RunAPI();
apiPage.ResponseStatusCheck("200 OK");
- cy.validateRequest(
- "Executed successfully",
- testdata.baseUrl,
- testdata.echoMethod,
- testdata.Patch,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
});
cy.ResponseCheck("updatedAt");
});
@@ -111,12 +101,8 @@ describe(
agHelper.AssertAutoSave();
apiPage.RunAPI();
apiPage.ResponseStatusCheck("200 OK");
- cy.validateRequest(
- "Executed successfully",
- testdata.baseUrl,
- testdata.echoMethod,
- testdata.Delete,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
});
});
@@ -127,12 +113,8 @@ describe(
apiPage.RunAPI();
apiPage.ResponseStatusCheck("200 OK");
cy.ResponseCheck(testdata.responsetext);
- cy.validateRequest(
- "Executed successfully",
- testdata.baseUrl,
- testdata.methods,
- testdata.Get,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
apiPage.SelectPaneTab("Pagination");
agHelper.GetNClick(apiwidget.paginationWithUrl);
@@ -144,12 +126,8 @@ describe(
cy.clickTest(apiwidget.TestNextUrl);
apiPage.ResponseStatusCheck("200 OK");
cy.ResponseCheck("Josh M Krantz");
- cy.validateRequest(
- "Executed successfully",
- testdata.baseUrl,
- testdata.next,
- testdata.Get,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
apiPage.SelectPaneTab("Pagination");
cy.enterUrl(
@@ -160,12 +138,8 @@ describe(
cy.clickTest(apiwidget.TestPreUrl);
apiPage.ResponseStatusCheck("200 OK");
cy.ResponseCheck(testdata.responsetext);
- cy.validateRequest(
- "Executed successfully",
- testdata.baseUrl,
- testdata.prev,
- testdata.Get,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
});
it("6. API check with query params test API feature", function () {
@@ -174,12 +148,8 @@ describe(
apiPage.RunAPI();
apiPage.ResponseStatusCheck("200 OK");
cy.ResponseCheck(testdata.responsetext3);
- cy.validateRequest(
- "Executed successfully",
- testdata.baseUrl,
- testdata.queryAndValue,
- testdata.Get,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
});
it("7. API check with Invalid Header", function () {
@@ -188,13 +158,8 @@ describe(
agHelper.AssertAutoSave();
apiPage.RunAPI(false);
apiPage.ResponseStatusCheck("5000");
- cy.validateRequest(
- "Execution failed",
- testdata.baseUrl,
- testdata.methods,
- testdata.Get,
- true,
- );
+ agHelper.GetNClickByContains(apiLocators.apiResponseTabsList, "Logs");
+ agHelper.AssertContains(successMsg);
cy.ResponseCheck("Invalid value for Content-Type");
});
},
diff --git a/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_MultiPart_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_MultiPart_Spec.ts
index ec7e2ab5801e..e2007f6b0c95 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_MultiPart_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_MultiPart_Spec.ts
@@ -2,6 +2,7 @@ import {
agHelper,
apiPage,
assertHelper,
+ dataManager,
deployMode,
entityItems,
jsEditor,
@@ -128,8 +129,8 @@ describe(
agHelper.AddDsl("multiPartFormDataDsl");
apiPage.CreateAndFillApi(
- "https://api.cloudinary.com/v1_1/appsmithautomationcloud/image/upload?upload_preset=fbbhg4xu",
- "CloudinaryUploadApi",
+ dataManager.dsValues[dataManager.defaultEnviorment].multipartAPI,
+ "MultipartAPI",
30000,
"POST",
);
@@ -145,7 +146,7 @@ describe(
myVar1: [],
myVar2: {},
upload: async () => {
- await CloudinaryUploadApi.run().then(()=> showAlert('Image uploaded to Cloudinary successfully', 'success')).catch(err => showAlert(err.message, 'error'));
+ await MultipartAPI.run().then(()=> showAlert('Image uploaded to multipart successfully', 'success')).catch(err => showAlert(err.message, 'error'));
await resetWidget('FilePicker1', true);
}
}`,
@@ -161,15 +162,9 @@ describe(
propPane.EnterJSContext("onFilesSelected", `{{JSObject1.upload()}}`);
EditorNavigation.SelectEntityByName("Image1", EntityType.Widget);
- propPane.UpdatePropertyFieldValue(
- "Image",
- "{{CloudinaryUploadApi.data.url}}",
- );
+ propPane.UpdatePropertyFieldValue("Image", "{{MultipartAPI.data.url}}");
- EditorNavigation.SelectEntityByName(
- "CloudinaryUploadApi",
- EntityType.Api,
- );
+ EditorNavigation.SelectEntityByName("MultipartAPI", EntityType.Api);
apiPage.ToggleOnPageLoadRun(false); //Bug 12476
EditorNavigation.SelectEntityByName("Page1", EntityType.Page);
@@ -177,9 +172,7 @@ describe(
agHelper.ClickButton("Select Files");
agHelper.UploadFile(imageNameToUpload);
assertHelper.AssertNetworkExecutionSuccess("@postExecute"); //validating Cloudinary api call
- agHelper.ValidateToastMessage(
- "Image uploaded to Cloudinary successfully",
- );
+ agHelper.ValidateToastMessage("Image uploaded to multipart successfully");
agHelper.Sleep();
cy.xpath(apiPage._imageSrc)
.find("img")
@@ -192,31 +185,5 @@ describe(
agHelper.AssertElementVisibility(locators._buttonByText("Select Files")); //verifying if reset!
deployMode.NavigateBacktoEditor();
});
-
- it("8. Checks MultiPart form data for a Array Type upload results in API error", () => {
- const imageNameToUpload = "AAAFlowerVase.jpeg";
- EditorNavigation.SelectEntityByName(
- "CloudinaryUploadApi",
- EntityType.Api,
- );
- apiPage.EnterBodyFormData(
- "MULTIPART_FORM_DATA",
- "file",
- "{{FilePicker1.files[0]}}",
- "Array",
- true,
- );
- EditorNavigation.SelectEntityByName("FilePicker1", EntityType.Widget);
- agHelper.ClickButton("Select Files");
- agHelper.UploadFile(imageNameToUpload);
- assertHelper.AssertNetworkExecutionSuccess("@postExecute", false);
-
- deployMode.DeployApp(locators._buttonByText("Select Files"));
- agHelper.ClickButton("Select Files");
- agHelper.UploadFile(imageNameToUpload);
- assertHelper.AssertNetworkExecutionSuccess("@postExecute", false);
- agHelper.ValidateToastMessage("CloudinaryUploadApi failed to execute");
- agHelper.AssertElementVisibility(locators._buttonByText("Select Files")); //verifying if reset in case of failure!
- });
},
);
diff --git a/app/client/cypress/e2e/Regression/ServerSide/Datasources/ConnectionErrors_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/Datasources/ConnectionErrors_Spec.ts
index 91db07482fb4..27933ddf85e2 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/Datasources/ConnectionErrors_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/Datasources/ConnectionErrors_Spec.ts
@@ -51,10 +51,7 @@ describe(
dataManager.dsValues[dataManager.defaultEnviorment].postgres_username,
);
dataSources.TestDatasource(false);
- agHelper.ValidateToastMessage(
- "An exception occurred while creating connection pool. One or more arguments in the datasource configuration may be invalid.",
- );
- agHelper.ValidateToastMessage("Failed to initialize pool:");
+ agHelper.ValidateToastMessage("Missing password for authentication.");
agHelper.GetNClick(locators._visibleTextSpan("Read only"));
propPane.AssertPropertiesDropDownValues("SSL mode", [
"Default",
diff --git a/app/client/cypress/e2e/Regression/ServerSide/GenerateCRUD/Mongo_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/GenerateCRUD/Mongo_Spec.ts
index dfa1c2c48f6e..94cf82fc284e 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/GenerateCRUD/Mongo_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/GenerateCRUD/Mongo_Spec.ts
@@ -41,6 +41,10 @@ describe(
assertHelper.AssertNetworkStatus("@getDatasourceStructure"); //Making sure table dropdown is populated
agHelper.GetNClick(dataSources._selectTableDropdown, 0, true);
agHelper.GetNClickByContains(dataSources._dropdownOption, "pokemon");
+
+ agHelper.GetNClick(dataSources._selectTableDropdown, 1, true);
+ agHelper.GetNClickByContains(dataSources._dropdownOption, "img");
+
GenerateCRUDNValidateDeployPage(
"http://www.serebii.net/pokemongo/pokemon/150.png",
"150",
@@ -103,30 +107,68 @@ describe(
assertHelper.AssertNetworkStatus("@postExecute", 200);
agHelper.ClickButton("Got it");
assertHelper.AssertNetworkStatus("@updateLayout", 200);
+
deployMode.DeployApp(locators._widgetInDeployed(draggableWidgets.TABLE));
//Validating loaded table
agHelper.AssertElementExist(dataSources._selectedRow);
- table.ReadTableRowColumnData(0, 0, "v2", 2000).then(($cellData) => {
- expect($cellData).to.eq(col1Text);
- });
- table.ReadTableRowColumnData(0, 3, "v2", 200).then(($cellData) => {
- expect($cellData).to.eq(col2Text);
- });
- table.ReadTableRowColumnData(0, 6, "v2", 200).then(($cellData) => {
- expect($cellData).to.eq(col3Text);
- });
- //Validating loaded JSON form
- cy.xpath(locators._buttonByText("Update")).then((selector) => {
- cy.wrap(selector)
- .invoke("attr", "class")
- .then((classes) => {
- //cy.log("classes are:" + classes);
- expect(classes).not.contain("bp3-disabled");
+ findTheDataRow(col1Text).then((rowIndex: number) => {
+ cy.log(`This is the rowIndex of ${col1Text} : ${rowIndex}`);
+ table
+ .ReadTableRowColumnData(rowIndex, 0, "v2", 2000)
+ .then(($cellData) => {
+ expect($cellData).to.eq(col1Text);
});
+ table
+ .ReadTableRowColumnData(rowIndex, 3, "v2", 200)
+ .then(($cellData) => {
+ expect($cellData).to.eq(col2Text);
+ });
+ table
+ .ReadTableRowColumnData(rowIndex, 6, "v2", 200)
+ .then(($cellData) => {
+ expect($cellData).to.eq(col3Text);
+ });
+
+ //Validating loaded JSON form
+ cy.xpath(locators._buttonByText("Update")).then((selector) => {
+ cy.wrap(selector)
+ .invoke("attr", "class")
+ .then((classes) => {
+ //cy.log("classes are:" + classes);
+ expect(classes).not.contain("bp3-disabled");
+ });
+ });
+ dataSources.AssertJSONFormHeader(0, idIndex, "Id", "", true);
});
- dataSources.AssertJSONFormHeader(0, idIndex, "Id", "", true);
+ }
+
+ function findTheDataRow(col1Text: string) {
+ if (col1Text.length === 0) {
+ return cy.wrap(0);
+ }
+
+ return agHelper
+ .GetElement(table._tableColumnDataWithText(0, col1Text, "v2"))
+ .closest(".tr")
+ .then(($p1) => {
+ return cy
+ .wrap($p1)
+ .parent()
+ .children()
+ .then(($children) => {
+ let index = 0;
+ $children.each((i, el) => {
+ // Iterate through the children
+ if (Cypress.$(el).is($p1)) {
+ // Check if the current child is p1
+ index = i; // Assign the index when found
+ }
+ });
+ return index;
+ });
+ });
}
},
);
diff --git a/app/client/cypress/e2e/Regression/ServerSide/GenerateCRUD/MySQL2_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/GenerateCRUD/MySQL2_Spec.ts
index aee98caa858b..3271e32094da 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/GenerateCRUD/MySQL2_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/GenerateCRUD/MySQL2_Spec.ts
@@ -82,10 +82,11 @@ describe(
dataSources.RunQueryNVerifyResponseViews(10);
dataSources.AssertQueryTableResponse(5, "2112");
dataSources.AssertQueryTableResponse(6, "Mike's Liquors");
- agHelper.ActionContextMenuWithInPane({
- action: "Delete",
- entityType: entityItems.Query,
- });
+ // Commenting this deletion of query to make the generate crud work on the new page instead of the current page
+ // agHelper.ActionContextMenuWithInPane({
+ // action: "Delete",
+ // entityType: entityItems.Query,
+ // });
});
it("3. Verify Generate CRUD for the new table & Verify Deploy mode for table - Stores", () => {
@@ -129,13 +130,13 @@ describe(
updateNVerify(6, 4, newStoreSecret as string);
});
- table.SelectTableRow(17, 0, true, "v2");
- dataSources.AssertJSONFormHeader(17, 0, "store_id");
- generateStoresSecretInfo(17);
+ table.SelectTableRow(12, 0, true, "v2");
+ dataSources.AssertJSONFormHeader(12, 0, "store_id");
+ generateStoresSecretInfo(12);
cy.get("@secretInfo").then(($secretInfo) => {
newStoreSecret = $secretInfo;
cy.log("newStoreSecret is : " + newStoreSecret);
- updateNVerify(17, 4, newStoreSecret as string);
+ updateNVerify(12, 4, newStoreSecret as string);
});
//Hidden field bug - to add here aft secret codes are updated for some fields!
diff --git a/app/client/cypress/e2e/Regression/ServerSide/JsFunctionExecution/JSFunctionExecution_spec.ts b/app/client/cypress/e2e/Regression/ServerSide/JsFunctionExecution/JSFunctionExecution_spec.ts
index a77af1001a64..201b69d0e61b 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/JsFunctionExecution/JSFunctionExecution_spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/JsFunctionExecution/JSFunctionExecution_spec.ts
@@ -126,7 +126,7 @@ describe("JS Function Execution", { tags: ["@tag.JS"] }, function () {
//It should open only in case of execution error.
debuggerHelper.AssertClosed();
//Verify there is no error shown in the response tab.
- debuggerHelper.ClickDebuggerIcon();
+ debuggerHelper.OpenDebugger();
debuggerHelper.ClickResponseTab();
jsEditor.AssertParseError(false);
agHelper.ActionContextMenuWithInPane({
@@ -400,7 +400,6 @@ describe("JS Function Execution", { tags: ["@tag.JS"] }, function () {
jsEditor.EnableDisableAsyncFuncSettings(
functionSetting.name,
functionSetting.onPageLoad,
- functionSetting.confirmBeforeExecute,
);
},
);
@@ -496,12 +495,12 @@ return "yes";`;
// Switch to settings tab
agHelper.GetNClick(jsEditor._settingsTab);
// Enable all settings
- jsEditor.EnableDisableAsyncFuncSettings("asyncToSync", true, false);
+ jsEditor.EnableDisableAsyncFuncSettings("asyncToSync", true);
// Modify js object
jsEditor.EditJSObj(syncJSCode, false);
agHelper.RefreshPage();
- jsEditor.VerifyAsyncFuncSettings("asyncToSync", true, false);
+ jsEditor.VerifyAsyncFuncSettings("asyncToSync", true);
agHelper.ActionContextMenuWithInPane({
action: "Delete",
entityType: entityItems.JSObject,
diff --git a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/APIOnLoad_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/APIOnLoad_Spec.ts
index dd100ab787c7..b89bc975b8bf 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/APIOnLoad_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/APIOnLoad_Spec.ts
@@ -2,6 +2,7 @@ import {
agHelper,
apiPage,
assertHelper,
+ debuggerHelper,
entityExplorer,
entityItems,
propPane,
@@ -58,7 +59,12 @@ describe(
`{{PageLoadApi2.data.data}}`,
);
agHelper.RefreshPage();
- agHelper.ValidateToastMessage(`The action "PageLoadApi2" has failed.`);
+ debuggerHelper.AssertDebugError(
+ 'The action "PageLoadApi2" has failed.',
+ "",
+ true,
+ false,
+ );
});
after(() => {
diff --git a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/ExecuteAction_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/ExecuteAction_Spec.ts
index fbf4f7531519..c4653d3f430e 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/ExecuteAction_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/ExecuteAction_Spec.ts
@@ -1,5 +1,6 @@
import {
agHelper,
+ assertHelper,
deployMode,
homePage,
locators,
@@ -17,6 +18,8 @@ describe(
agHelper.AssertElementVisibility(locators._widgetInCanvas("textwidget"));
deployMode.DeployApp();
+ assertHelper.AssertNetworkStatus("@postExecute", 200, true);
+
agHelper.GetNAssertContains(
locators._widgetInDeployed("textwidget"),
"User count :5",
@@ -37,6 +40,9 @@ describe(
agHelper.GetNClickByContains(locators._deployedPage, "Page2");
+ assertHelper.AssertNetworkStatus("@getConsolidatedData", 200, true);
+ assertHelper.AssertNetworkStatus("@postExecute", 200, true);
+
agHelper.GetNAssertContains(
locators._widgetInDeployed("textwidget"),
"User count :10",
@@ -55,6 +61,9 @@ describe(
agHelper.GetNClickByContains(locators._deployedPage, "Page1");
+ assertHelper.AssertNetworkStatus("@getConsolidatedData", 200, true);
+ assertHelper.AssertNetworkStatus("@postExecute", 200, true);
+
agHelper.GetNAssertContains(
locators._widgetInDeployed("textwidget"),
"User count :5",
diff --git a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/JSOnLoad2_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/JSOnLoad2_Spec.ts
index 6d246804da3b..300d27e05787 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/JSOnLoad2_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/JSOnLoad2_Spec.ts
@@ -91,7 +91,7 @@ describe(
EditorNavigation.SelectEntityByName("Page1", EntityType.Page);
agHelper.RefreshPage();
- debuggerHelper.ClickDebuggerIcon();
+ debuggerHelper.OpenDebugger();
debuggerHelper.ClickLogsTab();
debuggerHelper.DebuggerLogsFilter("JSObject1.astros");
debuggerHelper.DoesConsoleLogExist("JS Function executed successfully");
diff --git a/app/client/cypress/e2e/Regression/ServerSide/Postgres_DataTypes/Binary_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/Postgres_DataTypes/Binary_Spec.ts
index bd1f3d80f405..bb8ad38cb77b 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/Postgres_DataTypes/Binary_Spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/Postgres_DataTypes/Binary_Spec.ts
@@ -8,7 +8,6 @@ import {
locators,
table,
} from "../../../../support/Objects/ObjectsCore";
-import { featureFlagIntercept } from "../../../../support/Objects/FeatureFlags";
import EditorNavigation, {
AppSidebar,
AppSidebarButton,
@@ -76,38 +75,7 @@ describe("Binary Datatype tests", { tags: ["@tag.Datasource"] }, function () {
table.WaitForTableEmpty(); //asserting table is empty before inserting!
});
- //Timing out a lot in CI, hence skipped, Insert verified also in next case
- // it.skip("3. Inserting record - binarytype", () => {
- // imageNameToUpload = "Datatypes/Bridge.jpg";
- // // entityExplorer.SelectEntityByName("Page1");
- // // deployMode.DeployApp();
- // // table.WaitForTableEmpty(); //asserting table is empty before inserting!
- // agHelper.ClickButton("Run InsertQuery");
- // agHelper.AssertElementVisibility(locators._modal);
-
- // agHelper.ClickButton("Select New Image");
- // agHelper.UploadFile(imageNameToUpload);
-
- // agHelper.ClickButton("Insert");
- // agHelper.AssertElementAbsence(locators._toastMsg); //Assert that Insert did not fail
- // agHelper.AssertElementVisibility(locators._buttonByText("Run InsertQuery"));
- // agHelper.AssertElementAbsence(locators._btnSpinner, 10000); //for the update row to appear at last
- // table.WaitUntilTableLoad();
- // agHelper.Sleep(3000); //some more time for all rows with images to be populated
- // table.ReadTableRowColumnData(0, 0).then(($cellData) => {
- // expect($cellData).to.eq("1"); //asserting serial column is inserting fine in sequence
- // });
- // table.ReadTableRowColumnData(0, 1, "v1", 200).then(($cellData) => {
- // expect($cellData).to.eq("Bridge.jpg");
- // });
- // table.AssertTableRowImageColumnIsLoaded(0, 2).then(($oldimage) => {
- // table.AssertTableRowImageColumnIsLoaded(0, 3).then(($newimage) => {
- // expect($oldimage).to.eq($newimage);
- // });
- // });
- // });
-
- it("4. Inserting another record - binarytype", () => {
+ it("3. Inserting another record - binarytype", () => {
imageNameToUpload = "Datatypes/Georgia.jpeg";
agHelper.ClickButton("Run InsertQuery");
@@ -121,21 +89,21 @@ describe("Binary Datatype tests", { tags: ["@tag.Datasource"] }, function () {
agHelper.AssertElementVisibility(locators._buttonByText("Run InsertQuery"));
agHelper.AssertElementAbsence(locators._btnSpinner, 20000); //for the update row to appear at last
table.WaitUntilTableLoad();
- agHelper.Sleep(2000); //some more time for all rows with images to be populated
- table.ReadTableRowColumnData(1, 0).then(($cellData) => {
- expect($cellData).to.eq("2"); //asserting serial column is inserting fine in sequence
+ const rowIndex = 0;
+ table.ReadTableRowColumnData(rowIndex, 0).then(($cellData) => {
+ expect($cellData).to.eq("1"); //asserting serial column is inserting fine in sequence
});
- table.ReadTableRowColumnData(1, 1, "v1", 200).then(($cellData) => {
+ table.ReadTableRowColumnData(rowIndex, 1, "v1", 200).then(($cellData) => {
expect($cellData).to.eq("Georgia.jpeg");
});
- table.AssertTableRowImageColumnIsLoaded(1, 2).then(($oldimage) => {
- table.AssertTableRowImageColumnIsLoaded(1, 3).then(($newimage) => {
+ table.AssertTableRowImageColumnIsLoaded(rowIndex, 2).then(($oldimage) => {
+ table.AssertTableRowImageColumnIsLoaded(rowIndex, 3).then(($newimage) => {
expect($oldimage).to.eq($newimage);
});
});
});
- it("5. Inserting another record - binarytype", () => {
+ it("4. Inserting another record - binarytype", () => {
imageNameToUpload = "Datatypes/Maine.jpeg";
agHelper.ClickButton("Run InsertQuery");
@@ -149,21 +117,21 @@ describe("Binary Datatype tests", { tags: ["@tag.Datasource"] }, function () {
agHelper.AssertElementVisibility(locators._buttonByText("Run InsertQuery"));
agHelper.AssertElementAbsence(locators._btnSpinner, 20000); //for the update row to appear at last
table.WaitUntilTableLoad();
- agHelper.Sleep(2000); //some more time for all rows with images to be populated
- table.ReadTableRowColumnData(2, 0).then(($cellData) => {
- expect($cellData).to.eq("3"); //asserting serial column is inserting fine in sequence
+ const rowIndex = 1;
+ table.ReadTableRowColumnData(rowIndex, 0).then(($cellData) => {
+ expect($cellData).to.eq("2"); //asserting serial column is inserting fine in sequence
});
- table.ReadTableRowColumnData(2, 1, "v1", 200).then(($cellData) => {
+ table.ReadTableRowColumnData(rowIndex, 1, "v1", 200).then(($cellData) => {
expect($cellData).to.eq("Maine.jpeg");
});
- table.AssertTableRowImageColumnIsLoaded(2, 2).then(($oldimage) => {
- table.AssertTableRowImageColumnIsLoaded(2, 3).then(($newimage) => {
+ table.AssertTableRowImageColumnIsLoaded(rowIndex, 2).then(($oldimage) => {
+ table.AssertTableRowImageColumnIsLoaded(rowIndex, 3).then(($newimage) => {
expect($oldimage).to.eq($newimage);
});
});
});
- it("6. Updating record - binarytype", () => {
+ it("5. Updating record - binarytype", () => {
imageNameToUpload = "Datatypes/NewJersey.jpeg";
table.SelectTableRow(1);
@@ -178,45 +146,38 @@ describe("Binary Datatype tests", { tags: ["@tag.Datasource"] }, function () {
agHelper.AssertElementVisibility(locators._buttonByText("Run UpdateQuery"));
agHelper.AssertElementAbsence(locators._btnSpinner, 20000); //for the update row to appear at last
table.WaitUntilTableLoad();
- agHelper.Sleep(14000); //some more time for rows to rearrange!
- table.ReadTableRowColumnData(2, 0, "v1", 2000).then(($cellData) => {
+ const rowIndex = 1;
+ table.ReadTableRowColumnData(rowIndex, 0, "v1", 2000).then(($cellData) => {
expect($cellData).to.eq("2"); //asserting serial column is inserting fine in sequence
});
- table.ReadTableRowColumnData(2, 1, "v1", 200).then(($cellData) => {
+ table.ReadTableRowColumnData(rowIndex, 1, "v1", 200).then(($cellData) => {
expect($cellData).to.eq("NewJersey.jpeg");
});
- table.AssertTableRowImageColumnIsLoaded(2, 2).then(($oldimage) => {
- table.AssertTableRowImageColumnIsLoaded(2, 3).then(($newimage) => {
+ table.AssertTableRowImageColumnIsLoaded(rowIndex, 2).then(($oldimage) => {
+ table.AssertTableRowImageColumnIsLoaded(rowIndex, 3).then(($newimage) => {
expect($oldimage).to.not.eq($newimage);
});
});
});
- it("7. Deleting records - binarytype", () => {
- //entityExplorer.SelectEntityByName("Page1");//commenting 2 lines since case 6th is skipped!
- //deployMode.DeployApp();
+ it("6. Deleting records - binarytype", () => {
table.WaitUntilTableLoad();
table.SelectTableRow(1);
agHelper.ClickButton("DeleteQuery", 1);
assertHelper.AssertNetworkStatus("@postExecute", 200);
assertHelper.AssertNetworkStatus("@postExecute", 200);
- agHelper.AssertElementAbsence(locators._btnSpinner, 20000); //Allowing time for delete to be success
- agHelper.Sleep(6000); //Allwowing time for delete to be success
- table.ReadTableRowColumnData(1, 0).then(($cellData) => {
- expect($cellData).not.to.eq("3"); //asserting 2nd record is deleted
- });
- table.ReadTableRowColumnData(1, 0, "v1", 200).then(($cellData) => {
- expect($cellData).to.eq("2");
+ agHelper.WaitUntilEleDisappear(locators._btnSpinner); //Allowing time for delete to be success
+ table.ReadTableRowColumnData(0, 0).then(($cellData) => {
+ expect($cellData).to.eq("1");
});
//Deleting all records from .table
agHelper.GetNClick(locators._deleteIcon);
agHelper.AssertElementVisibility(locators._buttonByText("Run InsertQuery"));
- agHelper.Sleep(2000);
table.WaitForTableEmpty();
});
- it("8. Inserting another record (to check serial column) - binarytype", () => {
+ it("7. Inserting another record (to check serial column) - binarytype", () => {
imageNameToUpload = "Datatypes/Massachusetts.jpeg";
agHelper.ClickButton("Run InsertQuery");
@@ -230,9 +191,8 @@ describe("Binary Datatype tests", { tags: ["@tag.Datasource"] }, function () {
agHelper.AssertElementAbsence(locators._toastMsg); //Assert that Insert did not fail
agHelper.AssertElementVisibility(locators._buttonByText("Run InsertQuery"));
table.WaitUntilTableLoad();
- agHelper.Sleep(2000); //for all rows with images to be populated
table.ReadTableRowColumnData(0, 0, "v1", 2000).then(($cellData) => {
- expect($cellData).to.eq("4"); //asserting serial column is inserting fine in sequence
+ expect($cellData).to.eq("3"); //asserting serial column is inserting fine in sequence
});
table.ReadTableRowColumnData(0, 1, "v1", 200).then(($cellData) => {
expect($cellData).to.eq("Massachusetts.jpeg");
@@ -244,7 +204,7 @@ describe("Binary Datatype tests", { tags: ["@tag.Datasource"] }, function () {
});
});
- it("9. Validating Binary (bytea) - escape, hex, base64 functions", () => {
+ it("8. Validating Binary (bytea) - escape, hex, base64 functions", () => {
deployMode.NavigateBacktoEditor();
table.WaitUntilTableLoad();
PageLeftPane.switchSegment(PagePaneSegment.Queries);
@@ -291,7 +251,7 @@ describe("Binary Datatype tests", { tags: ["@tag.Datasource"] }, function () {
});
});
- it("10. Validating Binary (bytea) - escape, hex, base64 functions, conts", () => {
+ it("9. Validating Binary (bytea) - escape, hex, base64 functions, conts", () => {
//Validating backslash
query = `select encode('\\\\'::bytea, 'escape') as "backslash Escape1", encode('\\134'::bytea, 'escape') as "backslash Escape2", encode('\\\\'::bytea, 'hex') as "backslash Hex1", encode('\\134'::bytea, 'hex') as "backslash Hex2", encode('\\\\'::bytea, 'base64') as "backslash Base64";`;
dataSources.EnterQuery(query);
@@ -375,8 +335,6 @@ describe("Binary Datatype tests", { tags: ["@tag.Datasource"] }, function () {
});
AppSidebar.navigate(AppSidebarButton.Editor);
});
-
- //Since query delete & Postgress DS delete is covered in other specs, commenting below code
// after(
// "Validate Drop of the Newly Created - binarytype - Table & Verify Deletion of all created queries",
// () => {
diff --git a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/EmptyDataSource_spec.js b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/EmptyDataSource_spec.js
index 8a3eb744ef75..5f24c8213b29 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/EmptyDataSource_spec.js
+++ b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/EmptyDataSource_spec.js
@@ -23,7 +23,7 @@ describe(
dataSources.RunQuery({ toValidateResponse: false });
cy.wait(500);
cy.get("[data-testid=t--query-error]").contains(
- "[Missing username for authentication., Missing hostname.]",
+ "[Missing username for authentication., Missing hostname., Missing password for authentication.]",
);
agHelper.ActionContextMenuWithInPane({
action: "Delete",
diff --git a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/GoogleSheets_spec.ts b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/GoogleSheets_spec.ts
index 345f3982e4cf..792f633cd865 100644
--- a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/GoogleSheets_spec.ts
+++ b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/GoogleSheets_spec.ts
@@ -20,9 +20,10 @@ describe(
dataSources.CreatePlugIn("Google Sheets");
VerifyFunctionDropdown([
"Read / Write / Delete | Selected google sheets",
- "Read / Write / Delete | All google sheets",
- "Read / Write | All google sheets",
- "Read | All google sheets",
+ // Hiding below methods as they are not authorized at this state
+ // "Read / Write / Delete | All google sheets",
+ // "Read / Write | All google sheets",
+ // "Read | All google sheets",
]);
dataSources.SaveDSFromDialog(false);
});
@@ -31,8 +32,6 @@ describe(
agHelper.GetNClick(dataSources._gsScopeDropdown);
cy.get(dataSources._gsScopeOptions).then(function ($ele) {
expect($ele.eq(0).text()).to.be.oneOf(scopeOptions);
- expect($ele.eq(1).text()).to.be.oneOf(scopeOptions);
- expect($ele.eq(2).text()).to.be.oneOf(scopeOptions);
});
agHelper.GetNClick(dataSources._gsScopeDropdown);
}
diff --git a/app/client/cypress/e2e/Sanity/Datasources/GraphQL_spec.ts b/app/client/cypress/e2e/Sanity/Datasources/GraphQL_spec.ts
index 68b07e359a8e..22f5f17454cd 100644
--- a/app/client/cypress/e2e/Sanity/Datasources/GraphQL_spec.ts
+++ b/app/client/cypress/e2e/Sanity/Datasources/GraphQL_spec.ts
@@ -279,7 +279,7 @@ describe(
});
apiPage.SelectPaneTab("Authentication");
- agHelper.ClickButton("Save as datasource");
+ agHelper.GetNClick(locators._saveDatasource);
agHelper.AssertText(
locators._inputFieldByName("URL") + "//" + locators._inputField,
@@ -296,16 +296,14 @@ describe(
// });
dataSources.SaveDatasource();
agHelper.ValidateToastMessage("datasource created");
- agHelper.AssertElementVisibility(
- locators._buttonByText("Edit datasource"),
- );
+ agHelper.AssertElementVisibility(locators._saveDatasource);
apiPage.SelectPaneTab("Body");
dataSources.UpdateGraphqlQueryAndVariable({
query: GRAPHQL_QUERY,
variable: GRAPHQL_VARIABLES,
});
apiPage.RunAPI();
- agHelper.ClickButton("Edit datasource");
+ agHelper.GetNClick(locators._saveDatasource);
dataSources.AssertDataSourceInfo([
dataManager.dsValues[
dataManager.defaultEnviorment
diff --git a/app/client/cypress/e2e/Sanity/Datasources/MockDBs_Spec.ts b/app/client/cypress/e2e/Sanity/Datasources/MockDBs_Spec.ts
index e2cfb5c47e50..33f132d7aa93 100644
--- a/app/client/cypress/e2e/Sanity/Datasources/MockDBs_Spec.ts
+++ b/app/client/cypress/e2e/Sanity/Datasources/MockDBs_Spec.ts
@@ -74,49 +74,7 @@ describe(
assertHelper.AssertNetworkStatus("@trigger");
dataSources.ValidateNSelectDropdown("Command", "Find document(s)");
- agHelper.Sleep(2000); //for movies collection to load & populate in dropdown
- dataSources.ValidateNSelectDropdown("Collection", "movies");
- dataSources.RunQueryNVerifyResponseViews(1, false);
- AppSidebar.navigate(AppSidebarButton.Data);
- dataSources
- .getDatasourceListItemDescription(mockDBName)
- .then(($queryCount) =>
- expect($queryCount).to.eq("1 queries in this app"),
- );
-
- entityExplorer.CreateNewDsQuery(mockDBName);
- dataSources.ValidateNSelectDropdown("Command", "Find document(s)");
- dataSources.ValidateNSelectDropdown("Collection", "movies");
- dataSources.RunQueryNVerifyResponseViews(1, false);
- AppSidebar.navigate(AppSidebarButton.Data);
- dataSources
- .getDatasourceListItemDescription(mockDBName)
- .then(($queryCount) =>
- expect($queryCount).to.eq("2 queries in this app"),
- );
});
});
-
- afterEach(() => {
- AppSidebar.navigate(AppSidebarButton.Editor);
- PageLeftPane.switchSegment(PagePaneSegment.Queries);
- entityExplorer.ActionContextMenuByEntityName({
- entityNameinLeftSidebar: "Query1",
- action: "Delete",
- entityType: entityItems.Query,
- });
- entityExplorer.ActionContextMenuByEntityName({
- entityNameinLeftSidebar: "Query2",
- action: "Delete",
- entityType: entityItems.Query,
- });
- AppSidebar.navigate(AppSidebarButton.Data);
- dataSources
- .getDatasourceListItemDescription(dsName)
- .then(($queryCount) =>
- expect($queryCount).to.eq("No queries in this app"),
- );
- dataSources.DeleteDatasourceFromWithinDS(dsName);
- });
},
);
diff --git a/app/client/cypress/e2e/Sanity/Datasources/MySQLNoiseTest_spec.js b/app/client/cypress/e2e/Sanity/Datasources/MySQLNoiseTest_spec.js
index f1a4d43fb661..ecbc34e02481 100644
--- a/app/client/cypress/e2e/Sanity/Datasources/MySQLNoiseTest_spec.js
+++ b/app/client/cypress/e2e/Sanity/Datasources/MySQLNoiseTest_spec.js
@@ -4,7 +4,11 @@ import {
} from "../../../support/Pages/EditorNavigation";
const datasourceEditor = require("../../../locators/DatasourcesEditor.json");
-import { agHelper, dataSources } from "../../../support/Objects/ObjectsCore";
+import {
+ agHelper,
+ dataSources,
+ debuggerHelper,
+} from "../../../support/Objects/ObjectsCore";
const commonlocators = require("../../../locators/commonlocators.json");
describe(
@@ -60,9 +64,15 @@ describe(
force: true,
});
cy.wait(2000);
- cy.get(commonlocators.toastmsg).contains(
- "NoiseTestQuery failed to execute",
+
+ debuggerHelper.OpenDebugger();
+ debuggerHelper.ClickLogsTab();
+ debuggerHelper.DoesConsoleLogExist(
+ "Execution failed with status PE-STC-5000",
+ true,
+ "NoiseTestQuery",
);
+
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.statusCode).to.eq("200 OK");
});
diff --git a/app/client/cypress/locators/ApiEditor.js b/app/client/cypress/locators/ApiEditor.js
index 1e852c6ad114..9340b355d441 100644
--- a/app/client/cypress/locators/ApiEditor.js
+++ b/app/client/cypress/locators/ApiEditor.js
@@ -34,4 +34,5 @@ export default {
slashCommandButton: ".commands-button",
apiResponseObject: ".object-key",
apiDebuggerLink: ".debugger-entity-link",
+ apiResponseTabsList : ".ads-v2-tabs__list"
};
diff --git a/app/client/cypress/locators/ThemeLocators.json b/app/client/cypress/locators/ThemeLocators.json
index 6bf517400240..4f7b655bc925 100644
--- a/app/client/cypress/locators/ThemeLocators.json
+++ b/app/client/cypress/locators/ThemeLocators.json
@@ -9,5 +9,7 @@
"greenColor": "[style='background-color: rgb(21, 128, 61);']",
"fontsSelected": ".leading-normal",
"currentTheme": ".cursor-pointer:contains('Applied theme')",
- "purpleColor": "[style='background-color: rgb(107,114,128);']"
-}
+ "purpleColor": "[style='background-color: rgb(107,114,128);']",
+ "featuredThemeSection": "[data-testid='t--featured-themes']",
+ "fontOption": ".rc-virtual-list .rc-select-item-option"
+}
\ No newline at end of file
diff --git a/app/client/cypress/locators/WidgetLocators.ts b/app/client/cypress/locators/WidgetLocators.ts
index 8e2d368244c1..3f8418749874 100644
--- a/app/client/cypress/locators/WidgetLocators.ts
+++ b/app/client/cypress/locators/WidgetLocators.ts
@@ -175,3 +175,9 @@ export const buttongroupwidgetlocators = {
`//*[contains(@class,'bp3-menu-item')]//*[text()='${text}']`,
button: "//*[contains(@class,'t--widget-buttongroupwidget')]//button",
};
+
+export const multiSelectWidgetLocators = {
+ multiSelectWidgetTrigger: ".t--widget-multiselectwidgetv2 .rc-select-selector",
+ multiSelectWidgetSelectedOptionContent: ".rc-select-selection-item > .rc-select-selection-item-content",
+ multiSelectWidgetDropdownOptionCheckbox: ".multi-select-dropdown .rc-select-item-option-selected .bp3-control-indicator"
+};
\ No newline at end of file
diff --git a/app/client/cypress/support/Objects/CommonLocators.ts b/app/client/cypress/support/Objects/CommonLocators.ts
index dd3b8744564d..3db2224e7c1f 100644
--- a/app/client/cypress/support/Objects/CommonLocators.ts
+++ b/app/client/cypress/support/Objects/CommonLocators.ts
@@ -334,4 +334,9 @@ export class CommonLocators {
_menuItem = ".bp3-menu-item";
_slashCommandHintText = ".slash-command-hint-text";
_selectionItem = ".rc-select-selection-item";
+ errorPageTitle = ".t--error-page-title";
+ errorPageDescription = ".t--error-page-description";
+ _selectClearButton_testId = "selectbutton.btn.cancel";
+ _selectClearButton_dataTestId = `[data-testid="${this._selectClearButton_testId}"]`;
+ _saveDatasource = `[data-testid='t--store-as-datasource']`;
}
diff --git a/app/client/cypress/support/Objects/DataManager.ts b/app/client/cypress/support/Objects/DataManager.ts
index 515b3f050327..a54e1162eb30 100644
--- a/app/client/cypress/support/Objects/DataManager.ts
+++ b/app/client/cypress/support/Objects/DataManager.ts
@@ -80,6 +80,8 @@ export class DataManager {
"http://host.docker.internal:5001/v1/mock-api-object?records=10",
echoApiUrl: "http://host.docker.internal:5001/v1/mock-api/echo",
randomCatfactUrl: "http://host.docker.internal:5001/v1/catfact/random",
+ multipartAPI:
+ "http://host.docker.internal:5001/v1/mock-api/echo-multipart",
randomTrumpApi:
"http://host.docker.internal:5001/v1/whatdoestrumpthink/random",
mockHttpCodeUrl: "http://host.docker.internal:5001/v1/mock-http-codes/",
@@ -179,6 +181,8 @@ export class DataManager {
mockApiUrl: "http://host.docker.internal:5001/v1/mock-api?records=10",
echoApiUrl: "http://host.docker.internal:5001/v1/mock-api/echo",
randomCatfactUrl: "http://host.docker.internal:5001/v1/catfact/random",
+ multipartAPI:
+ "http://host.docker.internal:5001/v1/mock-api/echo-multipart",
mockHttpCodeUrl: "http://host.docker.internal:5001/v1/mock-http-codes/",
AirtableBaseForME: "appubHrVbovcudwN6",
AirtableTableForME: "tblsFCQSskVFf7xNd",
diff --git a/app/client/cypress/support/Pages/AggregateHelper.ts b/app/client/cypress/support/Pages/AggregateHelper.ts
index 4ddff74eb6cd..82fe2481fbdd 100644
--- a/app/client/cypress/support/Pages/AggregateHelper.ts
+++ b/app/client/cypress/support/Pages/AggregateHelper.ts
@@ -1552,6 +1552,25 @@ export class AggregateHelper {
) as Cypress.Chainable;
}
+ /**
+ * Checks if the specified instance of the element is present with number and visible on the page.
+ *
+ * @param {ElementType} selector - The element selector.
+ * @param {number} [eq=0] - The index of the element to check (default is 0).
+ * @returns {Cypress.Chainable} - Returns a boolean wrapped in a Cypress Chainable indicating visibility.
+ */
+ IsElementVisibleWithEq(selector: ElementType, eq: number = 0) {
+ return this.GetElement(selector)
+ .eq(eq)
+ .then(($element) => {
+ // Check if the element is present and visible
+ const isVisible =
+ Cypress.$($element).length > 0 && Cypress.$($element).is(":visible");
+ console.log(`Element visibility: ${isVisible}`);
+ return isVisible;
+ }) as Cypress.Chainable;
+ }
+
public FailIfErrorToast(error: string) {
cy.get("body").then(($ele) => {
if ($ele.find(this.locator._toastMsg).length > 0) {
diff --git a/app/client/cypress/support/Pages/ApiPage.ts b/app/client/cypress/support/Pages/ApiPage.ts
index 793a6d03c102..8804ae793dde 100644
--- a/app/client/cypress/support/Pages/ApiPage.ts
+++ b/app/client/cypress/support/Pages/ApiPage.ts
@@ -303,7 +303,7 @@ export class ApiPage {
| "RAW",
) {
this.agHelper.GetNClick(this._bodyTypeSelect);
- cy.xpath(this._bodyTypeToSelect(subTabName)).should("be.visible").click();
+ this.agHelper.GetNClick(this._bodyTypeToSelect(subTabName));
}
AssertRightPaneSelectedTab(tabName: RightPaneTabs) {
diff --git a/app/client/cypress/support/Pages/DebuggerHelper.ts b/app/client/cypress/support/Pages/DebuggerHelper.ts
index 2dabfb707112..979b8f2d842b 100644
--- a/app/client/cypress/support/Pages/DebuggerHelper.ts
+++ b/app/client/cypress/support/Pages/DebuggerHelper.ts
@@ -34,6 +34,7 @@ export class DebuggerHelper {
[PageType.JsEditor]: ".t--js-editor-bottom-pane-container",
[PageType.DataSources]: ".t--datasource-bottom-pane-container",
},
+ _ideBottomViewContainer: ".t--ide-bottom-view",
_debuggerList: ".debugger-list",
_debuggerFilter: "input[data-testid=t--debugger-search]",
_debuggerSelectedTab: ".ads-v2-tabs__list-tab",
@@ -49,17 +50,16 @@ export class DebuggerHelper {
_downStreamLogMessage: ".t--debugger-log-downstream-message",
};
- ClickDebuggerIcon(
- index?: number,
- force?: boolean,
- waitTimeInterval?: number,
- ) {
- this.agHelper.GetNClick(
- this.locators._debuggerIcon,
- index,
- force,
- waitTimeInterval,
- );
+ OpenDebugger() {
+ // Open opens if it is not open yet
+ cy.get("body").then(($body) => {
+ if ($body.find(this.locators._ideBottomViewContainer).length === 0) {
+ this.agHelper.GetNClick(this.locators._debuggerIcon, 0, false);
+ } else {
+ this.agHelper.GetNClick(this.commonLocators._errorTab, 0, true, 0);
+ }
+ });
+ this.AssertOpen();
}
ClickDebuggerToggle(expand = true, index = 0) {
@@ -93,7 +93,7 @@ export class DebuggerHelper {
this.agHelper.GetNClick(this.locators._closeButton);
}
- AssertOpen(pageType: PageType) {
+ AssertOpen(pageType?: PageType) {
switch (pageType) {
case PageType.Canvas:
this.agHelper.AssertElementExist(this.locators._tabsContainer);
@@ -106,6 +106,10 @@ export class DebuggerHelper {
this.locators._bottomPaneContainer[pageType],
);
break;
+ default:
+ this.agHelper.AssertElementVisibility(
+ this.locators._ideBottomViewContainer,
+ );
}
}
@@ -118,12 +122,19 @@ export class DebuggerHelper {
this.agHelper.AssertSelectedTab(this.locators._debuggerSelectedTab, "true");
}
- DoesConsoleLogExist(text: string, exists = true) {
+ DoesConsoleLogExist(text: string, exists = true, entityName?: string) {
this.agHelper.GetNAssertContains(
this.locators._logMessage,
text,
exists ? "exist" : "not.exist",
);
+ if (entityName) {
+ this.agHelper
+ .GetElement(this.locators._logMessage)
+ .contains(text)
+ .closest(".error")
+ .contains(this.locators._logEntityLink, entityName);
+ }
}
DebuggerLogsFilter(text: string) {
@@ -187,9 +198,10 @@ export class DebuggerHelper {
message: string,
shouldOpenDebugger = true,
shouldToggleDebugger = true,
+ errorLabelIndex = 0,
) {
if (shouldOpenDebugger) {
- this.ClickDebuggerIcon();
+ this.OpenDebugger();
}
this.agHelper.GetNClick(this.commonLocators._errorTab, 0, true, 0);
@@ -198,7 +210,7 @@ export class DebuggerHelper {
}
this.agHelper
- .GetText(this.locators._debuggerLabel, "text", 0)
+ .GetText(this.locators._debuggerLabel, "text", errorLabelIndex)
.then(($text) => {
expect($text).to.eq(label);
});
@@ -222,7 +234,7 @@ export class DebuggerHelper {
AssertDownStreamLogError(message: string, shouldOpenDebugger = true) {
if (shouldOpenDebugger) {
- this.ClickDebuggerIcon();
+ this.OpenDebugger();
}
this.agHelper.GetNClick(this.commonLocators._responseTab, 0, true, 0);
diff --git a/app/client/cypress/support/Pages/GitSync.ts b/app/client/cypress/support/Pages/GitSync.ts
index 0bf9ffeb4cb7..2fbf3b139a64 100644
--- a/app/client/cypress/support/Pages/GitSync.ts
+++ b/app/client/cypress/support/Pages/GitSync.ts
@@ -65,6 +65,7 @@ export class GitSync {
"[data-testid='t--git-protected-branches-select']";
public _branchProtectionUpdateBtn =
"[data-testid='t--git-protected-branches-update-btn']";
+ public _autocommitStatusbar = "[data-testid='t--autocommit-statusbar']";
public _disconnectGitBtn = "[data-testid='t--git-disconnect-btn']";
public _mergeLoader = "[data-testid='t--git-merge-loader']";
diff --git a/app/client/cypress/support/Pages/HomePage.ts b/app/client/cypress/support/Pages/HomePage.ts
index 0d7569aa63d7..b482db49d58b 100644
--- a/app/client/cypress/support/Pages/HomePage.ts
+++ b/app/client/cypress/support/Pages/HomePage.ts
@@ -306,6 +306,7 @@ export class HomePage {
this.agHelper.GetNClick(this._newButtonCreateApplication, 0, true);
this.AssertApplicationCreated();
if (skipSignposting) {
+ this.agHelper.WaitUntilEleDisappear(this.locator._btnSpinner);
AppSidebar.assertVisible();
this.agHelper.AssertElementVisibility(PageLeftPane.locators.selector);
this.onboarding.skipSignposting();
diff --git a/app/client/cypress/support/Pages/Table.ts b/app/client/cypress/support/Pages/Table.ts
index c82f7e9a0548..2f90efb052c7 100644
--- a/app/client/cypress/support/Pages/Table.ts
+++ b/app/client/cypress/support/Pages/Table.ts
@@ -59,6 +59,15 @@ export class Table {
_tableRow = (rowNum: number, colNum: number, version: "v1" | "v2") =>
this._tableWidgetVersion(version) +
` .tbody .td[data-rowindex=${rowNum}][data-colindex=${colNum}]`;
+ _tableColumnDataWithText = (
+ colNum: number,
+ columnText: string,
+ version: "v1" | "v2",
+ ) =>
+ this._tableWidgetVersion(version) +
+ ` .tbody .td[data-colindex=${colNum}]` +
+ this._tableRowColumnDataVersion(version) +
+ ` div:contains("${columnText}")`;
_editCellIconDiv = ".t--editable-cell-icon";
_editCellEditor = ".t--inlined-cell-editor";
_editCellEditorInput = this._editCellEditor + " input";
diff --git a/app/client/package.json b/app/client/package.json
index 40afddb093fa..592cf597a377 100644
--- a/app/client/package.json
+++ b/app/client/package.json
@@ -120,7 +120,7 @@
"craco-babel-loader": "^1.0.4",
"cssnano": "^6.0.1",
"cypress-log-to-output": "^1.1.2",
- "cypress-repeat-updated": "^1.0.1",
+ "cypress-repeat-pro": "^1.0.1",
"d3-geo": "^3.1.0",
"dayjs": "^1.10.6",
"deep-diff": "^1.0.2",
@@ -269,6 +269,7 @@
"@types/codemirror": "^0.0.96",
"@types/deep-diff": "^1.0.0",
"@types/dom-mediacapture-record": "^1.0.11",
+ "@types/dom-view-transitions": "^1.0.5",
"@types/downloadjs": "^1.4.2",
"@types/jest": "^27.4.1",
"@types/js-beautify": "^1.13.2",
diff --git a/app/client/packages/design-system/widgets/src/components/ComboBox/index.ts b/app/client/packages/design-system/widgets/src/components/ComboBox/index.ts
new file mode 100644
index 000000000000..3bd16e178a03
--- /dev/null
+++ b/app/client/packages/design-system/widgets/src/components/ComboBox/index.ts
@@ -0,0 +1 @@
+export * from "./src";
diff --git a/app/client/packages/design-system/widgets/src/components/ComboBox/src/ComboBox.tsx b/app/client/packages/design-system/widgets/src/components/ComboBox/src/ComboBox.tsx
new file mode 100644
index 000000000000..3e97b4720730
--- /dev/null
+++ b/app/client/packages/design-system/widgets/src/components/ComboBox/src/ComboBox.tsx
@@ -0,0 +1,83 @@
+import { Button, Icon, Label, Popover, Text } from "@appsmith/wds";
+import { getTypographyClassName } from "@appsmith/wds-theming";
+import clsx from "clsx";
+import React from "react";
+import {
+ FieldError,
+ ComboBox as HeadlessCombobox,
+ Input,
+ ListBox,
+} from "react-aria-components";
+import { ListBoxItem } from "./ListBoxItem";
+import styles from "./styles.module.css";
+import type { ComboBoxProps } from "./types";
+
+export const ComboBox = (props: ComboBoxProps) => {
+ const {
+ contextualHelp,
+ description,
+ errorMessage,
+ isLoading,
+ isRequired,
+ items,
+ label,
+ placeholder,
+ size = "medium",
+ ...rest
+ } = props;
+
+ // place Popover in the root theme provider to get access to the CSS tokens
+ const root = document.body.querySelector(
+ "[data-theme-provider]",
+ ) as HTMLButtonElement;
+
+ return (
+
+ {({ isInvalid }) => (
+ <>
+
+
+ {/* TODO: Use proper headless Input once Valera is back */}
+
+
+
+
+
+
+ {errorMessage}
+
+ {Boolean(description) && !Boolean(isInvalid) && (
+
+ {description}
+
+ )}
+
+
+ {(item) => (
+
+ {item.icon && }
+ {item.label}
+
+ )}
+
+
+ >
+ )}
+
+ );
+};
diff --git a/app/client/packages/design-system/widgets/src/components/ComboBox/src/ListBoxItem.tsx b/app/client/packages/design-system/widgets/src/components/ComboBox/src/ListBoxItem.tsx
new file mode 100644
index 000000000000..663456933b35
--- /dev/null
+++ b/app/client/packages/design-system/widgets/src/components/ComboBox/src/ListBoxItem.tsx
@@ -0,0 +1,15 @@
+import React from "react";
+import { ListBoxItem as HeadlessListBoxItem } from "react-aria-components";
+import clsx from "clsx";
+import { getTypographyClassName } from "@appsmith/wds-theming";
+import { listItemStyles } from "@appsmith/wds";
+import type { ListBoxItemProps } from "react-aria-components";
+
+export const ListBoxItem = (props: ListBoxItemProps) => {
+ return (
+
+ );
+};
diff --git a/app/client/packages/design-system/widgets/src/components/ComboBox/src/index.ts b/app/client/packages/design-system/widgets/src/components/ComboBox/src/index.ts
new file mode 100644
index 000000000000..ec43be29e5e1
--- /dev/null
+++ b/app/client/packages/design-system/widgets/src/components/ComboBox/src/index.ts
@@ -0,0 +1 @@
+export * from "./ComboBox";
diff --git a/app/client/packages/design-system/widgets/src/components/ComboBox/src/styles.module.css b/app/client/packages/design-system/widgets/src/components/ComboBox/src/styles.module.css
new file mode 100644
index 000000000000..097d68b00369
--- /dev/null
+++ b/app/client/packages/design-system/widgets/src/components/ComboBox/src/styles.module.css
@@ -0,0 +1,89 @@
+.formField {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+}
+
+.inputWrapper {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+.input {
+ display: flex;
+ flex: 1;
+ position: relative;
+ padding: 0;
+ border: none;
+ align-items: center;
+ border-radius: var(--border-radius-elevation-3);
+ background-color: var(--color-bg-neutral-subtle);
+ max-inline-size: 100%;
+ padding-inline-start: var(--inner-spacing-2);
+ padding-inline-end: calc(var(--inner-spacing-3) + var(--icon-size-2));
+ padding-block: var(--inner-spacing-3);
+ box-shadow: inset 0 0 0 var(--border-width-1)
+ var(--color-bd-on-neutral-subtle);
+ cursor: pointer;
+}
+
+.formField[data-invalid] .textField {
+ box-shadow: 0 0 0 var(--border-width-1) var(--color-bd-negative);
+}
+
+.formField[data-size="small"] .textField {
+ padding-block: var(--inner-spacing-2);
+}
+
+.textField[data-focus-visible] {
+ box-shadow:
+ 0 0 0 2px var(--color-bg),
+ 0 0 0 4px var(--color-bd-focus);
+}
+
+.textField[data-hovered] {
+ background-color: var(--color-bg-neutral-subtle-hover);
+ box-shadow: inset 0 0 0 var(--border-width-1)
+ var(--color-bd-on-neutral-subtle-hover);
+}
+
+.textField [data-icon] {
+ position: absolute;
+ right: var(--inner-spacing-2);
+}
+
+.necessityIndicator {
+ color: var(--color-fg-negative);
+ margin-inline-start: var(--inner-spacing-1);
+}
+
+.errorText {
+ margin-block-start: var(--inner-spacing-3);
+ color: var(--color-fg-negative);
+}
+
+.description {
+ margin-block-start: var(--inner-spacing-3);
+ color: var(--color-fg-neutral);
+}
+
+.fieldValue {
+ text-align: left;
+ flex: 1;
+}
+
+.fieldValue [data-icon] {
+ display: none;
+}
+
+.listBox {
+ min-inline-size: var(--trigger-width);
+}
+
+/** If at least one select item has an icon, we need to add extra padding for items that doesn't have an icon. */
+.listBox:has([data-icon]) [role="option"]:not(:has([data-icon])) {
+ padding-inline-start: calc(
+ var(--icon-size-2) + var(--inner-spacing-3) + var(--inner-spacing-2)
+ );
+}
diff --git a/app/client/packages/design-system/widgets/src/components/ComboBox/src/types.ts b/app/client/packages/design-system/widgets/src/components/ComboBox/src/types.ts
new file mode 100644
index 000000000000..ff643008a9ed
--- /dev/null
+++ b/app/client/packages/design-system/widgets/src/components/ComboBox/src/types.ts
@@ -0,0 +1,35 @@
+import type { Key } from "@react-types/shared";
+import type {
+ ComboBoxProps as SpectrumComboBoxProps,
+ ValidationResult,
+} from "react-aria-components";
+import type { IconProps, SIZES } from "@appsmith/wds";
+
+export interface ComboBoxProps
+ extends Omit, "slot"> {
+ /** Item objects in the collection. */
+ items: ComboBoxItem[];
+ /** The content to display as the label. */
+ label?: string;
+ /** The content to display as the description. */
+ description?: string;
+ /** The content to display as the error message. */
+ errorMessage?: string | ((validation: ValidationResult) => string);
+ /** size of the select
+ *
+ * @default medium
+ */
+ size?: Omit;
+ /** loading state for the input */
+ isLoading?: boolean;
+ /** A ContextualHelp element to place next to the label. */
+ contextualHelp?: string;
+ /** The content to display as the placeholder. */
+ placeholder?: string;
+}
+
+export interface ComboBoxItem {
+ id: Key;
+ label: string;
+ icon?: IconProps["name"];
+}
diff --git a/app/client/packages/design-system/widgets/src/components/ComboBox/stories/ComboBox.stories.tsx b/app/client/packages/design-system/widgets/src/components/ComboBox/stories/ComboBox.stories.tsx
new file mode 100644
index 000000000000..b08d1836ba16
--- /dev/null
+++ b/app/client/packages/design-system/widgets/src/components/ComboBox/stories/ComboBox.stories.tsx
@@ -0,0 +1,86 @@
+import { Button, ComboBox, Flex, SIZES } from "@appsmith/wds";
+import type { Meta, StoryObj } from "@storybook/react";
+import React from "react";
+import { items, itemsWithIcons } from "./items";
+
+/**
+ * A select displays a collapsible list of options and allows a user to select one of them.
+ */
+const meta: Meta = {
+ component: ComboBox,
+ title: "WDS/Widgets/ComboBox",
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const Main: Story = {
+ args: {
+ items: items,
+ },
+ render: (args) => (
+
+
+
+ ),
+};
+
+/**
+ * The component supports two sizes `small` and `medium`. Default size is `medium`.
+ */
+export const Sizes: Story = {
+ render: () => (
+
+ {Object.keys(SIZES)
+ .filter((size) => !["large"].includes(size))
+ .map((size) => (
+
+ ))}
+
+ ),
+};
+
+export const Loading: Story = {
+ args: {
+ placeholder: "Loading",
+ isLoading: true,
+ items: items,
+ },
+};
+
+export const Validation: Story = {
+ render: () => (
+
+ ),
+};
+
+export const ContextualHelp: Story = {
+ args: {
+ label: "Label",
+ placeholder: "Contextual Help Text",
+ contextualHelp: "This is a contextual help text",
+ items: items,
+ },
+};
+
+export const WithIcons: Story = {
+ args: {
+ label: "With icons",
+ items: itemsWithIcons,
+ },
+};
diff --git a/app/client/packages/design-system/widgets/src/components/ComboBox/stories/items.ts b/app/client/packages/design-system/widgets/src/components/ComboBox/stories/items.ts
new file mode 100644
index 000000000000..7319bf939cb0
--- /dev/null
+++ b/app/client/packages/design-system/widgets/src/components/ComboBox/stories/items.ts
@@ -0,0 +1,28 @@
+import type { ComboBoxItem } from "../src/types";
+
+export const items: ComboBoxItem[] = [
+ { id: 1, label: "Aerospace" },
+ {
+ id: 2,
+ label: "Mechanical",
+ },
+ { id: 3, label: "Civil" },
+ { id: 4, label: "Biomedical" },
+ { id: 5, label: "Nuclear" },
+ { id: 6, label: "Industrial" },
+ { id: 7, label: "Chemical" },
+ { id: 8, label: "Agricultural" },
+ { id: 9, label: "Electrical" },
+];
+
+export const itemsWithIcons: ComboBoxItem[] = [
+ { id: 1, label: "Aerospace", icon: "galaxy" },
+ {
+ id: 2,
+ label: "Mechanical",
+ icon: "automatic-gearbox",
+ },
+ { id: 3, label: "Civil", icon: "circuit-ground" },
+ { id: 4, label: "Biomedical", icon: "biohazard" },
+ { id: 5, label: "Nuclear", icon: "atom" },
+];
diff --git a/app/client/packages/design-system/widgets/src/components/Select/src/Select.tsx b/app/client/packages/design-system/widgets/src/components/Select/src/Select.tsx
index 50171e79909f..4a7b3c7342c0 100644
--- a/app/client/packages/design-system/widgets/src/components/Select/src/Select.tsx
+++ b/app/client/packages/design-system/widgets/src/components/Select/src/Select.tsx
@@ -1,19 +1,19 @@
-import React, { useRef } from "react";
-import clsx from "clsx";
+import { Icon, Label, Popover, Spinner, Text } from "@appsmith/wds";
import { getTypographyClassName } from "@appsmith/wds-theming";
+import clsx from "clsx";
+import React, { useRef } from "react";
import {
Button,
- ListBox,
+ FieldError,
Select as HeadlessSelect,
+ ListBox,
SelectValue,
- FieldError,
} from "react-aria-components";
-import { Text, Icon, Spinner, Popover, Label } from "@appsmith/wds";
import { ListBoxItem } from "./ListBoxItem";
import styles from "./styles.module.css";
import type { SelectProps } from "./types";
-export const Select = (props: SelectProps) => {
+export const Select = (props: SelectProps) => {
const {
contextualHelp,
description,
@@ -53,7 +53,15 @@ export const Select = (props: SelectProps) => {
styles.fieldValue,
getTypographyClassName("body"),
)}
- />
+ >
+ {({ defaultChildren, isPlaceholder }) => {
+ if (isPlaceholder) {
+ return props.placeholder;
+ }
+
+ return defaultChildren;
+ }}
+
{!Boolean(isLoading) && }
{Boolean(isLoading) && }
diff --git a/app/client/packages/design-system/widgets/src/components/Select/src/index.ts b/app/client/packages/design-system/widgets/src/components/Select/src/index.ts
index b6e8a07c267f..b252bd3f677f 100644
--- a/app/client/packages/design-system/widgets/src/components/Select/src/index.ts
+++ b/app/client/packages/design-system/widgets/src/components/Select/src/index.ts
@@ -1 +1,2 @@
export * from "./Select";
+export type { SelectProps } from "./types";
diff --git a/app/client/packages/design-system/widgets/src/components/Select/src/styles.module.css b/app/client/packages/design-system/widgets/src/components/Select/src/styles.module.css
index 75f563e2eb37..10412f1d14a5 100644
--- a/app/client/packages/design-system/widgets/src/components/Select/src/styles.module.css
+++ b/app/client/packages/design-system/widgets/src/components/Select/src/styles.module.css
@@ -8,6 +8,7 @@
display: flex;
position: relative;
padding: 0;
+ height: var(--sizing-9);
border: none;
align-items: center;
border-radius: var(--border-radius-elevation-3);
@@ -43,7 +44,7 @@
.textField [data-icon] {
position: absolute;
- right: var(--inner-spacing-2);
+ right: var(--inner-spacing-1);
}
.necessityIndicator {
@@ -66,6 +67,10 @@
flex: 1;
}
+.fieldValue[data-placeholder] {
+ color: var(--color-fg-neutral-subtle);
+}
+
.fieldValue [data-icon] {
display: none;
}
diff --git a/app/client/packages/design-system/widgets/src/components/Select/src/types.ts b/app/client/packages/design-system/widgets/src/components/Select/src/types.ts
index c3220aa5b057..4e88e56cac31 100644
--- a/app/client/packages/design-system/widgets/src/components/Select/src/types.ts
+++ b/app/client/packages/design-system/widgets/src/components/Select/src/types.ts
@@ -5,10 +5,10 @@ import type {
} from "react-aria-components";
import type { IconProps, SIZES } from "@appsmith/wds";
-export interface SelectProps
- extends Omit, "slot"> {
+export interface SelectProps
+ extends Omit, "slot"> {
/** Item objects in the collection. */
- items: Iterable;
+ items: SelectItem[];
/** The content to display as the label. */
label?: string;
/** The content to display as the description. */
diff --git a/app/client/packages/design-system/widgets/src/index.ts b/app/client/packages/design-system/widgets/src/index.ts
index deb079b73425..44d2c44100cd 100644
--- a/app/client/packages/design-system/widgets/src/index.ts
+++ b/app/client/packages/design-system/widgets/src/index.ts
@@ -3,6 +3,7 @@ export * from "./components/Icon";
export * from "./components/Button";
export * from "./components/IconButton";
export * from "./components/Checkbox";
+export * from "./components/ComboBox";
export * from "./components/Text";
export * from "./components/ToggleGroup";
export * from "./components/Tooltip";
diff --git a/app/client/packages/eslint-plugin/package.json b/app/client/packages/eslint-plugin/package.json
index 46f1726ebec2..389406b120b1 100644
--- a/app/client/packages/eslint-plugin/package.json
+++ b/app/client/packages/eslint-plugin/package.json
@@ -11,4 +11,4 @@
"postinstall": "yarn build",
"test:unit": "yarn g:jest"
}
-}
\ No newline at end of file
+}
diff --git a/app/client/packages/icons/src/components/Icons/ComboboxSelectIcon.tsx b/app/client/packages/icons/src/components/Icons/ComboboxSelectIcon.tsx
new file mode 100644
index 000000000000..97516278935e
--- /dev/null
+++ b/app/client/packages/icons/src/components/Icons/ComboboxSelectIcon.tsx
@@ -0,0 +1,2 @@
+import React from "react";
+export const ComboboxSelectIcon = () => ;
diff --git a/app/client/packages/icons/src/components/Thumbnails/ComboboxSelectThumbnail.tsx b/app/client/packages/icons/src/components/Thumbnails/ComboboxSelectThumbnail.tsx
new file mode 100644
index 000000000000..fbf23f8b14d4
--- /dev/null
+++ b/app/client/packages/icons/src/components/Thumbnails/ComboboxSelectThumbnail.tsx
@@ -0,0 +1,2 @@
+import React from "react";
+export const ComboboxSelectThumbnail = () => ;
diff --git a/app/client/packages/icons/src/icons/Icons/ComboboxSelect.svg b/app/client/packages/icons/src/icons/Icons/ComboboxSelect.svg
new file mode 100644
index 000000000000..3c6cf838139c
--- /dev/null
+++ b/app/client/packages/icons/src/icons/Icons/ComboboxSelect.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/client/packages/icons/src/icons/Thumbnails/ComboboxSelect.svg b/app/client/packages/icons/src/icons/Thumbnails/ComboboxSelect.svg
new file mode 100644
index 000000000000..b67b64f9d2af
--- /dev/null
+++ b/app/client/packages/icons/src/icons/Thumbnails/ComboboxSelect.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/client/packages/icons/src/index.ts b/app/client/packages/icons/src/index.ts
index dba7f48ff6b1..cba21a55375a 100644
--- a/app/client/packages/icons/src/index.ts
+++ b/app/client/packages/icons/src/index.ts
@@ -1,6 +1,7 @@
export { ButtonThumbnail } from "./components/Thumbnails/ButtonThumbnail";
export { CheckboxGroupThumbnail } from "./components/Thumbnails/CheckboxGroupThumbnail";
export { CheckboxThumbnail } from "./components/Thumbnails/CheckboxThumbnail";
+export { ComboboxSelectThumbnail } from "./components/Thumbnails/ComboboxSelectThumbnail";
export { CurrencyInputThumbnail } from "./components/Thumbnails/CurrencyInputThumbnail";
export { EmailInputThumbnail } from "./components/Thumbnails/EmailInputThumbnail";
export { HeadingThumbnail } from "./components/Thumbnails/HeadingThumbnail";
@@ -27,6 +28,7 @@ export { ZoneThumbnail } from "./components/Thumbnails/ZoneThumbnail";
export { ButtonIcon } from "./components/Icons/ButtonIcon";
export { CheckboxGroupIcon } from "./components/Icons/CheckboxGroupIcon";
export { CheckboxIcon } from "./components/Icons/CheckboxIcon";
+export { ComboboxSelectIcon } from "./components/Icons/ComboboxSelectIcon";
export { CurrencyInputIcon } from "./components/Icons/CurrencyInputIcon";
export { EmailInputIcon } from "./components/Icons/EmailInputIcon";
export { HeadingIcon } from "./components/Icons/HeadingIcon";
diff --git a/app/client/packages/icons/src/stories/Icons.mdx b/app/client/packages/icons/src/stories/Icons.mdx
index dba05e9f1ddc..4641a0ee4927 100644
--- a/app/client/packages/icons/src/stories/Icons.mdx
+++ b/app/client/packages/icons/src/stories/Icons.mdx
@@ -3,6 +3,7 @@ import { Flex } from "@appsmith/wds";
import { ButtonIcon } from "../components/Icons/ButtonIcon";
import { CheckboxGroupIcon } from "../components/Icons/CheckboxGroupIcon";
import { CheckboxIcon } from "../components/Icons/CheckboxIcon";
+import { ComboboxSelectIcon } from "../components/Icons/ComboboxSelectIcon";
import { CurrencyInputIcon } from "../components/Icons/CurrencyInputIcon";
import { EmailInputIcon } from "../components/Icons/EmailInputIcon";
import { HeadingIcon } from "../components/Icons/HeadingIcon";
@@ -38,6 +39,7 @@ export const Icons = () => {
+
diff --git a/app/client/packages/icons/src/stories/Thumbnails.mdx b/app/client/packages/icons/src/stories/Thumbnails.mdx
index e3a7a1f92380..d05e30565d97 100644
--- a/app/client/packages/icons/src/stories/Thumbnails.mdx
+++ b/app/client/packages/icons/src/stories/Thumbnails.mdx
@@ -3,6 +3,7 @@ import { Flex } from "@appsmith/wds";
import { ButtonThumbnail } from "../components/Thumbnails/ButtonThumbnail";
import { CheckboxGroupThumbnail } from "../components/Thumbnails/CheckboxGroupThumbnail";
import { CheckboxThumbnail } from "../components/Thumbnails/CheckboxThumbnail";
+import { ComboboxSelectThumbnail } from "../components/Thumbnails/ComboboxSelectThumbnail";
import { CurrencyInputThumbnail } from "../components/Thumbnails/CurrencyInputThumbnail";
import { EmailInputThumbnail } from "../components/Thumbnails/EmailInputThumbnail";
import { HeadingThumbnail } from "../components/Thumbnails/HeadingThumbnail";
@@ -39,6 +40,7 @@ export const Icons = () => {
+
diff --git a/app/client/src/Datasource/components/ReconnectDatasourceForm.tsx b/app/client/src/Datasource/components/ReconnectDatasourceForm.tsx
new file mode 100644
index 000000000000..fa047882d8d0
--- /dev/null
+++ b/app/client/src/Datasource/components/ReconnectDatasourceForm.tsx
@@ -0,0 +1,25 @@
+import React from "react";
+import DatasourceEditor from "pages/Editor/DataSourceEditor";
+
+interface ReconnectDatasourceFormProps {
+ applicationId: string | null;
+ datasourceId: string | null;
+ pageId: string | null;
+}
+
+function ReconnectDatasourceForm(props: ReconnectDatasourceFormProps) {
+ const { applicationId, datasourceId, pageId } = props;
+
+ return (
+
+ );
+}
+
+export default ReconnectDatasourceForm;
diff --git a/app/client/src/IDE/Components/BottomView.tsx b/app/client/src/IDE/Components/BottomView.tsx
index 022a4fe89adc..89470b86130d 100644
--- a/app/client/src/IDE/Components/BottomView.tsx
+++ b/app/client/src/IDE/Components/BottomView.tsx
@@ -6,6 +6,7 @@ import Resizer, {
import { CodeEditorWithGutterStyles } from "pages/Editor/JSEditor/styledComponents";
import { ViewDisplayMode, ViewHideBehaviour } from "IDE/Interfaces/View";
import { Button } from "@appsmith/ads";
+import classNames from "classnames";
const VIEW_MIN_HEIGHT = 38;
@@ -112,6 +113,7 @@ const ViewHide = (props: ViewHideProps) => {
const BottomView = (props: Props) => {
const panelRef = useRef(null);
+ const { className = "" } = props;
// Handle the height of the view when toggling the hidden state
useEffect(() => {
@@ -126,7 +128,10 @@ const BottomView = (props: Props) => {
return (
diff --git a/app/client/src/IDE/Structure/Header.tsx b/app/client/src/IDE/Structure/Header.tsx
index 53de646437b7..14e8917a9567 100644
--- a/app/client/src/IDE/Structure/Header.tsx
+++ b/app/client/src/IDE/Structure/Header.tsx
@@ -1,6 +1,7 @@
import React from "react";
import { Divider, Flex } from "@appsmith/ads";
import { AppsmithLink } from "pages/Editor/AppsmithLink";
+import { IDE_HEADER_HEIGHT } from "./constants";
interface ChildrenProps {
children: React.ReactNode | React.ReactNode[];
@@ -59,7 +60,7 @@ const Header = (props: ChildrenProps) => {
alignItems="center"
border="1px solid var(--ads-v2-color-border)"
className="t--editor-header"
- height="40px"
+ height={IDE_HEADER_HEIGHT + "px"}
overflow="hidden"
width="100%"
>
diff --git a/app/client/src/IDE/Structure/constants.ts b/app/client/src/IDE/Structure/constants.ts
new file mode 100644
index 000000000000..2690fc4609df
--- /dev/null
+++ b/app/client/src/IDE/Structure/constants.ts
@@ -0,0 +1 @@
+export const IDE_HEADER_HEIGHT = 40;
diff --git a/app/client/src/IDE/index.ts b/app/client/src/IDE/index.ts
index 0b765da22cea..8a12a855b8ec 100644
--- a/app/client/src/IDE/index.ts
+++ b/app/client/src/IDE/index.ts
@@ -9,6 +9,7 @@
* These are composable components that you can use to spread the content of the header
* It is possible to use the IDE Header without using these subsections
*/
+export { IDE_HEADER_HEIGHT } from "./Structure/constants";
export { default as IDEHeader } from "./Structure/Header";
/* ====================================================
diff --git a/app/client/src/PluginActionEditor/PluginActionContext.tsx b/app/client/src/PluginActionEditor/PluginActionContext.tsx
new file mode 100644
index 000000000000..0b99f9dc363d
--- /dev/null
+++ b/app/client/src/PluginActionEditor/PluginActionContext.tsx
@@ -0,0 +1,62 @@
+import React, {
+ type ReactNode,
+ createContext,
+ useContext,
+ useMemo,
+} from "react";
+import type { Action } from "entities/Action";
+import type { Plugin } from "api/PluginApi";
+import type { Datasource } from "entities/Datasource";
+
+interface PluginActionContextType {
+ action: Action;
+ editorConfig: unknown[];
+ settingsConfig: unknown[];
+ plugin: Plugin;
+ datasource?: Datasource;
+}
+
+// No need to export this context to use it. Use the hook defined below instead
+const PluginActionContext = createContext(null);
+
+interface ChildrenProps {
+ children: ReactNode[];
+}
+
+export const PluginActionContextProvider = (
+ props: ChildrenProps & PluginActionContextType,
+) => {
+ const { action, children, datasource, editorConfig, plugin, settingsConfig } =
+ props;
+
+ // using useMemo to avoid unnecessary renders
+ const contextValue = useMemo(
+ () => ({
+ action,
+ datasource,
+ editorConfig,
+ plugin,
+ settingsConfig,
+ }),
+ [action, datasource, editorConfig, plugin, settingsConfig],
+ );
+
+ return (
+
+ {children}
+
+ );
+};
+
+// By using this hook, you are guaranteed that the states are correctly
+// typed and set.
+// Without this, consumers of the context would need to keep doing a null check
+export const usePluginActionContext = () => {
+ const context = useContext(PluginActionContext);
+ if (!context) {
+ throw new Error(
+ "usePluginActionContext must be used within usePluginActionContextProvider",
+ );
+ }
+ return context;
+};
diff --git a/app/client/src/PluginActionEditor/PluginActionEditor.tsx b/app/client/src/PluginActionEditor/PluginActionEditor.tsx
new file mode 100644
index 000000000000..d8e480403064
--- /dev/null
+++ b/app/client/src/PluginActionEditor/PluginActionEditor.tsx
@@ -0,0 +1,89 @@
+import React from "react";
+import { useLocation } from "react-router";
+import { identifyEntityFromPath } from "../navigation/FocusEntity";
+import { useSelector } from "react-redux";
+import {
+ getActionByBaseId,
+ getDatasource,
+ getEditorConfig,
+ getPlugin,
+ getPluginSettingConfigs,
+} from "ee/selectors/entitiesSelector";
+import { PluginActionContextProvider } from "./PluginActionContext";
+import { get } from "lodash";
+import EntityNotFoundPane from "pages/Editor/EntityNotFoundPane";
+import { getIsEditorInitialized } from "selectors/editorSelectors";
+import Spinner from "components/editorComponents/Spinner";
+import CenteredWrapper from "components/designSystems/appsmith/CenteredWrapper";
+import { Text } from "@appsmith/ads";
+
+interface ChildrenProps {
+ children: React.ReactNode[];
+}
+
+const PluginActionEditor = (props: ChildrenProps) => {
+ const { pathname } = useLocation();
+
+ const isEditorInitialized = useSelector(getIsEditorInitialized);
+
+ const entity = identifyEntityFromPath(pathname);
+ const action = useSelector((state) => getActionByBaseId(state, entity.id));
+
+ const pluginId = get(action, "pluginId", "");
+ const plugin = useSelector((state) => getPlugin(state, pluginId));
+
+ const datasourceId = get(action, "datasource.id", "");
+ const datasource = useSelector((state) => getDatasource(state, datasourceId));
+
+ const settingsConfig = useSelector((state) =>
+ getPluginSettingConfigs(state, pluginId),
+ );
+
+ const editorConfig = useSelector((state) => getEditorConfig(state, pluginId));
+
+ if (!isEditorInitialized) {
+ return (
+
+
+
+ );
+ }
+
+ if (!action) {
+ return ;
+ }
+
+ if (!plugin) {
+ return (
+
+
+ Plugin not installed!
+
+
+ );
+ }
+
+ if (!settingsConfig || !editorConfig) {
+ return (
+
+
+ Editor config not found!
+
+
+ );
+ }
+
+ return (
+
+ {props.children}
+
+ );
+};
+
+export default PluginActionEditor;
diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/PluginActionForm.tsx b/app/client/src/PluginActionEditor/components/PluginActionForm/PluginActionForm.tsx
new file mode 100644
index 000000000000..17db33e698a3
--- /dev/null
+++ b/app/client/src/PluginActionEditor/components/PluginActionForm/PluginActionForm.tsx
@@ -0,0 +1,7 @@
+import React from "react";
+
+const PluginActionForm = () => {
+ return ;
+};
+
+export default PluginActionForm;
diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/index.ts b/app/client/src/PluginActionEditor/components/PluginActionForm/index.ts
new file mode 100644
index 000000000000..bb106d466ee2
--- /dev/null
+++ b/app/client/src/PluginActionEditor/components/PluginActionForm/index.ts
@@ -0,0 +1 @@
+export { default } from "./PluginActionForm";
diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponsePane.tsx b/app/client/src/PluginActionEditor/components/PluginActionResponsePane.tsx
new file mode 100644
index 000000000000..5a0be861970c
--- /dev/null
+++ b/app/client/src/PluginActionEditor/components/PluginActionResponsePane.tsx
@@ -0,0 +1,7 @@
+import React from "react";
+
+const PluginActionResponsePane = () => {
+ return ;
+};
+
+export default PluginActionResponsePane;
diff --git a/app/client/src/PluginActionEditor/components/PluginActionToolbar.tsx b/app/client/src/PluginActionEditor/components/PluginActionToolbar.tsx
new file mode 100644
index 000000000000..64542de3c66f
--- /dev/null
+++ b/app/client/src/PluginActionEditor/components/PluginActionToolbar.tsx
@@ -0,0 +1,7 @@
+import React from "react";
+
+const PluginActionToolbar = () => {
+ return ;
+};
+
+export default PluginActionToolbar;
diff --git a/app/client/src/PluginActionEditor/index.ts b/app/client/src/PluginActionEditor/index.ts
new file mode 100644
index 000000000000..0a58d00bdaae
--- /dev/null
+++ b/app/client/src/PluginActionEditor/index.ts
@@ -0,0 +1,8 @@
+export { default as PluginActionEditor } from "./PluginActionEditor";
+export {
+ PluginActionContextProvider,
+ usePluginActionContext,
+} from "./PluginActionContext";
+export { default as PluginActionToolbar } from "./components/PluginActionToolbar";
+export { default as PluginActionForm } from "./components/PluginActionForm";
+export { default as PluginActionResponsePane } from "./components/PluginActionResponsePane";
diff --git a/app/client/src/actions/jsActionActions.ts b/app/client/src/actions/jsActionActions.ts
index 00a11cd6189e..19caef697dd7 100644
--- a/app/client/src/actions/jsActionActions.ts
+++ b/app/client/src/actions/jsActionActions.ts
@@ -8,6 +8,7 @@ import type { JSCollection } from "entities/JSCollection";
import type { CreateJSCollectionRequest } from "ee/api/JSActionAPI";
import type { EventLocation } from "ee/utils/analyticsUtilTypes";
import type { ApiResponse } from "api/ApiResponses";
+import type { ErrorActionPayload } from "../sagas/ErrorSagas";
export interface FetchJSCollectionsPayload {
applicationId: string;
@@ -62,10 +63,12 @@ export const copyJSCollectionSuccess = (payload: JSCollection) => {
};
};
-export const copyJSCollectionError = (payload: {
- id: string;
- destinationPageId: string;
-}) => {
+export const copyJSCollectionError = (
+ payload: {
+ id: string;
+ destinationPageId: string;
+ } & ErrorActionPayload,
+) => {
return {
type: ReduxActionErrorTypes.COPY_JS_ACTION_ERROR,
payload,
@@ -90,10 +93,12 @@ export const moveJSCollectionSuccess = (payload: JSCollection) => {
};
};
-export const moveJSCollectionError = (payload: {
- id: string;
- originalPageId: string;
-}) => {
+export const moveJSCollectionError = (
+ payload: {
+ id: string;
+ originalPageId: string;
+ } & ErrorActionPayload,
+) => {
return {
type: ReduxActionErrorTypes.MOVE_JS_ACTION_ERROR,
payload,
diff --git a/app/client/src/actions/pageActions.tsx b/app/client/src/actions/pageActions.tsx
index 003d0aa20a64..f4e1a78b71ae 100644
--- a/app/client/src/actions/pageActions.tsx
+++ b/app/client/src/actions/pageActions.tsx
@@ -72,6 +72,10 @@ export interface FetchPublishedPageActionPayload {
pageWithMigratedDsl?: FetchPageResponse;
}
+export interface FetchPublishedPageResourcesPayload {
+ pageId: string;
+}
+
export const fetchPublishedPageAction = (
pageId: string,
bustCache = false,
@@ -290,6 +294,17 @@ export const clonePageSuccess = ({
};
};
+// Fetches resources required for published page, currently only used for fetching actions
+// In future we can reuse this for fetching other page level resources in published mode
+export const fetchPublishedPageResourcesAction = (
+ pageId: string,
+): ReduxAction => ({
+ type: ReduxActionTypes.FETCH_PUBLISHED_PAGE_RESOURCES_INIT,
+ payload: {
+ pageId,
+ },
+});
+
// update a page
export interface UpdatePageActionPayload {
diff --git a/app/client/src/actions/pluginActionActions.ts b/app/client/src/actions/pluginActionActions.ts
index 611beaaa4d01..81a0edf9d06e 100644
--- a/app/client/src/actions/pluginActionActions.ts
+++ b/app/client/src/actions/pluginActionActions.ts
@@ -15,6 +15,7 @@ import type { ModalInfo } from "reducers/uiReducers/modalActionReducer";
import type { OtlpSpan } from "UITelemetry/generateTraces";
import type { ApiResponse } from "api/ApiResponses";
import type { JSCollection } from "entities/JSCollection";
+import type { ErrorActionPayload } from "sagas/ErrorSagas";
export const createActionRequest = (payload: Partial) => {
return {
@@ -205,10 +206,12 @@ export const moveActionSuccess = (payload: Action) => {
};
};
-export const moveActionError = (payload: {
- id: string;
- originalPageId: string;
-}) => {
+export const moveActionError = (
+ payload: {
+ id: string;
+ originalPageId: string;
+ } & ErrorActionPayload,
+) => {
return {
type: ReduxActionErrorTypes.MOVE_ACTION_ERROR,
payload,
@@ -233,10 +236,12 @@ export const copyActionSuccess = (payload: Action) => {
};
};
-export const copyActionError = (payload: {
- id: string;
- destinationPageId: string;
-}) => {
+export const copyActionError = (
+ payload: {
+ id: string;
+ destinationPageId: string;
+ } & ErrorActionPayload,
+) => {
return {
type: ReduxActionErrorTypes.COPY_ACTION_ERROR,
payload,
diff --git a/app/client/src/ce/constants/ReduxActionConstants.tsx b/app/client/src/ce/constants/ReduxActionConstants.tsx
index e3c5510381f8..0fc6287c4c4e 100644
--- a/app/client/src/ce/constants/ReduxActionConstants.tsx
+++ b/app/client/src/ce/constants/ReduxActionConstants.tsx
@@ -368,7 +368,6 @@ const UserAuthActionTypes = {
SAAS_GET_OAUTH_ACCESS_TOKEN: "SAAS_GET_OAUTH_ACCESS_TOKEN",
GET_OAUTH_ACCESS_TOKEN: "GET_OAUTH_ACCESS_TOKEN",
GET_OAUTH_ACCESS_TOKEN_SUCCESS: "GET_OAUTH_ACCESS_TOKEN_SUCCESS",
- GET_OAUTH_ACCESS_TOKEN_ERROR: "GET_OAUTH_ACCESS_TOKEN_ERROR",
};
const UserAuthActionErrorTypes = {
CREATE_USER_ERROR: "CREATE_USER_ERROR",
@@ -379,6 +378,7 @@ const UserAuthActionErrorTypes = {
LOGOUT_USER_ERROR: "LOGOUT_USER_ERROR",
VERIFY_INVITE_ERROR: "VERIFY_INVITE_ERROR",
INVITED_USER_SIGNUP_ERROR: "INVITED_USER_SIGNUP_ERROR",
+ GET_OAUTH_ACCESS_TOKEN_ERROR: "GET_OAUTH_ACCESS_TOKEN_ERROR",
};
const UserProfileActionTypes = {
@@ -980,6 +980,7 @@ const AppViewActionTypes = {
FETCH_JS_ACTIONS_VIEW_MODE_SUCCESS: "FETCH_JS_ACTIONS_VIEW_MODE_SUCCESS",
SET_APP_VIEWER_HEADER_HEIGHT: "SET_APP_VIEWER_HEADER_HEIGHT",
SET_APP_SIDEBAR_PINNED: "SET_APP_SIDEBAR_PINNED",
+ FETCH_PUBLISHED_PAGE_RESOURCES_INIT: "FETCH_PUBLISHED_PAGE_RESOURCES_INIT",
};
const AppViewActionErrorTypes = {
@@ -988,6 +989,7 @@ const AppViewActionErrorTypes = {
PUBLISH_APPLICATION_ERROR: "PUBLISH_APPLICATION_ERROR",
FETCH_ACTIONS_VIEW_MODE_ERROR: "FETCH_ACTION_VIEW_MODE_ERROR",
FETCH_JS_ACTIONS_VIEW_MODE_ERROR: "FETCH_JS_ACTIONS_VIEW_MODE_ERROR",
+ FETCH_PUBLISHED_PAGE_RESOURCES_ERROR: "FETCH_PUBLISHED_PAGE_RESOURCES_ERROR",
};
const WorkspaceActionTypes = {
@@ -1334,6 +1336,20 @@ export const ReduxActionErrorTypes = {
...WorkspaceActionErrorTypes,
};
+export const toastMessageErrorTypes = {
+ ...AdminSettingsActionErrorTypes,
+ ...ApplicationActionErrorTypes,
+ ...AppViewActionErrorTypes,
+ ...DatasourceEditorActionErrorTypes,
+ ...GitActionErrorTypes,
+ ...ImportExportActionErrorTypes,
+ ...PlatformActionErrorTypes,
+ ...TenantActionErrorTypes,
+ ...UserAuthActionErrorTypes,
+ ...UserProfileActionErrorTypes,
+ ...WorkspaceActionErrorTypes,
+};
+
export type ReduxActionErrorType =
(typeof ReduxActionErrorTypes)[keyof typeof ReduxActionErrorTypes];
diff --git a/app/client/src/ce/constants/messages.ts b/app/client/src/ce/constants/messages.ts
index 7de903836a11..8407a185902a 100644
--- a/app/client/src/ce/constants/messages.ts
+++ b/app/client/src/ce/constants/messages.ts
@@ -364,8 +364,8 @@ export const DATASOURCE_UPDATE = (dsName: string) =>
`${dsName} datasource updated successfully`;
export const DATASOURCE_VALID = (dsName: string) =>
`${dsName} datasource is valid`;
-export const EDIT_DATASOURCE = () => "Edit datasource";
-export const SAVE_DATASOURCE = () => "Save as datasource";
+export const EDIT_DATASOURCE = () => "Edit";
+export const SAVE_DATASOURCE = () => "Save";
export const SAVE_DATASOURCE_MESSAGE = () =>
"Save the URL as a datasource to access authentication settings";
export const EDIT_DATASOURCE_MESSAGE = () =>
diff --git a/app/client/src/ce/entities/FeatureFlag.ts b/app/client/src/ce/entities/FeatureFlag.ts
index 6deb49556d88..69ac4b7e9c60 100644
--- a/app/client/src/ce/entities/FeatureFlag.ts
+++ b/app/client/src/ce/entities/FeatureFlag.ts
@@ -45,6 +45,7 @@ export const FEATURE_FLAG = {
"ab_learnability_discoverability_collapse_all_except_data_enabled",
release_layout_conversion_enabled: "release_layout_conversion_enabled",
release_anvil_toggle_enabled: "release_anvil_toggle_enabled",
+ release_ide_animations_enabled: "release_ide_animations_enabled",
} as const;
export type FeatureFlag = keyof typeof FEATURE_FLAG;
@@ -82,6 +83,7 @@ export const DEFAULT_FEATURE_FLAG_VALUE: FeatureFlags = {
ab_learnability_discoverability_collapse_all_except_data_enabled: true,
release_layout_conversion_enabled: false,
release_anvil_toggle_enabled: false,
+ release_ide_animations_enabled: false,
};
export const AB_TESTING_EVENT_KEYS = {
diff --git a/app/client/src/ce/pages/Editor/AppPluginActionEditor/AppPluginActionEditor.tsx b/app/client/src/ce/pages/Editor/AppPluginActionEditor/AppPluginActionEditor.tsx
new file mode 100644
index 000000000000..6ed514390c08
--- /dev/null
+++ b/app/client/src/ce/pages/Editor/AppPluginActionEditor/AppPluginActionEditor.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+import {
+ PluginActionEditor,
+ PluginActionToolbar,
+ PluginActionForm,
+ PluginActionResponsePane,
+} from "PluginActionEditor";
+
+const AppPluginActionEditor = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+export default AppPluginActionEditor;
diff --git a/app/client/src/ce/pages/Editor/Explorer/helpers.tsx b/app/client/src/ce/pages/Editor/Explorer/helpers.tsx
index 587f89bf6365..0a1baac42ea8 100644
--- a/app/client/src/ce/pages/Editor/Explorer/helpers.tsx
+++ b/app/client/src/ce/pages/Editor/Explorer/helpers.tsx
@@ -7,7 +7,9 @@ import {
DATA_SOURCES_EDITOR_ID_PATH,
matchBuilderPath,
matchViewerPath,
- BUILDER_VIEWER_PATH_PREFIX,
+ VIEWER_PATH,
+ VIEWER_CUSTOM_PATH,
+ VIEWER_PATH_DEPRECATED,
} from "constants/routes";
import {
@@ -80,11 +82,7 @@ export const getActionIdFromURL = () => {
};
export function getAppViewerPageIdFromPath(path: string): string | null {
- const regexes = [
- `${BUILDER_VIEWER_PATH_PREFIX}:applicationSlug/:pageSlug(.*\\-):basePageId`, // VIEWER_PATH
- `${BUILDER_VIEWER_PATH_PREFIX}:customSlug(.*\\-):basePageId`, // VIEWER_CUSTOM_PATH
- `/applications/:baseApplicationId/pages/:basePageId`, // VIEWER_PATH_DEPRECATED
- ];
+ const regexes = [VIEWER_PATH, VIEWER_CUSTOM_PATH, VIEWER_PATH_DEPRECATED];
for (const regex of regexes) {
const match = matchPath<{ basePageId: string }>(path, { path: regex });
if (match?.params.basePageId) {
diff --git a/app/client/src/ce/plugins/Linting/utils/getEntityUniqueIdForLogs.ts b/app/client/src/ce/plugins/Linting/utils/getEntityUniqueIdForLogs.ts
index 414cb362e702..619de80cc864 100644
--- a/app/client/src/ce/plugins/Linting/utils/getEntityUniqueIdForLogs.ts
+++ b/app/client/src/ce/plugins/Linting/utils/getEntityUniqueIdForLogs.ts
@@ -1,4 +1,4 @@
-import type { JSActionEntity } from "ee/entities/DataTree/types";
+import type { JSActionEntity, WidgetEntity } from "ee/entities/DataTree/types";
import { ENTITY_TYPE } from "entities/DataTree/dataTreeFactory";
import type { DataTreeEntity } from "entities/DataTree/dataTreeTypes";
@@ -9,6 +9,9 @@ const entityUniqueIdGetterMap: Record<
[ENTITY_TYPE.JSACTION]: (entity) => {
return (entity as JSActionEntity).actionId;
},
+ [ENTITY_TYPE.WIDGET]: (entity) => {
+ return (entity as WidgetEntity).widgetId;
+ },
};
export default function getEntityUniqueIdForLogs(entity: DataTreeEntity) {
diff --git a/app/client/src/ce/plugins/Linting/utils/isLintErrorLoggingEnabledForEntity.ts b/app/client/src/ce/plugins/Linting/utils/isLintErrorLoggingEnabledForEntity.ts
index c5bad4b96ffc..15b205c76980 100644
--- a/app/client/src/ce/plugins/Linting/utils/isLintErrorLoggingEnabledForEntity.ts
+++ b/app/client/src/ce/plugins/Linting/utils/isLintErrorLoggingEnabledForEntity.ts
@@ -1,8 +1,16 @@
-import { isJSAction } from "ee/workers/Evaluation/evaluationUtils";
+import { isJSAction, isWidget } from "ee/workers/Evaluation/evaluationUtils";
import type { DataTreeEntity } from "entities/DataTree/dataTreeTypes";
+import type { DataTreeEntityConfig } from "ee/entities/DataTree/types";
export default function isLintErrorLoggingEnabledForEntity(
entity: DataTreeEntity,
+ propertyPath: string,
+ config: DataTreeEntityConfig,
) {
- return isJSAction(entity);
+ if (isJSAction(entity)) {
+ return true;
+ }
+ if (isWidget(entity)) {
+ return !(propertyPath in config.reactivePaths);
+ }
}
diff --git a/app/client/src/ce/sagas/ApplicationSagas.tsx b/app/client/src/ce/sagas/ApplicationSagas.tsx
index e529199407b1..562c139376ef 100644
--- a/app/client/src/ce/sagas/ApplicationSagas.tsx
+++ b/app/client/src/ce/sagas/ApplicationSagas.tsx
@@ -234,11 +234,7 @@ export function* fetchAppAndPagesSaga(
) {
try {
const { pages, ...payload } = action.payload;
- const request = {
- applicationId: payload.applicationId,
- pageId: payload.pageId,
- mode: payload.mode,
- };
+ const request = { ...payload };
if (request.pageId && request.applicationId) {
delete request.applicationId;
}
diff --git a/app/client/src/ce/sagas/JSActionSagas.ts b/app/client/src/ce/sagas/JSActionSagas.ts
index a152a8acd29c..7c72f18b67c3 100644
--- a/app/client/src/ce/sagas/JSActionSagas.ts
+++ b/app/client/src/ce/sagas/JSActionSagas.ts
@@ -192,10 +192,15 @@ export function* copyJSCollectionSaga(
}
} catch (e) {
const actionName = actionObject ? actionObject.name : "";
- toast.show(createMessage(ERROR_JS_ACTION_COPY_FAIL, actionName), {
- kind: "error",
- });
- yield put(copyJSCollectionError(action.payload));
+ yield put(
+ copyJSCollectionError({
+ ...action.payload,
+ show: true,
+ error: {
+ message: createMessage(ERROR_JS_ACTION_COPY_FAIL, actionName),
+ },
+ }),
+ );
}
}
@@ -265,13 +270,14 @@ export function* moveJSCollectionSaga(
// @ts-expect-error: response.data is of type unknown
yield put(moveJSCollectionSuccess(response.data));
} catch (e) {
- toast.show(createMessage(ERROR_JS_ACTION_MOVE_FAIL, actionObject.name), {
- kind: "error",
- });
yield put(
moveJSCollectionError({
id: action.payload.id,
originalPageId: actionObject.pageId,
+ show: true,
+ error: {
+ message: createMessage(ERROR_JS_ACTION_MOVE_FAIL, actionObject.name),
+ },
}),
);
}
@@ -375,15 +381,15 @@ export function* saveJSObjectName(
payload: {
actionId: action.payload.id,
oldName: collection.config.name,
+ show: true,
+ error: {
+ message: createMessage(
+ ERROR_JS_COLLECTION_RENAME_FAIL,
+ action.payload.name,
+ ),
+ },
},
});
- toast.show(
- createMessage(ERROR_JS_COLLECTION_RENAME_FAIL, action.payload.name),
- {
- kind: "error",
- },
- );
- log.error(e);
}
}
diff --git a/app/client/src/ce/sagas/PageSagas.tsx b/app/client/src/ce/sagas/PageSagas.tsx
index c58237cc0156..decc911734cb 100644
--- a/app/client/src/ce/sagas/PageSagas.tsx
+++ b/app/client/src/ce/sagas/PageSagas.tsx
@@ -10,6 +10,7 @@ import type {
DeletePageActionPayload,
FetchPageActionPayload,
FetchPublishedPageActionPayload,
+ FetchPublishedPageResourcesPayload,
GenerateTemplatePageActionPayload,
SetPageOrderActionPayload,
SetupPageActionPayload,
@@ -87,6 +88,7 @@ import {
fetchActionsForPage,
fetchActionsForPageError,
fetchActionsForPageSuccess,
+ fetchActionsForView,
setActionsToExecuteOnPageLoad,
setJSActionsToExecuteOnPageLoad,
} from "actions/pluginActionActions";
@@ -113,6 +115,7 @@ import {
import WidgetFactory from "WidgetProvider/factory";
import { builderURL } from "ee/RouteBuilder";
import { failFastApiCalls, waitForWidgetConfigBuild } from "sagas/InitSagas";
+import { type InitConsolidatedApi } from "sagas/InitSagas";
import { resizePublishedMainCanvasToLowestWidget } from "sagas/WidgetOperationUtils";
import {
checkAndLogErrorsIfCyclicDependency,
@@ -146,6 +149,7 @@ import type { LayoutSystemTypes } from "layoutSystems/types";
import { getIsAnvilLayout } from "layoutSystems/anvil/integrations/selectors";
import { convertToBasePageIdSelector } from "selectors/pageListSelectors";
import type { Page } from "entities/Page";
+import ConsolidatedPageLoadApi from "api/ConsolidatedPageLoadApi";
export const checkIfMigrationIsNeeded = (
fetchPageResponse?: FetchPageResponse,
@@ -378,6 +382,43 @@ export function* fetchPublishedPageSaga(
}
}
+export function* fetchPublishedPageResourcesSaga(
+ action: ReduxAction,
+) {
+ try {
+ const { pageId } = action.payload;
+
+ const params = { defaultPageId: pageId };
+ const initConsolidatedApiResponse: ApiResponse =
+ yield ConsolidatedPageLoadApi.getConsolidatedPageLoadDataView(params);
+
+ const isValidResponse: boolean = yield validateResponse(
+ initConsolidatedApiResponse,
+ );
+ const response: InitConsolidatedApi | undefined =
+ initConsolidatedApiResponse.data;
+
+ if (isValidResponse) {
+ // We need to recall consolidated view API in order to fetch actions when page is switched
+ // As in the first call only actions of the current page are fetched
+ // In future, we can reuse this saga to fetch other resources of the page like actionCollections etc
+ const { publishedActions } = response;
+
+ // Sending applicationId as empty as we have publishedActions present,
+ // it won't call the actions view api with applicationId
+ yield put(fetchActionsForView({ applicationId: "", publishedActions }));
+ yield put(fetchAllPageEntityCompletion([executePageLoadActions()]));
+ }
+ } catch (error) {
+ yield put({
+ type: ReduxActionErrorTypes.FETCH_PUBLISHED_PAGE_RESOURCES_ERROR,
+ payload: {
+ error,
+ },
+ });
+ }
+}
+
export function* fetchAllPublishedPagesSaga() {
try {
const pageIdentities: { pageId: string; basePageId: string }[] =
diff --git a/app/client/src/ce/utils/workflowHelpers.ts b/app/client/src/ce/utils/workflowHelpers.ts
index b7f05145a5e5..63cdcdf4d149 100644
--- a/app/client/src/ce/utils/workflowHelpers.ts
+++ b/app/client/src/ce/utils/workflowHelpers.ts
@@ -1,3 +1,10 @@
export const useWorkflowOptions = () => {
return [];
};
+
+// We don't want to show the create new JS object option if the user is in the workflow editor
+// this is done since worflows runner doesn't support multiple JS objects
+// TODO: Remove this once workflows can support multiple JS objects
+export const checkIfJSObjectCreationAllowed = () => {
+ return false;
+};
diff --git a/app/client/src/components/AnimatedGridLayout/components/LayoutArea/LayoutArea.tsx b/app/client/src/components/AnimatedGridLayout/components/LayoutArea/LayoutArea.tsx
index bbf8d0da44ed..f646eef03023 100644
--- a/app/client/src/components/AnimatedGridLayout/components/LayoutArea/LayoutArea.tsx
+++ b/app/client/src/components/AnimatedGridLayout/components/LayoutArea/LayoutArea.tsx
@@ -41,7 +41,7 @@ export function LayoutArea(props: LayoutAreaProps) {
>