diff --git a/.github/config.json b/.github/config.json index d5e17dc2d4e..7117d4ab614 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":"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 +{"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},{"label":"Reconfigure Datasource Modal","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"},"Reconfigure Datasource Modal":{"name":"Reconfigure Datasource Modal","description":"Issues related to reconfigure DS modal that comes after importing applications","color":"5ac17b"}},"success":true} \ No newline at end of file diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml index bf230d050ec..c4dd4001beb 100644 --- a/.github/workflows/github-release.yml +++ b/.github/workflows/github-release.yml @@ -247,6 +247,12 @@ jobs: run: | scripts/generate_info_json.sh + - name: Place server artifacts-es + run: | + if [[ -f scripts/prepare_server_artifacts.sh ]]; then + scripts/prepare_server_artifacts.sh + fi + - name: Login to DockerHub uses: docker/login-action@v1 with: diff --git a/.github/workflows/sync-release-to-pg.yml b/.github/workflows/sync-release-to-pg.yml index 2e50073a07b..f5ad35e0669 100644 --- a/.github/workflows/sync-release-to-pg.yml +++ b/.github/workflows/sync-release-to-pg.yml @@ -71,7 +71,7 @@ jobs: # This is the ChannelId of the proj postgres channel. body="$(jq -nc \ - --arg channel C06Q3A97USE \ + --arg channel C07JMLWEXDJ \ --arg text "$slack_message" \ '$ARGS.named' )" diff --git a/.github/workflows/test-build-docker-image.yml b/.github/workflows/test-build-docker-image.yml index 71fe51a5cb8..f14c565e210 100644 --- a/.github/workflows/test-build-docker-image.yml +++ b/.github/workflows/test-build-docker-image.yml @@ -435,6 +435,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 diff --git a/app/client/cypress/e2e/Regression/ClientSide/ActionExecution/uiToCode_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/ActionExecution/uiToCode_spec.ts index 05aaff090f0..375553cbb9a 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/ActionExecution/uiToCode_spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/ActionExecution/uiToCode_spec.ts @@ -49,12 +49,12 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { agHelper.GetNClick(propPane._navigateToType("URL")); agHelper.TypeText( propPane._actionSelectorFieldByLabel("Enter URL"), - "https://google.com", + "https://www.appsmith.com", ); agHelper.GetNClick(propPane._actionSelectorPopupClose); propPane.ValidateJSFieldValue( "onClick", - `{{showAlert('Hello!', '');navigateTo('https://google.com', {}, 'SAME_WINDOW');}}`, + `{{showAlert('Hello!', '');navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');}}`, ); // Add third action @@ -80,7 +80,7 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { // Validate the code propPane.ValidateJSFieldValue( "onClick", - `{{showAlert('Hello!', '');navigateTo('https://google.com', {}, 'SAME_WINDOW');storeValue('secret-key', 'secret-value');copyToClipboard('text to copy');}}`, + `{{showAlert('Hello!', '');navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');storeValue('secret-key', 'secret-value');copyToClipboard('text to copy');}}`, ); // Delete the third action @@ -97,7 +97,7 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { // Assert the code for the remaining actions propPane.ValidateJSFieldValue( "onClick", - `{{showAlert('Hello!', '');navigateTo('https://google.com', {}, 'SAME_WINDOW');copyToClipboard('text to copy');}}`, + `{{showAlert('Hello!', '');navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');copyToClipboard('text to copy');}}`, ); // Delete the first action @@ -113,7 +113,7 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { // Assert the code for the remaining actions propPane.ValidateJSFieldValue( "onClick", - `{{navigateTo('https://google.com', {}, 'SAME_WINDOW');copyToClipboard('text to copy');}}`, + `{{navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');copyToClipboard('text to copy');}}`, ); }); @@ -132,13 +132,13 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { agHelper.GetNClick(propPane._navigateToType("URL")); agHelper.TypeText( propPane._actionSelectorFieldByLabel("Enter URL"), - "https://google.com", + "https://www.appsmith.com", ); agHelper.GetNClick(propPane._actionSelectorPopupClose); propPane.ValidateJSFieldValue( "onClick", - `{{showAlert('Hello!', '');navigateTo('https://google.com', {}, 'SAME_WINDOW');}}`, + `{{showAlert('Hello!', '');navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');}}`, ); // Add third action @@ -165,7 +165,7 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { propPane.ValidateJSFieldValue( "onClick", - `{{showAlert('Hello!', '');navigateTo('https://google.com', {}, 'SAME_WINDOW');storeValue('secret-key', 'secret-value');copyToClipboard('text to copy');}}`, + `{{showAlert('Hello!', '');navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');storeValue('secret-key', 'secret-value');copyToClipboard('text to copy');}}`, ); // Delete the third action @@ -197,7 +197,7 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { propPane.ValidateJSFieldValue( "onClick", - `{{showAlert('Hello!', '');navigateTo('https://google.com', {}, 'SAME_WINDOW');storeValue('secret-key', 'secret-value');copyToClipboard('text to copy');}}`, + `{{showAlert('Hello!', '');navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');storeValue('secret-key', 'secret-value');copyToClipboard('text to copy');}}`, ); }); @@ -216,13 +216,13 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { agHelper.GetNClick(propPane._navigateToType("URL")); agHelper.TypeText( propPane._actionSelectorFieldByLabel("Enter URL"), - "https://google.com", + "https://www.appsmith.com", ); agHelper.GetNClick(propPane._actionSelectorPopupClose); propPane.ValidateJSFieldValue( "onClick", - `{{showAlert('Hello!', '');navigateTo('https://google.com', {}, 'SAME_WINDOW');}}`, + `{{showAlert('Hello!', '');navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');}}`, ); // Add third action @@ -249,7 +249,7 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { propPane.ValidateJSFieldValue( "onClick", - `{{showAlert('Hello!', '');navigateTo('https://google.com', {}, 'SAME_WINDOW');storeValue('secret-key', 'secret-value');copyToClipboard('text to copy');}}`, + `{{showAlert('Hello!', '');navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');storeValue('secret-key', 'secret-value');copyToClipboard('text to copy');}}`, ); // Delete the third action @@ -286,7 +286,7 @@ describe("UI to Code", { tags: ["@tag.JS"] }, () => { propPane.ValidateJSFieldValue( "onClick", - `{{navigateTo('https://google.com', {}, 'SAME_WINDOW');copyToClipboard('text to copy');}}`, + `{{navigateTo('https://www.appsmith.com', {}, 'SAME_WINDOW');copyToClipboard('text to copy');}}`, ); }); diff --git a/app/client/cypress/e2e/Regression/ClientSide/Binding/Promises_1_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Binding/Promises_1_Spec.ts index fd6dfbe37b8..7e97e10dc94 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Binding/Promises_1_Spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/Binding/Promises_1_Spec.ts @@ -64,7 +64,7 @@ describe("Validate basic Promises", { tags: ["@tag.Binding"] }, () => { deployMode.NavigateBacktoEditor(); agHelper.AddDsl("promisesBtnImgDsl", locators._buttonByText("Submit")); apiPage.CreateAndFillApi( - "https://picsum.photos/200/300", + "http://host.docker.internal:4200/453-200x300.jpg", "RandomImy", 30000, ); diff --git a/app/client/cypress/e2e/Regression/ClientSide/Git/GitAutocommit_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Git/GitAutocommit_spec.ts index 56caa3725d9..9d38aa357dc 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Git/GitAutocommit_spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/Git/GitAutocommit_spec.ts @@ -21,9 +21,6 @@ describe( }, 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; diff --git a/app/client/cypress/e2e/Regression/ClientSide/IDE/Canvas_Context_Property_Pane_1_spec.js b/app/client/cypress/e2e/Regression/ClientSide/IDE/Canvas_Context_Property_Pane_1_spec.js index 0913adcfa78..0940b777580 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/IDE/Canvas_Context_Property_Pane_1_spec.js +++ b/app/client/cypress/e2e/Regression/ClientSide/IDE/Canvas_Context_Property_Pane_1_spec.js @@ -117,10 +117,16 @@ describe("Canvas context Property Pane", { tags: ["@tag.IDE"] }, function () { propertySectionState = { basic: false, general: true, - validation: false, - formsettings: true, }; + if (!Cypress.env("AIRGAPPED")) { + propertySectionState = { + ...propertySectionState, + validation: false, + formsettings: true, + }; + } + verifyPropertyPaneContext( () => { setPropertyPaneSectionState(propertySectionState); diff --git a/app/client/cypress/e2e/Regression/ClientSide/IDE/Command_Click_Navigation_spec.js b/app/client/cypress/e2e/Regression/ClientSide/IDE/Command_Click_Navigation_spec.js index fb16242360b..1ae8d3082b1 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/IDE/Command_Click_Navigation_spec.js +++ b/app/client/cypress/e2e/Regression/ClientSide/IDE/Command_Click_Navigation_spec.js @@ -79,7 +79,7 @@ describe("1. CommandClickNavigation", { tags: ["@tag.IDE"] }, function () { //Assert working on url field cy.updateCodeInput( ".t--dataSourceField", - "https://www.test.com/{{ SQL_Query.data }}", + "http://host.docker.internal:5001/{{ SQL_Query.data }}", ); agHelper.Sleep(); diff --git a/app/client/cypress/e2e/Regression/ClientSide/OneClickBinding/PropertyControl_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/OneClickBinding/PropertyControl_spec.ts index 2ecdeb7a2ac..94d2acc069d 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/OneClickBinding/PropertyControl_spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/OneClickBinding/PropertyControl_spec.ts @@ -149,7 +149,7 @@ describe( propPane.MoveToTab("Content"); [1, 2, 3, 4, 5].forEach(() => { - apiPage.CreateAndFillApi("http://www.example.com"); + apiPage.CreateAndFillApi("https://www.appsmith.com/"); }); EditorNavigation.SelectEntityByName("Table1", EntityType.Widget); diff --git a/app/client/cypress/e2e/Regression/ClientSide/SetProperty/WidgetPropertySetters1_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/SetProperty/WidgetPropertySetters1_spec.ts index 105616188d1..cacf76c350a 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/SetProperty/WidgetPropertySetters1_spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/SetProperty/WidgetPropertySetters1_spec.ts @@ -46,9 +46,9 @@ const setterMethodsToTest = [ property: "url", widget: WIDGET.AUDIO, actionBinding: - "{{Audio1.setURL('https://www.youtube.com/watch?v=JGwWNGJdvx8')}}", + "{{Audio1.setURL('http://host.docker.internal:4200/bird.mp4')}}", valueBinding: "{{Audio1.url}}", - expectedValue: "https://www.youtube.com/watch?v=JGwWNGJdvx8", + expectedValue: "http://host.docker.internal:4200/bird.mp4", }, { name: "setPlaying", diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/DocumentViewer/DocumentViewer_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/DocumentViewer/DocumentViewer_spec.ts index 4f66939deef..490bc3c766c 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/DocumentViewer/DocumentViewer_spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/DocumentViewer/DocumentViewer_spec.ts @@ -19,7 +19,7 @@ const ppt = const pngImage = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRb8umIiCU_K6ac-xS-ni4y6SP7XAd8C7Ms3Q&usqp=CAU"; const jpgImage = - "https://img.frentityExplorerpik.com/frentityExplorer-photo/beautiful-scenery-summit-mount-everest-covered-with-snow-white-clouds_181624-21317.jpg?w=1380&t=st=1691154236~exp=1691154836~hmac=35ce7f92dd16711c69509a0edbb23cedb34e49f960f560c77174994b6d5705a0"; + "https://community.appsmith.com/sites/default/files/styles/small_thumbnail/public/2024-03/aws-logo.jpg?itok=yG4bpfFs"; const pdf = "https://www.learningcontainer.com/wp-content/uploads/2019/09/sample-pdf-file.pdf"; diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image2_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image2_Spec.ts index 2919e3ca527..bf7d32d3852 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image2_Spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image2_Spec.ts @@ -16,12 +16,15 @@ describe( { tags: ["@tag.Widget", "@tag.Image"] }, function () { const image = (src: string) => 'img[src="' + src + '"]'; - const jpgImg = "https://jpeg.org/images/jpegsystems-home.jpg"; + const jpgImg = + "https://community.appsmith.com/sites/default/files/styles/small_thumbnail/public/2024-03/aws-logo.jpg?itok=yG4bpfFs"; const gifImg = - "https://mir-s3-cdn-cf.behance.net/project_modules/max_1200/5eeea355389655.59822ff824b72.gif"; - const svgImg = "https://assets.codepen.io/3/kiwi.svg"; - const webpImg = "https://www.gstatic.com/webp/gallery/4.sm.webp"; - const pngImg = "https://assets.appsmith.com/widgets/default.png"; + "https://www.appsmith.com/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2Flpvian6u6i39%2F5dIHs6B4O8JrcziD01Tzpr%2F080ac2887506afab72a160b897364607%2Fimage-11.gif&w=1080&q=75"; + const svgImg = "https://community.appsmith.com/appsmith-community-logo.svg"; + const webpImg = + "https://www.appsmith.com/assets/images/animations/widgets/img_0.webp"; + const pngImg = + "https://community.appsmith.com/sites/default/files/styles/16_9_card/public/septembercoding-min%20%281%29.png?itok=unYUZ0zm"; before(() => { entityExplorer.DragDropWidgetNVerify(draggableWidgets.IMAGE); diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image3_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image3_Spec.ts index 0a758e49140..1b0fb86b0fc 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image3_Spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image3_Spec.ts @@ -15,7 +15,8 @@ describe( "Image widget - Rotation & Download", { tags: ["@tag.Widget", "@tag.Image"] }, function () { - const jpgImg = "https://jpeg.org/images/jpegsystems-home.jpg"; + const jpgImg = + "https://community.appsmith.com/sites/default/files/styles/small_thumbnail/public/2024-03/aws-logo.jpg?itok=yG4bpfFs"; before(() => { entityExplorer.DragDropWidgetNVerify(draggableWidgets.IMAGE); propPane.UpdatePropertyFieldValue("Image", jpgImg); diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image_validation_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image_validation_spec.js index 0a6b85398f0..682c2031eb0 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image_validation_spec.js +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/Image/Image_validation_spec.js @@ -15,7 +15,7 @@ describe( .invoke("attr", "src") .should( "contain", - "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png", + "http://host.docker.internal:4200/clouddefaultImage.png", ); }); 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 1d64e70592b..0b1f970d36c 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 @@ -15,19 +15,19 @@ const data = [ { id: "001", name: "Blue", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", same: "1", }, { id: "002", name: "Green", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", same: "01", }, { id: "003", name: "Red", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", same: 1, }, ]; 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 59ebf8744cd..c762a36fc84 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 @@ -10,17 +10,17 @@ const simpleListData1 = [ { id: "001", name: "Blue", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "002", name: "Green", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "003", name: "Red", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, ]; diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_EvaluatedPopup_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_EvaluatedPopup_spec.js index 8e5ed01d002..25f27987ab7 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_EvaluatedPopup_spec.js +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_EvaluatedPopup_spec.js @@ -18,17 +18,17 @@ describe( `{{[{ id: "001", name: "Blue", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "002", name: "Green", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "003", name: "Red", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }]}}`, ); diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_TriggerRow_SelectedRow.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_TriggerRow_SelectedRow.js index 3cabf71a3ad..cd42ab2444b 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_TriggerRow_SelectedRow.js +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/ListV2/Listv2_TriggerRow_SelectedRow.js @@ -8,32 +8,32 @@ const data = [ { id: "001", name: "Blue", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "002", name: "Green", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "003", name: "Red", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "004", name: "Yellow", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "005", name: "Orange", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, { id: "006", name: "Indigo", - img: "https://assets.appsmith.com/widgets/default.png", + img: "http://host.docker.internal:4200/clouddefaultImage.png", }, ]; @@ -105,7 +105,7 @@ describe( const data = JSON.parse(val.text()); const triggeredItemView = { Image1: { - image: "https://assets.appsmith.com/widgets/default.png", + image: "http://host.docker.internal:4200/clouddefaultImage.png", isVisible: true, }, Text1: { @@ -137,7 +137,7 @@ describe( const data = JSON.parse(val.text()); const SelectedRow = { Image1: { - image: "https://assets.appsmith.com/widgets/default.png", + image: "http://host.docker.internal:4200/clouddefaultImage.png", isVisible: true, }, Text1: { @@ -198,7 +198,7 @@ describe( const data = JSON.parse(val.text()); const triggeredItemView = { Image1: { - image: "https://assets.appsmith.com/widgets/default.png", + image: "http://host.docker.internal:4200/clouddefaultImage.png", isVisible: true, }, Text1: { @@ -230,7 +230,7 @@ describe( const data = JSON.parse(val.text()); const selectedItemView = { Image1: { - image: "https://assets.appsmith.com/widgets/default.png", + image: "http://host.docker.internal:4200/clouddefaultImage.png", isVisible: true, }, Text1: { @@ -313,7 +313,7 @@ describe( const data = JSON.parse(val.text()); const triggeredItemView = { Image1: { - image: "https://assets.appsmith.com/widgets/default.png", + image: "http://host.docker.internal:4200/clouddefaultImage.png", isVisible: true, }, Text1: { diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV1/Table_PropertyPane_1_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV1/Table_PropertyPane_1_spec.js index 65e50a77355..b0bf0d75d33 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV1/Table_PropertyPane_1_spec.js +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV1/Table_PropertyPane_1_spec.js @@ -105,8 +105,7 @@ describe( it("3. Column Detail - Edit column name and validate test for computed value based on column type selected (image, button , url)", function () { // Changing Column data type from "Date" to "Image" - const imageVal = - "https://images.pexels.com/photos/736230/pexels-photo-736230.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"; + const imageVal = "http://host.docker.internal:4200/453-200x300.jpg"; cy.changeColumnType("Image", false); // "Moement "date" to "Image" diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/TableV2_PropertyPane_1_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/TableV2_PropertyPane_1_spec.js index 62ebf0ce61e..8711ea6bf07 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/TableV2_PropertyPane_1_spec.js +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/TableV2_PropertyPane_1_spec.js @@ -195,8 +195,7 @@ describe( }); // Changing Column data type from "Date" to "Image" - const imageVal = - "https://images.pexels.com/photos/736230/pexels-photo-736230.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"; + const imageVal = "http://host.docker.internal:4200/453-200x300.jpg"; cy.changeColumnType("Image"); // "Moement "date" to "Image" diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TreeSelect/Tree_Select_2_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TreeSelect/Tree_Select_2_spec.ts index 5d7ef2800f6..2814f31c2ac 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TreeSelect/Tree_Select_2_spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TreeSelect/Tree_Select_2_spec.ts @@ -308,7 +308,7 @@ describe( propPane.ToggleJSMode("onOptionChange", true); propPane.UpdatePropertyFieldValue( "onOptionChange", - `{{download('https://assets.codepen.io/3/kiwi.svg', 'kiwi.svg', 'image/svg+xml').then(() => { + `{{download('http://host.docker.internal:4200/kiwi.svg', 'kiwi.svg', 'image/svg+xml').then(() => { showAlert('Download Success', ''); });}}`, ); 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 55ab1a650cd..ad7e177f8ec 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 @@ -66,7 +66,7 @@ describe( //Check for Non-video url propPane.TypeTextIntoField( "URL", - "https://www.pexels.com/photo/closeup-photo-of-brown-brick-wall-1227511/", + "http://host.docker.internal:4200/453-200x300.jpg/", ); deployMode.DeployApp(locators._widgetInDeployed(draggableWidgets.VIDEO)); agHelper.GetElement(widgetLocators.video).then(($video) => { diff --git a/app/client/cypress/e2e/Regression/ServerSide/ActionExecution/Block_Execution.ts b/app/client/cypress/e2e/Regression/ServerSide/ActionExecution/Block_Execution.ts index e02a590d80c..a77b917e526 100644 --- a/app/client/cypress/e2e/Regression/ServerSide/ActionExecution/Block_Execution.ts +++ b/app/client/cypress/e2e/Regression/ServerSide/ActionExecution/Block_Execution.ts @@ -9,7 +9,7 @@ describe( "Block Action Execution when no field is present", { tags: ["@tag.Datasource"] }, () => { - const url = "https://www.google.com"; + const url = "https://www.appsmith.com/"; it("1. Ensure API Run button is disabled when no url is present", () => { apiPage.CreateApi("FirstAPI", "GET"); apiPage.AssertRunButtonDisability(true); diff --git a/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_Bugs_Spec.js b/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_Bugs_Spec.js index 58584e081e6..7feda064b36 100644 --- a/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_Bugs_Spec.js +++ b/app/client/cypress/e2e/Regression/ServerSide/ApiTests/API_Bugs_Spec.js @@ -69,7 +69,9 @@ describe("Rest Bugs tests", { tags: ["@tag.Datasource"] }, function () { .find("img") .invoke("attr", "src") .then(($src) => { - expect($src).not.eq("https://assets.appsmith.com/widgets/default.png"); + expect($src).not.eq( + "http://host.docker.internal:4200/clouddefaultImage.png", + ); //expect($src).contains("cat"); }); @@ -89,7 +91,9 @@ describe("Rest Bugs tests", { tags: ["@tag.Datasource"] }, function () { .find("img") .invoke("attr", "src") .then(($src) => { - expect($src).not.eq("https://assets.appsmith.com/widgets/default.png"); + expect($src).not.eq( + "http://host.docker.internal:4200/clouddefaultImage.png", + ); //expect($src).contains("dog"); }); @@ -117,7 +121,9 @@ describe("Rest Bugs tests", { tags: ["@tag.Datasource"] }, function () { .find("img") .invoke("attr", "src") .then(($src) => { - expect($src).not.eq("https://assets.appsmith.com/widgets/default.png"); + expect($src).not.eq( + "http://host.docker.internal:4200/clouddefaultImage.png", + ); //expect($src).contains("cocktail"); }); 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 e2007f6b0c9..7d05cf8f040 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 @@ -179,7 +179,7 @@ describe( .invoke("attr", "src") .then(($src) => { expect($src).not.eq( - "https://assets.appsmith.com/widgets/default.png", + "http://host.docker.internal:4200/clouddefaultImage.png", ); }); agHelper.AssertElementVisibility(locators._buttonByText("Select Files")); //verifying if reset! 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 b89bc975b8b..440487f3521 100644 --- a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/APIOnLoad_Spec.ts +++ b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/APIOnLoad_Spec.ts @@ -46,7 +46,7 @@ describe( it("2. Shows when API failed to load on page load.", function () { cy.fixture("testdata").then(function (dataSet: any) { apiPage.CreateAndFillApi( - "https://abc.com/" + dataSet.methods, + "https://www.appsmith.com/" + dataSet.methods, "PageLoadApi2", ); }); diff --git a/app/client/cypress/e2e/Sanity/Datasources/MsSQL_Basic_Spec.ts b/app/client/cypress/e2e/Sanity/Datasources/MsSQL_Basic_Spec.ts index 6b6dbe59cb0..9f97d88433a 100644 --- a/app/client/cypress/e2e/Sanity/Datasources/MsSQL_Basic_Spec.ts +++ b/app/client/cypress/e2e/Sanity/Datasources/MsSQL_Basic_Spec.ts @@ -57,16 +57,16 @@ describe( ,amazon_category_and_sub_category VARCHAR(120) ,customers_who_bought_this_item_also_bought VARCHAR(932) ); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('eac7efa5dbd3d667f26eb3d3ab504464','Hornby 2014 Catalogue','Hornby','£3.42','5 new','15',1,'4.9 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','http://www.amazon.co.uk/Hornby-R8150-Catalogue-2015/dp/B00S9SUUBE | http://www.amazon.co.uk/Hornby-Book-Model-Railways-Edition/dp/1844860957 | http://www.amazon.co.uk/Hornby-Book-Scenic-Railway-Modelling/dp/1844861120 | http://www.amazon.co.uk/Peco-60-Plans-Book/dp/B002QVL16I | http://www.amazon.co.uk/Hornby-Gloucester | http://www.amazon.co.uk/Airfix-5014429781902'); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('b17540ef7e86e461d37f3ae58b7b72ac','FunkyBuys® Large Christmas Holiday Express Festive Train Set (SI-TY1017) Toy Light / Sounds / Battery Operated & Smoke','FunkyBuys','£16.99',NULL,'2',1,'4.5 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','http://www.amazon.co.uk/Christmas-Holiday-Express-Festive-Train-Set-Toy/dp/B009R8S8AA | http://www.amazon.co.uk/Goldlok-Holiday-Express-Operated-Multi-Colour/dp/B009R8PAO2 | http://www.amazon.co.uk/FunkyBuys%C2%AE-Christmas-SI-TY1017-Ornaments-Operated/dp/B01437QMHA | http://www.amazon.co.uk/Holiday-Express-Christmas-Ornament-Decoration | http://www.amazon.co.uk/Seasonal-Vision-Christmas-Tree-Train/dp/B0044ZC1W2 | http://www.amazon.co.uk/Coca-Cola-Santa-Express-Train-Set/dp/B004BYSNU0'); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('348f344247b0c1a935b1223072ef9d8a','CLASSIC TOY TRAIN SET TRACK CARRIAGES LIGHT ENGINE BOXED BOYS KIDS BATTERY','ccf','£9.99','2 new','17',2,'3.9 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','http://www.amazon.co.uk/Classic-Train-Lights-Battery-Operated/dp/B0041L9OHE | http://www.amazon.co.uk/Train-With-Tracks-Battery-Operated-x/dp/B009P540O8 | http://www.amazon.co.uk/13-Piece-Train-Set-Ideal/dp/B0173N6E4W | http://www.amazon.co.uk/Train-Flash-Electric-Sound-Europe/dp/B008D7CEH4 | http://www.amazon.co.uk/Train-Ultimate-Sticker-Book-Stickers/dp/1405314516 | http://www.amazon.co.uk/Train-Stickers-Dover-Little-Activity/dp/0486403106'); + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('eac7efa5dbd3d667f26eb3d3ab504464','Hornby 2014 Catalogue','Hornby','£3.42','5 new','15',1,'4.9 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','https://www.appsmith.com/Hornby-R8150-Catalogue-2015/dp/B00S9SUUBE | https://www.appsmith.com/Hornby-Book-Model-Railways-Edition/dp/1844860957 | https://www.appsmith.com/Hornby-Book-Scenic-Railway-Modelling/dp/1844861120 | https://www.appsmith.com/Peco-60-Plans-Book/dp/B002QVL16I | https://www.appsmith.com/Hornby-Gloucester | https://www.appsmith.com/Airfix-5014429781902'); + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('b17540ef7e86e461d37f3ae58b7b72ac','FunkyBuys® Large Christmas Holiday Express Festive Train Set (SI-TY1017) Toy Light / Sounds / Battery Operated & Smoke','FunkyBuys','£16.99',NULL,'2',1,'4.5 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','https://www.appsmith.com/Christmas-Holiday-Express-Festive-Train-Set-Toy/dp/B009R8S8AA | https://www.appsmith.com/Goldlok-Holiday-Express-Operated-Multi-Colour/dp/B009R8PAO2 | https://www.appsmith.com/FunkyBuys%C2%AE-Christmas-SI-TY1017-Ornaments-Operated/dp/B01437QMHA | https://www.appsmith.com/Holiday-Express-Christmas-Ornament-Decoration | https://www.appsmith.com/Seasonal-Vision-Christmas-Tree-Train/dp/B0044ZC1W2 | https://www.appsmith.com/Coca-Cola-Santa-Express-Train-Set/dp/B004BYSNU0'); + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('348f344247b0c1a935b1223072ef9d8a','CLASSIC TOY TRAIN SET TRACK CARRIAGES LIGHT ENGINE BOXED BOYS KIDS BATTERY','ccf','£9.99','2 new','17',2,'3.9 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','https://www.appsmith.com/Classic-Train-Lights-Battery-Operated/dp/B0041L9OHE | https://www.appsmith.com/Train-With-Tracks-Battery-Operated-x/dp/B009P540O8 | https://www.appsmith.com/13-Piece-Train-Set-Ideal/dp/B0173N6E4W | https://www.appsmith.com/Train-Flash-Electric-Sound-Europe/dp/B008D7CEH4 | https://www.appsmith.com/Train-Ultimate-Sticker-Book-Stickers/dp/1405314516 | https://www.appsmith.com/Train-Stickers-Dover-Little-Activity/dp/0486403106'); INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('e12b92dbb8eaee78b22965d2a9bbbd9f','HORNBY Coach R4410A BR Hawksworth Corridor 3rd','Hornby','£39.99',NULL,'1',2,'5.0 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains',NULL); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('e33a9adeed5f36840ccc227db4682a36','Hornby 00 Gauge 0-4-0 Gildenlow Salt Co. Steam Locomotive Model','Hornby','£32.19',NULL,'3',2,'4.7 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','http://www.amazon.co.uk/Hornby-R6367-RailRoad-Gauge-Rolling/dp/B000WDWSD2 | http://www.amazon.co.uk/Hornby-R3064-RailRoad-Smokey-Locomotive | http://www.amazon.co.uk/Hornby-R8222-Gauge-Track-Extension/dp/B000RK3FZK | http://www.amazon.co.uk/Hornby-R6371-RailRoad-Petrol-Tanker/dp/B000WDS002 | http://www.amazon.co.uk/Hornby-R076-00-Gauge-Footbridge | http://www.amazon.co.uk/Hornby-R6368-RailRoad-Gauge-Brake/dp/B000WDWT22'); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('cb34f0a84102c1ebc3ef6892d7444d36','20pcs Model Garden Light Double Heads Lamppost Scale 1:100','Generic','£6.99',NULL,'2',1,'5.0 out of 5 stars','Hobbies > Model Trains & Railway Sets > Lighting & Signal Engineering > Lamps & Lighting','http://www.amazon.co.uk/Single-Head-Garden-Lights-Lamppost-Layout/dp/B008XCSHCA | http://www.amazon.co.uk/douself-100Pcs-OO-Scale-Passenger/dp/B00GRUD8W4 | http://www.amazon.co.uk/Hornby-Digital-Electric-Point-Track/dp/B00105UJ14 | http://www.amazon.co.uk/20Pcs-Scenery-Landscape-Train-Flowers/dp/B00C1843MA | http://www.amazon.co.uk/Scenery-Landscape-100-Made-Plastic-Cement/dp/B007UYIJ48'); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('f74b562470571dfb689324adf236f82c','Hornby 00 Gauge 230mm BR Bogie Passenger Brake Coach Model (Red)','Hornby','£24.99',NULL,'2',1,'4.5 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','http://www.amazon.co.uk/Hornby-R4388-RailRoad-Composite-Gauge/dp/B00260GEXO | http://www.amazon.co.uk/Hornby-R1138-Passenger-Freight-Electric/dp/B006ZL6976'); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('87bbb472ef9d90dcef140a551665c929','Hornby Santa''s Express Train Set','Hornby','£69.93','3 new','36',7,'4.3 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','http://www.amazon.co.uk/Hornby-R8221-Gauge-Track-Extension/dp/B000PVFYZ0 | http://www.amazon.co.uk/Hornby-R8222-Gauge-Track-Extension/dp/B000RK3FZK | http://www.amazon.co.uk/Hornby-R6368-RailRoad-Gauge-Brake/dp/B000WDWT22 | http://www.amazon.co.uk/Hornby-R6370-RailRoad-Tredegar-Gauge/dp/B000WDZH58 | http://www.amazon.co.uk/Hornby-R044-Passing-Contact-Switch/dp/B000H5V0RK | http://www.amazon.co.uk/Hornby-Gauge-Logan-Plank-Wagon/dp/B00SWV6RAG'); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('7e2aa2b4596a39ba852449718413d7cc','Hornby Gauge Western Express Digital Train Set with eLink and TTS Loco Train Set','Hornby','£235.58','4 new','1',1,'5.0 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','http://www.amazon.co.uk/Hornby-Western-Master-E-Link-Electric/dp/B00BUKPXS8 | http://www.amazon.co.uk/Hornby-Gloucester | http://www.amazon.co.uk/Hornby-Majestic-E-Link-Gauge-Electric/dp/B00BUKPXU6 | http://www.amazon.co.uk/Hornby-Gauge-Master-Glens/dp/B00TQNJIIW | http://www.amazon.co.uk/Hornby-Gauge-Eurostar-2014-Train/dp/B00TQNJIIC | http://www.amazon.co.uk/HORNBY-Digital-Train-Layout-Track/dp/B006BRH55Y'); - INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('5afbaf65680c9f378af5b3a3ae22427e','Learning Curve Chuggington Interactive Chatsworth','Chuggington',NULL,'1 new','8',1,'4.8 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','http://www.amazon.co.uk/Learning-Curve-Chuggington | http://www.amazon.co.uk/Chuggington | http://www.amazon.co.uk/Learning-Curve-Chuggington | http://www.amazon.co.uk/Learning-Chuggington');`; + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('e33a9adeed5f36840ccc227db4682a36','Hornby 00 Gauge 0-4-0 Gildenlow Salt Co. Steam Locomotive Model','Hornby','£32.19',NULL,'3',2,'4.7 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','https://www.appsmith.com/Hornby-R6367-RailRoad-Gauge-Rolling/dp/B000WDWSD2 | https://www.appsmith.com/Hornby-R3064-RailRoad-Smokey-Locomotive | https://www.appsmith.com/Hornby-R8222-Gauge-Track-Extension/dp/B000RK3FZK | https://www.appsmith.com/Hornby-R6371-RailRoad-Petrol-Tanker/dp/B000WDS002 | https://www.appsmith.com/Hornby-R076-00-Gauge-Footbridge | https://www.appsmith.com/Hornby-R6368-RailRoad-Gauge-Brake/dp/B000WDWT22'); + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('cb34f0a84102c1ebc3ef6892d7444d36','20pcs Model Garden Light Double Heads Lamppost Scale 1:100','Generic','£6.99',NULL,'2',1,'5.0 out of 5 stars','Hobbies > Model Trains & Railway Sets > Lighting & Signal Engineering > Lamps & Lighting','https://www.appsmith.com/Single-Head-Garden-Lights-Lamppost-Layout/dp/B008XCSHCA | https://www.appsmith.com/douself-100Pcs-OO-Scale-Passenger/dp/B00GRUD8W4 | https://www.appsmith.com/Hornby-Digital-Electric-Point-Track/dp/B00105UJ14 | https://www.appsmith.com/20Pcs-Scenery-Landscape-Train-Flowers/dp/B00C1843MA | https://www.appsmith.com/Scenery-Landscape-100-Made-Plastic-Cement/dp/B007UYIJ48'); + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('f74b562470571dfb689324adf236f82c','Hornby 00 Gauge 230mm BR Bogie Passenger Brake Coach Model (Red)','Hornby','£24.99',NULL,'2',1,'4.5 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','https://www.appsmith.com/Hornby-R4388-RailRoad-Composite-Gauge/dp/B00260GEXO | https://www.appsmith.com/Hornby-R1138-Passenger-Freight-Electric/dp/B006ZL6976'); + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('87bbb472ef9d90dcef140a551665c929','Hornby Santa''s Express Train Set','Hornby','£69.93','3 new','36',7,'4.3 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','https://www.appsmith.com/Hornby-R8221-Gauge-Track-Extension/dp/B000PVFYZ0 | https://www.appsmith.com/Hornby-R8222-Gauge-Track-Extension/dp/B000RK3FZK | https://www.appsmith.com/Hornby-R6368-RailRoad-Gauge-Brake/dp/B000WDWT22 | https://www.appsmith.com/Hornby-R6370-RailRoad-Tredegar-Gauge/dp/B000WDZH58 | https://www.appsmith.com/Hornby-R044-Passing-Contact-Switch/dp/B000H5V0RK | https://www.appsmith.com/Hornby-Gauge-Logan-Plank-Wagon/dp/B00SWV6RAG'); + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('7e2aa2b4596a39ba852449718413d7cc','Hornby Gauge Western Express Digital Train Set with eLink and TTS Loco Train Set','Hornby','£235.58','4 new','1',1,'5.0 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','https://www.appsmith.com/Hornby-Western-Master-E-Link-Electric/dp/B00BUKPXS8 | https://www.appsmith.com/Hornby-Gloucester | https://www.appsmith.com/Hornby-Majestic-E-Link-Gauge-Electric/dp/B00BUKPXU6 | https://www.appsmith.com/Hornby-Gauge-Master-Glens/dp/B00TQNJIIW | https://www.appsmith.com/Hornby-Gauge-Eurostar-2014-Train/dp/B00TQNJIIC | https://www.appsmith.com/HORNBY-Digital-Train-Layout-Track/dp/B006BRH55Y'); + INSERT INTO amazon_sales(uniq_id,product_name,manufacturer,price,number_available_in_stock,number_of_reviews,number_of_answered_questions,average_review_rating,amazon_category_and_sub_category,customers_who_bought_this_item_also_bought) VALUES ('5afbaf65680c9f378af5b3a3ae22427e','Learning Curve Chuggington Interactive Chatsworth','Chuggington',NULL,'1 new','8',1,'4.8 out of 5 stars','Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains','https://www.appsmith.com/Learning-Curve-Chuggington | https://www.appsmith.com/Chuggington | https://www.appsmith.com/Learning-Curve-Chuggington | https://www.appsmith.com/Learning-Chuggington');`; dataSources.EnterQuery(query); dataSources.RunQuery(); diff --git a/app/client/cypress/fixtures/AllWidgetsDsl.json b/app/client/cypress/fixtures/AllWidgetsDsl.json index ecef2eab4f1..43801ddd683 100644 --- a/app/client/cypress/fixtures/AllWidgetsDsl.json +++ b/app/client/cypress/fixtures/AllWidgetsDsl.json @@ -583,7 +583,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "1d8czar35l", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -799,17 +799,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "displayName": "List", diff --git a/app/client/cypress/fixtures/Bugs/CheckboxGroupInListWidgetDsl.json b/app/client/cypress/fixtures/Bugs/CheckboxGroupInListWidgetDsl.json index 7f8906186b2..19233e17ca9 100644 --- a/app/client/cypress/fixtures/Bugs/CheckboxGroupInListWidgetDsl.json +++ b/app/client/cypress/fixtures/Bugs/CheckboxGroupInListWidgetDsl.json @@ -24,7 +24,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1.0, "enableRotation": false, @@ -279,17 +279,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -428,7 +428,7 @@ } ], "leftColumn": 0.0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "n1szm8g77z", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/ContainerWithOtherWidgetsDsl.json b/app/client/cypress/fixtures/ContainerWithOtherWidgetsDsl.json index 52cf3c13be4..18c6d2b0e7b 100644 --- a/app/client/cypress/fixtures/ContainerWithOtherWidgetsDsl.json +++ b/app/client/cypress/fixtures/ContainerWithOtherWidgetsDsl.json @@ -217,7 +217,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "5o3alick0b", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -476,17 +476,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "displayName": "List", diff --git a/app/client/cypress/fixtures/ContextSwitching.json b/app/client/cypress/fixtures/ContextSwitching.json index 2a78e803b5e..c721e34c2b4 100644 --- a/app/client/cypress/fixtures/ContextSwitching.json +++ b/app/client/cypress/fixtures/ContextSwitching.json @@ -214,7 +214,7 @@ "key": "borderRadius" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "r8ob443ol9", "image": "", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Datatypes/BinaryDTdsl.json b/app/client/cypress/fixtures/Datatypes/BinaryDTdsl.json index 5d70884c16f..5a52c47b8f4 100644 --- a/app/client/cypress/fixtures/Datatypes/BinaryDTdsl.json +++ b/app/client/cypress/fixtures/Datatypes/BinaryDTdsl.json @@ -460,7 +460,7 @@ "key": "image" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "pf0s33wwbz", "image": "{{Updateimage.files[0].data}}", "isDeprecated": false, @@ -1267,7 +1267,7 @@ "key": "image" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "pf0s33wwbz", "image": "{{Insertimage.files[0].data}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/DynamicHeightListTextDsl.json b/app/client/cypress/fixtures/DynamicHeightListTextDsl.json index d87b901a309..941ae61fca4 100644 --- a/app/client/cypress/fixtures/DynamicHeightListTextDsl.json +++ b/app/client/cypress/fixtures/DynamicHeightListTextDsl.json @@ -29,7 +29,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, @@ -182,17 +182,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "widgetName": "List1", @@ -238,7 +238,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/EmptyListWidget.json b/app/client/cypress/fixtures/EmptyListWidget.json index b60cf3fd24f..24899de8313 100644 --- a/app/client/cypress/fixtures/EmptyListWidget.json +++ b/app/client/cypress/fixtures/EmptyListWidget.json @@ -36,17 +36,17 @@ { "id":"001", "name":"Blue", - "img":"https://assets.appsmith.com/widgets/default.png" + "img":"http://host.docker.internal:4200/clouddefaultImage.png" }, { "id":"002", "name":"Green", - "img":"https://assets.appsmith.com/widgets/default.png" + "img":"http://host.docker.internal:4200/clouddefaultImage.png" }, { "id":"003", "name":"Red", - "img":"https://assets.appsmith.com/widgets/default.png" + "img":"http://host.docker.internal:4200/clouddefaultImage.png" } ], "widgetName":"List1", diff --git a/app/client/cypress/fixtures/ImageHugWidgetDsl.json b/app/client/cypress/fixtures/ImageHugWidgetDsl.json index 84d58e0c5bf..c97594b135d 100644 --- a/app/client/cypress/fixtures/ImageHugWidgetDsl.json +++ b/app/client/cypress/fixtures/ImageHugWidgetDsl.json @@ -22,7 +22,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/InputWidgetV2InsideListDSL.json b/app/client/cypress/fixtures/InputWidgetV2InsideListDSL.json index 2fe537602bf..3e1298022ba 100644 --- a/app/client/cypress/fixtures/InputWidgetV2InsideListDSL.json +++ b/app/client/cypress/fixtures/InputWidgetV2InsideListDSL.json @@ -91,17 +91,17 @@ { "id":"001", "name":"Blue", - "img":"https://assets.appsmith.com/widgets/default.png" + "img":"http://host.docker.internal:4200/clouddefaultImage.png" }, { "id":"002", "name":"Green", - "img":"https://assets.appsmith.com/widgets/default.png" + "img":"http://host.docker.internal:4200/clouddefaultImage.png" }, { "id":"003", "name":"Red", - "img":"https://assets.appsmith.com/widgets/default.png" + "img":"http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas":true, diff --git a/app/client/cypress/fixtures/JSApiOnLoadDsl.json b/app/client/cypress/fixtures/JSApiOnLoadDsl.json index c8f3e897cd8..7de5341d237 100644 --- a/app/client/cypress/fixtures/JSApiOnLoadDsl.json +++ b/app/client/cypress/fixtures/JSApiOnLoadDsl.json @@ -134,7 +134,7 @@ "key": "borderRadius" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "n08zeysxti", "image": "data:image/jpeg;base64,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", "rightColumn": 36, diff --git a/app/client/cypress/fixtures/JSObjOnLoadApp.json b/app/client/cypress/fixtures/JSObjOnLoadApp.json index 3266ee78d1a..b4c7de01bbe 100644 --- a/app/client/cypress/fixtures/JSObjOnLoadApp.json +++ b/app/client/cypress/fixtures/JSObjOnLoadApp.json @@ -2791,7 +2791,7 @@ "key": "borderRadius" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "lp46gw08hk", "image": "data:image/jpeg;base64,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", "rightColumn": 25, @@ -5586,7 +5586,7 @@ "key": "borderRadius" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "lp46gw08hk", "image": "data:image/jpeg;base64,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", "rightColumn": 25, diff --git a/app/client/cypress/fixtures/ListWidgetWithDataAndButtonDSL.json b/app/client/cypress/fixtures/ListWidgetWithDataAndButtonDSL.json index 95c1afc7dc1..b6f1027cf80 100644 --- a/app/client/cypress/fixtures/ListWidgetWithDataAndButtonDSL.json +++ b/app/client/cypress/fixtures/ListWidgetWithDataAndButtonDSL.json @@ -169,7 +169,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "y8iriyc5nu", "image": "{{List1.listData.map((currentItem) => currentItem.img)}}", "isDeprecated": false, @@ -407,7 +407,7 @@ }, "boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}", "widgetName": "List1", - "listData": "[\n {\n \"step\": \"#1\",\n \"task\": \"https://www.appsmith.com\",\n \"status\": \"✅\",\n \"action\": \"'\"\n },\n {\n \"step\": \"#2\",\n \"task\": \"https://www.google.com\",\n \"status\": \"--\",\n \"action\": \"\"\n },\n {\n \"step\": \"#3\",\n \"task\": \"https://www.mozilla.org/\",\n \"status\": \"--\",\n \"action\": \"\"\n }\n]", + "listData": "[\n {\n \"step\": \"#1\",\n \"task\": \"https://www.appsmith.com\",\n \"status\": \"✅\",\n \"action\": \"'\"\n },\n {\n \"step\": \"#2\",\n \"task\": \"https://www.appsmith.com\",\n \"status\": \"--\",\n \"action\": \"\"\n },\n {\n \"step\": \"#3\",\n \"task\": \"https://www.mozilla.org/\",\n \"status\": \"--\",\n \"action\": \"\"\n }\n]", "isCanvas": true, "displayName": "List", "iconSVG": "/static/media/icon.9925ee17dee37bf1ba7374412563a8a7.svg", @@ -552,7 +552,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "y8iriyc5nu", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/ListV2WithNullPrimaryKey.json b/app/client/cypress/fixtures/Listv2/ListV2WithNullPrimaryKey.json index 93f2da2c7f4..40c270391e8 100644 --- a/app/client/cypress/fixtures/Listv2/ListV2WithNullPrimaryKey.json +++ b/app/client/cypress/fixtures/Listv2/ListV2WithNullPrimaryKey.json @@ -169,7 +169,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "yw653gsmbv", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -367,17 +367,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -519,7 +519,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "w95o2stmmq", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/ListV2_Reset_dsl.json b/app/client/cypress/fixtures/Listv2/ListV2_Reset_dsl.json index d3239445745..d4f957d2582 100644 --- a/app/client/cypress/fixtures/Listv2/ListV2_Reset_dsl.json +++ b/app/client/cypress/fixtures/Listv2/ListV2_Reset_dsl.json @@ -257,32 +257,32 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "004", "name": "Yellow", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "005", "name": "Orange", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "006", "name": "Indigo", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -414,7 +414,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "4c4lsxnbxl", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/ListV2_nested_sibling_listwidget_dsl.json b/app/client/cypress/fixtures/Listv2/ListV2_nested_sibling_listwidget_dsl.json index 0685cc53e99..a8fe8e92307 100644 --- a/app/client/cypress/fixtures/Listv2/ListV2_nested_sibling_listwidget_dsl.json +++ b/app/client/cypress/fixtures/Listv2/ListV2_nested_sibling_listwidget_dsl.json @@ -30,17 +30,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -165,7 +165,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "819owyun3i", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -298,17 +298,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -432,7 +432,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "819owyun3i", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -653,17 +653,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -787,7 +787,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "9lswt6ei9p", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/ListWithInputForSelectedAndTriggerRow.json b/app/client/cypress/fixtures/Listv2/ListWithInputForSelectedAndTriggerRow.json index 71d690fb408..dcd2eeaef26 100644 --- a/app/client/cypress/fixtures/Listv2/ListWithInputForSelectedAndTriggerRow.json +++ b/app/client/cypress/fixtures/Listv2/ListWithInputForSelectedAndTriggerRow.json @@ -76,32 +76,32 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "004", "name": "Yellow", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "005", "name": "Orange", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "006", "name": "Indigo", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -250,7 +250,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "h2b802pelw", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/ListWithModalStatCheckboxAndRadio.json b/app/client/cypress/fixtures/Listv2/ListWithModalStatCheckboxAndRadio.json index d65aa35bc7f..177dc8395eb 100644 --- a/app/client/cypress/fixtures/Listv2/ListWithModalStatCheckboxAndRadio.json +++ b/app/client/cypress/fixtures/Listv2/ListWithModalStatCheckboxAndRadio.json @@ -29,17 +29,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, diff --git a/app/client/cypress/fixtures/Listv2/Listv2JSObjects.json b/app/client/cypress/fixtures/Listv2/Listv2JSObjects.json index bb01cb8df1a..f962cb47ebc 100644 --- a/app/client/cypress/fixtures/Listv2/Listv2JSObjects.json +++ b/app/client/cypress/fixtures/Listv2/Listv2JSObjects.json @@ -207,7 +207,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "nw33u3efde", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/emptyList.json b/app/client/cypress/fixtures/Listv2/emptyList.json index 6d3bc884f13..d9ecdaa4fc4 100644 --- a/app/client/cypress/fixtures/Listv2/emptyList.json +++ b/app/client/cypress/fixtures/Listv2/emptyList.json @@ -30,17 +30,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, diff --git a/app/client/cypress/fixtures/Listv2/level3NestedList.json b/app/client/cypress/fixtures/Listv2/level3NestedList.json index e6fe7e3c3be..2a4fef2589f 100644 --- a/app/client/cypress/fixtures/Listv2/level3NestedList.json +++ b/app/client/cypress/fixtures/Listv2/level3NestedList.json @@ -260,17 +260,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -507,17 +507,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, diff --git a/app/client/cypress/fixtures/Listv2/listWithServerSideData.json b/app/client/cypress/fixtures/Listv2/listWithServerSideData.json index 3a70889f8ef..7a7396fae63 100644 --- a/app/client/cypress/fixtures/Listv2/listWithServerSideData.json +++ b/app/client/cypress/fixtures/Listv2/listWithServerSideData.json @@ -104,7 +104,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/Listv2/nestedList.json b/app/client/cypress/fixtures/Listv2/nestedList.json index 16661f19f37..a40d1c0e991 100644 --- a/app/client/cypress/fixtures/Listv2/nestedList.json +++ b/app/client/cypress/fixtures/Listv2/nestedList.json @@ -27,17 +27,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -173,7 +173,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "bvt9um0p1b", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -516,17 +516,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -657,7 +657,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "t5kmrwsh0s", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/simpleList.json b/app/client/cypress/fixtures/Listv2/simpleList.json index 7fabb0d5f27..e4b10252a52 100644 --- a/app/client/cypress/fixtures/Listv2/simpleList.json +++ b/app/client/cypress/fixtures/Listv2/simpleList.json @@ -27,17 +27,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -166,7 +166,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "bvt9um0p1b", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/simpleListWithCurrencyWidget.json b/app/client/cypress/fixtures/Listv2/simpleListWithCurrencyWidget.json index cd4c1c7ec0b..8afffe4b31d 100644 --- a/app/client/cypress/fixtures/Listv2/simpleListWithCurrencyWidget.json +++ b/app/client/cypress/fixtures/Listv2/simpleListWithCurrencyWidget.json @@ -24,7 +24,7 @@ "triggeredItemView": "{{{}}}", "widgetName": "List1", "requiresFlatWidgetChildren": true, - "listData": "[\n {\n \"id\": \"000\",\n \"name\": \"Yellow\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"001\",\n \"name\": \"Blue\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"002\",\n \"name\": \"Green\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"003\",\n \"name\": \"Red\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"004\",\n \"name\": \"Black\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"005\",\n \"name\": \"Yellow\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"006\",\n \"name\": \"Indigo\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n }\n ]", + "listData": "[\n {\n \"id\": \"000\",\n \"name\": \"Yellow\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"001\",\n \"name\": \"Blue\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"002\",\n \"name\": \"Green\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"003\",\n \"name\": \"Red\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"004\",\n \"name\": \"Black\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"005\",\n \"name\": \"Yellow\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"006\",\n \"name\": \"Indigo\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n }\n ]", "isCanvas": true, "displayName": "List V2", "iconSVG": "/static/media/icon.9925ee17dee37bf1ba7374412563a8a7.svg", @@ -149,7 +149,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "haq56bwf64", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/simpleListWithInputAndButton.json b/app/client/cypress/fixtures/Listv2/simpleListWithInputAndButton.json index 9baa2c7f5fc..b709118c77d 100644 --- a/app/client/cypress/fixtures/Listv2/simpleListWithInputAndButton.json +++ b/app/client/cypress/fixtures/Listv2/simpleListWithInputAndButton.json @@ -28,37 +28,37 @@ { "id": "000", "name": "Yellow", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "004", "name": "Black", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "005", "name": "Yellow", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "006", "name": "Indigo", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -189,7 +189,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "htltz07tuq", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/simpleListWithLargeData.json b/app/client/cypress/fixtures/Listv2/simpleListWithLargeData.json index 8d625e83e84..3a24ec2e491 100644 --- a/app/client/cypress/fixtures/Listv2/simpleListWithLargeData.json +++ b/app/client/cypress/fixtures/Listv2/simpleListWithLargeData.json @@ -165,7 +165,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "e4nnev99kg", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Listv2/simpleListWithTabsWidget.json b/app/client/cypress/fixtures/Listv2/simpleListWithTabsWidget.json index d5c2fc12456..2e8f89f70dc 100644 --- a/app/client/cypress/fixtures/Listv2/simpleListWithTabsWidget.json +++ b/app/client/cypress/fixtures/Listv2/simpleListWithTabsWidget.json @@ -29,17 +29,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "isCanvas": true, @@ -177,7 +177,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "a9xde6ouir", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/ResizeListDsl.json b/app/client/cypress/fixtures/ResizeListDsl.json index 482727f227c..9d000c309be 100644 --- a/app/client/cypress/fixtures/ResizeListDsl.json +++ b/app/client/cypress/fixtures/ResizeListDsl.json @@ -70,7 +70,7 @@ "triggeredItemView": "{{{}}}", "widgetName": "List1", "requiresFlatWidgetChildren": true, - "listData": "[\n {\n \"id\": \"001\",\n \"name\": \"Blue\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"002\",\n \"name\": \"Green\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"003\",\n \"name\": \"Red\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n\t{\n \"id\": \"001\",\n \"name\": \"Blue\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"002\",\n \"name\": \"Green\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"003\",\n \"name\": \"Red\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n\t{\n \"id\": \"001\",\n \"name\": \"Blue\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"002\",\n \"name\": \"Green\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n },\n {\n \"id\": \"003\",\n \"name\": \"Red\",\n \"img\": \"https://assets.appsmith.com/widgets/default.png\"\n }\n]", + "listData": "[\n {\n \"id\": \"001\",\n \"name\": \"Blue\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"002\",\n \"name\": \"Green\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"003\",\n \"name\": \"Red\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n\t{\n \"id\": \"001\",\n \"name\": \"Blue\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"002\",\n \"name\": \"Green\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"003\",\n \"name\": \"Red\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n\t{\n \"id\": \"001\",\n \"name\": \"Blue\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"002\",\n \"name\": \"Green\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n },\n {\n \"id\": \"003\",\n \"name\": \"Red\",\n \"img\": \"http://host.docker.internal:4200/clouddefaultImage.png\"\n }\n]", "isCanvas": true, "displayName": "List", "iconSVG": "/static/media/icon.9925ee17dee37bf1ba7374412563a8a7.svg", @@ -193,7 +193,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "8pdxjzto4a", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/SampleAppIDETest.json b/app/client/cypress/fixtures/SampleAppIDETest.json index 512677c5371..caa3b9320a6 100644 --- a/app/client/cypress/fixtures/SampleAppIDETest.json +++ b/app/client/cypress/fixtures/SampleAppIDETest.json @@ -1392,7 +1392,7 @@ "key": "image" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "0pndua8j2k", "image": "{{tbl_userInfo.selectedRow.image}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/Table/ImageResizeDSL.json b/app/client/cypress/fixtures/Table/ImageResizeDSL.json index 1b59ef3d76b..b047c10d9c6 100644 --- a/app/client/cypress/fixtures/Table/ImageResizeDSL.json +++ b/app/client/cypress/fixtures/Table/ImageResizeDSL.json @@ -306,7 +306,7 @@ "rightColumn": 64, "textSize": "0.875rem", "widgetId": "gu00tyfnjm", - "tableData": "[\n{\n \"albumId\": 1,\n \"id\": 1,\n \"title\": \"accusamus beatae ad facilis cum similique qui sunt\",\n \"url\": \"https://via.placeholder.com/600/92c952\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/92c952\",\n \"image\": \"https://picsum.photos/200/300\"\n },\n {\n \"albumId\": 1,\n \"id\": 2,\n \"title\": \"reprehenderit est deserunt velit ipsam\",\n \"url\": \"https://via.placeholder.com/600/771796\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/771796\",\n \"image\": \"https://picsum.photos/300/300\"\n },\n {\n \"albumId\": 1,\n \"id\": 3,\n \"title\": \"officia porro iure quia iusto qui ipsa ut modi\",\n \"url\": \"https://via.placeholder.com/600/24f355\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/24f355\",\n \"image\": \"https://picsum.photos/400/300\"\n },\n {\n \"albumId\": 1,\n \"id\": 4,\n \"title\": \"culpa odio esse rerum omnis laboriosam voluptate repudiandae\",\n \"url\": \"https://via.placeholder.com/600/d32776\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/d32776\",\n \"image\": \"https://picsum.photos/500/300\"\n },\n {\n \"albumId\": 1,\n \"id\": 5,\n \"title\": \"natus nisi omnis corporis facere molestiae rerum in\",\n \"url\": \"https://via.placeholder.com/600/f66b97\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/f66b97\",\n \"image\": \"https://picsum.photos/100/300\"\n }\n]", + "tableData": "[\n{\n \"albumId\": 1,\n \"id\": 1,\n \"title\": \"accusamus beatae ad facilis cum similique qui sunt\",\n \"url\": \"https://via.placeholder.com/600/92c952\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/92c952\",\n \"image\": \"http://host.docker.internal:4200/453-200x300.jpg\"\n },\n {\n \"albumId\": 1,\n \"id\": 2,\n \"title\": \"reprehenderit est deserunt velit ipsam\",\n \"url\": \"https://via.placeholder.com/600/771796\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/771796\",\n \"image\": \"http://host.docker.internal:4200/453-200x300.jpg\"\n },\n {\n \"albumId\": 1,\n \"id\": 3,\n \"title\": \"officia porro iure quia iusto qui ipsa ut modi\",\n \"url\": \"https://via.placeholder.com/600/24f355\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/24f355\",\n \"image\": \"http://host.docker.internal:4200/453-200x300.jpg\"\n },\n {\n \"albumId\": 1,\n \"id\": 4,\n \"title\": \"culpa odio esse rerum omnis laboriosam voluptate repudiandae\",\n \"url\": \"https://via.placeholder.com/600/d32776\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/d32776\",\n \"image\": \"http://host.docker.internal:4200/453-200x300.jpg\"\n },\n {\n \"albumId\": 1,\n \"id\": 5,\n \"title\": \"natus nisi omnis corporis facere molestiae rerum in\",\n \"url\": \"https://via.placeholder.com/600/f66b97\",\n \"thumbnailUrl\": \"https://via.placeholder.com/150/f66b97\",\n \"image\": \"http://host.docker.internal:4200/453-200x300.jpg\"\n }\n]", "label": "Data", "searchKey": "", "parentId": "0", diff --git a/app/client/cypress/fixtures/ThemeAppdsl.json b/app/client/cypress/fixtures/ThemeAppdsl.json index 7131871a00c..3e665a60c71 100644 --- a/app/client/cypress/fixtures/ThemeAppdsl.json +++ b/app/client/cypress/fixtures/ThemeAppdsl.json @@ -519,7 +519,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, @@ -643,17 +643,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "widgetName": "List1", @@ -697,7 +697,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/apiParallelDsl.json b/app/client/cypress/fixtures/apiParallelDsl.json index e9c4a4bb338..c943e736f1e 100644 --- a/app/client/cypress/fixtures/apiParallelDsl.json +++ b/app/client/cypress/fixtures/apiParallelDsl.json @@ -40,7 +40,7 @@ "key": "image" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "k7gqsx8va7", "image": "{{List1.listData.map((currentItem) => currentItem.image)}}", "rightColumn": 13, @@ -413,7 +413,7 @@ "key": "image" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "k7gqsx8va7", "image": "{{currentItem.image}}", "rightColumn": 13, @@ -695,7 +695,7 @@ "key": "image" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "k7gqsx8va7", "image": "{{FlowerImage1.data}}", "rightColumn": 24, @@ -729,7 +729,7 @@ "key": "image" } ], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "k7gqsx8va7", "image": "{{FlowerImage2.data}}", "rightColumn": 37, diff --git a/app/client/cypress/fixtures/base64imagedsl.json b/app/client/cypress/fixtures/base64imagedsl.json index 498a7a8feba..0b01706b27a 100644 --- a/app/client/cypress/fixtures/base64imagedsl.json +++ b/app/client/cypress/fixtures/base64imagedsl.json @@ -22,7 +22,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "image": "", diff --git a/app/client/cypress/fixtures/displayWidgetDsl.json b/app/client/cypress/fixtures/displayWidgetDsl.json index 30d601c14d2..9d1360e720e 100644 --- a/app/client/cypress/fixtures/displayWidgetDsl.json +++ b/app/client/cypress/fixtures/displayWidgetDsl.json @@ -53,7 +53,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "image": "", "widgetName": "Image1", diff --git a/app/client/cypress/fixtures/dynamicHeightListDsl.json b/app/client/cypress/fixtures/dynamicHeightListDsl.json index b5803190eca..76eb5511579 100644 --- a/app/client/cypress/fixtures/dynamicHeightListDsl.json +++ b/app/client/cypress/fixtures/dynamicHeightListDsl.json @@ -29,7 +29,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, @@ -182,17 +182,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "widgetName": "List1", @@ -238,7 +238,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/exported-app.json b/app/client/cypress/fixtures/exported-app.json index f1fd770f949..d86c14559b7 100644 --- a/app/client/cypress/fixtures/exported-app.json +++ b/app/client/cypress/fixtures/exported-app.json @@ -98,7 +98,7 @@ "parentColumnSpace": 34.6875, "imageShape": "RECTANGLE", "leftColumn": 6, - "defaultImage": "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png" + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png" } ] } diff --git a/app/client/cypress/fixtures/listRegression2Dsl.json b/app/client/cypress/fixtures/listRegression2Dsl.json index 9b43ded25d0..b4fe6d7fae1 100644 --- a/app/client/cypress/fixtures/listRegression2Dsl.json +++ b/app/client/cypress/fixtures/listRegression2Dsl.json @@ -28,7 +28,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, @@ -267,7 +267,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/listRegression3Dsl.json b/app/client/cypress/fixtures/listRegression3Dsl.json index 1a9993812b2..ce39097b674 100644 --- a/app/client/cypress/fixtures/listRegression3Dsl.json +++ b/app/client/cypress/fixtures/listRegression3Dsl.json @@ -29,7 +29,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, @@ -268,7 +268,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/listRegressionDsl.json b/app/client/cypress/fixtures/listRegressionDsl.json index eaa50d68c9f..93a2bc696de 100644 --- a/app/client/cypress/fixtures/listRegressionDsl.json +++ b/app/client/cypress/fixtures/listRegressionDsl.json @@ -28,7 +28,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, @@ -267,7 +267,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/listV2AudioVideoDsl.json b/app/client/cypress/fixtures/listV2AudioVideoDsl.json index 76b5182b98c..b1b2885424e 100644 --- a/app/client/cypress/fixtures/listV2AudioVideoDsl.json +++ b/app/client/cypress/fixtures/listV2AudioVideoDsl.json @@ -145,7 +145,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "25ukodbr6c", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -533,17 +533,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "displayName": "List", diff --git a/app/client/cypress/fixtures/listV2ButtonsDsl.json b/app/client/cypress/fixtures/listV2ButtonsDsl.json index 08fde581096..ea2ff345cb1 100644 --- a/app/client/cypress/fixtures/listV2ButtonsDsl.json +++ b/app/client/cypress/fixtures/listV2ButtonsDsl.json @@ -145,7 +145,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "25ukodbr6c", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -637,17 +637,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "displayName": "List", diff --git a/app/client/cypress/fixtures/listV2NestedDsl.json b/app/client/cypress/fixtures/listV2NestedDsl.json index d2f772e7c95..a5c63e6c741 100644 --- a/app/client/cypress/fixtures/listV2NestedDsl.json +++ b/app/client/cypress/fixtures/listV2NestedDsl.json @@ -145,7 +145,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "crx5qmd37r", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -428,7 +428,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "crx5qmd37r", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -711,7 +711,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "crx5qmd37r", "image": "{{currentItem.img}}", "isDeprecated": false, @@ -963,17 +963,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "displayName": "List", @@ -1094,17 +1094,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "displayName": "List", @@ -1224,17 +1224,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "displayName": "List", diff --git a/app/client/cypress/fixtures/listWidgetLintDsl.json b/app/client/cypress/fixtures/listWidgetLintDsl.json index 20005ec4a1d..5562310edc5 100644 --- a/app/client/cypress/fixtures/listWidgetLintDsl.json +++ b/app/client/cypress/fixtures/listWidgetLintDsl.json @@ -27,7 +27,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, @@ -161,7 +161,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/listv2PaginationDsl.json b/app/client/cypress/fixtures/listv2PaginationDsl.json index 2facbd179e2..d98e97bb5e9 100644 --- a/app/client/cypress/fixtures/listv2PaginationDsl.json +++ b/app/client/cypress/fixtures/listv2PaginationDsl.json @@ -201,7 +201,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "5khw0s488h", "image": "{{currentItem.img}}", "isDeprecated": false, diff --git a/app/client/cypress/fixtures/listwidgetdsl.json b/app/client/cypress/fixtures/listwidgetdsl.json index f34952103fc..642b0eaa376 100644 --- a/app/client/cypress/fixtures/listwidgetdsl.json +++ b/app/client/cypress/fixtures/listwidgetdsl.json @@ -56,7 +56,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "image": "{{currentItem.img}}", @@ -193,7 +193,7 @@ "template": { "Image1": { "isVisible": true, - "defaultImage": "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "image": "{{List1.listData.map((currentItem) => currentItem.img)}}", diff --git a/app/client/cypress/fixtures/mobileViewScrollDsl.json b/app/client/cypress/fixtures/mobileViewScrollDsl.json index 57d420fa320..a422600b79d 100644 --- a/app/client/cypress/fixtures/mobileViewScrollDsl.json +++ b/app/client/cypress/fixtures/mobileViewScrollDsl.json @@ -65,17 +65,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "pageSize": 2, @@ -158,7 +158,7 @@ "children": [ { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, diff --git a/app/client/cypress/fixtures/onPageLoadActionsDsl.json b/app/client/cypress/fixtures/onPageLoadActionsDsl.json index 8d3c4b68ddd..fce6d97f48a 100644 --- a/app/client/cypress/fixtures/onPageLoadActionsDsl.json +++ b/app/client/cypress/fixtures/onPageLoadActionsDsl.json @@ -34,7 +34,7 @@ "imageShape": "RECTANGLE", "leftColumn": 8, "dynamicBindingPathList": [], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "nyx7m0wdr7", "image": "", "rightColumn": 54, @@ -122,7 +122,7 @@ "imageShape": "RECTANGLE", "leftColumn": 8, "dynamicBindingPathList": [], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "agtoehwrk0", "image": "", "rightColumn": 27, diff --git a/app/client/cypress/fixtures/promisesBtnImgDsl.json b/app/client/cypress/fixtures/promisesBtnImgDsl.json index aadddae4d0e..9e53667b60b 100644 --- a/app/client/cypress/fixtures/promisesBtnImgDsl.json +++ b/app/client/cypress/fixtures/promisesBtnImgDsl.json @@ -45,7 +45,7 @@ "imageShape": "RECTANGLE", "leftColumn": 12, "dynamicBindingPathList": [], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "rmhpjhzzn1", "image": "", "rightColumn": 29, diff --git a/app/client/cypress/fixtures/promisesBtnListDsl.json b/app/client/cypress/fixtures/promisesBtnListDsl.json index e06f6d49778..f7657b9e6d6 100644 --- a/app/client/cypress/fixtures/promisesBtnListDsl.json +++ b/app/client/cypress/fixtures/promisesBtnListDsl.json @@ -60,7 +60,7 @@ "template": { "Image2": { "isVisible": true, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "imageShape": "RECTANGLE", "maxZoomLevel": 1, "enableRotation": false, @@ -259,7 +259,7 @@ } ], "leftColumn": 0, - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "egbqwm9hx0", "image": "{{currentItem.img}}", "rightColumn": 16, diff --git a/app/client/cypress/fixtures/resetWidgetDSL.json b/app/client/cypress/fixtures/resetWidgetDSL.json index af06a179c7e..8620ebbd6fd 100644 --- a/app/client/cypress/fixtures/resetWidgetDSL.json +++ b/app/client/cypress/fixtures/resetWidgetDSL.json @@ -480,17 +480,17 @@ { "id": "001", "name": "Blue", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "002", "name": "Green", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "id": "003", "name": "Red", - "img": "https://assets.appsmith.com/widgets/default.png" + "img": "http://host.docker.internal:4200/clouddefaultImage.png" } ], "displayName": "List", diff --git a/app/client/cypress/fixtures/tableResizedColumnsDsl.json b/app/client/cypress/fixtures/tableResizedColumnsDsl.json index 2ac1da30aee..282909f8e46 100644 --- a/app/client/cypress/fixtures/tableResizedColumnsDsl.json +++ b/app/client/cypress/fixtures/tableResizedColumnsDsl.json @@ -80,7 +80,7 @@ "imageShape": "RECTANGLE", "leftColumn": 0, "dynamicBindingPathList": [], - "defaultImage": "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png" + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "backgroundColor": "#FFFFFF", diff --git a/app/client/cypress/fixtures/tableV2ResizedColumnsDsl.json b/app/client/cypress/fixtures/tableV2ResizedColumnsDsl.json index 1be715bfabb..47028f88bb3 100644 --- a/app/client/cypress/fixtures/tableV2ResizedColumnsDsl.json +++ b/app/client/cypress/fixtures/tableV2ResizedColumnsDsl.json @@ -80,7 +80,7 @@ "imageShape": "RECTANGLE", "leftColumn": 0, "dynamicBindingPathList": [], - "defaultImage": "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png" + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "backgroundColor": "#FFFFFF", diff --git a/app/client/cypress/fixtures/templatePageWithNullbindings.json b/app/client/cypress/fixtures/templatePageWithNullbindings.json index 632e48de665..2ffe721a361 100644 --- a/app/client/cypress/fixtures/templatePageWithNullbindings.json +++ b/app/client/cypress/fixtures/templatePageWithNullbindings.json @@ -262,7 +262,7 @@ "imageShape": "RECTANGLE", "leftColumn": 42.0, "dynamicBindingPathList": [], - "defaultImage": "https://assets.appsmith.com/widgets/default.png", + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png", "key": "21idekou80", "labelTextSize": "0.875rem", "image": "https://i.ibb.co/bvSrMX7/Group-84601.png", diff --git a/app/client/cypress/fixtures/test-data-gsheet.ts b/app/client/cypress/fixtures/test-data-gsheet.ts index 05d45543c04..3a5c47d63cb 100644 --- a/app/client/cypress/fixtures/test-data-gsheet.ts +++ b/app/client/cypress/fixtures/test-data-gsheet.ts @@ -15,7 +15,7 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Hornby-R8150-Catalogue-2015/dp/B00S9SUUBE | http://www.amazon.co.uk/Hornby-Book-Model-Railways-Edition/dp/1844860957 | http://www.amazon.co.uk/Hornby-Book-Scenic-Railway-Modelling/dp/1844861120 | http://www.amazon.co.uk/Peco-60-Plans-Book/dp/B002QVL16I | http://www.amazon.co.uk/Hornby-Gloucester | http://www.amazon.co.uk/Airfix-5014429781902", + "https://www.appsmith.com/Hornby-R8150-Catalogue-2015/dp/B00S9SUUBE | https://www.appsmith.com/Hornby-Book-Model-Railways-Edition/dp/1844860957 | https://www.appsmith.com/Hornby-Book-Scenic-Railway-Modelling/dp/1844861120 | https://www.appsmith.com/Peco-60-Plans-Book/dp/B002QVL16I | https://www.appsmith.com/Hornby-Gloucester | https://www.appsmith.com/Airfix-5014429781902", }, { rowIndex: "1", @@ -35,7 +35,7 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Christmas-Holiday-Express-Festive-Train-Set-Toy/dp/B009R8S8AA | http://www.amazon.co.uk/Goldlok-Holiday-Express-Operated-Multi-Colour/dp/B009R8PAO2 | http://www.amazon.co.uk/FunkyBuys%C2%AE-Christmas-SI-TY1017-Ornaments-Operated/dp/B01437QMHA | http://www.amazon.co.uk/Holiday-Express-Christmas-Ornament-Decoration | http://www.amazon.co.uk/Seasonal-Vision-Christmas-Tree-Train/dp/B0044ZC1W2 | http://www.amazon.co.uk/Coca-Cola-Santa-Express-Train-Set/dp/B004BYSNU0", + "https://www.appsmith.com/Christmas-Holiday-Express-Festive-Train-Set-Toy/dp/B009R8S8AA | https://www.appsmith.com/Goldlok-Holiday-Express-Operated-Multi-Colour/dp/B009R8PAO2 | https://www.appsmith.com/FunkyBuys%C2%AE-Christmas-SI-TY1017-Ornaments-Operated/dp/B01437QMHA | https://www.appsmith.com/Holiday-Express-Christmas-Ornament-Decoration | https://www.appsmith.com/Seasonal-Vision-Christmas-Tree-Train/dp/B0044ZC1W2 | https://www.appsmith.com/Coca-Cola-Santa-Express-Train-Set/dp/B004BYSNU0", }, { rowIndex: "2", @@ -55,7 +55,7 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Classic-Train-Lights-Battery-Operated/dp/B0041L9OHE | http://www.amazon.co.uk/Train-With-Tracks-Battery-Operated-x/dp/B009P540O8 | http://www.amazon.co.uk/13-Piece-Train-Set-Ideal/dp/B0173N6E4W | http://www.amazon.co.uk/Train-Flash-Electric-Sound-Europe/dp/B008D7CEH4 | http://www.amazon.co.uk/Train-Ultimate-Sticker-Book-Stickers/dp/1405314516 | http://www.amazon.co.uk/Train-Stickers-Dover-Little-Activity/dp/0486403106", + "https://www.appsmith.com/Classic-Train-Lights-Battery-Operated/dp/B0041L9OHE | https://www.appsmith.com/Train-With-Tracks-Battery-Operated-x/dp/B009P540O8 | https://www.appsmith.com/13-Piece-Train-Set-Ideal/dp/B0173N6E4W | https://www.appsmith.com/Train-Flash-Electric-Sound-Europe/dp/B008D7CEH4 | https://www.appsmith.com/Train-Ultimate-Sticker-Book-Stickers/dp/1405314516 | https://www.appsmith.com/Train-Stickers-Dover-Little-Activity/dp/0486403106", }, { rowIndex: "3", @@ -92,7 +92,7 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Hornby-R6367-RailRoad-Gauge-Rolling/dp/B000WDWSD2 | http://www.amazon.co.uk/Hornby-R3064-RailRoad-Smokey-Locomotive | http://www.amazon.co.uk/Hornby-R8222-Gauge-Track-Extension/dp/B000RK3FZK | http://www.amazon.co.uk/Hornby-R6371-RailRoad-Petrol-Tanker/dp/B000WDS002 | http://www.amazon.co.uk/Hornby-R076-00-Gauge-Footbridge | http://www.amazon.co.uk/Hornby-R6368-RailRoad-Gauge-Brake/dp/B000WDWT22", + "https://www.appsmith.com/Hornby-R6367-RailRoad-Gauge-Rolling/dp/B000WDWSD2 | https://www.appsmith.com/Hornby-R3064-RailRoad-Smokey-Locomotive | https://www.appsmith.com/Hornby-R8222-Gauge-Track-Extension/dp/B000RK3FZK | https://www.appsmith.com/Hornby-R6371-RailRoad-Petrol-Tanker/dp/B000WDS002 | https://www.appsmith.com/Hornby-R076-00-Gauge-Footbridge | https://www.appsmith.com/Hornby-R6368-RailRoad-Gauge-Brake/dp/B000WDWT22", }, { rowIndex: "5", @@ -110,7 +110,7 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Lighting & Signal Engineering > Lamps & Lighting", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Single-Head-Garden-Lights-Lamppost-Layout/dp/B008XCSHCA | http://www.amazon.co.uk/douself-100Pcs-OO-Scale-Passenger/dp/B00GRUD8W4 | http://www.amazon.co.uk/Hornby-Digital-Electric-Point-Track/dp/B00105UJ14 | http://www.amazon.co.uk/20Pcs-Scenery-Landscape-Train-Flowers/dp/B00C1843MA | http://www.amazon.co.uk/Scenery-Landscape-100-Made-Plastic-Cement/dp/B007UYIJ48", + "https://www.appsmith.com/Single-Head-Garden-Lights-Lamppost-Layout/dp/B008XCSHCA | https://www.appsmith.com/douself-100Pcs-OO-Scale-Passenger/dp/B00GRUD8W4 | https://www.appsmith.com/Hornby-Digital-Electric-Point-Track/dp/B00105UJ14 | https://www.appsmith.com/20Pcs-Scenery-Landscape-Train-Flowers/dp/B00C1843MA | https://www.appsmith.com/Scenery-Landscape-100-Made-Plastic-Cement/dp/B007UYIJ48", }, { rowIndex: "6", @@ -130,7 +130,7 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Hornby-R4388-RailRoad-Composite-Gauge/dp/B00260GEXO | http://www.amazon.co.uk/Hornby-R1138-Passenger-Freight-Electric/dp/B006ZL6976", + "https://www.appsmith.com/Hornby-R4388-RailRoad-Composite-Gauge/dp/B00260GEXO | https://www.appsmith.com/Hornby-R1138-Passenger-Freight-Electric/dp/B006ZL6976", }, { rowIndex: "7", @@ -148,7 +148,7 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Hornby-R8221-Gauge-Track-Extension/dp/B000PVFYZ0 | http://www.amazon.co.uk/Hornby-R8222-Gauge-Track-Extension/dp/B000RK3FZK | http://www.amazon.co.uk/Hornby-R6368-RailRoad-Gauge-Brake/dp/B000WDWT22 | http://www.amazon.co.uk/Hornby-R6370-RailRoad-Tredegar-Gauge/dp/B000WDZH58 | http://www.amazon.co.uk/Hornby-R044-Passing-Contact-Switch/dp/B000H5V0RK | http://www.amazon.co.uk/Hornby-Gauge-Logan-Plank-Wagon/dp/B00SWV6RAG", + "https://www.appsmith.com/Hornby-R8221-Gauge-Track-Extension/dp/B000PVFYZ0 | https://www.appsmith.com/Hornby-R8222-Gauge-Track-Extension/dp/B000RK3FZK | https://www.appsmith.com/Hornby-R6368-RailRoad-Gauge-Brake/dp/B000WDWT22 | https://www.appsmith.com/Hornby-R6370-RailRoad-Tredegar-Gauge/dp/B000WDZH58 | https://www.appsmith.com/Hornby-R044-Passing-Contact-Switch/dp/B000H5V0RK | https://www.appsmith.com/Hornby-Gauge-Logan-Plank-Wagon/dp/B00SWV6RAG", }, { rowIndex: "8", @@ -168,7 +168,7 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Hornby-Western-Master-E-Link-Electric/dp/B00BUKPXS8 | http://www.amazon.co.uk/Hornby-Gloucester | http://www.amazon.co.uk/Hornby-Majestic-E-Link-Gauge-Electric/dp/B00BUKPXU6 | http://www.amazon.co.uk/Hornby-Gauge-Master-Glens/dp/B00TQNJIIW | http://www.amazon.co.uk/Hornby-Gauge-Eurostar-2014-Train/dp/B00TQNJIIC | http://www.amazon.co.uk/HORNBY-Digital-Train-Layout-Track/dp/B006BRH55Y", + "https://www.appsmith.com/Hornby-Western-Master-E-Link-Electric/dp/B00BUKPXS8 | https://www.appsmith.com/Hornby-Gloucester | https://www.appsmith.com/Hornby-Majestic-E-Link-Gauge-Electric/dp/B00BUKPXU6 | https://www.appsmith.com/Hornby-Gauge-Master-Glens/dp/B00TQNJIIW | https://www.appsmith.com/Hornby-Gauge-Eurostar-2014-Train/dp/B00TQNJIIC | https://www.appsmith.com/HORNBY-Digital-Train-Layout-Track/dp/B006BRH55Y", }, { rowIndex: "9", @@ -187,6 +187,6 @@ export const GSHEET_DATA = [ amazon_category_and_sub_category: "Hobbies > Model Trains & Railway Sets > Rail Vehicles > Trains", customers_who_bought_this_item_also_bought: - "http://www.amazon.co.uk/Learning-Curve-Chuggington | http://www.amazon.co.uk/Chuggington | http://www.amazon.co.uk/Learning-Curve-Chuggington | http://www.amazon.co.uk/Learning-Chuggington", + "https://www.appsmith.com/Learning-Curve-Chuggington | https://www.appsmith.com/Chuggington | https://www.appsmith.com/Learning-Curve-Chuggington | https://www.appsmith.com/Learning-Chuggington", }, ]; diff --git a/app/client/cypress/fixtures/testdata.json b/app/client/cypress/fixtures/testdata.json index ec1d74fc67c..313ad425fe2 100644 --- a/app/client/cypress/fixtures/testdata.json +++ b/app/client/cypress/fixtures/testdata.json @@ -166,5 +166,5 @@ "APPURL": "http://localhost:8081/app/app1/page1-63d38854252ca15b7ec9fabb", "iframeUrl": "https://elfsight.com/social-feed-widget/iframe/", "iframeUrlSubstring": "https://elfsight.com/", - "iframeRandomUrl": "https://www.google.com" + "iframeRandomUrl": "https://www.appsmith.com/" } diff --git a/app/client/cypress/fixtures/viewdsl.json b/app/client/cypress/fixtures/viewdsl.json index 0d1428446d6..281881c9918 100644 --- a/app/client/cypress/fixtures/viewdsl.json +++ b/app/client/cypress/fixtures/viewdsl.json @@ -72,7 +72,7 @@ "isVisible": true, "defaultImage": "https://www.cowgirlcontractcleaning.com/wp-content/uploads/sites/360/2018/05/placeholder-img-5.jpg", "imageShape": "RECTANGLE", - "image": "https://images.pexels.com/photos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940hotos/60597/dahlia-red-blossom-bloom-60597.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940", + "image": "http://host.docker.internal:4200/453-200x300.jpg", "widgetName": "Image1", "type": "IMAGE_WIDGET", "isLoading": false, diff --git a/app/client/cypress/fixtures/widgetSelection.json b/app/client/cypress/fixtures/widgetSelection.json index a584ad7ad6b..d44cd99b999 100644 --- a/app/client/cypress/fixtures/widgetSelection.json +++ b/app/client/cypress/fixtures/widgetSelection.json @@ -194,7 +194,7 @@ "imageShape": "RECTANGLE", "leftColumn": 6, "borderRadius": "0px", - "defaultImage": "https://res.cloudinary.com/drako999/image/upload/v1589196259/default.png" + "defaultImage": "http://host.docker.internal:4200/clouddefaultImage.png" }, { "labelTextSize": "0.875rem", diff --git a/app/client/cypress/support/Pages/Anvil/Locators/index.ts b/app/client/cypress/support/Pages/Anvil/Locators/index.ts index 21bf736b713..76f837e73c7 100644 --- a/app/client/cypress/support/Pages/Anvil/Locators/index.ts +++ b/app/client/cypress/support/Pages/Anvil/Locators/index.ts @@ -1,6 +1,6 @@ import { MAIN_CONTAINER_WIDGET_ID } from "../../../../../src/constants/WidgetConstants"; import { getAnvilCanvasId } from "../../../../../src/layoutSystems/anvil/viewer/canvas/utils"; -import { AnvilDataAttributes } from "../../../../../src/widgets/wds/constants"; +import { AnvilDataAttributes } from "../../../../../src/modules/ui-builder/ui/wds/constants"; // anvil widget based selectors const anvilWidgetSelector = "[data-testid=t--anvil-widget-wrapper]"; diff --git a/app/client/cypress/support/Pages/GitSync.ts b/app/client/cypress/support/Pages/GitSync.ts index 2fbf3b139a6..1aa7589ba7c 100644 --- a/app/client/cypress/support/Pages/GitSync.ts +++ b/app/client/cypress/support/Pages/GitSync.ts @@ -1,5 +1,5 @@ import { ObjectsRegistry } from "../Objects/Registry"; -const GITHUB_API_BASE = "https://api.github.com"; + //const GITEA_API_BASE = "http://35.154.225.218"; export class GitSync { public agHelper = ObjectsRegistry.AggregateHelper; diff --git a/app/client/packages/utils/src/compose/compose.ts b/app/client/packages/utils/src/compose/compose.ts new file mode 100644 index 00000000000..3fd17574c16 --- /dev/null +++ b/app/client/packages/utils/src/compose/compose.ts @@ -0,0 +1,4 @@ +export const compose = + (...fns: Array<(arg: T) => T>) => + (x: T) => + fns.reduce((acc, fn) => fn(acc), x); diff --git a/app/client/packages/utils/src/compose/index.ts b/app/client/packages/utils/src/compose/index.ts new file mode 100644 index 00000000000..cbcc7441207 --- /dev/null +++ b/app/client/packages/utils/src/compose/index.ts @@ -0,0 +1 @@ +export { compose } from "./compose"; diff --git a/app/client/packages/utils/src/index.ts b/app/client/packages/utils/src/index.ts index 7ea2e7134f2..442a65511ef 100644 --- a/app/client/packages/utils/src/index.ts +++ b/app/client/packages/utils/src/index.ts @@ -1 +1,2 @@ export * from "./object"; +export * from "./compose"; diff --git a/app/client/src/PluginActionEditor/PluginActionContext.tsx b/app/client/src/PluginActionEditor/PluginActionContext.tsx index 670efc34811..42c0d4e6745 100644 --- a/app/client/src/PluginActionEditor/PluginActionContext.tsx +++ b/app/client/src/PluginActionEditor/PluginActionContext.tsx @@ -6,14 +6,16 @@ import React, { } from "react"; import type { Action } from "entities/Action"; import type { Plugin } from "api/PluginApi"; -import type { Datasource } from "entities/Datasource"; +import type { Datasource, EmbeddedRestDatasource } from "entities/Datasource"; +import type { ActionResponse } from "api/ActionAPI"; interface PluginActionContextType { action: Action; + actionResponse?: ActionResponse; editorConfig: unknown[]; settingsConfig: unknown[]; plugin: Plugin; - datasource?: Datasource; + datasource?: EmbeddedRestDatasource | Datasource; } // No need to export this context to use it. Use the hook defined below instead diff --git a/app/client/src/PluginActionEditor/PluginActionEditor.tsx b/app/client/src/PluginActionEditor/PluginActionEditor.tsx index 5ffa8a4d777..8eaa3bc51ba 100644 --- a/app/client/src/PluginActionEditor/PluginActionEditor.tsx +++ b/app/client/src/PluginActionEditor/PluginActionEditor.tsx @@ -4,6 +4,7 @@ import { identifyEntityFromPath } from "../navigation/FocusEntity"; import { useSelector } from "react-redux"; import { getActionByBaseId, + getActionResponses, getDatasource, getEditorConfig, getPlugin, @@ -39,6 +40,8 @@ const PluginActionEditor = (props: ChildrenProps) => { const editorConfig = useSelector((state) => getEditorConfig(state, pluginId)); + const actionResponses = useSelector(getActionResponses); + if (!isEditorInitialized) { return ( @@ -71,9 +74,12 @@ const PluginActionEditor = (props: ChildrenProps) => { ); } + const actionResponse = actionResponses[action.id]; + return ( { /> } formName={FORM_NAME} - headersCount={0} httpMethodOptions={HTTP_METHOD_OPTIONS} isChangePermitted={isChangePermitted} paginationUiComponent={ @@ -45,7 +44,6 @@ const APIEditorForm = () => { theme={theme} /> } - paramsCount={0} /> ); }; diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/CommonEditorForm.tsx b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/CommonEditorForm.tsx index 881fdc56147..a9ae550c0ec 100644 --- a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/CommonEditorForm.tsx +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/CommonEditorForm.tsx @@ -1,11 +1,11 @@ import React from "react"; import { type Action } from "entities/Action"; import { EditorTheme } from "components/editorComponents/CodeEditor/EditorConfig"; -import type { AutoGeneratedHeader } from "pages/Editor/APIEditor/helpers"; import { InfoFields } from "./InfoFields"; import { RequestTabs } from "./RequestTabs"; import { HintMessages } from "./HintMessages"; import { Flex } from "@appsmith/ads"; +import useGetFormActionValues from "./hooks/useGetFormActionValues"; interface Props { httpMethodOptions: { value: string }[]; @@ -14,27 +14,19 @@ interface Props { isChangePermitted: boolean; bodyUIComponent: React.ReactNode; paginationUiComponent: React.ReactNode; - headersCount: number; - paramsCount: number; - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - datasourceHeaders?: any; - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - datasourceParams?: any; - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - actionConfigurationHeaders?: any; - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - actionConfigurationParams?: any; - autoGeneratedActionConfigHeaders?: AutoGeneratedHeader[]; } const CommonEditorForm = (props: Props) => { const { action } = props; const hintMessages = action.messages || []; const theme = EditorTheme.LIGHT; + const { + actionHeaders, + actionParams, + autoGeneratedHeaders, + datasourceHeaders, + datasourceParams, + } = useGetFormActionValues(); return ( @@ -48,17 +40,15 @@ const CommonEditorForm = (props: Props) => { /> - {Object.values(API_EDITOR_TABS).map((tab) => ( - - {createMessage(API_EDITOR_TAB_TITLES[tab])} - - ))} + {Object.values(API_EDITOR_TABS) + .filter((tab) => { + return !(!props.showSettings && tab === API_EDITOR_TABS.SETTINGS); + }) + .map((tab) => ( + + {createMessage(API_EDITOR_TAB_TITLES[tab])} + + ))} diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/components/DatasourceConfig.tsx b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/components/DatasourceConfig.tsx index a6b89e29191..549112e7f4d 100644 --- a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/components/DatasourceConfig.tsx +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/components/DatasourceConfig.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -import FormRow from "../../../../../../components/editorComponents/FormRow"; -import FormLabel from "../../../../../../components/editorComponents/FormLabel"; +import FormRow from "components/editorComponents/FormRow"; +import FormLabel from "components/editorComponents/FormLabel"; import { Button, Icon, Text, Tooltip } from "@appsmith/ads"; import { API_PANE_AUTO_GENERATED_HEADER, diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/hooks/useGetFormActionValues.ts b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/hooks/useGetFormActionValues.ts new file mode 100644 index 00000000000..1078d18282d --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/hooks/useGetFormActionValues.ts @@ -0,0 +1,78 @@ +import { getFormValues } from "redux-form"; +import { API_EDITOR_FORM_NAME } from "ee/constants/forms"; +import { getCurrentEnvironmentId } from "ee/selectors/environmentSelectors"; +import get from "lodash/get"; +import { useSelector } from "react-redux"; +import { + type Action, + type ApiAction, + isAPIAction, + type Property, +} from "entities/Action"; +import { getDatasources } from "ee/selectors/entitiesSelector"; + +function useGetFormActionValues() { + const formValues = useSelector(getFormValues(API_EDITOR_FORM_NAME)) as Action; + const datasources = useSelector(getDatasources); + const currentEnvironment = useSelector(getCurrentEnvironmentId); + + // In an unlikely scenario where form is not initialised, + // return empty values to avoid form ui issues + if (!isAPIAction(formValues)) { + return { + actionHeaders: [], + actionParams: [], + autoGeneratedHeaders: [], + datasourceParams: [], + datasourceHeaders: [], + }; + } + + const actionHeaders = get( + formValues, + "actionConfiguration.headers", + [], + ) as Property[]; + + const autoGeneratedHeaders: ApiAction["actionConfiguration"]["autoGeneratedHeaders"] = + get(formValues, "actionConfiguration.autoGeneratedHeaders", []); + + const actionParams = get( + formValues, + "actionConfiguration.queryParameters", + [], + ) as Property[]; + + let datasourceFromAction: Action["datasource"] | undefined = get( + formValues, + "datasource", + ); + + if (datasourceFromAction && Object.hasOwn(datasourceFromAction, "id")) { + datasourceFromAction = datasources.find( + (d) => d.id === datasourceFromAction?.id, + ); + } + + const datasourceHeaders = get( + datasourceFromAction, + `datasourceStorages.${currentEnvironment}.datasourceConfiguration.headers`, + [], + ) as Property[]; + + const datasourceParams = get( + datasourceFromAction, + `datasourceStorages.${currentEnvironment}.datasourceConfiguration.queryParameters`, + [], + ) as Property[]; + + return { + actionHeaders, + autoGeneratedHeaders, + actionParams, + datasourceHeaders, + datasourceParams, + }; +} + +export default useGetFormActionValues; diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getHeadersCount.ts b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getHeadersCount.ts new file mode 100644 index 00000000000..a0b124525b4 --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getHeadersCount.ts @@ -0,0 +1,22 @@ +import getValidProperties from "./getValidProperties"; +import type { Property } from "entities/Action"; + +function getHeadersCount( + actionHeaders?: Property[], + datasourceHeaders?: Property[], + autoGeneratedActionHeaders?: Property[], +): number { + const validActionHeaders = getValidProperties(actionHeaders); + const validDatasourceHeaders = getValidProperties(datasourceHeaders); + const validAutoGeneratedHeaders = getValidProperties( + autoGeneratedActionHeaders, + ); + + return ( + validActionHeaders.length + + validDatasourceHeaders.length + + validAutoGeneratedHeaders.length + ); +} + +export default getHeadersCount; diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getParamsCount.ts b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getParamsCount.ts new file mode 100644 index 00000000000..3d91bf946cf --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getParamsCount.ts @@ -0,0 +1,14 @@ +import type { Property } from "entities/Action"; +import getValidProperties from "./getValidProperties"; + +function getParamsCount( + actionParams?: Property[], + datasourceParams?: Property[], +) { + const validActionParams = getValidProperties(actionParams); + const validDatasourceParams = getValidProperties(datasourceParams); + + return validActionParams.length + validDatasourceParams.length; +} + +export default getParamsCount; diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getValidProperties.ts b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getValidProperties.ts new file mode 100644 index 00000000000..a2822433bd9 --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/getValidProperties.ts @@ -0,0 +1,11 @@ +import type { Property } from "entities/Action"; + +function getValidProperties(value?: Property[]) { + if (!Array.isArray(value)) { + return []; + } + + return value.filter((v) => v.key && v.key !== ""); +} + +export default getValidProperties; diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/index.ts b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/index.ts new file mode 100644 index 00000000000..76d68357ccc --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/components/CommonEditorForm/utils/index.ts @@ -0,0 +1,2 @@ +export { default as getHeadersCount } from "./getHeadersCount"; +export { default as getParamsCount } from "./getParamsCount"; diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/hooks/useChangeActionCall.test.tsx b/app/client/src/PluginActionEditor/components/PluginActionForm/hooks/useChangeActionCall.test.tsx index c7af1a52bbb..98c144af91a 100644 --- a/app/client/src/PluginActionEditor/components/PluginActionForm/hooks/useChangeActionCall.test.tsx +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/hooks/useChangeActionCall.test.tsx @@ -4,6 +4,7 @@ import { PluginType } from "entities/Action"; import { usePluginActionContext } from "PluginActionEditor"; import { changeApi } from "actions/apiPaneActions"; import { changeQuery } from "actions/queryPaneActions"; +import usePrevious from "utils/hooks/usePrevious"; import { useChangeActionCall } from "./useChangeActionCall"; jest.mock("react-redux", () => ({ @@ -22,6 +23,8 @@ jest.mock("PluginActionEditor", () => ({ usePluginActionContext: jest.fn(), })); +jest.mock("utils/hooks/usePrevious", () => jest.fn()); + describe("useChangeActionCall hook", () => { const dispatchMock = jest.fn(); @@ -105,4 +108,36 @@ describe("useChangeActionCall hook", () => { // Expect no action to be dispatched expect(dispatchMock).not.toHaveBeenCalled(); }); + + it("should not dispatch any action if the action Id has not changed", () => { + const actionMock = { id: "actionId" }; + const pluginMock = { id: "pluginId", type: PluginType.API }; + + // First we mount, so it should be called as previous action id was undefined + (usePluginActionContext as jest.Mock).mockReturnValueOnce({ + action: actionMock, + plugin: pluginMock, + }); + (usePrevious as jest.Mock).mockReturnValueOnce(undefined); + renderHook(() => useChangeActionCall()); + expect(changeApi).toHaveBeenCalledTimes(1); + + // Now we mock the action object to change but not the id. It should not be called again + (usePluginActionContext as jest.Mock).mockReturnValueOnce({ + action: { ...actionMock, testId: "test" }, + plugin: pluginMock, + }); + (usePrevious as jest.Mock).mockReturnValueOnce("actionId"); + renderHook(() => useChangeActionCall()); + expect(changeApi).toHaveBeenCalledTimes(1); + + // Now we change the action id, so it will be called the second time + (usePluginActionContext as jest.Mock).mockReturnValueOnce({ + action: { id: "actionId2", testId: "test" }, + plugin: pluginMock, + }); + (usePrevious as jest.Mock).mockReturnValueOnce("actionId"); + renderHook(() => useChangeActionCall()); + expect(changeApi).toHaveBeenCalledTimes(2); + }); }); diff --git a/app/client/src/PluginActionEditor/components/PluginActionForm/hooks/useChangeActionCall.ts b/app/client/src/PluginActionEditor/components/PluginActionForm/hooks/useChangeActionCall.ts index 562bbad8679..88a56e14d90 100644 --- a/app/client/src/PluginActionEditor/components/PluginActionForm/hooks/useChangeActionCall.ts +++ b/app/client/src/PluginActionEditor/components/PluginActionForm/hooks/useChangeActionCall.ts @@ -4,14 +4,18 @@ import { changeApi } from "actions/apiPaneActions"; import { changeQuery } from "actions/queryPaneActions"; import { PluginType } from "entities/Action"; import { usePluginActionContext } from "PluginActionEditor"; +import usePrevious from "utils/hooks/usePrevious"; export const useChangeActionCall = () => { const { action, plugin } = usePluginActionContext(); + const prevActionId = usePrevious(action.id); const dispatch = useDispatch(); useEffect(() => { if (!plugin?.id || !action) return; + if (prevActionId === action.id) return; + switch (plugin?.type) { case PluginType.API: dispatch(changeApi(action?.id, false)); @@ -29,5 +33,5 @@ export const useChangeActionCall = () => { ); break; } - }, [action, plugin, dispatch]); + }, [action, plugin, dispatch, prevActionId]); }; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/PluginActionResponse.tsx b/app/client/src/PluginActionEditor/components/PluginActionResponse/PluginActionResponse.tsx new file mode 100644 index 00000000000..f20a395d4cb --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/PluginActionResponse.tsx @@ -0,0 +1,67 @@ +import React, { useCallback } from "react"; +import { IDEBottomView, ViewHideBehaviour } from "IDE"; +import { ActionExecutionResizerHeight } from "pages/Editor/APIEditor/constants"; +import EntityBottomTabs from "components/editorComponents/EntityBottomTabs"; +import { useDispatch, useSelector } from "react-redux"; +import { getApiPaneDebuggerState } from "selectors/apiPaneSelectors"; +import { setApiPaneDebuggerState } from "actions/apiPaneActions"; +import { DEBUGGER_TAB_KEYS } from "components/editorComponents/Debugger/helpers"; +import AnalyticsUtil from "ee/utils/AnalyticsUtil"; +import { usePluginActionResponseTabs } from "./hooks"; + +function PluginActionResponse() { + const dispatch = useDispatch(); + + const tabs = usePluginActionResponseTabs(); + + // TODO combine API and Query Debugger state + const { open, responseTabHeight, selectedTab } = useSelector( + getApiPaneDebuggerState, + ); + + const toggleHide = useCallback( + () => dispatch(setApiPaneDebuggerState({ open: !open })), + [dispatch, open], + ); + + const updateSelectedResponseTab = useCallback( + (tabKey: string) => { + if (tabKey === DEBUGGER_TAB_KEYS.ERROR_TAB) { + AnalyticsUtil.logEvent("OPEN_DEBUGGER", { + source: "API_PANE", + }); + } + + dispatch(setApiPaneDebuggerState({ open: true, selectedTab: tabKey })); + }, + [dispatch], + ); + + const updateResponsePaneHeight = useCallback( + (height: number) => { + dispatch(setApiPaneDebuggerState({ responseTabHeight: height })); + }, + [dispatch], + ); + + return ( + + ); +} + +export default PluginActionResponse; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiFormatSegmentedResponse.tsx b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiFormatSegmentedResponse.tsx new file mode 100644 index 00000000000..4fe9f53b905 --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiFormatSegmentedResponse.tsx @@ -0,0 +1,126 @@ +import React, { useCallback, useMemo, useState } from "react"; +import { isArray, isString } from "lodash"; +import { isHtml } from "../utils"; +import ReadOnlyEditor from "components/editorComponents/ReadOnlyEditor"; +import { SegmentedControlContainer } from "pages/Editor/QueryEditor/EditorJSONtoForm"; +import { Flex, SegmentedControl } from "@appsmith/ads"; +import type { ActionResponse } from "api/ActionAPI"; +import { setActionResponseDisplayFormat } from "actions/pluginActionActions"; +import { actionResponseDisplayDataFormats } from "pages/Editor/utils"; +import { ResponseDisplayFormats } from "constants/ApiEditorConstants/CommonApiConstants"; +import { useDispatch } from "react-redux"; +import styled from "styled-components"; +import { ResponseFormatTabs } from "./ResponseFormatTabs"; + +const ResponseBodyContainer = styled.div` + overflow-y: clip; + height: 100%; + display: grid; +`; + +function ApiFormatSegmentedResponse(props: { + actionResponse: ActionResponse; + actionId: string; + responseTabHeight: number; +}) { + const dispatch = useDispatch(); + const onResponseTabSelect = useCallback( + (tab: string) => { + dispatch( + setActionResponseDisplayFormat({ + id: props.actionId, + field: "responseDisplayFormat", + value: tab, + }), + ); + }, + [dispatch, props.actionId], + ); + + const { responseDataTypes, responseDisplayFormat } = + actionResponseDisplayDataFormats(props.actionResponse); + + let filteredResponseDataTypes: { key: string; title: string }[] = [ + ...responseDataTypes, + ]; + + if (!!props.actionResponse.body && !isArray(props.actionResponse.body)) { + filteredResponseDataTypes = responseDataTypes.filter( + (item) => item.key !== ResponseDisplayFormats.TABLE, + ); + + if (responseDisplayFormat.title === ResponseDisplayFormats.TABLE) { + onResponseTabSelect(filteredResponseDataTypes[0]?.title); + } + } + + const responseTabs = filteredResponseDataTypes?.map((dataType, index) => ({ + index: index, + key: dataType.key, + title: dataType.title, + panelComponent: ( + []} + responseType={dataType.key} + tableBodyHeight={props.responseTabHeight} + /> + ), + })); + + const segmentedControlOptions = responseTabs?.map((item) => ({ + value: item.key, + label: item.title, + })); + + const onChange = useCallback( + (value: string) => { + setSelectedControl(value); + onResponseTabSelect(value); + }, + [onResponseTabSelect], + ); + + const [selectedControl, setSelectedControl] = useState( + segmentedControlOptions[0]?.value, + ); + + const selectedTabIndex = filteredResponseDataTypes?.findIndex( + (dataType) => dataType.title === responseDisplayFormat?.title, + ); + + const value = useMemo( + () => ({ value: props.actionResponse.body as string }), + [props.actionResponse.body], + ); + + return ( + + {isString(props.actionResponse?.body) && + isHtml(props.actionResponse?.body) ? ( + + ) : responseTabs && responseTabs.length > 0 && selectedTabIndex !== -1 ? ( + + + + + [] + } + responseType={selectedControl || segmentedControlOptions[0]?.value} + tableBodyHeight={props.responseTabHeight} + /> + + ) : null} + + ); +} + +export default ApiFormatSegmentedResponse; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiResponse.tsx b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiResponse.tsx new file mode 100644 index 00000000000..bb32f43ad19 --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiResponse.tsx @@ -0,0 +1,170 @@ +import React, { useMemo } from "react"; +import ReactJson from "react-json-view"; +import { isEmpty, noop } from "lodash"; +import styled from "styled-components"; +import { Callout, Flex } from "@appsmith/ads"; +import { + JsonWrapper, + reactJsonProps, +} from "components/editorComponents/Debugger/ErrorLogs/components/LogCollapseData"; +import type { ActionResponse } from "api/ActionAPI"; +import type { EditorTheme } from "components/editorComponents/CodeEditor/EditorConfig"; +import type { SourceEntity } from "entities/AppsmithConsole"; +import ApiResponseMeta from "components/editorComponents/ApiResponseMeta"; +import ActionExecutionInProgressView from "components/editorComponents/ActionExecutionInProgressView"; +import LogAdditionalInfo from "components/editorComponents/Debugger/ErrorLogs/components/LogAdditionalInfo"; +import LogHelper from "components/editorComponents/Debugger/ErrorLogs/components/LogHelper"; +import LOG_TYPE from "entities/AppsmithConsole/logtype"; +import { type Action } from "entities/Action"; +import { hasFailed } from "../utils"; +import { getUpdateTimestamp } from "components/editorComponents/Debugger/ErrorLogs/ErrorLogItem"; +import { ENTITY_TYPE } from "ee/entities/AppsmithConsole/utils"; +import ApiFormatSegmentedResponse from "./ApiFormatSegmentedResponse"; +import { NoResponse } from "./NoResponse"; + +const HelpSection = styled.div` + padding-bottom: 5px; + padding-top: 10px; +`; + +const ResponseDataContainer = styled.div` + flex: 1; + overflow: auto; + display: flex; + flex-direction: column; + + & .CodeEditorTarget { + overflow: hidden; + } +`; + +export const ResponseTabErrorContainer = styled.div` + display: flex; + flex-direction: column; + padding: 8px 16px; + gap: 8px; + height: fit-content; + background: var(--ads-v2-color-bg-error); + border-bottom: 1px solid var(--ads-v2-color-border); +`; + +export const ResponseTabErrorContent = styled.div` + display: flex; + align-items: flex-start; + gap: 4px; + font-size: 12px; + line-height: 16px; +`; + +export const ResponseTabErrorDefaultMessage = styled.div` + flex-shrink: 0; +`; + +export const apiReactJsonProps = { ...reactJsonProps, collapsed: 0 }; + +export function ApiResponse(props: { + action: Action; + actionResponse?: ActionResponse; + isRunning: boolean; + isRunDisabled: boolean; + theme: EditorTheme; + onRunClick: () => void; + responseTabHeight: number; +}) { + const { id, name } = props.action; + const actionSource: SourceEntity = useMemo( + () => ({ + type: ENTITY_TYPE.ACTION, + name, + id, + }), + [name, id], + ); + + if (!props.actionResponse) { + return ( + + + + ); + } + + const { messages, pluginErrorDetails, request } = props.actionResponse; + + const runHasFailed = hasFailed(props.actionResponse); + const requestWithTimestamp = getUpdateTimestamp(request); + + return ( + + + {Array.isArray(messages) && messages.length > 0 && ( + + {messages.map((message, i) => ( + + {message} + + ))} + + )} + {props.isRunning && ( + + )} + {runHasFailed && !props.isRunning ? ( + + + + Your API failed to execute + {pluginErrorDetails && ":"} + + {pluginErrorDetails && ( + <> +
+ {pluginErrorDetails.downstreamErrorMessage} +
+ {pluginErrorDetails.downstreamErrorCode && ( + + )} + + )} + +
+ {requestWithTimestamp && ( + + + + )} +
+ ) : ( + + {isEmpty(props.actionResponse.statusCode) ? ( + + ) : ( + + )} + + )} +
+ ); +} diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiResponseHeaders.tsx b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiResponseHeaders.tsx new file mode 100644 index 00000000000..7f055d5bc4f --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ApiResponseHeaders.tsx @@ -0,0 +1,111 @@ +import React, { useMemo } from "react"; +import type { ActionResponse } from "api/ActionAPI"; +import { Callout, Flex } from "@appsmith/ads"; +import { CHECK_REQUEST_BODY, createMessage } from "ee/constants/messages"; +import { isArray, isEmpty } from "lodash"; +import ReadOnlyEditor from "components/editorComponents/ReadOnlyEditor"; +import { hasFailed } from "../utils"; +import styled from "styled-components"; +import { NoResponse } from "./NoResponse"; + +const ResponseDataContainer = styled.div` + flex: 1; + overflow: auto; + display: flex; + flex-direction: column; + + & .CodeEditorTarget { + overflow: hidden; + } +`; + +const headersTransformer = (headers: Record = {}) => { + let responseHeaders = {}; + + // if no headers are present in the response, use the default body text. + if (headers) { + Object.entries(headers).forEach(([key, value]) => { + if (isArray(value) && value.length < 2) { + responseHeaders = { + ...responseHeaders, + [key]: value[0], + }; + + return; + } + + responseHeaders = { + ...responseHeaders, + [key]: value, + }; + }); + } + + return responseHeaders; +}; + +export function ApiResponseHeaders(props: { + isRunning: boolean; + onDebugClick: () => void; + actionResponse?: ActionResponse; + isRunDisabled: boolean; + onRunClick: () => void; +}) { + const responseHeaders = useMemo(() => { + return headersTransformer(props.actionResponse?.headers); + }, [props.actionResponse?.headers]); + + const errorCalloutLinks = useMemo(() => { + return [ + { + children: "Debug", + endIcon: "bug", + onClick: props.onDebugClick, + to: "", + }, + ]; + }, [props.onDebugClick]); + + const headersInput = useMemo(() => { + return { + value: !isEmpty(responseHeaders) + ? JSON.stringify(responseHeaders, null, 2) + : "", + }; + }, [responseHeaders]); + + if (!props.actionResponse) { + return ( + + + + ); + } + + const runHasFailed = hasFailed(props.actionResponse); + + return ( + + {runHasFailed && !props.isRunning && ( + + {createMessage(CHECK_REQUEST_BODY)} + + )} + + {isEmpty(props.actionResponse.statusCode) ? ( + + ) : ( + + )} + + + ); +} diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/components/NoResponse.tsx b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/NoResponse.tsx new file mode 100644 index 00000000000..a133ec66556 --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/NoResponse.tsx @@ -0,0 +1,65 @@ +import NoResponseSVG from "assets/images/no-response.svg"; +import { Classes, Text, TextType } from "@appsmith/ads-old"; +import { + EMPTY_RESPONSE_FIRST_HALF, + EMPTY_RESPONSE_LAST_HALF, +} from "ee/constants/messages"; +import { Button } from "@appsmith/ads"; +import React from "react"; +import styled from "styled-components"; + +const StyledText = styled(Text)` + &&&& { + margin-top: 0; + } +`; + +const NoResponseContainer = styled.div` + flex: 1; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + + .${Classes.ICON} { + margin-right: 0; + + svg { + width: 150px; + height: 150px; + } + } + + .${Classes.TEXT} { + margin-top: ${(props) => props.theme.spaces[9]}px; + } +`; + +interface NoResponseProps { + isRunDisabled: boolean; + isRunning: boolean; + onRunClick: () => void; +} + +export const NoResponse = ({ + isRunDisabled, + isRunning, + onRunClick, +}: NoResponseProps) => ( + + no-response-yet +
+ {EMPTY_RESPONSE_FIRST_HALF()} + + {EMPTY_RESPONSE_LAST_HALF()} +
+
+); diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ResponseFormatTabs.tsx b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ResponseFormatTabs.tsx new file mode 100644 index 00000000000..eb8dec8a7bf --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/components/ResponseFormatTabs.tsx @@ -0,0 +1,63 @@ +import React from "react"; +import { ResponseDisplayFormats } from "constants/ApiEditorConstants/CommonApiConstants"; +import ReadOnlyEditor from "components/editorComponents/ReadOnlyEditor"; +import { isString } from "lodash"; +import Table from "pages/Editor/QueryEditor/Table"; + +type ResponseData = string | Record[]; + +const inputValue = (data: ResponseData) => { + return { + value: isString(data) ? data : JSON.stringify(data, null, 2), + }; +}; + +const tableValue = (data: ResponseData): Record[] => { + if (isString(data)) { + return [{}]; + } + + return data; +}; + +export const ResponseFormatTabs = (props: { + responseType: string; + data: ResponseData; + tableBodyHeight?: number; +}) => { + switch (props.responseType) { + case ResponseDisplayFormats.JSON: + return ( + + ); + case ResponseDisplayFormats.TABLE: + return ( + + ); + case ResponseDisplayFormats.RAW: + return ( + + ); + default: + return ( + + ); + } +}; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/hooks/index.ts b/app/client/src/PluginActionEditor/components/PluginActionResponse/hooks/index.ts new file mode 100644 index 00000000000..2ae6129b3bc --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/hooks/index.ts @@ -0,0 +1 @@ +export { default as usePluginActionResponseTabs } from "ee/PluginActionEditor/components/PluginActionResponse/hooks/usePluginActionResponseTabs"; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/index.ts b/app/client/src/PluginActionEditor/components/PluginActionResponse/index.ts new file mode 100644 index 00000000000..34d4978ec70 --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/index.ts @@ -0,0 +1 @@ +export { default } from "./PluginActionResponse"; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/actionHasFailed.test.ts b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/actionHasFailed.test.ts new file mode 100644 index 00000000000..d28645ec5bc --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/actionHasFailed.test.ts @@ -0,0 +1,30 @@ +import actionHasFailed from "./actionHasFailed"; +import type { ActionResponse } from "api/ActionAPI"; + +describe("actionHasFailed", () => { + it("Should only check the status code", () => { + const input: ActionResponse = { + body: "Success", + dataTypes: [], + duration: "200", + headers: {}, + size: "200", + statusCode: "404", + }; + + expect(actionHasFailed(input)).toBe(true); + }); + + it("Checks the 200 series of status code", () => { + const input: ActionResponse = { + body: "Success", + dataTypes: [], + duration: "200", + headers: {}, + size: "200", + statusCode: "201", + }; + + expect(actionHasFailed(input)).toBe(false); + }); +}); diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/actionHasFailed.ts b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/actionHasFailed.ts new file mode 100644 index 00000000000..6352a8a0961 --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/actionHasFailed.ts @@ -0,0 +1,9 @@ +import type { ActionResponse } from "api/ActionAPI"; + +function hasFailed(actionResponse: ActionResponse) { + return actionResponse.statusCode + ? actionResponse.statusCode[0] !== "2" + : false; +} + +export default hasFailed; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/index.ts b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/index.ts new file mode 100644 index 00000000000..62ec8938b3e --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/index.ts @@ -0,0 +1,2 @@ +export { default as hasFailed } from "./actionHasFailed"; +export { default as isHtml } from "./isHtml"; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/isHtml.test.ts b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/isHtml.test.ts new file mode 100644 index 00000000000..6e014afafee --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/isHtml.test.ts @@ -0,0 +1,39 @@ +import { isHtml } from "./index"; + +describe("isHtml", () => { + it("returns false for empty string", () => { + const input = ""; + + expect(isHtml(input)).toBe(false); + }); + + it("returns false for JSON", () => { + const input = `{"name": "test"}`; + + expect(isHtml(input)).toBe(false); + }); + + it("returns false for string", () => { + const input = "An error string returned"; + + expect(isHtml(input)).toBe(false); + }); + + it("returns false for invalid html", () => { + const input = " { + const input = "

This is incomplete"; + + expect(isHtml(input)).toBe(true); + }); + + it("returns true for HTML", () => { + const input = "

This is a html response

"; + + expect(isHtml(input)).toBe(true); + }); +}); diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/isHtml.ts b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/isHtml.ts new file mode 100644 index 00000000000..551f1d66bfd --- /dev/null +++ b/app/client/src/PluginActionEditor/components/PluginActionResponse/utils/isHtml.ts @@ -0,0 +1,25 @@ +import log from "loglevel"; + +const isHtml = (str: string): boolean => { + try { + const doc = new DOMParser().parseFromString(str, "text/html"); + + // Check for parsing errors + const parseError = doc.querySelector("parsererror"); + + if (parseError) { + return false; + } + + // Check for at least one element node in the body + return Array.from(doc.body.childNodes).some( + (node: ChildNode) => node.nodeType === 1, + ); + } catch (error) { + log.error("Error parsing HTML:", error); + + return false; + } +}; + +export default isHtml; diff --git a/app/client/src/PluginActionEditor/components/PluginActionResponsePane.tsx b/app/client/src/PluginActionEditor/components/PluginActionResponsePane.tsx deleted file mode 100644 index 5a0be861970..00000000000 --- a/app/client/src/PluginActionEditor/components/PluginActionResponsePane.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from "react"; - -const PluginActionResponsePane = () => { - return
; -}; - -export default PluginActionResponsePane; diff --git a/app/client/src/PluginActionEditor/index.ts b/app/client/src/PluginActionEditor/index.ts index 0a58d00bdaa..20265c8bc5a 100644 --- a/app/client/src/PluginActionEditor/index.ts +++ b/app/client/src/PluginActionEditor/index.ts @@ -5,4 +5,4 @@ export { } from "./PluginActionContext"; export { default as PluginActionToolbar } from "./components/PluginActionToolbar"; export { default as PluginActionForm } from "./components/PluginActionForm"; -export { default as PluginActionResponsePane } from "./components/PluginActionResponsePane"; +export { default as PluginActionResponse } from "./components/PluginActionResponse"; diff --git a/app/client/src/WidgetProvider/factory/helpers.ts b/app/client/src/WidgetProvider/factory/helpers.ts index 50cc4166a25..28731d7bc97 100644 --- a/app/client/src/WidgetProvider/factory/helpers.ts +++ b/app/client/src/WidgetProvider/factory/helpers.ts @@ -17,7 +17,7 @@ import { WidgetFeaturePropertyPaneEnhancements, } from "../../utils/WidgetFeatures"; import { generateReactKey } from "utils/generators"; -import { DEFAULT_WIDGET_ON_CANVAS_UI } from "widgets/wds/constants"; +import { DEFAULT_WIDGET_ON_CANVAS_UI } from "modules/ui-builder/ui/wds/constants"; import type { WidgetDefaultProps } from "WidgetProvider/constants"; export enum PropertyPaneConfigTypes { diff --git a/app/client/src/api/Api.ts b/app/client/src/api/Api.ts index 206f38a1f55..1eff364c4d0 100644 --- a/app/client/src/api/Api.ts +++ b/app/client/src/api/Api.ts @@ -1,15 +1,13 @@ -import type { AxiosInstance, AxiosRequestConfig } from "axios"; import axios from "axios"; -import { REQUEST_TIMEOUT_MS } from "ee/constants/ApiConstants"; -import { convertObjectToQueryParams } from "utils/URLUtils"; +import type { AxiosInstance, AxiosRequestConfig } from "axios"; import { - apiFailureResponseInterceptor, apiRequestInterceptor, + apiFailureResponseInterceptor, apiSuccessResponseInterceptor, - blockedApiRoutesForAirgapInterceptor, -} from "ee/api/ApiUtils"; +} from "./interceptors"; +import { REQUEST_TIMEOUT_MS } from "ee/constants/ApiConstants"; +import { convertObjectToQueryParams } from "utils/URLUtils"; -//TODO(abhinav): Refactor this to make more composable. export const apiRequestConfig = { baseURL: "/api/", timeout: REQUEST_TIMEOUT_MS, @@ -21,16 +19,7 @@ export const apiRequestConfig = { const axiosInstance: AxiosInstance = axios.create(); -const requestInterceptors = [ - blockedApiRoutesForAirgapInterceptor, - apiRequestInterceptor, -]; - -requestInterceptors.forEach((interceptor) => { - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - axiosInstance.interceptors.request.use(interceptor as any); -}); +axiosInstance.interceptors.request.use(apiRequestInterceptor); axiosInstance.interceptors.response.use( apiSuccessResponseInterceptor, diff --git a/app/client/src/api/ConsolidatedPageLoadApi.tsx b/app/client/src/api/ConsolidatedPageLoadApi.tsx deleted file mode 100644 index 473b9a09301..00000000000 --- a/app/client/src/api/ConsolidatedPageLoadApi.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import Api from "./Api"; -import type { AxiosPromise } from "axios"; -import type { ApiResponse } from "api/ApiResponses"; - -import type { InitConsolidatedApi } from "sagas/InitSagas"; - -class ConsolidatedPageLoadApi extends Api { - static url = "v1/consolidated-api"; - static consolidatedApiViewUrl = `${ConsolidatedPageLoadApi.url}/view`; - static consolidatedApiEditUrl = `${ConsolidatedPageLoadApi.url}/edit`; - - static async getConsolidatedPageLoadDataView(params: { - applicationId?: string; - defaultPageId?: string; - }): Promise>> { - return Api.get(ConsolidatedPageLoadApi.consolidatedApiViewUrl, params); - } - static async getConsolidatedPageLoadDataEdit(params: { - applicationId?: string; - defaultPageId?: string; - }): Promise>> { - return Api.get(ConsolidatedPageLoadApi.consolidatedApiEditUrl, params); - } -} - -export default ConsolidatedPageLoadApi; diff --git a/app/client/src/api/__tests__/apiFailureResponseInterceptors.ts b/app/client/src/api/__tests__/apiFailureResponseInterceptors.ts new file mode 100644 index 00000000000..7802d608b81 --- /dev/null +++ b/app/client/src/api/__tests__/apiFailureResponseInterceptors.ts @@ -0,0 +1,225 @@ +import axios from "axios"; +import type { AxiosError } from "axios"; + +import { + apiFailureResponseInterceptor, + apiSuccessResponseInterceptor, +} from "api/interceptors"; +import type { ApiResponse } from "api/types"; +import { + createMessage, + ERROR_0, + ERROR_413, + ERROR_500, + SERVER_API_TIMEOUT_ERROR, +} from "ee/constants/messages"; +import { ERROR_CODES } from "ee/constants/ApiConstants"; +import { UserCancelledActionExecutionError } from "sagas/ActionExecution/errorUtils"; + +describe("Api success response interceptors", () => { + beforeAll(() => { + axios.interceptors.response.use( + apiSuccessResponseInterceptor, + apiFailureResponseInterceptor, + ); + }); + + it("checks 413 error", async () => { + axios.defaults.adapter = async () => { + return Promise.reject({ + response: { + status: 413, + }, + } as AxiosError); + }; + + try { + await axios.get("https://example.com"); + } catch (error) { + expect((error as AxiosError).response?.status).toBe(413); + expect((error as AxiosError).message).toBe( + createMessage(ERROR_413, 100), + ); + expect( + (error as AxiosError & { statusCode?: string }).statusCode, + ).toBe("AE-APP-4013"); + } + + axios.defaults.adapter = undefined; + }); + + it("checks the response message when request is made when user is offline", async () => { + const onlineGetter: jest.SpyInstance = jest.spyOn( + window.navigator, + "onLine", + "get", + ); + + onlineGetter.mockReturnValue(false); + axios.defaults.adapter = async () => { + return new Promise((resolve, reject) => { + reject({ + message: "Network Error", + } as AxiosError); + }); + }; + + try { + await axios.get("https://example.com"); + } catch (error) { + expect((error as AxiosError).message).toBe( + createMessage(ERROR_0), + ); + } + + onlineGetter.mockRestore(); + axios.defaults.adapter = undefined; + }); + + it("checks if it throws UserCancelledActionExecutionError user cancels the request ", async () => { + const cancelToken = axios.CancelToken.source(); + + axios.defaults.adapter = async () => { + return new Promise((resolve, reject) => { + cancelToken.cancel("User cancelled the request"); + + reject({ + message: "User cancelled the request", + } as AxiosError); + }); + }; + + try { + await axios.get("https://example.com", { + cancelToken: cancelToken.token, + }); + } catch (error) { + expect(error).toBeInstanceOf(UserCancelledActionExecutionError); + } + + axios.defaults.adapter = undefined; + }); + + it("checks the response message when request fails for exeuction action urls", async () => { + axios.defaults.adapter = async () => { + return Promise.reject({ + response: { + status: 500, + statusText: "Internal Server Error", + headers: { + "content-length": 1, + }, + config: { + headers: { + timer: "1000", + }, + }, + }, + config: { + url: "/v1/actions/execute", + }, + }); + }; + + const url = "/v1/actions/execute"; + const response = await axios.get(url); + + expect(response).toHaveProperty("clientMeta"); + + axios.defaults.adapter = undefined; + }); + + it("checks the error response in case of timeout", async () => { + axios.defaults.adapter = async () => { + return Promise.reject({ + code: "ECONNABORTED", + message: "timeout of 1000ms exceeded", + }); + }; + + try { + await axios.get("https://example.com"); + } catch (error) { + expect((error as AxiosError).message).toBe( + createMessage(SERVER_API_TIMEOUT_ERROR), + ); + expect((error as AxiosError).code).toBe( + ERROR_CODES.REQUEST_TIMEOUT, + ); + } + + axios.defaults.adapter = undefined; + }); + + it("checks the error response in case of server error", async () => { + axios.defaults.adapter = async () => { + return Promise.reject({ + response: { + status: 502, + }, + }); + }; + + try { + await axios.get("https://example.com"); + } catch (error) { + expect((error as AxiosError).message).toBe( + createMessage(ERROR_500), + ); + expect((error as AxiosError).code).toBe( + ERROR_CODES.SERVER_ERROR, + ); + } + + axios.defaults.adapter = undefined; + }); + + it("checks error response in case of unauthorized error", async () => { + axios.defaults.adapter = async () => { + return Promise.reject({ + response: { + status: 401, + }, + }); + }; + + try { + await axios.get("https://example.com"); + } catch (error) { + expect((error as AxiosError).message).toBe( + "Unauthorized. Redirecting to login page...", + ); + expect((error as AxiosError).code).toBe( + ERROR_CODES.REQUEST_NOT_AUTHORISED, + ); + } + }); + + it("checks error response in case of not found error", async () => { + axios.defaults.adapter = async () => { + return Promise.reject({ + response: { + data: { + responseMeta: { + status: 404, + error: { + code: "AE-ACL-4004", + }, + }, + }, + }, + }); + }; + + try { + await axios.get("https://example.com"); + } catch (error) { + expect((error as AxiosError).message).toBe( + "Resource Not Found", + ); + expect((error as AxiosError).code).toBe( + ERROR_CODES.PAGE_NOT_FOUND, + ); + } + }); +}); diff --git a/app/client/src/api/__tests__/apiRequestInterceptors.ts b/app/client/src/api/__tests__/apiRequestInterceptors.ts new file mode 100644 index 00000000000..8a90efc3d4b --- /dev/null +++ b/app/client/src/api/__tests__/apiRequestInterceptors.ts @@ -0,0 +1,121 @@ +import axios from "axios"; +import { + addGitBranchHeader, + blockAirgappedRoutes, + addRequestedByHeader, + addEnvironmentHeader, + increaseGitApiTimeout, + addAnonymousUserIdHeader, + addPerformanceMonitoringHeaders, +} from "api/interceptors/request"; + +describe("Api request interceptors", () => { + beforeAll(() => { + axios.defaults.adapter = async (config) => { + return new Promise((resolve) => { + resolve({ + data: "Test data", + status: 200, + statusText: "OK", + headers: { + "content-length": 123, + "content-type": "application/json", + }, + config, + }); + }); + }; + }); + + it("checks if the request config has timer in the headers", async () => { + const url = "v1/actions/execute"; + const identifier = axios.interceptors.request.use( + addPerformanceMonitoringHeaders, + ); + const response = await axios.get(url); + + expect(response.config.headers).toHaveProperty("timer"); + + axios.interceptors.request.eject(identifier); + }); + + it("checks if the request config has anonymousUserId in the headers", async () => { + const url = "v1/actions/execute"; + const identifier = axios.interceptors.request.use((config) => + addAnonymousUserIdHeader(config, { + segmentEnabled: true, + anonymousId: "anonymousUserId", + }), + ); + const response = await axios.get(url); + + expect(response.config.headers).toHaveProperty("x-anonymous-user-id"); + expect(response.config.headers["x-anonymous-user-id"]).toBe( + "anonymousUserId", + ); + + axios.interceptors.request.eject(identifier); + }); + + it("checks if the request config has csrfToken in the headers", async () => { + const url = "v1/actions/execute"; + const identifier = axios.interceptors.request.use(addRequestedByHeader); + const response = await axios.post(url); + + expect(response.config.headers).toHaveProperty("X-Requested-By"); + expect(response.config.headers["X-Requested-By"]).toBe("Appsmith"); + + axios.interceptors.request.eject(identifier); + }); + + it("checks if the request config has gitBranch in the headers", async () => { + const url = "v1/"; + const identifier = axios.interceptors.request.use((config) => { + return addGitBranchHeader(config, { branch: "master" }); + }); + const response = await axios.get(url); + + expect(response.config.headers).toHaveProperty("branchName"); + expect(response.config.headers["branchName"]).toBe("master"); + + axios.interceptors.request.eject(identifier); + }); + + it("checks if the request config has environmentId in the headers", async () => { + const url = "v1/saas"; + const identifier = axios.interceptors.request.use((config) => { + return addEnvironmentHeader(config, { env: "default" }); + }); + + const response = await axios.get(url); + + expect(response.config.headers).toHaveProperty("X-Appsmith-EnvironmentId"); + expect(response.config.headers["X-Appsmith-EnvironmentId"]).toBe("default"); + + axios.interceptors.request.eject(identifier); + }); + + it("checks if request is 200 ok when isAirgapped is true", async () => { + const url = "v1/saas"; + const identifier = axios.interceptors.request.use((config) => { + return blockAirgappedRoutes(config, { isAirgapped: true }); + }); + const response = await axios.get(url); + + expect(response.data).toBeNull(); + expect(response.status).toBe(200); + expect(response.statusText).toBe("OK"); + + axios.interceptors.request.eject(identifier); + }); + + it("checks if the request config has a timeout of 120s", async () => { + const url = "v1/git/"; + const identifier = axios.interceptors.request.use(increaseGitApiTimeout); + const response = await axios.get(url); + + expect(response.config.timeout).toBe(120000); + + axios.interceptors.request.eject(identifier); + }); +}); diff --git a/app/client/src/api/__tests__/apiSucessResponseInterceptors.ts b/app/client/src/api/__tests__/apiSucessResponseInterceptors.ts new file mode 100644 index 00000000000..1b8963577d4 --- /dev/null +++ b/app/client/src/api/__tests__/apiSucessResponseInterceptors.ts @@ -0,0 +1,40 @@ +import axios from "axios"; +import { apiSuccessResponseInterceptor } from "api/interceptors"; + +describe("Api success response interceptors", () => { + beforeAll(() => { + axios.interceptors.response.use(apiSuccessResponseInterceptor); + axios.defaults.adapter = async (config) => { + return new Promise((resolve) => { + resolve({ + data: { + data: "Test data", + }, + status: 200, + statusText: "OK", + headers: { + "content-length": 123, + "content-type": "application/json", + }, + config, + }); + }); + }; + }); + + it("checks response for non-action-execution url", async () => { + const url = "/v1/sass"; + const response = await axios.get(url); + + expect(response.data).toBe("Test data"); + }); + + it("checks response for action-execution url", async () => { + const url = "/v1/actions/execute"; + const response = await axios.get(url); + + expect(response).toHaveProperty("data"); + expect(response.data).toBe("Test data"); + expect(response).toHaveProperty("clientMeta"); + }); +}); diff --git a/app/client/src/api/core/api.ts b/app/client/src/api/core/api.ts new file mode 100644 index 00000000000..ecfb9e74f09 --- /dev/null +++ b/app/client/src/api/core/api.ts @@ -0,0 +1,31 @@ +import type { AxiosResponseData } from "api/types"; + +import { apiFactory } from "./factory"; + +const apiInstance = apiFactory(); + +export async function get(...args: Parameters) { + // Note: we are passing AxiosResponseData as the second type argument to set the default type of the response data.The reason + // is we modify the response data in the responseSuccessInterceptor to return `.data` property from the axios response so that we can + // just `response.data` instead of `response.data.data`. So we have to make sure that the response data's type matches what we do in the interceptor. + return apiInstance.get>(...args); +} + +export async function post(...args: Parameters) { + return apiInstance.post>(...args); +} + +export async function put(...args: Parameters) { + return apiInstance.put>(...args); +} + +// Note: _delete is used instead of delete because delete is a reserved keyword in JavaScript +async function _delete(...args: Parameters) { + return apiInstance.delete>(...args); +} + +export { _delete as delete }; + +export async function patch(...args: Parameters) { + return apiInstance.patch>(...args); +} diff --git a/app/client/src/api/core/factory.ts b/app/client/src/api/core/factory.ts new file mode 100644 index 00000000000..b0b75ada388 --- /dev/null +++ b/app/client/src/api/core/factory.ts @@ -0,0 +1,17 @@ +import axios from "axios"; +import { DEFAULT_AXIOS_CONFIG } from "ee/constants/ApiConstants"; +import { apiRequestInterceptor } from "api/interceptors/request/apiRequestInterceptor"; +import { apiSuccessResponseInterceptor } from "api/interceptors/response/apiSuccessResponseInterceptor"; +import { apiFailureResponseInterceptor } from "api/interceptors/response/apiFailureResponseInterceptor"; + +export function apiFactory() { + const axiosInstance = axios.create(DEFAULT_AXIOS_CONFIG); + + axiosInstance.interceptors.request.use(apiRequestInterceptor); + axiosInstance.interceptors.response.use( + apiSuccessResponseInterceptor, + apiFailureResponseInterceptor, + ); + + return axiosInstance; +} diff --git a/app/client/src/api/core/index.ts b/app/client/src/api/core/index.ts new file mode 100644 index 00000000000..ed3655362f5 --- /dev/null +++ b/app/client/src/api/core/index.ts @@ -0,0 +1,2 @@ +export * as api from "./api"; +export { apiFactory } from "./factory"; diff --git a/app/client/src/api/helpers/addExecutionMetaProperties.ts b/app/client/src/api/helpers/addExecutionMetaProperties.ts new file mode 100644 index 00000000000..e4fba5c6152 --- /dev/null +++ b/app/client/src/api/helpers/addExecutionMetaProperties.ts @@ -0,0 +1,12 @@ +import type { AxiosResponse } from "axios"; + +export const addExecutionMetaProperties = (response: AxiosResponse) => { + const clientMeta = { + size: response.headers["content-length"], + duration: Number( + performance.now() - response.config.headers.timer, + ).toFixed(), + }; + + return { ...response.data, clientMeta }; +}; diff --git a/app/client/src/api/helpers/index.ts b/app/client/src/api/helpers/index.ts new file mode 100644 index 00000000000..1cd96da7b8c --- /dev/null +++ b/app/client/src/api/helpers/index.ts @@ -0,0 +1,3 @@ +export { is404orAuthPath } from "./is404orAuthPath"; +export { validateJsonResponseMeta } from "./validateJsonResponseMeta"; +export { addExecutionMetaProperties } from "./addExecutionMetaProperties"; diff --git a/app/client/src/api/helpers/is404orAuthPath.ts b/app/client/src/api/helpers/is404orAuthPath.ts new file mode 100644 index 00000000000..10d4193ebbc --- /dev/null +++ b/app/client/src/api/helpers/is404orAuthPath.ts @@ -0,0 +1,5 @@ +export const is404orAuthPath = () => { + const pathName = window.location.pathname; + + return /^\/404/.test(pathName) || /^\/user\/\w+/.test(pathName); +}; diff --git a/app/client/src/api/helpers/validateJsonResponseMeta.ts b/app/client/src/api/helpers/validateJsonResponseMeta.ts new file mode 100644 index 00000000000..de295660abd --- /dev/null +++ b/app/client/src/api/helpers/validateJsonResponseMeta.ts @@ -0,0 +1,14 @@ +import * as Sentry from "@sentry/react"; +import type { AxiosResponse } from "axios"; +import { CONTENT_TYPE_HEADER_KEY } from "constants/ApiEditorConstants/CommonApiConstants"; + +export const validateJsonResponseMeta = (response: AxiosResponse) => { + if ( + response.headers[CONTENT_TYPE_HEADER_KEY] === "application/json" && + !response.data.responseMeta + ) { + Sentry.captureException(new Error("Api responded without response meta"), { + contexts: { response: response.data }, + }); + } +}; diff --git a/app/client/src/api/index.ts b/app/client/src/api/index.ts new file mode 100644 index 00000000000..b2221a94a89 --- /dev/null +++ b/app/client/src/api/index.ts @@ -0,0 +1 @@ +export * from "./services"; diff --git a/app/client/src/api/interceptors/index.ts b/app/client/src/api/interceptors/index.ts new file mode 100644 index 00000000000..346dac3b386 --- /dev/null +++ b/app/client/src/api/interceptors/index.ts @@ -0,0 +1,2 @@ +export * from "./request"; +export * from "./response"; diff --git a/app/client/src/api/interceptors/request/addAnonymousUserIdHeader.ts b/app/client/src/api/interceptors/request/addAnonymousUserIdHeader.ts new file mode 100644 index 00000000000..d87e95c6307 --- /dev/null +++ b/app/client/src/api/interceptors/request/addAnonymousUserIdHeader.ts @@ -0,0 +1,16 @@ +import type { InternalAxiosRequestConfig } from "axios"; + +export const addAnonymousUserIdHeader = ( + config: InternalAxiosRequestConfig, + options: { anonymousId?: string; segmentEnabled?: boolean }, +) => { + const { anonymousId, segmentEnabled } = options; + + config.headers = config.headers || {}; + + if (segmentEnabled && anonymousId) { + config.headers["x-anonymous-user-id"] = anonymousId; + } + + return config; +}; diff --git a/app/client/src/api/interceptors/request/addEnvironmentHeader.ts b/app/client/src/api/interceptors/request/addEnvironmentHeader.ts new file mode 100644 index 00000000000..82c9d89fc41 --- /dev/null +++ b/app/client/src/api/interceptors/request/addEnvironmentHeader.ts @@ -0,0 +1,19 @@ +import type { InternalAxiosRequestConfig } from "axios"; +import { ENV_ENABLED_ROUTES_REGEX } from "ee/constants/ApiConstants"; + +export const addEnvironmentHeader = ( + config: InternalAxiosRequestConfig, + options: { env: string }, +) => { + const { env } = options; + + config.headers = config.headers || {}; + + if (ENV_ENABLED_ROUTES_REGEX.test(config.url?.split("?")[0] || "")) { + if (env) { + config.headers["X-Appsmith-EnvironmentId"] = env; + } + } + + return config; +}; diff --git a/app/client/src/api/interceptors/request/addGitBranchHeader.ts b/app/client/src/api/interceptors/request/addGitBranchHeader.ts new file mode 100644 index 00000000000..b15105bcb83 --- /dev/null +++ b/app/client/src/api/interceptors/request/addGitBranchHeader.ts @@ -0,0 +1,16 @@ +import type { InternalAxiosRequestConfig } from "axios"; + +export const addGitBranchHeader = ( + config: InternalAxiosRequestConfig, + options: { branch?: string }, +) => { + const { branch } = options; + + config.headers = config.headers || {}; + + if (branch) { + config.headers.branchName = branch; + } + + return config; +}; diff --git a/app/client/src/api/interceptors/request/addPerformanceMonitoringHeaders.ts b/app/client/src/api/interceptors/request/addPerformanceMonitoringHeaders.ts new file mode 100644 index 00000000000..53ec7ad1bde --- /dev/null +++ b/app/client/src/api/interceptors/request/addPerformanceMonitoringHeaders.ts @@ -0,0 +1,10 @@ +import type { InternalAxiosRequestConfig } from "axios"; + +export const addPerformanceMonitoringHeaders = ( + config: InternalAxiosRequestConfig, +) => { + config.headers = config.headers || {}; + config.headers["timer"] = performance.now(); + + return config; +}; diff --git a/app/client/src/api/interceptors/request/addRequestedByHeader.ts b/app/client/src/api/interceptors/request/addRequestedByHeader.ts new file mode 100644 index 00000000000..c64a363dc87 --- /dev/null +++ b/app/client/src/api/interceptors/request/addRequestedByHeader.ts @@ -0,0 +1,13 @@ +import type { InternalAxiosRequestConfig } from "axios"; + +export const addRequestedByHeader = (config: InternalAxiosRequestConfig) => { + config.headers = config.headers || {}; + + const methodUpper = config.method?.toUpperCase(); + + if (methodUpper && methodUpper !== "GET" && methodUpper !== "HEAD") { + config.headers["X-Requested-By"] = "Appsmith"; + } + + return config; +}; diff --git a/app/client/src/api/interceptors/request/apiRequestInterceptor.ts b/app/client/src/api/interceptors/request/apiRequestInterceptor.ts new file mode 100644 index 00000000000..8f7919c067d --- /dev/null +++ b/app/client/src/api/interceptors/request/apiRequestInterceptor.ts @@ -0,0 +1,64 @@ +import store from "store"; +import { compose } from "@appsmith/utils"; +import { getAppsmithConfigs } from "ee/configs"; +import AnalyticsUtil from "ee/utils/AnalyticsUtil"; +import { isAirgapped } from "ee/utils/airgapHelpers"; +import type { InternalAxiosRequestConfig } from "axios"; + +import getQueryParamsObject from "utils/getQueryParamsObject"; +import { addRequestedByHeader } from "./addRequestedByHeader"; +import { increaseGitApiTimeout } from "./increaseGitApiTimeout"; +import { getCurrentGitBranch } from "selectors/gitSyncSelectors"; +import { getCurrentEnvironmentId } from "ee/selectors/environmentSelectors"; +import { addGitBranchHeader as _addGitBranchHeader } from "./addGitBranchHeader"; +import { addPerformanceMonitoringHeaders } from "./addPerformanceMonitoringHeaders"; +import { addEnvironmentHeader as _addEnvironmentHeader } from "./addEnvironmentHeader"; +import { blockAirgappedRoutes as _blockAirgappedRoutes } from "./blockAirgappedRoutes"; +import { addAnonymousUserIdHeader as _addAnonymousUserIdHeader } from "./addAnonymousUserIdHeader"; + +/** + * Note: Why can't we use store.getState() or isGapgapped() directly in the interceptor? + * The main reason is to easily test the interceptor. When we use store.getState() or isAirgapped() directly in the interceptor, + * we need to mock the store or isAirgapped() in the test file and it becomes difficult and messy mocking things just to test the interceptor. + */ +const blockAirgappedRoutes = (config: InternalAxiosRequestConfig) => { + const isAirgappedInstance = isAirgapped(); + + return _blockAirgappedRoutes(config, { isAirgapped: isAirgappedInstance }); +}; + +const addGitBranchHeader = (config: InternalAxiosRequestConfig) => { + const state = store.getState(); + const branch = getCurrentGitBranch(state) || getQueryParamsObject().branch; + + return _addGitBranchHeader(config, { branch }); +}; + +const addEnvironmentHeader = (config: InternalAxiosRequestConfig) => { + const state = store.getState(); + const activeEnv = getCurrentEnvironmentId(state); + + return _addEnvironmentHeader(config, { env: activeEnv }); +}; + +const addAnonymousUserIdHeader = (config: InternalAxiosRequestConfig) => { + const appsmithConfig = getAppsmithConfigs(); + const anonymousId = AnalyticsUtil.getAnonymousId(); + const segmentEnabled = appsmithConfig.segment.enabled; + + return _addAnonymousUserIdHeader(config, { anonymousId, segmentEnabled }); +}; + +export const apiRequestInterceptor = (config: InternalAxiosRequestConfig) => { + const interceptorPipeline = compose( + blockAirgappedRoutes, + addRequestedByHeader, + addGitBranchHeader, + increaseGitApiTimeout, + addEnvironmentHeader, + addAnonymousUserIdHeader, + addPerformanceMonitoringHeaders, + ); + + return interceptorPipeline(config); +}; diff --git a/app/client/src/api/interceptors/request/blockAirgappedRoutes.ts b/app/client/src/api/interceptors/request/blockAirgappedRoutes.ts new file mode 100644 index 00000000000..d8d4d54ee80 --- /dev/null +++ b/app/client/src/api/interceptors/request/blockAirgappedRoutes.ts @@ -0,0 +1,29 @@ +import type { InternalAxiosRequestConfig } from "axios"; +import { BLOCKED_ROUTES_REGEX } from "ee/constants/ApiConstants"; + +const blockAirgappedRoutes = ( + request: InternalAxiosRequestConfig, + options: { isAirgapped: boolean }, +) => { + const { url } = request; + const { isAirgapped } = options; + + if (isAirgapped && url && BLOCKED_ROUTES_REGEX.test(url)) { + request.adapter = async (config) => { + return new Promise((resolve) => { + resolve({ + data: null, + status: 200, + statusText: "OK", + headers: {}, + config, + request, + }); + }); + }; + } + + return request; +}; + +export { blockAirgappedRoutes }; diff --git a/app/client/src/api/interceptors/request/increaseGitApiTimeout.ts b/app/client/src/api/interceptors/request/increaseGitApiTimeout.ts new file mode 100644 index 00000000000..4aa20d7611c --- /dev/null +++ b/app/client/src/api/interceptors/request/increaseGitApiTimeout.ts @@ -0,0 +1,9 @@ +import type { InternalAxiosRequestConfig } from "axios"; + +export const increaseGitApiTimeout = (config: InternalAxiosRequestConfig) => { + if (config.url?.indexOf("/git/") !== -1) { + config.timeout = 1000 * 120; + } + + return config; +}; diff --git a/app/client/src/api/interceptors/request/index.ts b/app/client/src/api/interceptors/request/index.ts new file mode 100644 index 00000000000..6f9957f00ec --- /dev/null +++ b/app/client/src/api/interceptors/request/index.ts @@ -0,0 +1,8 @@ +export { addGitBranchHeader } from "./addGitBranchHeader"; +export { blockAirgappedRoutes } from "./blockAirgappedRoutes"; +export { addRequestedByHeader } from "./addRequestedByHeader"; +export { addEnvironmentHeader } from "./addEnvironmentHeader"; +export { apiRequestInterceptor } from "./apiRequestInterceptor"; +export { increaseGitApiTimeout } from "./increaseGitApiTimeout"; +export { addAnonymousUserIdHeader } from "./addAnonymousUserIdHeader"; +export { addPerformanceMonitoringHeaders } from "./addPerformanceMonitoringHeaders"; diff --git a/app/client/src/api/interceptors/response/apiFailureResponseInterceptor.ts b/app/client/src/api/interceptors/response/apiFailureResponseInterceptor.ts new file mode 100644 index 00000000000..eae6f616212 --- /dev/null +++ b/app/client/src/api/interceptors/response/apiFailureResponseInterceptor.ts @@ -0,0 +1,33 @@ +import type { AxiosError } from "axios"; +import type { ApiResponse, ErrorHandler } from "api/types"; + +import * as failureHandlers from "./failureHandlers"; + +export const apiFailureResponseInterceptor = async ( + error: AxiosError, +) => { + const handlers: ErrorHandler[] = [ + failureHandlers.handle413Error, + failureHandlers.handleOfflineError, + failureHandlers.handleCancelError, + failureHandlers.handleExecuteActionError, + failureHandlers.handleTimeoutError, + failureHandlers.handleServerError, + failureHandlers.handleUnauthorizedError, + failureHandlers.handleNotFoundError, + ]; + + for (const handler of handlers) { + const result = await handler(error); + + if (result !== null) { + return result; + } + } + + if (error?.response?.data.responseMeta) { + return Promise.resolve(error.response.data); + } + + return Promise.resolve(error); +}; diff --git a/app/client/src/api/interceptors/response/apiSuccessResponseInterceptor.ts b/app/client/src/api/interceptors/response/apiSuccessResponseInterceptor.ts new file mode 100644 index 00000000000..ca18a9ea432 --- /dev/null +++ b/app/client/src/api/interceptors/response/apiSuccessResponseInterceptor.ts @@ -0,0 +1,16 @@ +import { + validateJsonResponseMeta, + addExecutionMetaProperties, +} from "api/helpers"; +import type { AxiosResponse } from "axios"; +import { EXECUTION_ACTION_REGEX } from "ee/constants/ApiConstants"; + +export const apiSuccessResponseInterceptor = (response: AxiosResponse) => { + if (response?.config?.url?.match(EXECUTION_ACTION_REGEX)) { + return addExecutionMetaProperties(response); + } + + validateJsonResponseMeta(response); + + return response.data; +}; diff --git a/app/client/src/api/interceptors/response/failureHandlers/handle413Error.ts b/app/client/src/api/interceptors/response/failureHandlers/handle413Error.ts new file mode 100644 index 00000000000..301b1c2c97a --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handle413Error.ts @@ -0,0 +1,25 @@ +import type { AxiosError } from "axios"; +import { + createMessage, + ERROR_413, + GENERIC_API_EXECUTION_ERROR, +} from "ee/constants/messages"; + +export const handle413Error = async (error: AxiosError) => { + if (error?.response?.status === 413) { + return Promise.reject({ + ...error, + clientDefinedError: true, + statusCode: "AE-APP-4013", + message: createMessage(ERROR_413, 100), + pluginErrorDetails: { + appsmithErrorCode: "AE-APP-4013", + appsmithErrorMessage: createMessage(ERROR_413, 100), + errorType: "INTERNAL_ERROR", // this value is from the server, hence cannot construct enum type. + title: createMessage(GENERIC_API_EXECUTION_ERROR), + }, + }); + } + + return null; +}; diff --git a/app/client/src/api/interceptors/response/failureHandlers/handleCancelError.ts b/app/client/src/api/interceptors/response/failureHandlers/handleCancelError.ts new file mode 100644 index 00000000000..f579d8bc90b --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handleCancelError.ts @@ -0,0 +1,11 @@ +import axios from "axios"; +import type { AxiosError } from "axios"; +import { UserCancelledActionExecutionError } from "sagas/ActionExecution/errorUtils"; + +export async function handleCancelError(error: AxiosError) { + if (axios.isCancel(error)) { + throw new UserCancelledActionExecutionError(); + } + + return null; +} diff --git a/app/client/src/api/interceptors/response/failureHandlers/handleExecuteActionError.ts b/app/client/src/api/interceptors/response/failureHandlers/handleExecuteActionError.ts new file mode 100644 index 00000000000..6a1e0c4f277 --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handleExecuteActionError.ts @@ -0,0 +1,14 @@ +import type { AxiosError, AxiosResponse } from "axios"; +import { addExecutionMetaProperties } from "api/helpers"; +import { EXECUTION_ACTION_REGEX } from "ee/constants/ApiConstants"; + +export function handleExecuteActionError(error: AxiosError) { + const isExecutionActionURL = + error.config && error?.config?.url?.match(EXECUTION_ACTION_REGEX); + + if (isExecutionActionURL) { + return addExecutionMetaProperties(error?.response as AxiosResponse); + } + + return null; +} diff --git a/app/client/src/api/interceptors/response/failureHandlers/handleMissingResponseMeta.ts b/app/client/src/api/interceptors/response/failureHandlers/handleMissingResponseMeta.ts new file mode 100644 index 00000000000..4153a6f868b --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handleMissingResponseMeta.ts @@ -0,0 +1,17 @@ +import type { AxiosError } from "axios"; +import * as Sentry from "@sentry/react"; +import type { ApiResponse } from "api/types"; + +export const handleMissingResponseMeta = async ( + error: AxiosError, +) => { + if (error.response?.data && !error.response.data.responseMeta) { + Sentry.captureException(new Error("Api responded without response meta"), { + contexts: { response: { ...error.response.data } }, + }); + + return Promise.reject(error.response.data); + } + + return null; +}; diff --git a/app/client/src/api/interceptors/response/failureHandlers/handleNotFoundError.ts b/app/client/src/api/interceptors/response/failureHandlers/handleNotFoundError.ts new file mode 100644 index 00000000000..21e2aa42f31 --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handleNotFoundError.ts @@ -0,0 +1,34 @@ +import { + API_STATUS_CODES, + ERROR_CODES, + SERVER_ERROR_CODES, +} from "ee/constants/ApiConstants"; +import * as Sentry from "@sentry/react"; +import type { AxiosError } from "axios"; +import type { ApiResponse } from "api/types"; +import { is404orAuthPath } from "api/helpers"; + +export async function handleNotFoundError(error: AxiosError) { + if (is404orAuthPath()) return null; + + const errorData = + error?.response?.data.responseMeta ?? ({} as ApiResponse["responseMeta"]); + + if ( + errorData.status === API_STATUS_CODES.RESOURCE_NOT_FOUND && + errorData.error?.code && + (SERVER_ERROR_CODES.RESOURCE_NOT_FOUND.includes(errorData.error?.code) || + SERVER_ERROR_CODES.UNABLE_TO_FIND_PAGE.includes(errorData?.error?.code)) + ) { + Sentry.captureException(error); + + return Promise.reject({ + ...error, + code: ERROR_CODES.PAGE_NOT_FOUND, + message: "Resource Not Found", + show: false, + }); + } + + return null; +} diff --git a/app/client/src/api/interceptors/response/failureHandlers/handleOfflineError.ts b/app/client/src/api/interceptors/response/failureHandlers/handleOfflineError.ts new file mode 100644 index 00000000000..2fa9fa16492 --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handleOfflineError.ts @@ -0,0 +1,13 @@ +import type { AxiosError } from "axios"; +import { createMessage, ERROR_0 } from "ee/constants/messages"; + +export const handleOfflineError = async (error: AxiosError) => { + if (!window.navigator.onLine) { + return Promise.reject({ + ...error, + message: createMessage(ERROR_0), + }); + } + + return null; +}; diff --git a/app/client/src/api/interceptors/response/failureHandlers/handleServerError.ts b/app/client/src/api/interceptors/response/failureHandlers/handleServerError.ts new file mode 100644 index 00000000000..2092d72b007 --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handleServerError.ts @@ -0,0 +1,15 @@ +import type { AxiosError } from "axios"; +import { createMessage, ERROR_500 } from "ee/constants/messages"; +import { API_STATUS_CODES, ERROR_CODES } from "ee/constants/ApiConstants"; + +export const handleServerError = async (error: AxiosError) => { + if (error.response?.status === API_STATUS_CODES.SERVER_ERROR) { + return Promise.reject({ + ...error, + code: ERROR_CODES.SERVER_ERROR, + message: createMessage(ERROR_500), + }); + } + + return null; +}; diff --git a/app/client/src/api/interceptors/response/failureHandlers/handleTimeoutError.ts b/app/client/src/api/interceptors/response/failureHandlers/handleTimeoutError.ts new file mode 100644 index 00000000000..ffff3eafe76 --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handleTimeoutError.ts @@ -0,0 +1,22 @@ +import type { AxiosError } from "axios"; +import { + ERROR_CODES, + TIMEOUT_ERROR_REGEX, + AXIOS_CONNECTION_ABORTED_CODE, +} from "ee/constants/ApiConstants"; +import { createMessage, SERVER_API_TIMEOUT_ERROR } from "ee/constants/messages"; + +export const handleTimeoutError = async (error: AxiosError) => { + if ( + error.code === AXIOS_CONNECTION_ABORTED_CODE && + error.message?.match(TIMEOUT_ERROR_REGEX) + ) { + return Promise.reject({ + ...error, + message: createMessage(SERVER_API_TIMEOUT_ERROR), + code: ERROR_CODES.REQUEST_TIMEOUT, + }); + } + + return null; +}; diff --git a/app/client/src/api/interceptors/response/failureHandlers/handleUnauthorizedError.ts b/app/client/src/api/interceptors/response/failureHandlers/handleUnauthorizedError.ts new file mode 100644 index 00000000000..343ec7022e4 --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/handleUnauthorizedError.ts @@ -0,0 +1,34 @@ +import store from "store"; +import type { AxiosError } from "axios"; +import * as Sentry from "@sentry/react"; +import { is404orAuthPath } from "api/helpers"; +import { logoutUser } from "actions/userActions"; +import { AUTH_LOGIN_URL } from "constants/routes"; +import { API_STATUS_CODES, ERROR_CODES } from "ee/constants/ApiConstants"; + +export const handleUnauthorizedError = async (error: AxiosError) => { + if (is404orAuthPath()) return null; + + if (error.response?.status === API_STATUS_CODES.REQUEST_NOT_AUTHORISED) { + const currentUrl = `${window.location.href}`; + + store.dispatch( + logoutUser({ + redirectURL: `${AUTH_LOGIN_URL}?redirectUrl=${encodeURIComponent( + currentUrl, + )}`, + }), + ); + + Sentry.captureException(error); + + return Promise.reject({ + ...error, + code: ERROR_CODES.REQUEST_NOT_AUTHORISED, + message: "Unauthorized. Redirecting to login page...", + show: false, + }); + } + + return null; +}; diff --git a/app/client/src/api/interceptors/response/failureHandlers/index.ts b/app/client/src/api/interceptors/response/failureHandlers/index.ts new file mode 100644 index 00000000000..2352095f1de --- /dev/null +++ b/app/client/src/api/interceptors/response/failureHandlers/index.ts @@ -0,0 +1,9 @@ +export { handle413Error } from "./handle413Error"; +export { handleServerError } from "./handleServerError"; +export { handleCancelError } from "./handleCancelError"; +export { handleOfflineError } from "./handleOfflineError"; +export { handleTimeoutError } from "./handleTimeoutError"; +export { handleNotFoundError } from "./handleNotFoundError"; +export { handleUnauthorizedError } from "./handleUnauthorizedError"; +export { handleExecuteActionError } from "./handleExecuteActionError"; +export { handleMissingResponseMeta } from "./handleMissingResponseMeta"; diff --git a/app/client/src/api/interceptors/response/index.ts b/app/client/src/api/interceptors/response/index.ts new file mode 100644 index 00000000000..5177d545922 --- /dev/null +++ b/app/client/src/api/interceptors/response/index.ts @@ -0,0 +1,2 @@ +export { apiFailureResponseInterceptor } from "./apiFailureResponseInterceptor"; +export { apiSuccessResponseInterceptor } from "./apiSuccessResponseInterceptor"; diff --git a/app/client/src/api/services/AppThemingApi/api.ts b/app/client/src/api/services/AppThemingApi/api.ts new file mode 100644 index 00000000000..e7d22dfed85 --- /dev/null +++ b/app/client/src/api/services/AppThemingApi/api.ts @@ -0,0 +1,38 @@ +import { api } from "api/core"; +import type { AppTheme } from "entities/AppTheming"; + +const baseURL = "/v1"; + +export async function fetchThemes(applicationId: string) { + const url = `${baseURL}/themes/applications/${applicationId}`; + + return api.get(url); +} + +export async function fetchSelected(applicationId: string, mode = "EDIT") { + const url = `${baseURL}/themes/applications/${applicationId}/current`; + + return api.get(url, { params: { mode } }); +} + +export async function updateTheme(applicationId: string, theme: AppTheme) { + const url = `${baseURL}/themes/applications/${applicationId}`; + const payload = { + ...theme, + new: undefined, + }; + + return api.put(url, payload); +} + +export async function changeTheme(applicationId: string, theme: AppTheme) { + const url = `${baseURL}/applications/${applicationId}/themes/${theme.id}`; + + return api.patch(url, theme); +} + +export async function deleteTheme(themeId: string) { + const url = `${baseURL}/themes/${themeId}`; + + return api.delete(url); +} diff --git a/app/client/src/api/services/AppThemingApi/index.ts b/app/client/src/api/services/AppThemingApi/index.ts new file mode 100644 index 00000000000..d158c576401 --- /dev/null +++ b/app/client/src/api/services/AppThemingApi/index.ts @@ -0,0 +1 @@ +export * from "./api"; diff --git a/app/client/src/api/services/ConsolidatedPageLoadApi/api.ts b/app/client/src/api/services/ConsolidatedPageLoadApi/api.ts new file mode 100644 index 00000000000..4772853c901 --- /dev/null +++ b/app/client/src/api/services/ConsolidatedPageLoadApi/api.ts @@ -0,0 +1,20 @@ +import { api } from "api/core"; +import type { InitConsolidatedApi } from "sagas/InitSagas"; + +const BASE_URL = "v1/consolidated-api"; +const VIEW_URL = `${BASE_URL}/view`; +const EDIT_URL = `${BASE_URL}/edit`; + +export const getConsolidatedPageLoadDataView = async (params: { + applicationId?: string; + defaultPageId?: string; +}) => { + return api.get(VIEW_URL, { params }); +}; + +export const getConsolidatedPageLoadDataEdit = async (params: { + applicationId?: string; + defaultPageId?: string; +}) => { + return api.get(EDIT_URL, { params }); +}; diff --git a/app/client/src/api/services/ConsolidatedPageLoadApi/index.ts b/app/client/src/api/services/ConsolidatedPageLoadApi/index.ts new file mode 100644 index 00000000000..d158c576401 --- /dev/null +++ b/app/client/src/api/services/ConsolidatedPageLoadApi/index.ts @@ -0,0 +1 @@ +export * from "./api"; diff --git a/app/client/src/api/services/index.ts b/app/client/src/api/services/index.ts new file mode 100644 index 00000000000..b1e3b877481 --- /dev/null +++ b/app/client/src/api/services/index.ts @@ -0,0 +1,2 @@ +export * as AppThemingApi from "./AppThemingApi"; +export * as ConsolidatedPageLoadApi from "./ConsolidatedPageLoadApi"; diff --git a/app/client/src/api/types.ts b/app/client/src/api/types.ts new file mode 100644 index 00000000000..4ce60997eff --- /dev/null +++ b/app/client/src/api/types.ts @@ -0,0 +1,24 @@ +import type { AxiosError, AxiosResponse } from "axios"; + +export interface ApiResponseError { + code: string; + message: string; +} + +export interface ApiResponseMeta { + status: number; + success: boolean; + error?: ApiResponseError; +} + +export interface ApiResponse { + responseMeta: ApiResponseMeta; + data: T; + code?: string; +} + +export type AxiosResponseData = AxiosResponse>["data"]; + +export type ErrorHandler = ( + error: AxiosError, +) => Promise; diff --git a/app/client/src/ce/PluginActionEditor/components/PluginActionResponse/hooks/usePluginActionResponseTabs.tsx b/app/client/src/ce/PluginActionEditor/components/PluginActionResponse/hooks/usePluginActionResponseTabs.tsx new file mode 100644 index 00000000000..8e44395d5a0 --- /dev/null +++ b/app/client/src/ce/PluginActionEditor/components/PluginActionResponse/hooks/usePluginActionResponseTabs.tsx @@ -0,0 +1,87 @@ +import React from "react"; +import { usePluginActionContext } from "PluginActionEditor/PluginActionContext"; +import type { BottomTab } from "components/editorComponents/EntityBottomTabs"; +import { getIDEViewMode } from "selectors/ideSelectors"; +import { useSelector } from "react-redux"; +import { EditorViewMode } from "ee/entities/IDE/constants"; +import { DEBUGGER_TAB_KEYS } from "components/editorComponents/Debugger/helpers"; +import { + createMessage, + DEBUGGER_ERRORS, + DEBUGGER_HEADERS, + DEBUGGER_LOGS, + DEBUGGER_RESPONSE, +} from "ee/constants/messages"; +import ErrorLogs from "components/editorComponents/Debugger/Errors"; +import DebuggerLogs from "components/editorComponents/Debugger/DebuggerLogs"; +import { PluginType } from "entities/Action"; +import { ApiResponse } from "PluginActionEditor/components/PluginActionResponse/components/ApiResponse"; +import { ApiResponseHeaders } from "PluginActionEditor/components/PluginActionResponse/components/ApiResponseHeaders"; +import { noop } from "lodash"; +import { EditorTheme } from "components/editorComponents/CodeEditor/EditorConfig"; +import { getErrorCount } from "selectors/debuggerSelectors"; +import { getApiPaneDebuggerState } from "selectors/apiPaneSelectors"; + +function usePluginActionResponseTabs() { + const { action, actionResponse, plugin } = usePluginActionContext(); + + const IDEViewMode = useSelector(getIDEViewMode); + const errorCount = useSelector(getErrorCount); + + const { responseTabHeight } = useSelector(getApiPaneDebuggerState); + + const tabs: BottomTab[] = []; + + if (IDEViewMode === EditorViewMode.FullScreen) { + tabs.push( + { + key: DEBUGGER_TAB_KEYS.ERROR_TAB, + title: createMessage(DEBUGGER_ERRORS), + count: errorCount, + panelComponent: , + }, + { + key: DEBUGGER_TAB_KEYS.LOGS_TAB, + title: createMessage(DEBUGGER_LOGS), + panelComponent: , + }, + ); + } + + if (plugin.type === PluginType.API) { + return tabs.concat([ + { + key: DEBUGGER_TAB_KEYS.RESPONSE_TAB, + title: createMessage(DEBUGGER_RESPONSE), + panelComponent: ( + + ), + }, + { + key: DEBUGGER_TAB_KEYS.HEADER_TAB, + title: createMessage(DEBUGGER_HEADERS), + panelComponent: ( + + ), + }, + ]); + } + + return tabs; +} + +export default usePluginActionResponseTabs; diff --git a/app/client/src/ce/api/ApiUtils.test.ts b/app/client/src/ce/api/ApiUtils.test.ts deleted file mode 100644 index c1848f77605..00000000000 --- a/app/client/src/ce/api/ApiUtils.test.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { - apiRequestInterceptor, - apiSuccessResponseInterceptor, - apiFailureResponseInterceptor, - axiosConnectionAbortedCode, -} from "./ApiUtils"; -import type { AxiosRequestConfig, AxiosResponse } from "axios"; -import type { ActionExecutionResponse } from "api/ActionAPI"; -import { - createMessage, - ERROR_0, - SERVER_API_TIMEOUT_ERROR, -} from "ee/constants/messages"; -import { ERROR_CODES } from "ee/constants/ApiConstants"; -import * as Sentry from "@sentry/react"; - -describe("axios api interceptors", () => { - describe("Axios api request interceptor", () => { - it("adds timer to the request object", () => { - const request: AxiosRequestConfig = { - url: "https://app.appsmith.com/v1/api/actions/execute", - }; - const interceptedRequest = apiRequestInterceptor(request); - - expect(interceptedRequest).toHaveProperty("timer"); - }); - }); - - describe("Axios api response success interceptor", () => { - it("transforms an action execution response", () => { - const response: AxiosResponse = { - data: "Test data", - headers: { - "content-length": 123, - "content-type": "application/json", - }, - config: { - url: "https://app.appsmith.com/v1/api/actions/execute", - // @ts-expect-error: type mismatch - timer: 0, - }, - }; - - const interceptedResponse: ActionExecutionResponse = - apiSuccessResponseInterceptor(response); - - expect(interceptedResponse).toHaveProperty("clientMeta"); - expect(interceptedResponse.clientMeta).toHaveProperty("size"); - expect(interceptedResponse.clientMeta.size).toBe(123); - expect(interceptedResponse.clientMeta).toHaveProperty("duration"); - }); - - it("just returns the response data for other requests", () => { - const response: AxiosResponse = { - data: "Test data", - headers: { - "content-type": "application/json", - }, - config: { - url: "https://app.appsmith.com/v1/api/actions", - //@ts-expect-error: type mismatch - timer: 0, - }, - }; - - const interceptedResponse: ActionExecutionResponse = - apiSuccessResponseInterceptor(response); - - expect(interceptedResponse).toBe("Test data"); - }); - }); - - describe("Api response failure interceptor", () => { - beforeEach(() => { - jest.restoreAllMocks(); - }); - - it("checks for no internet errors", () => { - jest.spyOn(navigator, "onLine", "get").mockReturnValue(false); - const interceptedResponse = apiFailureResponseInterceptor({}); - - expect(interceptedResponse).rejects.toStrictEqual({ - message: createMessage(ERROR_0), - }); - }); - - it.todo("handles axios cancel gracefully"); - - it("handles timeout errors", () => { - const error = { - code: axiosConnectionAbortedCode, - message: "timeout of 10000ms exceeded", - }; - const interceptedResponse = apiFailureResponseInterceptor(error); - - expect(interceptedResponse).rejects.toStrictEqual({ - message: createMessage(SERVER_API_TIMEOUT_ERROR), - code: ERROR_CODES.REQUEST_TIMEOUT, - }); - }); - - it("checks for response meta", () => { - const sentrySpy = jest.spyOn(Sentry, "captureException"); - const response: AxiosResponse = { - data: "Test data", - headers: { - "content-type": "application/json", - }, - config: { - url: "https://app.appsmith.com/v1/api/user", - //@ts-expect-error: type mismatch - timer: 0, - }, - }; - - apiSuccessResponseInterceptor(response); - expect(sentrySpy).toHaveBeenCalled(); - - const interceptedFailureResponse = apiFailureResponseInterceptor({ - response, - }); - - expect(interceptedFailureResponse).rejects.toStrictEqual("Test data"); - expect(sentrySpy).toHaveBeenCalled(); - }); - }); -}); diff --git a/app/client/src/ce/api/ApiUtils.ts b/app/client/src/ce/api/ApiUtils.ts index b157db36686..9db9f45e1d7 100644 --- a/app/client/src/ce/api/ApiUtils.ts +++ b/app/client/src/ce/api/ApiUtils.ts @@ -1,289 +1,7 @@ -import { - createMessage, - ERROR_0, - ERROR_413, - ERROR_500, - GENERIC_API_EXECUTION_ERROR, - SERVER_API_TIMEOUT_ERROR, -} from "ee/constants/messages"; -import type { AxiosRequestConfig, AxiosResponse } from "axios"; -import axios from "axios"; -import { - API_STATUS_CODES, - ERROR_CODES, - SERVER_ERROR_CODES, -} from "ee/constants/ApiConstants"; -import log from "loglevel"; -import type { ActionExecutionResponse } from "api/ActionAPI"; -import store from "store"; -import { logoutUser } from "actions/userActions"; -import { AUTH_LOGIN_URL } from "constants/routes"; -import { getCurrentGitBranch } from "selectors/gitSyncSelectors"; -import getQueryParamsObject from "utils/getQueryParamsObject"; -import { UserCancelledActionExecutionError } from "sagas/ActionExecution/errorUtils"; -import AnalyticsUtil from "ee/utils/AnalyticsUtil"; -import { getAppsmithConfigs } from "ee/configs"; -import * as Sentry from "@sentry/react"; -import { CONTENT_TYPE_HEADER_KEY } from "constants/ApiEditorConstants/CommonApiConstants"; -import { isAirgapped } from "ee/utils/airgapHelpers"; -import { getCurrentEnvironmentId } from "ee/selectors/environmentSelectors"; import { UNUSED_ENV_ID } from "constants/EnvironmentContants"; -import { ID_EXTRACTION_REGEX } from "ee/constants/routes/appRoutes"; - -const executeActionRegex = /actions\/execute/; -const timeoutErrorRegex = /timeout of (\d+)ms exceeded/; - -export const axiosConnectionAbortedCode = "ECONNABORTED"; -const appsmithConfig = getAppsmithConfigs(); export const DEFAULT_ENV_ID = UNUSED_ENV_ID; -export const BLOCKED_ROUTES = [ - "v1/app-templates", - "v1/datasources/mocks", - "v1/usage-pulse", - "v1/applications/releaseItems", - "v1/saas", -]; - -export const BLOCKED_ROUTES_REGEX = new RegExp( - `^(${BLOCKED_ROUTES.join("|")})($|/)`, -); - -export const ENV_ENABLED_ROUTES = [ - `v1/datasources/${ID_EXTRACTION_REGEX}/structure`, - `/v1/datasources/${ID_EXTRACTION_REGEX}/trigger`, - "v1/actions/execute", - "v1/saas", -]; - -export const ENV_ENABLED_ROUTES_REGEX = new RegExp( - `^(${ENV_ENABLED_ROUTES.join("|")})($|/)`, -); - -// TODO: Fix this the next time the file is edited -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const makeExecuteActionResponse = (response: any): ActionExecutionResponse => ({ - ...response.data, - clientMeta: { - size: response.headers["content-length"], - duration: Number(performance.now() - response.config.timer).toFixed(), - }, -}); - -const is404orAuthPath = () => { - const pathName = window.location.pathname; - - return /^\/404/.test(pathName) || /^\/user\/\w+/.test(pathName); -}; - -export const blockedApiRoutesForAirgapInterceptor = async ( - config: AxiosRequestConfig, -) => { - const { url } = config; - - const isAirgappedInstance = isAirgapped(); - - if (isAirgappedInstance && url && BLOCKED_ROUTES_REGEX.test(url)) { - return Promise.resolve({ data: null, status: 200 }); - } - - return config; -}; - -// Request interceptor will add a timer property to the request. -// this will be used to calculate the time taken for an action -// execution request -export const apiRequestInterceptor = (config: AxiosRequestConfig) => { - config.headers = config.headers ?? {}; - - // Add header for CSRF protection. - const methodUpper = config.method?.toUpperCase(); - - if (methodUpper && methodUpper !== "GET" && methodUpper !== "HEAD") { - config.headers["X-Requested-By"] = "Appsmith"; - } - - const state = store.getState(); - const branch = getCurrentGitBranch(state) || getQueryParamsObject().branch; - - if (branch && config.headers) { - config.headers.branchName = branch; - } - - if (config.url?.indexOf("/git/") !== -1) { - config.timeout = 1000 * 120; // increase timeout for git specific APIs - } - - if (ENV_ENABLED_ROUTES_REGEX.test(config.url?.split("?")[0] || "")) { - // Add header for environment name - const activeEnv = getCurrentEnvironmentId(state); - - if (activeEnv && config.headers) { - config.headers["X-Appsmith-EnvironmentId"] = activeEnv; - } - } - - const anonymousId = AnalyticsUtil.getAnonymousId(); - - appsmithConfig.segment.enabled && - anonymousId && - (config.headers["x-anonymous-user-id"] = anonymousId); - - return { ...config, timer: performance.now() }; -}; - -// On success of an API, if the api is an action execution, -// add the client meta object with size and time taken info -// otherwise just return the data -export const apiSuccessResponseInterceptor = ( - response: AxiosResponse, -): AxiosResponse["data"] => { - if (response.config.url) { - if (response.config.url.match(executeActionRegex)) { - return makeExecuteActionResponse(response); - } - } - - if ( - response.headers[CONTENT_TYPE_HEADER_KEY] === "application/json" && - !response.data.responseMeta - ) { - Sentry.captureException(new Error("Api responded without response meta"), { - contexts: { response: response.data }, - }); - } - - return response.data; -}; - -// Handle different api failure scenarios -// TODO: Fix this the next time the file is edited -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const apiFailureResponseInterceptor = async (error: any) => { - // this can be extended to other errors we want to catch. - // in this case it is 413. - if (error && error?.response && error?.response.status === 413) { - return Promise.reject({ - ...error, - clientDefinedError: true, - statusCode: "AE-APP-4013", - message: createMessage(ERROR_413, 100), - pluginErrorDetails: { - appsmithErrorCode: "AE-APP-4013", - appsmithErrorMessage: createMessage(ERROR_413, 100), - errorType: "INTERNAL_ERROR", // this value is from the server, hence cannot construct enum type. - title: createMessage(GENERIC_API_EXECUTION_ERROR), - }, - }); - } - - // Return error when there is no internet - if (!window.navigator.onLine) { - return Promise.reject({ - ...error, - message: createMessage(ERROR_0), - }); - } - - // Return if the call was cancelled via cancel token - if (axios.isCancel(error)) { - throw new UserCancelledActionExecutionError(); - } - - // Return modified response if action execution failed - if (error.config && error.config.url.match(executeActionRegex)) { - return makeExecuteActionResponse(error.response); - } - - // Return error if any timeout happened in other api calls - if ( - error.code === axiosConnectionAbortedCode && - error.message && - error.message.match(timeoutErrorRegex) - ) { - return Promise.reject({ - ...error, - message: createMessage(SERVER_API_TIMEOUT_ERROR), - code: ERROR_CODES.REQUEST_TIMEOUT, - }); - } - - if (error.response) { - if (error.response.status === API_STATUS_CODES.SERVER_ERROR) { - return Promise.reject({ - ...error, - code: ERROR_CODES.SERVER_ERROR, - message: createMessage(ERROR_500), - }); - } - - // The request was made and the server responded with a status code - // that falls out of the range of 2xx - if (!is404orAuthPath()) { - const currentUrl = `${window.location.href}`; - - if (error.response.status === API_STATUS_CODES.REQUEST_NOT_AUTHORISED) { - // Redirect to login and set a redirect url. - store.dispatch( - logoutUser({ - redirectURL: `${AUTH_LOGIN_URL}?redirectUrl=${encodeURIComponent( - currentUrl, - )}`, - }), - ); - Sentry.captureException(error); - - return Promise.reject({ - ...error, - code: ERROR_CODES.REQUEST_NOT_AUTHORISED, - message: "Unauthorized. Redirecting to login page...", - show: false, - }); - } - - const errorData = error.response.data.responseMeta ?? {}; - - if ( - errorData.status === API_STATUS_CODES.RESOURCE_NOT_FOUND && - (SERVER_ERROR_CODES.RESOURCE_NOT_FOUND.includes(errorData.error.code) || - SERVER_ERROR_CODES.UNABLE_TO_FIND_PAGE.includes(errorData.error.code)) - ) { - Sentry.captureException(error); - - return Promise.reject({ - ...error, - code: ERROR_CODES.PAGE_NOT_FOUND, - message: "Resource Not Found", - show: false, - }); - } - } - - if (error.response.data.responseMeta) { - return Promise.resolve(error.response.data); - } - - Sentry.captureException(new Error("Api responded without response meta"), { - contexts: { response: error.response.data }, - }); - - return Promise.reject(error.response.data); - } else if (error.request) { - // The request was made but no response was received - // `error.request` is an instance of XMLHttpRequest in the browser and an instance of - // http.ClientRequest in node.js - log.error(error.request); - } else { - // Something happened in setting up the request that triggered an Error - log.error("Error", error.message); - } - - log.debug(error.config); - - return Promise.resolve(error); -}; - // function to get the default environment export const getDefaultEnvId = () => { return DEFAULT_ENV_ID; diff --git a/app/client/src/ce/constants/ApiConstants.tsx b/app/client/src/ce/constants/ApiConstants.tsx index 75ad958e788..b1c7a6c7ee2 100644 --- a/app/client/src/ce/constants/ApiConstants.tsx +++ b/app/client/src/ce/constants/ApiConstants.tsx @@ -1,3 +1,7 @@ +import type { CreateAxiosDefaults } from "axios"; +import { ID_EXTRACTION_REGEX } from "constants/routes"; +import { UNUSED_ENV_ID } from "constants/EnvironmentContants"; + export const REQUEST_TIMEOUT_MS = 20000; export const DEFAULT_ACTION_TIMEOUT = 10000; export const DEFAULT_EXECUTE_ACTION_TIMEOUT_MS = 15000; @@ -5,6 +9,44 @@ export const DEFAULT_TEST_DATA_SOURCE_TIMEOUT_MS = 30000; export const DEFAULT_APPSMITH_AI_QUERY_TIMEOUT_MS = 60000; export const FILE_UPLOAD_TRIGGER_TIMEOUT_MS = 60000; +export const DEFAULT_AXIOS_CONFIG: CreateAxiosDefaults = { + baseURL: "/api/", + timeout: REQUEST_TIMEOUT_MS, + headers: { + "Content-Type": "application/json", + }, + withCredentials: true, +}; + +export const EXECUTION_ACTION_REGEX = /actions\/execute/; +export const TIMEOUT_ERROR_REGEX = /timeout of (\d+)ms exceeded/; +export const AXIOS_CONNECTION_ABORTED_CODE = "ECONNABORTED"; + +export const DEFAULT_ENV_ID = UNUSED_ENV_ID; + +export const BLOCKED_ROUTES = [ + "v1/app-templates", + "v1/datasources/mocks", + "v1/usage-pulse", + "v1/applications/releaseItems", + "v1/saas", +]; + +export const BLOCKED_ROUTES_REGEX = new RegExp( + `^(${BLOCKED_ROUTES.join("|")})($|/)`, +); + +export const ENV_ENABLED_ROUTES = [ + `v1/datasources/${ID_EXTRACTION_REGEX}/structure`, + `/v1/datasources/${ID_EXTRACTION_REGEX}/trigger`, + "v1/actions/execute", + "v1/saas", +]; + +export const ENV_ENABLED_ROUTES_REGEX = new RegExp( + `^(${ENV_ENABLED_ROUTES.join("|")})($|/)`, +); + export enum API_STATUS_CODES { REQUEST_NOT_AUTHORISED = 401, RESOURCE_NOT_FOUND = 404, diff --git a/app/client/src/ce/constants/messages.ts b/app/client/src/ce/constants/messages.ts index ce9dd82b126..b9ca94d7ffd 100644 --- a/app/client/src/ce/constants/messages.ts +++ b/app/client/src/ce/constants/messages.ts @@ -555,7 +555,9 @@ export const NO_LOGS = () => "No logs to show"; export const NO_ERRORS = () => "No signs of trouble here!"; export const DEBUGGER_ERRORS = () => "Errors"; export const DEBUGGER_RESPONSE = () => "Response"; +export const DEBUGGER_HEADERS = () => "Headers"; export const DEBUGGER_LOGS = () => "Logs"; + export const INSPECT_ENTITY = () => "Inspect entity"; export const INSPECT_ENTITY_BLANK_STATE = () => "Select an entity to inspect"; export const VALUE_IS_INVALID = (propertyPath: string) => diff --git a/app/client/src/ce/entities/FeatureFlag.ts b/app/client/src/ce/entities/FeatureFlag.ts index 69ac4b7e9c6..63d49c89f77 100644 --- a/app/client/src/ce/entities/FeatureFlag.ts +++ b/app/client/src/ce/entities/FeatureFlag.ts @@ -21,8 +21,6 @@ export const FEATURE_FLAG = { "license_git_branch_protection_enabled", license_git_continuous_delivery_enabled: "license_git_continuous_delivery_enabled", - release_git_autocommit_feature_enabled: - "release_git_autocommit_feature_enabled", license_widget_rtl_support_enabled: "license_widget_rtl_support_enabled", ab_one_click_learning_popover_enabled: "ab_one_click_learning_popover_enabled", @@ -68,7 +66,6 @@ export const DEFAULT_FEATURE_FLAG_VALUE: FeatureFlags = { release_drag_drop_building_blocks_enabled: false, release_table_cell_label_value_enabled: false, license_git_branch_protection_enabled: false, - release_git_autocommit_feature_enabled: false, license_git_continuous_delivery_enabled: false, license_widget_rtl_support_enabled: false, ab_one_click_learning_popover_enabled: false, diff --git a/app/client/src/ce/pages/Editor/AppPluginActionEditor/AppPluginActionEditor.tsx b/app/client/src/ce/pages/Editor/AppPluginActionEditor/AppPluginActionEditor.tsx index e5f9366c05c..bad7cdba93c 100644 --- a/app/client/src/ce/pages/Editor/AppPluginActionEditor/AppPluginActionEditor.tsx +++ b/app/client/src/ce/pages/Editor/AppPluginActionEditor/AppPluginActionEditor.tsx @@ -2,7 +2,7 @@ import React from "react"; import { PluginActionEditor, PluginActionForm, - PluginActionResponsePane, + PluginActionResponse, } from "PluginActionEditor"; import { ConvertToModuleDisabler, @@ -17,7 +17,7 @@ const AppPluginActionEditor = () => { - + ); diff --git a/app/client/src/ce/sagas/PageSagas.tsx b/app/client/src/ce/sagas/PageSagas.tsx index 2ab7c28753e..12e52ba930c 100644 --- a/app/client/src/ce/sagas/PageSagas.tsx +++ b/app/client/src/ce/sagas/PageSagas.tsx @@ -149,7 +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"; +import { ConsolidatedPageLoadApi } from "api"; export const checkIfMigrationIsNeeded = ( fetchPageResponse?: FetchPageResponse, diff --git a/app/client/src/components/editorComponents/ActionExecutionInProgressView.tsx b/app/client/src/components/editorComponents/ActionExecutionInProgressView.tsx index 64af215f18a..627d1f1de39 100644 --- a/app/client/src/components/editorComponents/ActionExecutionInProgressView.tsx +++ b/app/client/src/components/editorComponents/ActionExecutionInProgressView.tsx @@ -63,9 +63,7 @@ const ActionExecutionInProgressView = ({
- ), - [API_RESPONSE_TYPE_OPTIONS.RAW]: ( - - ), - }[responseType]; -}; - -const StyledText = styled(Text)` - &&&& { - margin-top: 0; - } -`; - -interface NoResponseProps { - isButtonDisabled: boolean | undefined; - isQueryRunning: boolean; - onRunClick: () => void; -} -export const NoResponse = (props: NoResponseProps) => ( - - no-response-yet -
- {EMPTY_RESPONSE_FIRST_HALF()} - - {EMPTY_RESPONSE_LAST_HALF()} -
-
-); - function ApiResponseView(props: Props) { const { actionResponse = EMPTY_RESPONSE, - apiName, currentActionConfig, disabled, isRunning, - responseDataTypes, - responseDisplayFormat, theme = EditorTheme.LIGHT, } = props; - const hasFailed = actionResponse.statusCode - ? actionResponse.statusCode[0] !== "2" - : false; const dispatch = useDispatch(); const errorCount = useSelector(getErrorCount); @@ -234,256 +63,55 @@ function ApiResponseView(props: Props) { }); }; - const messages = actionResponse?.messages; - let responseHeaders = {}; - - // if no headers are present in the response, use the default body text. - if (actionResponse.headers) { - Object.entries(actionResponse.headers).forEach(([key, value]) => { - if (isArray(value) && value.length < 2) - return (responseHeaders = { - ...responseHeaders, - [key]: value[0], + // update the selected tab in the response pane. + const updateSelectedResponseTab = useCallback( + (tabKey: string) => { + if (tabKey === DEBUGGER_TAB_KEYS.ERROR_TAB) { + AnalyticsUtil.logEvent("OPEN_DEBUGGER", { + source: "API_PANE", }); + } - return (responseHeaders = { - ...responseHeaders, - [key]: value, - }); - }); - } else { - // if the response headers is empty show an empty object. - responseHeaders = {}; - } - - const onResponseTabSelect = (tab: string) => { - dispatch( - setActionResponseDisplayFormat({ - id: currentActionConfig?.id || "", - field: "responseDisplayFormat", - value: tab, - }), - ); - }; - - let filteredResponseDataTypes: { key: string; title: string }[] = [ - ...responseDataTypes, - ]; - - if (!!actionResponse.body && !isArray(actionResponse.body)) { - filteredResponseDataTypes = responseDataTypes.filter( - (item) => item.key !== API_RESPONSE_TYPE_OPTIONS.TABLE, - ); - - if (responseDisplayFormat.title === API_RESPONSE_TYPE_OPTIONS.TABLE) { - onResponseTabSelect(filteredResponseDataTypes[0]?.title); - } - } - - const responseTabs = - filteredResponseDataTypes && - filteredResponseDataTypes.map((dataType, index) => { - return { - index: index, - key: dataType.key, - title: dataType.title, - panelComponent: responseTabComponent( - dataType.key, - actionResponse?.body, - responseTabHeight, - ), - }; - }); - - const segmentedControlOptions = - responseTabs && - responseTabs.map((item) => { - return { value: item.key, label: item.title }; - }); - - const [selectedControl, setSelectedControl] = useState( - segmentedControlOptions[0]?.value, + dispatch(setApiPaneDebuggerState({ open: true, selectedTab: tabKey })); + }, + [dispatch], ); - const selectedTabIndex = - filteredResponseDataTypes && - filteredResponseDataTypes.findIndex( - (dataType) => dataType.title === responseDisplayFormat?.title, - ); - - // update the selected tab in the response pane. - const updateSelectedResponseTab = useCallback((tabKey: string) => { - if (tabKey === DEBUGGER_TAB_KEYS.ERROR_TAB) { - AnalyticsUtil.logEvent("OPEN_DEBUGGER", { - source: "API_PANE", - }); - } - - dispatch(setApiPaneDebuggerState({ open: true, selectedTab: tabKey })); - }, []); - // update the height of the response pane on resize. - const updateResponsePaneHeight = useCallback((height: number) => { - dispatch(setApiPaneDebuggerState({ responseTabHeight: height })); - }, []); + const updateResponsePaneHeight = useCallback( + (height: number) => { + dispatch(setApiPaneDebuggerState({ responseTabHeight: height })); + }, + [dispatch], + ); - // get request timestamp formatted to human readable format. - const responseState = getUpdateTimestamp(actionResponse.request); - // action source for analytics. - const actionSource: SourceEntity = { - type: ENTITY_TYPE.ACTION, - name: currentActionConfig ? currentActionConfig.name : "API", - id: currentActionConfig?.id || "", - }; const tabs: BottomTab[] = [ { - key: "response", + key: DEBUGGER_TAB_KEYS.RESPONSE_TAB, title: createMessage(DEBUGGER_RESPONSE), panelComponent: ( - - - {Array.isArray(messages) && messages.length > 0 && ( - - {messages.map((msg, i) => ( - - {msg} - - ))} - - )} - {isRunning && ( - - )} - {hasFailed && !isRunning ? ( - - - - Your API failed to execute - {actionResponse.pluginErrorDetails && ":"} - - {actionResponse.pluginErrorDetails && ( - <> -
- {actionResponse.pluginErrorDetails.downstreamErrorMessage} -
- {actionResponse.pluginErrorDetails.downstreamErrorCode && ( - - )} - - )} - -
- {actionResponse.request && ( - e.stopPropagation()} - > - - - )} -
- ) : ( - - {isEmpty(actionResponse.statusCode) ? ( - - ) : ( - - {isString(actionResponse?.body) && - isHtml(actionResponse?.body) ? ( - - ) : responseTabs && - responseTabs.length > 0 && - selectedTabIndex !== -1 ? ( - - - { - setSelectedControl(value); - onResponseTabSelect(value); - }} - options={segmentedControlOptions} - value={selectedControl} - /> - - {responseTabComponent( - selectedControl || segmentedControlOptions[0]?.value, - actionResponse?.body, - responseTabHeight, - )} - - ) : null} - - )} - - )} -
+ ), }, { - key: "headers", - title: "Headers", + key: DEBUGGER_TAB_KEYS.HEADER_TAB, + title: createMessage(DEBUGGER_HEADERS), panelComponent: ( - - {hasFailed && !isRunning && ( - - {createMessage(CHECK_REQUEST_BODY)} - - )} - - {isEmpty(actionResponse.statusCode) ? ( - - ) : ( - - )} - - + ), }, ]; @@ -499,7 +127,7 @@ function ApiResponseView(props: Props) { { key: DEBUGGER_TAB_KEYS.LOGS_TAB, title: createMessage(DEBUGGER_LOGS), - panelComponent: , + panelComponent: , }, ); } @@ -508,7 +136,7 @@ function ApiResponseView(props: Props) { //TODO: move this to a common place const toggleHide = useCallback( () => dispatch(setApiPaneDebuggerState({ open: !open })), - [open], + [dispatch, open], ); return ( diff --git a/app/client/src/components/editorComponents/JSResponseView.tsx b/app/client/src/components/editorComponents/JSResponseView.tsx index 42543824be7..91d8519abe0 100644 --- a/app/client/src/components/editorComponents/JSResponseView.tsx +++ b/app/client/src/components/editorComponents/JSResponseView.tsx @@ -27,13 +27,13 @@ import { DEBUGGER_TAB_KEYS } from "./Debugger/helpers"; import type { BottomTab } from "./EntityBottomTabs"; import EntityBottomTabs from "./EntityBottomTabs"; import { getIsSavingEntity } from "selectors/editorSelectors"; -import { getJSResponseViewState } from "./utils"; +import { getJSResponseViewState, JSResponseState } from "./utils"; import { getFilteredErrors } from "selectors/debuggerSelectors"; +import { NoResponse } from "PluginActionEditor/components/PluginActionResponse/components/NoResponse"; import { - NoResponse, ResponseTabErrorContainer, ResponseTabErrorContent, -} from "./ApiResponseView"; +} from "PluginActionEditor/components/PluginActionResponse/components/ApiResponse"; import LogHelper from "./Debugger/ErrorLogs/components/LogHelper"; import LOG_TYPE from "entities/AppsmithConsole/logtype"; import type { Log, SourceEntity } from "entities/AppsmithConsole"; @@ -45,7 +45,7 @@ import { EditorViewMode } from "ee/entities/IDE/constants"; import ErrorLogs from "./Debugger/Errors"; import { isBrowserExecutionAllowed } from "ee/utils/actionExecutionUtils"; import JSRemoteExecutionView from "ee/components/JSRemoteExecutionView"; -import { IDEBottomView, ViewHideBehaviour } from "../../IDE"; +import { IDEBottomView, ViewHideBehaviour } from "IDE"; const ResponseTabWrapper = styled.div` display: flex; @@ -66,15 +66,6 @@ const NoReturnValueWrapper = styled.div` padding-top: ${(props) => props.theme.spaces[6]}px; `; -export enum JSResponseState { - IsExecuting = "IsExecuting", - IsDirty = "IsDirty", - IsUpdating = "IsUpdating", - NoResponse = "NoResponse", - ShowResponse = "ShowResponse", - NoReturnValue = "NoReturnValue", -} - interface ReduxStateProps { errorCount: number; } @@ -229,8 +220,8 @@ function JSResponseView(props: Props) { <> {responseStatus === JSResponseState.NoResponse && ( { - const doc = new DOMParser().parseFromString(str, "text/html"); - - return Array.from(doc.body.childNodes).some( - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (node: any) => node.nodeType === 1, - ); -}; +export enum JSResponseState { + IsExecuting = "IsExecuting", + IsDirty = "IsDirty", + IsUpdating = "IsUpdating", + NoResponse = "NoResponse", + ShowResponse = "ShowResponse", + NoReturnValue = "NoReturnValue", +} /** * Returns state of the JSResponseview editor component diff --git a/app/client/src/constants/ApiEditorConstants/CommonApiConstants.ts b/app/client/src/constants/ApiEditorConstants/CommonApiConstants.ts index 978879ba5e5..eacd44f72e6 100644 --- a/app/client/src/constants/ApiEditorConstants/CommonApiConstants.ts +++ b/app/client/src/constants/ApiEditorConstants/CommonApiConstants.ts @@ -85,29 +85,14 @@ export const HTTP_METHODS_DEFAULT_FORMAT_TYPES: Record = { PATCH: POST_BODY_FORMAT_OPTIONS.JSON, }; -export const DEFAULT_PROVIDER_OPTION = "Business Software"; export const CONTENT_TYPE_HEADER_KEY = "content-type"; -export enum ApiResponseTypes { +export enum ResponseDisplayFormats { JSON = "JSON", TABLE = "TABLE", RAW = "RAW", } -// export const ApiResponseTypesOptions: -export const API_RESPONSE_TYPE_OPTIONS: { - [key in keyof typeof ApiResponseTypes]: string; -} = { - JSON: "JSON", - TABLE: "TABLE", - RAW: "RAW", -}; -export const POST_BODY_FORMATS = Object.values(POST_BODY_FORMAT_OPTIONS).map( - (option) => { - return option; - }, -); - export const POST_BODY_FORMAT_OPTIONS_ARRAY = Object.values( POST_BODY_FORMAT_OPTIONS, ); @@ -133,6 +118,4 @@ export interface MULTI_PART_DROPDOWN_OPTION { export const MULTI_PART_DROPDOWN_OPTIONS: MULTI_PART_DROPDOWN_OPTION[] = Object.values(MultiPartOptionTypes).map((value) => ({ label: value, value })); -export const DEFAULT_MULTI_PART_DROPDOWN_WIDTH = "77px"; -export const DEFAULT_MULTI_PART_DROPDOWN_HEIGHT = "100%"; export const DEFAULT_MULTI_PART_DROPDOWN_PLACEHOLDER = "Type"; diff --git a/app/client/src/ee/PluginActionEditor/components/PluginActionResponse/hooks/usePluginActionResponseTabs.tsx b/app/client/src/ee/PluginActionEditor/components/PluginActionResponse/hooks/usePluginActionResponseTabs.tsx new file mode 100644 index 00000000000..0e7b0e46546 --- /dev/null +++ b/app/client/src/ee/PluginActionEditor/components/PluginActionResponse/hooks/usePluginActionResponseTabs.tsx @@ -0,0 +1 @@ +export { default } from "ce/PluginActionEditor/components/PluginActionResponse/hooks/usePluginActionResponseTabs"; diff --git a/app/client/src/layoutSystems/anvil/common/AnvilFlexComponent.tsx b/app/client/src/layoutSystems/anvil/common/AnvilFlexComponent.tsx index f0d1f37c384..b59ee2bf8b3 100644 --- a/app/client/src/layoutSystems/anvil/common/AnvilFlexComponent.tsx +++ b/app/client/src/layoutSystems/anvil/common/AnvilFlexComponent.tsx @@ -15,7 +15,7 @@ import { Layers } from "constants/Layers"; import { noop } from "utils/AppsmithUtils"; import { convertFlexGrowToFlexBasis } from "../sectionSpaceDistributor/utils/spaceDistributionEditorUtils"; import styles from "./styles.module.css"; -import { AnvilDataAttributes } from "widgets/wds/constants"; +import { AnvilDataAttributes } from "modules/ui-builder/ui/wds/constants"; const anvilWidgetStyleProps: CSSProperties = { position: "relative", diff --git a/app/client/src/layoutSystems/anvil/editor/canvasArenas/hooks/useAnvilDnDListenerStates.ts b/app/client/src/layoutSystems/anvil/editor/canvasArenas/hooks/useAnvilDnDListenerStates.ts index 056c09f07ac..0b08fa248ba 100644 --- a/app/client/src/layoutSystems/anvil/editor/canvasArenas/hooks/useAnvilDnDListenerStates.ts +++ b/app/client/src/layoutSystems/anvil/editor/canvasArenas/hooks/useAnvilDnDListenerStates.ts @@ -15,7 +15,7 @@ import { getWidgetHierarchy } from "layoutSystems/anvil/utils/paste/utils"; import type { AnvilGlobalDnDStates } from "../../canvas/hooks/useAnvilGlobalDnDStates"; import { getWidgets } from "sagas/selectors"; import { useMemo } from "react"; -import { WDSZoneWidget } from "widgets/wds/WDSZoneWidget"; +import { WDSZoneWidget } from "modules/ui-builder/ui/wds/WDSZoneWidget"; import { useAnvilWidgetElevation } from "../../canvas/providers/AnvilWidgetElevationProvider"; interface AnvilDnDListenerStatesProps { diff --git a/app/client/src/layoutSystems/anvil/editor/canvasArenas/hooks/useAnvilWidgetDrop.ts b/app/client/src/layoutSystems/anvil/editor/canvasArenas/hooks/useAnvilWidgetDrop.ts index 8e39600bae3..9e36ffe8836 100644 --- a/app/client/src/layoutSystems/anvil/editor/canvasArenas/hooks/useAnvilWidgetDrop.ts +++ b/app/client/src/layoutSystems/anvil/editor/canvasArenas/hooks/useAnvilWidgetDrop.ts @@ -7,7 +7,7 @@ import type { AnvilHighlightInfo } from "layoutSystems/anvil/utils/anvilTypes"; import { useCallback } from "react"; import { useDispatch } from "react-redux"; import type { AnvilDnDListenerStates } from "./useAnvilDnDListenerStates"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; export const useAnvilWidgetDrop = ( canvasId: string, diff --git a/app/client/src/layoutSystems/anvil/editor/canvasArenas/utils/utils.ts b/app/client/src/layoutSystems/anvil/editor/canvasArenas/utils/utils.ts index e84c9ff65e1..f5e615b6f60 100644 --- a/app/client/src/layoutSystems/anvil/editor/canvasArenas/utils/utils.ts +++ b/app/client/src/layoutSystems/anvil/editor/canvasArenas/utils/utils.ts @@ -7,7 +7,7 @@ import WidgetFactory from "WidgetProvider/factory"; import type { CanvasWidgetsReduxState } from "reducers/entityReducers/canvasWidgetsReducer"; import type { DragDetails } from "reducers/uiReducers/dragResizeReducer"; import { AnvilDraggedWidgetTypesEnum } from "../types"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import { HIGHLIGHT_SIZE } from "layoutSystems/anvil/utils/constants"; import { getWidgetHierarchy } from "layoutSystems/anvil/utils/paste/utils"; diff --git a/app/client/src/layoutSystems/anvil/editor/hooks/useAnvilWidgetStyles.ts b/app/client/src/layoutSystems/anvil/editor/hooks/useAnvilWidgetStyles.ts index 65dd6ecb5eb..80bf9d9e235 100644 --- a/app/client/src/layoutSystems/anvil/editor/hooks/useAnvilWidgetStyles.ts +++ b/app/client/src/layoutSystems/anvil/editor/hooks/useAnvilWidgetStyles.ts @@ -4,7 +4,7 @@ import { useSelector } from "react-redux"; import { useWidgetBorderStyles } from "layoutSystems/anvil/common/hooks/useWidgetBorderStyles"; import type { AppState } from "ee/reducers"; import { getIsNewWidgetBeingDragged } from "sagas/selectors"; -import { AnvilDataAttributes } from "widgets/wds/constants"; +import { AnvilDataAttributes } from "modules/ui-builder/ui/wds/constants"; export const useAnvilWidgetStyles = ( widgetId: string, diff --git a/app/client/src/layoutSystems/anvil/integrations/sagas/anvilDraggingSagas/anvilDraggingSagas.test.ts b/app/client/src/layoutSystems/anvil/integrations/sagas/anvilDraggingSagas/anvilDraggingSagas.test.ts index f99eee1953f..c0db3545bf0 100644 --- a/app/client/src/layoutSystems/anvil/integrations/sagas/anvilDraggingSagas/anvilDraggingSagas.test.ts +++ b/app/client/src/layoutSystems/anvil/integrations/sagas/anvilDraggingSagas/anvilDraggingSagas.test.ts @@ -6,9 +6,9 @@ import { LayoutComponentTypes } from "layoutSystems/anvil/utils/anvilTypes"; import { expectSaga } from "redux-saga-test-plan"; import { getWidgets } from "sagas/selectors"; import { registerWidgets } from "WidgetProvider/factory/registrationHelper"; -import { WDSSectionWidget } from "widgets/wds/WDSSectionWidget"; -import { WDSZoneWidget } from "widgets/wds/WDSZoneWidget"; -import { WDSButtonWidget } from "widgets/wds/WDSButtonWidget"; +import { WDSSectionWidget } from "modules/ui-builder/ui/wds/WDSSectionWidget"; +import { WDSZoneWidget } from "modules/ui-builder/ui/wds/WDSZoneWidget"; +import { WDSButtonWidget } from "modules/ui-builder/ui/wds/WDSButtonWidget"; import { getCanvasWidth, getIsAutoLayoutMobileBreakPoint, @@ -20,7 +20,7 @@ import { registerLayoutComponents } from "layoutSystems/anvil/utils/layouts/layo import { getIsAnvilLayout } from "../../selectors"; import { selectWidgetInitAction } from "actions/widgetSelectionActions"; import { SelectionRequestType } from "sagas/WidgetSelectUtils"; -import { WDSModalWidget } from "widgets/wds/WDSModalWidget"; +import { WDSModalWidget } from "modules/ui-builder/ui/wds/WDSModalWidget"; import { generateMockDataWithTwoSections } from "./mockData.helper"; import type { AnvilMoveWidgetsPayload } from "../../actions/actionTypes"; import { diff --git a/app/client/src/layoutSystems/anvil/integrations/sagas/anvilWidgetAdditionSagas/index.ts b/app/client/src/layoutSystems/anvil/integrations/sagas/anvilWidgetAdditionSagas/index.ts index e57da857c10..c121a458358 100644 --- a/app/client/src/layoutSystems/anvil/integrations/sagas/anvilWidgetAdditionSagas/index.ts +++ b/app/client/src/layoutSystems/anvil/integrations/sagas/anvilWidgetAdditionSagas/index.ts @@ -11,7 +11,7 @@ import { type ReduxAction, } from "ee/constants/ReduxActionConstants"; import type { WidgetProps } from "widgets/BaseWidget"; -import { WDS_V2_WIDGET_MAP } from "widgets/wds/constants"; +import { WDS_V2_WIDGET_MAP } from "modules/ui-builder/ui/wds/constants"; import { MAIN_CONTAINER_WIDGET_ID } from "constants/WidgetConstants"; import { getMainCanvasLastRowHighlight } from "../anvilDraggingSagas/helpers"; import { updateAndSaveAnvilLayout } from "layoutSystems/anvil/utils/anvilChecksUtils"; diff --git a/app/client/src/layoutSystems/anvil/layoutComponents/components/section/index.tsx b/app/client/src/layoutSystems/anvil/layoutComponents/components/section/index.tsx index d3b9766adfe..4b30af0c6b3 100644 --- a/app/client/src/layoutSystems/anvil/layoutComponents/components/section/index.tsx +++ b/app/client/src/layoutSystems/anvil/layoutComponents/components/section/index.tsx @@ -7,7 +7,7 @@ import { import WidgetRow from "../WidgetRow"; import { SectionRow } from "./SectionRow"; import type { FlexLayoutProps } from "../FlexLayout"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import { SectionSpaceDistributor } from "layoutSystems/anvil/sectionSpaceDistributor/SectionSpaceDistributor"; class Section extends WidgetRow { diff --git a/app/client/src/layoutSystems/anvil/utils/anvilChecksUtils.ts b/app/client/src/layoutSystems/anvil/utils/anvilChecksUtils.ts index ebb3284f353..00bb19299d9 100644 --- a/app/client/src/layoutSystems/anvil/utils/anvilChecksUtils.ts +++ b/app/client/src/layoutSystems/anvil/utils/anvilChecksUtils.ts @@ -4,7 +4,7 @@ import { updateAnvilParentPostWidgetDeletion } from "layoutSystems/anvil/utils/l import type { FlattenedWidgetProps } from "WidgetProvider/constants"; import { MAIN_CONTAINER_WIDGET_ID } from "constants/WidgetConstants"; import type { CanvasWidgetsReduxState } from "reducers/entityReducers/canvasWidgetsReducer"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import { updateSectionWithDefaultSpaceDistribution, updateSectionsDistributedSpace, diff --git a/app/client/src/layoutSystems/anvil/utils/constants.ts b/app/client/src/layoutSystems/anvil/utils/constants.ts index ca127656209..e00c88b9fd8 100644 --- a/app/client/src/layoutSystems/anvil/utils/constants.ts +++ b/app/client/src/layoutSystems/anvil/utils/constants.ts @@ -1,6 +1,6 @@ import { FlexLayerAlignment } from "layoutSystems/common/utils/constants"; import type { HighlightPayload, HighlightRenderInfo } from "./anvilTypes"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; export const MOBILE_BREAKPOINT = 480; diff --git a/app/client/src/layoutSystems/anvil/utils/layouts/update/mainCanvasLayoutUtils.ts b/app/client/src/layoutSystems/anvil/utils/layouts/update/mainCanvasLayoutUtils.ts index 73c01e719ae..0b389c9e68f 100644 --- a/app/client/src/layoutSystems/anvil/utils/layouts/update/mainCanvasLayoutUtils.ts +++ b/app/client/src/layoutSystems/anvil/utils/layouts/update/mainCanvasLayoutUtils.ts @@ -11,7 +11,7 @@ import LayoutFactory from "layoutSystems/anvil/layoutComponents/LayoutFactory"; import { call } from "redux-saga/effects"; import { severTiesFromParents, transformMovedWidgets } from "./moveUtils"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import { MAIN_CONTAINER_WIDGET_ID } from "constants/WidgetConstants"; import { addNewAnvilWidgetToDSL } from "layoutSystems/anvil/integrations/sagas/anvilWidgetAdditionSagas/helpers"; diff --git a/app/client/src/layoutSystems/anvil/utils/layouts/update/sectionUtils.ts b/app/client/src/layoutSystems/anvil/utils/layouts/update/sectionUtils.ts index 741af57edff..9a4f5df405e 100644 --- a/app/client/src/layoutSystems/anvil/utils/layouts/update/sectionUtils.ts +++ b/app/client/src/layoutSystems/anvil/utils/layouts/update/sectionUtils.ts @@ -13,7 +13,7 @@ import type { CanvasWidgetsReduxState } from "reducers/entityReducers/canvasWidg import { call } from "redux-saga/effects"; import { severTiesFromParents, transformMovedWidgets } from "./moveUtils"; import type { FlattenedWidgetProps } from "WidgetProvider/constants"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import { addNewAnvilWidgetToDSL } from "layoutSystems/anvil/integrations/sagas/anvilWidgetAdditionSagas/helpers"; export function* createSectionAndAddWidget( diff --git a/app/client/src/layoutSystems/anvil/utils/layouts/update/zoneUtils.ts b/app/client/src/layoutSystems/anvil/utils/layouts/update/zoneUtils.ts index ca50e6bda37..acffc109491 100644 --- a/app/client/src/layoutSystems/anvil/utils/layouts/update/zoneUtils.ts +++ b/app/client/src/layoutSystems/anvil/utils/layouts/update/zoneUtils.ts @@ -11,7 +11,7 @@ import { call } from "redux-saga/effects"; import { addWidgetsToChildTemplate } from "./additionUtils"; import type { FlattenedWidgetProps } from "WidgetProvider/constants"; import { isLargeWidget } from "../../widgetUtils"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import { moveWidgets, severTiesFromParents, diff --git a/app/client/src/layoutSystems/anvil/utils/paste/sectionPasteUtils.ts b/app/client/src/layoutSystems/anvil/utils/paste/sectionPasteUtils.ts index d6e5098140a..f0b7ee22d6c 100644 --- a/app/client/src/layoutSystems/anvil/utils/paste/sectionPasteUtils.ts +++ b/app/client/src/layoutSystems/anvil/utils/paste/sectionPasteUtils.ts @@ -6,7 +6,7 @@ import type { } from "./types"; import { getDestinedParent } from "./destinationUtils"; import type { FlattenedWidgetProps } from "WidgetProvider/constants"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import type { LayoutProps } from "../anvilTypes"; import { all, call } from "redux-saga/effects"; import { addPastedWidgets } from "./utils"; diff --git a/app/client/src/layoutSystems/anvil/utils/sectionOperationUtils.ts b/app/client/src/layoutSystems/anvil/utils/sectionOperationUtils.ts index 7716fafb96a..f7febdf4c76 100644 --- a/app/client/src/layoutSystems/anvil/utils/sectionOperationUtils.ts +++ b/app/client/src/layoutSystems/anvil/utils/sectionOperationUtils.ts @@ -13,7 +13,7 @@ import { generateReactKey } from "utils/generators"; import type BaseLayoutComponent from "../layoutComponents/BaseLayoutComponent"; import LayoutFactory from "../layoutComponents/LayoutFactory"; import { defaultHighlightRenderInfo } from "../utils/constants"; -import { anvilWidgets } from "widgets/wds/constants"; +import { anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import { getUpdatedListOfWidgetsAfterAddingNewWidget } from "../integrations/sagas/anvilWidgetAdditionSagas"; /** diff --git a/app/client/src/layoutSystems/withLayoutSystemWidgetHOC.test.tsx b/app/client/src/layoutSystems/withLayoutSystemWidgetHOC.test.tsx index 0d7e7218631..899c47c16cf 100644 --- a/app/client/src/layoutSystems/withLayoutSystemWidgetHOC.test.tsx +++ b/app/client/src/layoutSystems/withLayoutSystemWidgetHOC.test.tsx @@ -3,9 +3,9 @@ import React from "react"; import * as editorSelectors from "selectors/editorSelectors"; import { WidgetTypeFactories } from "test/factories/Widgets/WidgetTypeFactories"; import { render } from "test/testUtils"; -import InputWidget from "widgets/InputWidgetV2/widget"; +import InputWidget from "widgets/InputWidgetV2"; import { ModalWidget } from "widgets/ModalWidget/widget"; -import { WDSModalWidget } from "widgets/wds/WDSModalWidget/widget"; +import { WDSModalWidget } from "modules/ui-builder/ui/wds//WDSModalWidget/widget"; import { withLayoutSystemWidgetHOC } from "./withLayoutSystemWidgetHOC"; import { LayoutSystemTypes } from "./types"; import * as layoutSystemSelectors from "selectors/layoutSystemSelectors"; diff --git a/app/client/src/widgets/wds/Container.tsx b/app/client/src/modules/ui-builder/ui/wds/Container.tsx similarity index 100% rename from app/client/src/widgets/wds/Container.tsx rename to app/client/src/modules/ui-builder/ui/wds/Container.tsx diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/__tests__/helpers.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/__tests__/helpers.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/__tests__/helpers.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/__tests__/helpers.test.ts diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/component/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/component/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/component/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/component/types.ts diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/config/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/config/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/config/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/config/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/constants.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/constants.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/constants.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/constants.ts diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/helpers.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/helpers.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/helpers.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/helpers.ts diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/types.ts diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSBaseInputWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSBaseInputWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSBaseInputWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/component/Container.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/Container.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/component/Container.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/Container.tsx diff --git a/app/client/src/widgets/wds/WDSButtonWidget/component/RecaptchaV2.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/RecaptchaV2.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/component/RecaptchaV2.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/RecaptchaV2.tsx diff --git a/app/client/src/widgets/wds/WDSButtonWidget/component/RecaptchaV3.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/RecaptchaV3.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/component/RecaptchaV3.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/RecaptchaV3.tsx diff --git a/app/client/src/widgets/wds/WDSButtonWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/index.tsx diff --git a/app/client/src/widgets/wds/WDSButtonWidget/component/useRecaptcha.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/useRecaptcha.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/component/useRecaptcha.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/component/useRecaptcha.tsx diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSButtonWidget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/index.tsx diff --git a/app/client/src/widgets/wds/WDSButtonWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSButtonWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSButtonWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSButtonWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/featuresConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/featuresConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/featuresConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/featuresConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/validations/defaultSelectedValuesValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/validations/defaultSelectedValuesValidation.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/validations/defaultSelectedValuesValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/validations/defaultSelectedValuesValidation.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/validations/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/validations/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/validations/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/propertyPaneConfig/validations/index.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/widget/helpers.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/widget/helpers.ts similarity index 79% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/widget/helpers.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/widget/helpers.ts index 8437834c4e7..aa0f5fee748 100644 --- a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/widget/helpers.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/widget/helpers.ts @@ -1,4 +1,4 @@ -import type { Validation } from "widgets/wds/WDSInputWidget/widget/types"; +import type { Validation } from "modules/ui-builder/ui/wds/WDSInputWidget/widget/types"; import type { CheckboxGroupWidgetProps } from "./types"; diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSCheckboxGroupWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxGroupWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxGroupWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/featuresConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/featuresConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/featuresConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/featuresConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSCheckboxWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCheckboxWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCheckboxWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.test.ts similarity index 94% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.test.ts index d53d00b39e5..2825bdf1270 100644 --- a/app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.test.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.test.ts @@ -1,4 +1,4 @@ -import type { WidgetProps } from "../../../../BaseWidget"; +import type { WidgetProps } from "widgets/BaseWidget"; import { handleWidgetTypeUpdate } from "./contentConfig"; describe("handleWidgetTypeUpdate", () => { diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.ts similarity index 97% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.ts index 9e41483d389..48eb11ad003 100644 --- a/app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/contentConfig.ts @@ -1,8 +1,8 @@ import { ValidationTypes } from "constants/WidgetValidation"; import { EvaluationSubstitutionType } from "entities/DataTree/dataTreeFactory"; import { AutocompleteDataType } from "utils/autocomplete/AutocompleteDataType"; -import type { PropertyUpdates } from "../../../../../WidgetProvider/constants"; -import type { WidgetProps } from "../../../../BaseWidget"; +import type { PropertyUpdates } from "WidgetProvider/constants"; +import type { WidgetProps } from "widgets/BaseWidget"; import type { WDSComboBoxWidgetProps } from "../../widget/types"; import { optionsCustomValidation } from "./validations"; diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/index.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts similarity index 98% rename from app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts index 356d2155a85..331cf8dae83 100644 --- a/app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts @@ -1,6 +1,6 @@ import type { ValidationResponse } from "constants/WidgetValidation"; import type { LoDashStatic } from "lodash"; -import type { WidgetProps } from "../../../../../BaseWidget"; +import type { WidgetProps } from "widgets/BaseWidget"; interface ValidationErrorMessage { name: string; diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/widget/helpers.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/widget/helpers.ts similarity index 78% rename from app/client/src/widgets/wds/WDSComboBoxWidget/widget/helpers.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/widget/helpers.ts index b50216697ad..175b9665e5d 100644 --- a/app/client/src/widgets/wds/WDSComboBoxWidget/widget/helpers.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/widget/helpers.ts @@ -1,4 +1,4 @@ -import type { Validation } from "widgets/wds/WDSInputWidget/widget/types"; +import type { Validation } from "modules/ui-builder/ui/wds/WDSInputWidget/widget/types"; import type { WDSComboBoxWidgetProps } from "./types"; export function validateInput(props: WDSComboBoxWidgetProps): Validation { diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSComboBoxWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSComboBoxWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/index.tsx diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/component/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/types.ts similarity index 79% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/component/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/types.ts index 4ce49a6e856..283223c9c71 100644 --- a/app/client/src/widgets/wds/WDSCurrencyInputWidget/component/types.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/types.ts @@ -1,5 +1,5 @@ import type { CurrencyTypeOptions } from "constants/Currency"; -import type { BaseInputComponentProps } from "widgets/wds/WDSBaseInputWidget"; +import type { BaseInputComponentProps } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; export interface CurrencyInputComponentProps extends BaseInputComponentProps { currencyCode?: string; diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/component/utilities.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/utilities.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/component/utilities.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/utilities.test.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/component/utilities.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/utilities.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/component/utilities.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/component/utilities.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/defaultsConfig.ts similarity index 86% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/defaultsConfig.ts index bb423d8bc9d..1efd682612b 100644 --- a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/defaultsConfig.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/defaultsConfig.ts @@ -1,4 +1,4 @@ -import { WDSBaseInputWidget } from "widgets/wds/WDSBaseInputWidget"; +import { WDSBaseInputWidget } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; import { ResponsiveBehavior } from "layoutSystems/common/utils/constants"; import type { WidgetDefaultProps } from "WidgetProvider/constants"; diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/featuresConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/featuresConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/featuresConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/featuresConfig.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/contentConfig.ts similarity index 96% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/contentConfig.ts index 4df85db375a..da27a0d53b8 100644 --- a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/contentConfig.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/contentConfig.ts @@ -1,7 +1,7 @@ import { CurrencyTypeOptions } from "constants/Currency"; import { ValidationTypes } from "constants/WidgetValidation"; import { AutocompleteDataType } from "utils/autocomplete/AutocompleteDataType"; -import { propertyPaneContentConfig as WdsInputWidgetPropertyPaneContentConfig } from "widgets/wds/WDSInputWidget/config/propertyPaneConfig/contentConfig"; +import { propertyPaneContentConfig as WdsInputWidgetPropertyPaneContentConfig } from "modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/contentConfig"; import * as validations from "./validations"; import { countryToFlag } from "../../widget/helpers"; diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/validations/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/validations/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/validations/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/propertyPaneConfig/validations/index.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/constants.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/constants.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/constants.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/constants.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/derived.js b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/derived.js similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/derived.js rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/derived.js diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/derived.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/derived.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/derived.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/derived.test.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/helpers.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/helpers.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/helpers.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/helpers.test.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/helpers.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/helpers.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/helpers.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/helpers.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/index.test.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/index.test.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/index.test.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/index.test.tsx diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/index.tsx similarity index 98% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/index.tsx index 1e16db14cf9..f9087571fc1 100644 --- a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/index.tsx @@ -27,9 +27,9 @@ import type { } from "WidgetProvider/constants"; import * as config from "../config"; import type { CurrencyInputWidgetProps } from "./types"; -import { WDSBaseInputWidget } from "widgets/wds/WDSBaseInputWidget"; +import { WDSBaseInputWidget } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; import { getCountryCodeFromCurrencyCode, validateInput } from "./helpers"; -import type { KeyDownEvent } from "widgets/wds/WDSBaseInputWidget/component/types"; +import type { KeyDownEvent } from "modules/ui-builder/ui/wds/WDSBaseInputWidget/component/types"; class WDSCurrencyInputWidget extends WDSBaseInputWidget< CurrencyInputWidgetProps, diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/parsedDerivedProperties.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/parsedDerivedProperties.ts similarity index 100% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/parsedDerivedProperties.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/parsedDerivedProperties.ts diff --git a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/types.ts similarity index 78% rename from app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/types.ts index fa307c6099b..7a18144f1b4 100644 --- a/app/client/src/widgets/wds/WDSCurrencyInputWidget/widget/types.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/types.ts @@ -1,5 +1,5 @@ import type { CurrencyTypeOptions } from "constants/Currency"; -import type { BaseInputWidgetProps } from "widgets/wds/WDSBaseInputWidget"; +import type { BaseInputWidgetProps } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; export interface CurrencyInputWidgetProps extends BaseInputWidgetProps { countryCode?: string; diff --git a/app/client/src/widgets/wds/WDSEmailInputWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSEmailInputWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSEmailInputWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSEmailInputWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSEmailInputWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSEmailInputWidget/widget/index.tsx similarity index 84% rename from app/client/src/widgets/wds/WDSEmailInputWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSEmailInputWidget/widget/index.tsx index 721bb9e0e6e..f2c8d6380cb 100644 --- a/app/client/src/widgets/wds/WDSEmailInputWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSEmailInputWidget/widget/index.tsx @@ -1,7 +1,7 @@ -import { WDSInputWidget } from "widgets/wds/WDSInputWidget"; +import { WDSInputWidget } from "modules/ui-builder/ui/wds/WDSInputWidget"; import { EmailInputIcon, EmailInputThumbnail } from "appsmith-icons"; import { WIDGET_TAGS } from "constants/WidgetConstants"; -import { INPUT_TYPES } from "widgets/wds/WDSBaseInputWidget"; +import { INPUT_TYPES } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; import type { WidgetBaseConfiguration } from "WidgetProvider/constants"; class WDSEmailInputWidget extends WDSInputWidget { diff --git a/app/client/src/widgets/wds/WDSHeadingWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSHeadingWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSHeadingWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSHeadingWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSHeadingWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSHeadingWidget/widget/index.tsx similarity index 95% rename from app/client/src/widgets/wds/WDSHeadingWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSHeadingWidget/widget/index.tsx index c044eedc467..0a6e0dbef3f 100644 --- a/app/client/src/widgets/wds/WDSHeadingWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSHeadingWidget/widget/index.tsx @@ -1,6 +1,6 @@ import { WIDGET_TAGS } from "constants/WidgetConstants"; import { ValidationTypes } from "constants/WidgetValidation"; -import { WDSParagraphWidget } from "widgets/wds/WDSParagraphWidget"; +import { WDSParagraphWidget } from "modules/ui-builder/ui/wds/WDSParagraphWidget"; import { HeadingIcon, HeadingThumbnail } from "appsmith-icons"; import { klonaRegularWithTelemetry } from "utils/helpers"; diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/component/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/component/index.tsx diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/component/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/component/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/component/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/component/types.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/index.tsx diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSIconButtonWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSIconButtonWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSIconButtonWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/component/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/component/index.tsx diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/component/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/component/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/component/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/component/types.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/index.tsx diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSInlineButtonsWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInlineButtonsWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInlineButtonsWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/component/index.tsx similarity index 97% rename from app/client/src/widgets/wds/WDSInputWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/component/index.tsx index 2f01a175e88..0f91268297b 100644 --- a/app/client/src/widgets/wds/WDSInputWidget/component/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/component/index.tsx @@ -3,7 +3,7 @@ import { isNil } from "lodash"; import { TextInput } from "@appsmith/wds"; import { Icon, TextArea } from "@appsmith/wds"; import { useDebouncedValue } from "@mantine/hooks"; -import { INPUT_TYPES } from "widgets/wds/WDSBaseInputWidget"; +import { INPUT_TYPES } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; import type { InputComponentProps } from "./types"; diff --git a/app/client/src/widgets/wds/WDSInputWidget/component/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/component/types.ts similarity index 84% rename from app/client/src/widgets/wds/WDSInputWidget/component/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/component/types.ts index 6a254d53fa0..4b37c20b948 100644 --- a/app/client/src/widgets/wds/WDSInputWidget/component/types.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/component/types.ts @@ -1,5 +1,5 @@ import type { IconProps } from "@appsmith/wds"; -import type { InputType } from "widgets/wds/WDSBaseInputWidget/types"; +import type { InputType } from "modules/ui-builder/ui/wds/WDSBaseInputWidget/types"; import type { BaseInputComponentProps } from "../../WDSBaseInputWidget"; diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/index.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/index.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/index.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/index.test.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/index.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/maxValueValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/maxValueValidation.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/maxValueValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/maxValueValidation.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/minValueValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/minValueValidation.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/propertyPaneConfig/validations/minValueValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/validations/minValueValidation.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/widget/derived.js b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/derived.js similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/widget/derived.js rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/derived.js diff --git a/app/client/src/widgets/wds/WDSInputWidget/widget/derived.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/derived.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/widget/derived.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/derived.test.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/widget/helper.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/helper.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/widget/helper.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/helper.test.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/widget/helper.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/helper.ts similarity index 93% rename from app/client/src/widgets/wds/WDSInputWidget/widget/helper.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/helper.ts index 8bf1f2c2fe8..6d4e6cd3b3a 100644 --- a/app/client/src/widgets/wds/WDSInputWidget/widget/helper.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/helper.ts @@ -8,17 +8,17 @@ import { INPUT_INVALID_TYPE_ERROR, INPUT_TEXT_MAX_CHAR_ERROR, } from "ee/constants/messages"; -import type { InputType } from "widgets/wds/WDSBaseInputWidget"; +import type { InputType } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; import type { WidgetProps } from "widgets/BaseWidget"; import type { InputWidgetProps, Validation } from "./types"; import { INPUT_TYPE_TO_WIDGET_TYPE_MAP, INPUT_TYPES, -} from "widgets/wds/WDSBaseInputWidget"; +} from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; import type { PropertyUpdates } from "WidgetProvider/constants"; -import { getDefaultISDCode } from "widgets/wds/WDSPhoneInputWidget/constants"; -import { getDefaultCurrency } from "widgets/wds/WDSCurrencyInputWidget/constants"; +import { getDefaultISDCode } from "modules/ui-builder/ui/wds/WDSPhoneInputWidget/constants"; +import { getDefaultCurrency } from "modules/ui-builder/ui/wds/WDSCurrencyInputWidget/constants"; /** * parses text to number if inputType is number diff --git a/app/client/src/widgets/wds/WDSInputWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/index.tsx similarity index 97% rename from app/client/src/widgets/wds/WDSInputWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/index.tsx index 557c5ade3d5..5eec9a47efe 100644 --- a/app/client/src/widgets/wds/WDSInputWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/index.tsx @@ -11,9 +11,9 @@ import derivedProperties from "./parsedDerivedProperties"; import { WDSBaseInputWidget } from "../../WDSBaseInputWidget"; import type { DerivedPropertiesMap } from "WidgetProvider/factory"; import { EventType } from "constants/AppsmithActionConstants/ActionConstants"; -import type { KeyDownEvent } from "widgets/wds/WDSBaseInputWidget/component/types"; +import type { KeyDownEvent } from "modules/ui-builder/ui/wds/WDSBaseInputWidget/component/types"; import type { WidgetBaseConfiguration } from "WidgetProvider/constants"; -import { INPUT_TYPES } from "widgets/wds/WDSBaseInputWidget/constants"; +import { INPUT_TYPES } from "modules/ui-builder/ui/wds/WDSBaseInputWidget/constants"; class WDSInputWidget extends WDSBaseInputWidget { static type = "WDS_INPUT_WIDGET"; diff --git a/app/client/src/widgets/wds/WDSInputWidget/widget/parsedDerivedProperties.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/parsedDerivedProperties.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/widget/parsedDerivedProperties.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/parsedDerivedProperties.ts diff --git a/app/client/src/widgets/wds/WDSInputWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSInputWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSInputWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSKeyValueWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSKeyValueWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSKeyValueWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSKeyValueWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSKeyValueWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSKeyValueWidget/widget/index.tsx similarity index 91% rename from app/client/src/widgets/wds/WDSKeyValueWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSKeyValueWidget/widget/index.tsx index 492a94305d1..ddaf0dc7539 100644 --- a/app/client/src/widgets/wds/WDSKeyValueWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSKeyValueWidget/widget/index.tsx @@ -1,5 +1,5 @@ import { WIDGET_TAGS } from "constants/WidgetConstants"; -import { WDSInputWidget } from "widgets/wds/WDSInputWidget"; +import { WDSInputWidget } from "modules/ui-builder/ui/wds/WDSInputWidget"; import { KeyValueIcon, KeyValueThumbnail } from "appsmith-icons"; import type { WidgetBaseConfiguration } from "WidgetProvider/constants"; diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/helper.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/helper.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/helper.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/helper.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/configureMenuItemsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/configureMenuItemsConfig.ts similarity index 98% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/configureMenuItemsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/configureMenuItemsConfig.ts index 0e6686dfd5c..51a0ea072e7 100644 --- a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/configureMenuItemsConfig.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/configureMenuItemsConfig.ts @@ -1,6 +1,6 @@ import { ValidationTypes } from "constants/WidgetValidation"; import { getKeysFromSourceDataForEventAutocomplete } from "../../helper"; -import type { MenuButtonWidgetProps } from "widgets/wds/WDSMenuButtonWidget/widget/types"; +import type { MenuButtonWidgetProps } from "modules/ui-builder/ui/wds/WDSMenuButtonWidget/widget/types"; /** * This is for the configuration of menu items when diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/index.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/menuItemsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/menuItemsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/menuItemsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/childPanels/menuItemsConfig.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/index.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/sourceDataArrayValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/sourceDataArrayValidation.ts similarity index 91% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/sourceDataArrayValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/sourceDataArrayValidation.ts index 1973e9f1ddb..875e77267b8 100644 --- a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/sourceDataArrayValidation.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/propertyPaneConfig/validations/sourceDataArrayValidation.ts @@ -1,5 +1,5 @@ import type { ValidationResponse } from "constants/WidgetValidation"; -import type { MenuButtonWidgetProps } from "widgets/wds/WDSMenuButtonWidget/widget/types"; +import type { MenuButtonWidgetProps } from "modules/ui-builder/ui/wds/WDSMenuButtonWidget/widget/types"; /** * Checks if the source data array diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSMenuButtonWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMenuButtonWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMenuButtonWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSModalWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/widget/index.tsx similarity index 97% rename from app/client/src/widgets/wds/WDSModalWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/widget/index.tsx index 39eb3399454..7af7d3e668c 100644 --- a/app/client/src/widgets/wds/WDSModalWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/widget/index.tsx @@ -8,7 +8,7 @@ import React from "react"; import { EventType } from "constants/AppsmithActionConstants/ActionConstants"; import { SelectionRequestType } from "sagas/WidgetSelectUtils"; import { ModalBody } from "@appsmith/wds"; -import { WDS_MODAL_WIDGET_CLASSNAME } from "widgets/wds/constants"; +import { WDS_MODAL_WIDGET_CLASSNAME } from "modules/ui-builder/ui/wds/constants"; import type { CanvasWidgetsReduxState } from "reducers/entityReducers/canvasWidgetsReducer"; import type { CopiedWidgetData, @@ -21,7 +21,7 @@ import { ModalLayoutProvider } from "layoutSystems/anvil/layoutComponents/ModalL import styles from "./styles.module.css"; import { getAnvilWidgetDOMId } from "layoutSystems/common/utils/LayoutElementPositionsObserver/utils"; import { widgetTypeClassname } from "widgets/WidgetUtils"; -import { AnvilDataAttributes } from "widgets/wds/constants"; +import { AnvilDataAttributes } from "modules/ui-builder/ui/wds/constants"; class WDSModalWidget extends BaseWidget { static type = "WDS_MODAL_WIDGET"; diff --git a/app/client/src/widgets/wds/WDSModalWidget/widget/styles.module.css b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/widget/styles.module.css similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/widget/styles.module.css rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/widget/styles.module.css diff --git a/app/client/src/widgets/wds/WDSModalWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSModalWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSModalWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSMultilineInputWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSMultilineInputWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSMultilineInputWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSMultilineInputWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSMultilineInputWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSMultilineInputWidget/widget/index.tsx similarity index 84% rename from app/client/src/widgets/wds/WDSMultilineInputWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSMultilineInputWidget/widget/index.tsx index 413950312c4..1859e07df50 100644 --- a/app/client/src/widgets/wds/WDSMultilineInputWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSMultilineInputWidget/widget/index.tsx @@ -1,7 +1,7 @@ import { WIDGET_TAGS } from "constants/WidgetConstants"; -import { WDSInputWidget } from "widgets/wds/WDSInputWidget"; +import { WDSInputWidget } from "modules/ui-builder/ui/wds/WDSInputWidget"; import type { WidgetBaseConfiguration } from "WidgetProvider/constants"; -import { INPUT_TYPES } from "widgets/wds/WDSBaseInputWidget/constants"; +import { INPUT_TYPES } from "modules/ui-builder/ui/wds/WDSBaseInputWidget/constants"; import { MultilineInputIcon, MultilineInputThumbnail } from "appsmith-icons"; class WDSMultilineInputWidget extends WDSInputWidget { diff --git a/app/client/src/widgets/wds/WDSNumberInputWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSNumberInputWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSNumberInputWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSNumberInputWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSNumberInputWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSNumberInputWidget/widget/index.tsx similarity index 83% rename from app/client/src/widgets/wds/WDSNumberInputWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSNumberInputWidget/widget/index.tsx index 0f67165c9c9..7dac924d42a 100644 --- a/app/client/src/widgets/wds/WDSNumberInputWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSNumberInputWidget/widget/index.tsx @@ -1,8 +1,8 @@ import { WIDGET_TAGS } from "constants/WidgetConstants"; -import { WDSInputWidget } from "widgets/wds/WDSInputWidget"; +import { WDSInputWidget } from "modules/ui-builder/ui/wds/WDSInputWidget"; import { NumberInputIcon, NumberInputThumbnail } from "appsmith-icons"; import type { WidgetBaseConfiguration } from "WidgetProvider/constants"; -import { INPUT_TYPES } from "widgets/wds/WDSBaseInputWidget/constants"; +import { INPUT_TYPES } from "modules/ui-builder/ui/wds/WDSBaseInputWidget/constants"; class WDSNumberInputWidget extends WDSInputWidget { static type = "WDS_NUMBER_INPUT_WIDGET"; diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/__tests__/helpers.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/__tests__/helpers.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/__tests__/helpers.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/__tests__/helpers.test.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/featuresConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/featuresConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/featuresConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/featuresConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/constants.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/constants.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/constants.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/constants.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/helpers.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/helpers.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/helpers.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/helpers.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSParagraphWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSParagraphWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSParagraphWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSPasswordInputWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPasswordInputWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPasswordInputWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPasswordInputWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSPasswordInputWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSPasswordInputWidget/widget/index.tsx similarity index 84% rename from app/client/src/widgets/wds/WDSPasswordInputWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSPasswordInputWidget/widget/index.tsx index a47776ab386..0c0e588dfbb 100644 --- a/app/client/src/widgets/wds/WDSPasswordInputWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSPasswordInputWidget/widget/index.tsx @@ -1,6 +1,6 @@ import { WIDGET_TAGS } from "constants/WidgetConstants"; -import { WDSInputWidget } from "widgets/wds/WDSInputWidget"; -import { INPUT_TYPES } from "widgets/wds/WDSBaseInputWidget/constants"; +import { WDSInputWidget } from "modules/ui-builder/ui/wds/WDSInputWidget"; +import { INPUT_TYPES } from "modules/ui-builder/ui/wds/WDSBaseInputWidget/constants"; import type { WidgetBaseConfiguration } from "WidgetProvider/constants"; import { PasswordInputIcon, PasswordInputThumbnail } from "appsmith-icons"; diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/component/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/component/index.tsx diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/component/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/component/types.ts similarity index 73% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/component/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/component/types.ts index 77dc230cd11..dd9a9db896f 100644 --- a/app/client/src/widgets/wds/WDSPhoneInputWidget/component/types.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/component/types.ts @@ -1,5 +1,5 @@ import type { CountryCode } from "libphonenumber-js"; -import type { BaseInputComponentProps } from "widgets/wds/WDSBaseInputWidget"; +import type { BaseInputComponentProps } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; export interface PhoneInputComponentProps extends BaseInputComponentProps { dialCode?: string; diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/defaultsConfig.ts similarity index 86% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/defaultsConfig.ts index ce46e464562..1d85047574a 100644 --- a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/defaultsConfig.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/defaultsConfig.ts @@ -1,4 +1,4 @@ -import { WDSBaseInputWidget } from "widgets/wds/WDSBaseInputWidget"; +import { WDSBaseInputWidget } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; import { ResponsiveBehavior } from "layoutSystems/common/utils/constants"; import type { WidgetDefaultProps } from "WidgetProvider/constants"; diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/featuresConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/featuresConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/featuresConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/featuresConfig.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/contentConfig.ts similarity index 96% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/contentConfig.ts index 12446c69935..e8284dc2da7 100644 --- a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/contentConfig.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/contentConfig.ts @@ -2,7 +2,7 @@ import { ISDCodeOptions } from "constants/ISDCodes_v2"; import type { ISDCodeProps } from "constants/ISDCodes_v2"; import { ValidationTypes } from "constants/WidgetValidation"; import { AutocompleteDataType } from "utils/autocomplete/AutocompleteDataType"; -import { propertyPaneContentConfig as WdsInputWidgetPropertyPaneContentConfig } from "widgets/wds/WDSInputWidget/config/propertyPaneConfig/contentConfig"; +import { propertyPaneContentConfig as WdsInputWidgetPropertyPaneContentConfig } from "modules/ui-builder/ui/wds/WDSInputWidget/config/propertyPaneConfig/contentConfig"; import { countryToFlag } from "../../widget/helpers"; import { defaultValueValidation } from "./validations"; diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.test.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/defaultValueValidation.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/propertyPaneConfig/validations/index.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/constants.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/constants.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/constants.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/constants.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/widget/helpers.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/helpers.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/widget/helpers.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/helpers.test.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/widget/helpers.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/helpers.ts similarity index 100% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/widget/helpers.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/helpers.ts diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/index.tsx similarity index 97% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/index.tsx index 09b1ad53dd8..dc39829aee0 100644 --- a/app/client/src/widgets/wds/WDSPhoneInputWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/index.tsx @@ -11,11 +11,11 @@ import type { AnvilConfig, AutocompletionDefinitions, } from "WidgetProvider/constants"; -import { WDSBaseInputWidget } from "widgets/wds/WDSBaseInputWidget"; +import { WDSBaseInputWidget } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; import { AsYouType, parseIncompletePhoneNumber } from "libphonenumber-js"; import { EventType } from "constants/AppsmithActionConstants/ActionConstants"; -import type { KeyDownEvent } from "widgets/wds/WDSBaseInputWidget/component/types"; -import derivedProperties from "widgets/wds/WDSCurrencyInputWidget/widget/parsedDerivedProperties"; +import type { KeyDownEvent } from "modules/ui-builder/ui/wds/WDSBaseInputWidget/component/types"; +import derivedProperties from "modules/ui-builder/ui/wds/WDSCurrencyInputWidget/widget/parsedDerivedProperties"; import * as config from "../config"; import { PhoneInputComponent } from "../component"; diff --git a/app/client/src/widgets/wds/WDSPhoneInputWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/types.ts similarity index 72% rename from app/client/src/widgets/wds/WDSPhoneInputWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/types.ts index cae023b078e..8f3fef1991c 100644 --- a/app/client/src/widgets/wds/WDSPhoneInputWidget/widget/types.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSPhoneInputWidget/widget/types.ts @@ -1,5 +1,5 @@ import type { CountryCode } from "libphonenumber-js"; -import type { BaseInputWidgetProps } from "widgets/wds/WDSBaseInputWidget"; +import type { BaseInputWidgetProps } from "modules/ui-builder/ui/wds/WDSBaseInputWidget"; export interface PhoneInputWidgetProps extends BaseInputWidgetProps { dialCode?: string; diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/featuresConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/featuresConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/featuresConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/featuresConfig.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/index.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/widget/helpers.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/widget/helpers.ts similarity index 78% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/widget/helpers.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/widget/helpers.ts index 2144de3055f..d5e01dec022 100644 --- a/app/client/src/widgets/wds/WDSRadioGroupWidget/widget/helpers.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/widget/helpers.ts @@ -1,4 +1,4 @@ -import type { Validation } from "widgets/wds/WDSInputWidget/widget/types"; +import type { Validation } from "modules/ui-builder/ui/wds/WDSInputWidget/widget/types"; import type { RadioGroupWidgetProps } from "./types"; export function validateInput(props: RadioGroupWidgetProps): Validation { diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSRadioGroupWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSRadioGroupWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSRadioGroupWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/config/baseConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/baseConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/config/baseConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/baseConfig.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/config/defaultConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/defaultConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/config/defaultConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/defaultConfig.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/config/propertyPaneContent.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/propertyPaneContent.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/config/propertyPaneContent.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/propertyPaneContent.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/config/propertyPaneStyle.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/propertyPaneStyle.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/config/propertyPaneStyle.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/config/propertyPaneStyle.ts diff --git a/app/client/src/widgets/wds/WDSSectionWidget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSSectionWidget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/index.tsx diff --git a/app/client/src/widgets/wds/WDSSectionWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/widget/index.tsx similarity index 96% rename from app/client/src/widgets/wds/WDSSectionWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/widget/index.tsx index 318c96c9d6b..0597440d9f4 100644 --- a/app/client/src/widgets/wds/WDSSectionWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSSectionWidget/widget/index.tsx @@ -23,9 +23,9 @@ import type { LayoutProps } from "layoutSystems/anvil/utils/anvilTypes"; import BaseWidget from "widgets/BaseWidget"; import type { ReactNode } from "react"; import React from "react"; -import { ContainerComponent } from "widgets/wds/Container"; +import { ContainerComponent } from "modules/ui-builder/ui/wds/Container"; import { LayoutProvider } from "layoutSystems/anvil/layoutComponents/LayoutProvider"; -import { Elevations, anvilWidgets } from "widgets/wds/constants"; +import { Elevations, anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import type { CanvasWidgetsReduxState } from "reducers/entityReducers/canvasWidgetsReducer"; import type { CopiedWidgetData, diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/contentConfig.ts similarity index 97% rename from app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/contentConfig.ts index 9466f1c8a93..a31fbc12e0b 100644 --- a/app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/contentConfig.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/contentConfig.ts @@ -6,8 +6,8 @@ import { defaultOptionValidation, optionsCustomValidation, } from "./validations"; -import type { WidgetProps } from "../../../../BaseWidget"; -import type { PropertyUpdates } from "../../../../../WidgetProvider/constants"; +import type { WidgetProps } from "widgets/BaseWidget"; +import type { PropertyUpdates } from "WidgetProvider/constants"; type WidgetTypeValue = "SELECT" | "COMBOBOX"; diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts similarity index 96% rename from app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts index 463f49d9cc4..f5bf114adf5 100644 --- a/app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/validations/defaultOptionValidation.ts @@ -1,6 +1,6 @@ import type { ValidationResponse } from "constants/WidgetValidation"; import type { LoDashStatic } from "lodash"; -import type { WidgetProps } from "../../../../../BaseWidget"; +import type { WidgetProps } from "widgets/BaseWidget"; interface ValidationErrorMessage { name: string; diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/validations/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/validations/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/propertyPaneConfig/validations/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/validations/index.ts diff --git a/app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts similarity index 98% rename from app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts index 356d2155a85..331cf8dae83 100644 --- a/app/client/src/widgets/wds/WDSComboBoxWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/propertyPaneConfig/validations/optionsCustomValidation.ts @@ -1,6 +1,6 @@ import type { ValidationResponse } from "constants/WidgetValidation"; import type { LoDashStatic } from "lodash"; -import type { WidgetProps } from "../../../../../BaseWidget"; +import type { WidgetProps } from "widgets/BaseWidget"; interface ValidationErrorMessage { name: string; diff --git a/app/client/src/widgets/wds/WDSSelectWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSSelectWidget/widget/helpers.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/widget/helpers.ts similarity index 78% rename from app/client/src/widgets/wds/WDSSelectWidget/widget/helpers.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/widget/helpers.ts index 29a690d2845..c98beb7f15e 100644 --- a/app/client/src/widgets/wds/WDSSelectWidget/widget/helpers.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/widget/helpers.ts @@ -1,4 +1,4 @@ -import type { Validation } from "widgets/wds/WDSInputWidget/widget/types"; +import type { Validation } from "modules/ui-builder/ui/wds/WDSInputWidget/widget/types"; import type { WDSSelectWidgetProps } from "./types"; export function validateInput(props: WDSSelectWidgetProps): Validation { diff --git a/app/client/src/widgets/wds/WDSSelectWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSSelectWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSelectWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSelectWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/component/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/component/index.tsx diff --git a/app/client/src/widgets/wds/WDSStatsWidget/component/styles.module.css b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/component/styles.module.css similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/component/styles.module.css rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/component/styles.module.css diff --git a/app/client/src/widgets/wds/WDSStatsWidget/component/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/component/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/component/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/component/types.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSStatsWidget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/index.tsx diff --git a/app/client/src/widgets/wds/WDSStatsWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/widget/index.tsx similarity index 91% rename from app/client/src/widgets/wds/WDSStatsWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/widget/index.tsx index 413c51ced05..dbc79ec87e8 100644 --- a/app/client/src/widgets/wds/WDSStatsWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/widget/index.tsx @@ -7,8 +7,8 @@ import * as config from "../config"; import { StatsComponent } from "../component"; import type { StatsWidgetProps } from "./types"; import type { AnvilConfig } from "WidgetProvider/constants"; -import { Elevations } from "widgets/wds/constants"; -import { ContainerComponent } from "widgets/wds/Container"; +import { Elevations } from "modules/ui-builder/ui/wds/constants"; +import { ContainerComponent } from "modules/ui-builder/ui/wds/Container"; class WDSStatsWidget extends BaseWidget { constructor(props: StatsWidgetProps) { diff --git a/app/client/src/widgets/wds/WDSStatsWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSStatsWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSStatsWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/featuresConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/featuresConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/featuresConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/featuresConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSSwitchGroupWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchGroupWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchGroupWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/featuresConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/featuresConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/featuresConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/featuresConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSSwitchWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSSwitchWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSSwitchWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/Constants.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/Constants.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/Constants.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/Constants.test.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/Constants.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/Constants.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/Constants.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/Constants.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/StaticTable.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/StaticTable.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/StaticTable.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/StaticTable.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/Table.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/Table.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/Table.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/Table.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableBody/Row.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableBody/Row.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableBody/Row.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableBody/Row.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableBody/StaticTableBody.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableBody/StaticTableBody.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableBody/StaticTableBody.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableBody/StaticTableBody.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableBody/context.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableBody/context.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableBody/context.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableBody/context.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableBody/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableBody/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableBody/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableBody/index.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/PageNumberInput.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/PageNumberInput.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/PageNumberInput.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/PageNumberInput.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/Pagination.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/Pagination.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/Pagination.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/Pagination.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/Search.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/Search.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/Search.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/Search.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/TableColumnHeader.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/TableColumnHeader.tsx similarity index 98% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/TableColumnHeader.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/TableColumnHeader.tsx index cd9d1776a7d..95e284d03b3 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/TableColumnHeader.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/TableColumnHeader.tsx @@ -1,6 +1,6 @@ import { Checkbox } from "@appsmith/wds"; import React, { memo } from "react"; -import { getDragHandlers } from "widgets/wds/WDSTableWidget/widget/utilities"; +import { getDragHandlers } from "modules/ui-builder/ui/wds/WDSTableWidget/widget/utilities"; import { HeaderCell } from "../cellComponents/HeaderCell"; import type { ReactTableColumnProps } from "../Constants"; import { CheckboxState, StickyType } from "../Constants"; diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/index.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/styles.module.css b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/styles.module.css similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableHeader/styles.module.css rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableHeader/styles.module.css diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/TableStyledWrappers.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableStyledWrappers.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/TableStyledWrappers.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/TableStyledWrappers.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/ButtonCell.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/ButtonCell.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/ButtonCell.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/ButtonCell.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/EmptyCell.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/EmptyCell.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/EmptyCell.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/EmptyCell.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/HeaderCell.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/HeaderCell.tsx similarity index 98% rename from app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/HeaderCell.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/HeaderCell.tsx index 3d7e4e03542..446a52ddec5 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/HeaderCell.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/HeaderCell.tsx @@ -2,7 +2,7 @@ import type { Key } from "react"; import React, { useCallback, memo } from "react"; import { MULTISELECT_CHECKBOX_WIDTH, StickyType } from "../Constants"; -import { isColumnTypeEditable } from "widgets/wds/WDSTableWidget/widget/utilities"; +import { isColumnTypeEditable } from "modules/ui-builder/ui/wds/WDSTableWidget/widget/utilities"; import { Flex, Icon, IconButton, Menu, MenuTrigger, Text } from "@appsmith/wds"; interface HeaderProps { diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/PlainTextCell.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/PlainTextCell.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/PlainTextCell.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/PlainTextCell.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/URLCell.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/URLCell.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/URLCell.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/URLCell.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/cellComponents/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/cellComponents/index.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/index.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/component/styles.module.css b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/styles.module.css similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/component/styles.module.css rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/component/styles.module.css diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Basic.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Basic.ts similarity index 92% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Basic.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Basic.ts index 1002eb3496e..085a83c93e6 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Basic.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Basic.ts @@ -1,6 +1,9 @@ import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { ColumnTypes, ICON_NAMES } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { + ColumnTypes, + ICON_NAMES, +} from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { hideByColumnType, updateIconAlignment, diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Color.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Color.ts similarity index 92% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Color.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Color.ts index 7f195322388..05f99a1f291 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Color.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Color.ts @@ -4,8 +4,8 @@ import capitalize from "lodash/capitalize"; import { ColumnTypes, type TableWidgetProps, -} from "widgets/wds/WDSTableWidget/constants"; -import { showByColumnType } from "widgets/wds/WDSTableWidget/widget/propertyUtils"; +} from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { showByColumnType } from "modules/ui-builder/ui/wds/WDSTableWidget/widget/propertyUtils"; export default { sectionName: "Color", diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Data.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Data.ts similarity index 98% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Data.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Data.ts index 2a4f624497a..02ad9a96df7 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Data.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Data.ts @@ -1,9 +1,9 @@ import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { ColumnTypes, DateInputFormat, -} from "widgets/wds/WDSTableWidget/constants"; +} from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { get } from "lodash"; import { getBasePropertyPath, diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DateProperties.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DateProperties.ts similarity index 90% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DateProperties.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DateProperties.ts index 03cc814701d..076c936117e 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DateProperties.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DateProperties.ts @@ -1,6 +1,6 @@ import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { get } from "lodash"; import { allowedFirstDayOfWeekRange } from "../../../widget/propertyUtils"; import { AutocompleteDataType } from "utils/autocomplete/AutocompleteDataType"; diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DiscardButtonproperties.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DiscardButtonproperties.ts similarity index 97% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DiscardButtonproperties.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DiscardButtonproperties.ts index ef60029c600..a8a983a6ac1 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DiscardButtonproperties.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/DiscardButtonproperties.ts @@ -1,7 +1,7 @@ import { get } from "lodash"; import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { hideByColumnType, getBasePropertyPath, diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Events.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Events.ts similarity index 96% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Events.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Events.ts index cfd62aa8d6c..a061dfa73d0 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Events.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Events.ts @@ -1,5 +1,5 @@ -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { get } from "lodash"; import { getBasePropertyPath, diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/General.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/General.ts similarity index 94% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/General.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/General.ts index fdb04dc0e98..3f7ffca4cad 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/General.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/General.ts @@ -1,6 +1,6 @@ import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { hideByColumnType } from "../../../widget/propertyUtils"; import { BUTTON_VARIANTS } from "@appsmith/wds"; import { objectKeys } from "@appsmith/utils"; diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/SaveButtonProperties.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/SaveButtonProperties.ts similarity index 97% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/SaveButtonProperties.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/SaveButtonProperties.ts index 1965074b923..ead2bafb7f2 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/SaveButtonProperties.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/SaveButtonProperties.ts @@ -1,13 +1,13 @@ import { get } from "lodash"; import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { hideByColumnType, getBasePropertyPath, } from "../../../widget/propertyUtils"; import { ButtonVariantTypes } from "components/constants"; import { ICON_NAMES } from "WidgetProvider/constants"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; export default { sectionName: "Save Button", diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/TextFormatting.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/TextFormatting.ts similarity index 88% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/TextFormatting.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/TextFormatting.ts index 89bea8b8bc6..d8e5ab771d5 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/TextFormatting.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/TextFormatting.ts @@ -1,10 +1,10 @@ import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { hideByColumnType, showByColumnType, } from "../../../widget/propertyUtils"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; export default { sectionName: "Text formatting", diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validation.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validation.ts similarity index 90% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validation.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validation.ts index 73fc0c137f5..ba52ff0cc8f 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validation.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validation.ts @@ -1,4 +1,4 @@ -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { get } from "lodash"; import { hideByColumnType } from "../../../widget/propertyUtils"; import commonValidations from "./Validations/Common"; diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Common.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Common.ts similarity index 90% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Common.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Common.ts index 90e86b39fc4..8c4a9bbb861 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Common.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Common.ts @@ -1,10 +1,10 @@ import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { showByColumnType, getColumnPath, -} from "widgets/wds/WDSTableWidget/widget/propertyUtils"; +} from "modules/ui-builder/ui/wds/WDSTableWidget/widget/propertyUtils"; export default [ { diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Date.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Date.ts similarity index 80% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Date.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Date.ts index 77a355147ba..9a90cc6e6a6 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Date.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Date.ts @@ -1,9 +1,9 @@ -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { getColumnPath, hideByColumnType, -} from "widgets/wds/WDSTableWidget/widget/propertyUtils"; +} from "modules/ui-builder/ui/wds/WDSTableWidget/widget/propertyUtils"; export default [ { diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Number.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Number.ts similarity index 85% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Number.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Number.ts index a76da2d429c..a11b4be63be 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Number.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/Validations/Number.ts @@ -1,10 +1,10 @@ import { ValidationTypes } from "constants/WidgetValidation"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { ColumnTypes } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { ColumnTypes } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { hideByColumnType, getColumnPath, -} from "widgets/wds/WDSTableWidget/widget/propertyUtils"; +} from "modules/ui-builder/ui/wds/WDSTableWidget/widget/propertyUtils"; export default [ { diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/PanelConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/contentConfig.ts similarity index 98% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/contentConfig.ts index 6eb12b504b6..866ee8e5501 100644 --- a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/contentConfig.ts +++ b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/contentConfig.ts @@ -2,8 +2,8 @@ import type { PropertyPaneConfig } from "constants/PropertyControlConstants"; import { ValidationTypes } from "constants/WidgetValidation"; import { EvaluationSubstitutionType } from "entities/DataTree/dataTreeFactory"; import { AutocompleteDataType } from "utils/autocomplete/AutocompleteDataType"; -import type { TableWidgetProps } from "widgets/wds/WDSTableWidget/constants"; -import { InlineEditingSaveOptions } from "widgets/wds/WDSTableWidget/constants"; +import type { TableWidgetProps } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; +import { InlineEditingSaveOptions } from "modules/ui-builder/ui/wds/WDSTableWidget/constants"; import { composePropertyUpdateHook } from "widgets/WidgetUtils"; import { tableDataValidation, diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/constants.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/constants.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/constants.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/constants.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/constants/data.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/constants/data.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/constants/data.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/constants/data.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/constants/messages.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/constants/messages.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/constants/messages.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/constants/messages.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/index.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/derived.js b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/derived.js similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/derived.js rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/derived.js diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/derived.test.js b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/derived.test.js similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/derived.test.js rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/derived.test.js diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/parseDerivedProperties.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/parseDerivedProperties.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/parseDerivedProperties.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/parseDerivedProperties.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/propertyUtils.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/propertyUtils.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/propertyUtils.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/propertyUtils.test.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/propertyUtils.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/propertyUtils.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/propertyUtils.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/propertyUtils.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/reactTableUtils/getColumnsPureFn.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/reactTableUtils/getColumnsPureFn.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/reactTableUtils/getColumnsPureFn.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/reactTableUtils/getColumnsPureFn.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/reactTableUtils/transformDataPureFn.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/reactTableUtils/transformDataPureFn.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/reactTableUtils/transformDataPureFn.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/reactTableUtils/transformDataPureFn.tsx diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/utilities.test.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/utilities.test.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/utilities.test.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/utilities.test.ts diff --git a/app/client/src/widgets/wds/WDSTableWidget/widget/utilities.ts b/app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/utilities.ts similarity index 100% rename from app/client/src/widgets/wds/WDSTableWidget/widget/utilities.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSTableWidget/widget/utilities.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/component/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/component/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/component/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/component/index.tsx diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/component/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/component/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/component/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/component/types.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/defaultsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/defaultsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/defaultsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/defaultsConfig.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/metaConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/metaConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/metaConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/metaConfig.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/contentConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/contentConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/contentConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/contentConfig.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/index.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/styleConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/styleConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/styleConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/propertyPaneConfig/styleConfig.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/settersConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/settersConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/config/settersConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/config/settersConfig.ts diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/index.tsx diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/widget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/widget/index.tsx diff --git a/app/client/src/widgets/wds/WDSToolbarButtonsWidget/widget/types.ts b/app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/widget/types.ts similarity index 100% rename from app/client/src/widgets/wds/WDSToolbarButtonsWidget/widget/types.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSToolbarButtonsWidget/widget/types.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/index.tsx similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/index.tsx diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/config/anvilConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/anvilConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/config/anvilConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/anvilConfig.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/config/autocompleteConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/autocompleteConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/config/autocompleteConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/autocompleteConfig.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/config/baseConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/baseConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/config/baseConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/baseConfig.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/config/defaultConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/defaultConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/config/defaultConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/defaultConfig.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/config/index.ts b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/index.ts similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/config/index.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/index.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/config/methodsConfig.ts b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/methodsConfig.ts similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/config/methodsConfig.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/methodsConfig.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/config/propertyPaneContent.ts b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/propertyPaneContent.ts similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/config/propertyPaneContent.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/propertyPaneContent.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/config/propertyPaneStyle.ts b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/propertyPaneStyle.ts similarity index 100% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/config/propertyPaneStyle.ts rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/config/propertyPaneStyle.ts diff --git a/app/client/src/widgets/wds/WDSZoneWidget/widget/index.tsx b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/index.tsx similarity index 96% rename from app/client/src/widgets/wds/WDSZoneWidget/widget/index.tsx rename to app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/index.tsx index 1d71c311dfb..3c252e8d910 100644 --- a/app/client/src/widgets/wds/WDSZoneWidget/widget/index.tsx +++ b/app/client/src/modules/ui-builder/ui/wds/WDSZoneWidget/widget/index.tsx @@ -22,9 +22,9 @@ import BaseWidget from "widgets/BaseWidget"; import type { WidgetProps, WidgetState } from "widgets/BaseWidget"; import type { LayoutProps } from "layoutSystems/anvil/utils/anvilTypes"; import type { ContainerWidgetProps } from "widgets/ContainerWidget/widget"; -import { ContainerComponent } from "widgets/wds/Container"; +import { ContainerComponent } from "modules/ui-builder/ui/wds/Container"; import { LayoutProvider } from "layoutSystems/anvil/layoutComponents/LayoutProvider"; -import { Elevations, anvilWidgets } from "widgets/wds/constants"; +import { Elevations, anvilWidgets } from "modules/ui-builder/ui/wds/constants"; import type { CanvasWidgetsReduxState } from "reducers/entityReducers/canvasWidgetsReducer"; import type { CopiedWidgetData, diff --git a/app/client/src/widgets/wds/constants.ts b/app/client/src/modules/ui-builder/ui/wds/constants.ts similarity index 97% rename from app/client/src/widgets/wds/constants.ts rename to app/client/src/modules/ui-builder/ui/wds/constants.ts index 6a540de37c9..94cd6d91555 100644 --- a/app/client/src/widgets/wds/constants.ts +++ b/app/client/src/modules/ui-builder/ui/wds/constants.ts @@ -1,4 +1,4 @@ -import { getCanvasClassName } from "../../utils/generators"; +import { getCanvasClassName } from "../../../../utils/generators"; export const anvilWidgets = { SECTION_WIDGET: "SECTION_WIDGET", diff --git a/app/client/src/pages/Editor/APIEditor/CommonEditorForm.tsx b/app/client/src/pages/Editor/APIEditor/CommonEditorForm.tsx index 3c7467e0718..b542cdfbd04 100644 --- a/app/client/src/pages/Editor/APIEditor/CommonEditorForm.tsx +++ b/app/client/src/pages/Editor/APIEditor/CommonEditorForm.tsx @@ -147,8 +147,6 @@ export interface CommonFormProps { actionName: string; apiId: string; apiName: string; - headersCount: number; - paramsCount: number; // TODO: Fix this the next time the file is edited // eslint-disable-next-line @typescript-eslint/no-explicit-any settingsConfig: any; @@ -212,20 +210,15 @@ function CommonEditorForm(props: CommonFormPropsWithExtraParams) { const { actionConfigurationHeaders, actionConfigurationParams, - actionName, actionResponse, autoGeneratedActionConfigHeaders, closeEditorLink, formName, handleSubmit, - headersCount, hintMessages, isRunning, onRunClick, - paramsCount, pluginId, - responseDataTypes, - responseDisplayFormat, settingsConfig, } = props; @@ -256,6 +249,8 @@ function CommonEditorForm(props: CommonFormPropsWithExtraParams) { getPlugin(state, pluginId ?? ""), ); + if (!currentActionConfig) return null; + // this gets the url of the current action's datasource const actionDatasourceUrl = currentActionConfig?.datasource?.datasourceConfiguration?.url || ""; @@ -341,9 +336,7 @@ function CommonEditorForm(props: CommonFormPropsWithExtraParams) { datasourceHeaders={props.datasourceHeaders} datasourceParams={props.datasourceParams} formName={formName} - headersCount={headersCount} paginationUiComponent={props.paginationUIComponent} - paramsCount={paramsCount} pushFields={isChangePermitted} showSettings theme={EditorTheme.LIGHT} @@ -351,13 +344,10 @@ function CommonEditorForm(props: CommonFormPropsWithExtraParams) { diff --git a/app/client/src/pages/Editor/APIEditor/GraphQL/GraphQLEditorForm.tsx b/app/client/src/pages/Editor/APIEditor/GraphQL/GraphQLEditorForm.tsx index 91ee9aeb719..cc502267e6f 100644 --- a/app/client/src/pages/Editor/APIEditor/GraphQL/GraphQLEditorForm.tsx +++ b/app/client/src/pages/Editor/APIEditor/GraphQL/GraphQLEditorForm.tsx @@ -203,48 +203,6 @@ export default connect( const currentActionDatasourceId = selector(state, "datasource.id"); - const headers = selector(state, "actionConfiguration.headers"); - let headersCount = 0; - - if (Array.isArray(headers)) { - const validHeaders = headers.filter( - (value) => value.key && value.key !== "", - ); - - headersCount += validHeaders.length; - } - - if (Array.isArray(datasourceHeaders)) { - const validHeaders = datasourceHeaders.filter( - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (value: any) => value.key && value.key !== "", - ); - - headersCount += validHeaders.length; - } - - const params = selector(state, "actionConfiguration.queryParameters"); - let paramsCount = 0; - - if (Array.isArray(params)) { - const validParams = params.filter( - (value) => value.key && value.key !== "", - ); - - paramsCount = validParams.length; - } - - if (Array.isArray(datasourceParams)) { - const validParams = datasourceParams.filter( - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (value: any) => value.key && value.key !== "", - ); - - paramsCount += validParams.length; - } - const actionConfigurationBody = selector(state, "actionConfiguration.body") || ""; @@ -274,8 +232,6 @@ export default connect( currentActionDatasourceId, datasourceHeaders, datasourceParams, - headersCount, - paramsCount, hintMessages, datasources: state.entities.datasources.list.filter( (d) => d.pluginId === props.pluginId, diff --git a/app/client/src/pages/Editor/APIEditor/RestAPIForm.tsx b/app/client/src/pages/Editor/APIEditor/RestAPIForm.tsx index 80f1fe349c2..1435dca07e8 100644 --- a/app/client/src/pages/Editor/APIEditor/RestAPIForm.tsx +++ b/app/client/src/pages/Editor/APIEditor/RestAPIForm.tsx @@ -107,55 +107,6 @@ export default connect((state: AppState, props: { pluginId: string }) => { const currentActionDatasourceId = selector(state, "datasource.id"); const actionName = getApiName(state, apiId) || ""; - const headers = selector(state, "actionConfiguration.headers"); - let headersCount = 0; - - if (Array.isArray(headers)) { - const validHeaders = headers.filter( - (value) => value.key && value.key !== "", - ); - - headersCount += validHeaders.length; - } - - if (Array.isArray(datasourceHeaders)) { - const validHeaders = datasourceHeaders.filter( - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (value: any) => value.key && value.key !== "", - ); - - headersCount += validHeaders.length; - } - - if (Array.isArray(autoGeneratedActionConfigHeaders)) { - const validHeaders = autoGeneratedActionConfigHeaders.filter( - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (value: any) => value.key && value.key !== "", - ); - - headersCount += validHeaders.length; - } - - const params = selector(state, "actionConfiguration.queryParameters"); - let paramsCount = 0; - - if (Array.isArray(params)) { - const validParams = params.filter((value) => value.key && value.key !== ""); - - paramsCount = validParams.length; - } - - if (Array.isArray(datasourceParams)) { - const validParams = datasourceParams.filter( - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (value: any) => value.key && value.key !== "", - ); - - paramsCount += validParams.length; - } const responses = getActionResponses(state); const actionResponse = responses[apiId]; @@ -184,8 +135,6 @@ export default connect((state: AppState, props: { pluginId: string }) => { currentActionDatasourceId, datasourceHeaders, datasourceParams, - headersCount, - paramsCount, hintMessages, datasources: state.entities.datasources.list.filter( (d) => d.pluginId === props.pluginId, diff --git a/app/client/src/pages/Editor/QueryEditor/BindDataButton.tsx b/app/client/src/pages/Editor/QueryEditor/BindDataButton.tsx index 64d6e8d5493..56271b6f31d 100644 --- a/app/client/src/pages/Editor/QueryEditor/BindDataButton.tsx +++ b/app/client/src/pages/Editor/QueryEditor/BindDataButton.tsx @@ -26,7 +26,7 @@ import { FEATURE_FLAG } from "ee/entities/FeatureFlag"; import { getHasManagePagePermission } from "ee/utils/BusinessFeatures/permissionPageHelpers"; import { getWidgets } from "sagas/selectors"; import type { FlattenedWidgetProps } from "reducers/entityReducers/canvasWidgetsStructureReducer"; -import { WDS_V2_WIDGET_MAP } from "widgets/wds/constants"; +import { WDS_V2_WIDGET_MAP } from "modules/ui-builder/ui/wds/constants"; import { getNextWidgetName } from "sagas/WidgetOperationUtils"; import AnalyticsUtil from "ee/utils/AnalyticsUtil"; import { addSuggestedWidget } from "actions/widgetActions"; diff --git a/app/client/src/pages/Editor/QueryEditor/QueryResponseTab.tsx b/app/client/src/pages/Editor/QueryEditor/QueryResponseTab.tsx index 1c366da805e..ba147dc5bb3 100644 --- a/app/client/src/pages/Editor/QueryEditor/QueryResponseTab.tsx +++ b/app/client/src/pages/Editor/QueryEditor/QueryResponseTab.tsx @@ -3,12 +3,12 @@ import { useDispatch, useSelector } from "react-redux"; import ReactJson from "react-json-view"; import { apiReactJsonProps, - NoResponse, - responseTabComponent, ResponseTabErrorContainer, ResponseTabErrorContent, ResponseTabErrorDefaultMessage, -} from "components/editorComponents/ApiResponseView"; +} from "PluginActionEditor/components/PluginActionResponse/components/ApiResponse"; +import { ResponseFormatTabs } from "PluginActionEditor/components/PluginActionResponse/components/ResponseFormatTabs"; +import { NoResponse } from "PluginActionEditor/components/PluginActionResponse/components/NoResponse"; import LogAdditionalInfo from "components/editorComponents/Debugger/ErrorLogs/components/LogAdditionalInfo"; import LogHelper from "components/editorComponents/Debugger/ErrorLogs/components/LogHelper"; import LOG_TYPE from "entities/AppsmithConsole/logtype"; @@ -102,6 +102,8 @@ const QueryResponseTab = (props: Props) => { const { responseDataTypes, responseDisplayFormat } = actionResponseDisplayDataFormats(actionResponse); + let output: Record[] | string = ""; + const responseBodyTabs = responseDataTypes && responseDataTypes.map((dataType, index) => { @@ -109,10 +111,12 @@ const QueryResponseTab = (props: Props) => { index: index, key: dataType.key, title: dataType.title, - panelComponent: responseTabComponent( - dataType.key, - output, - responseTabHeight, + panelComponent: ( + ), }; }); @@ -163,9 +167,6 @@ const QueryResponseTab = (props: Props) => { let error = runErrorMessage; let hintMessages: Array = []; let showPreparedStatementWarning = false; - // TODO: Fix this the next time the file is edited - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let output: Record[] | null = null; // Query is executed even once during the session, show the response data. if (actionResponse) { @@ -326,17 +327,19 @@ const QueryResponseTab = (props: Props) => { suggestedWidgets={actionResponse?.suggestedWidgets} /> - {responseTabComponent( - selectedControl || segmentedControlOptions[0]?.value, - output, - responseTabHeight, - )} + )} {!output && !error && ( )} diff --git a/app/client/src/pages/Editor/gitSync/GitSettingsModal/TabGeneral/DangerZone.tsx b/app/client/src/pages/Editor/gitSync/GitSettingsModal/TabGeneral/DangerZone.tsx index d7f5a870147..c32b7ab5c23 100644 --- a/app/client/src/pages/Editor/gitSync/GitSettingsModal/TabGeneral/DangerZone.tsx +++ b/app/client/src/pages/Editor/gitSync/GitSettingsModal/TabGeneral/DangerZone.tsx @@ -15,9 +15,8 @@ import { setIsDisconnectGitModalOpen, setGitSettingsModalOpenAction, } from "actions/gitSyncActions"; -import { FEATURE_FLAG } from "ee/entities/FeatureFlag"; import { Button, Divider, Text } from "@appsmith/ads"; -import React from "react"; +import React, { useCallback } from "react"; import { useDispatch, useSelector } from "react-redux"; import { getAutocommitEnabledSelector, @@ -26,7 +25,6 @@ import { } from "selectors/gitSyncSelectors"; import styled from "styled-components"; import AnalyticsUtil from "ee/utils/AnalyticsUtil"; -import { useFeatureFlag } from "utils/hooks/useFeatureFlag"; import { useHasConnectToGitPermission, useHasManageAutoCommitPermission, @@ -71,9 +69,6 @@ const StyledDivider = styled(Divider)` function DangerZone() { const isConnectToGitPermitted = useHasConnectToGitPermission(); const isManageAutoCommitPermitted = useHasManageAutoCommitPermission(); - const isAutocommitFeatureEnabled = useFeatureFlag( - FEATURE_FLAG.release_git_autocommit_feature_enabled, - ); const isAutocommitToggling = useSelector(getIsAutocommitToggling); const isAutocommitEnabled = useSelector(getAutocommitEnabledSelector); const gitMetadataLoading = useSelector(getGitMetadataLoadingSelector); @@ -82,7 +77,7 @@ function DangerZone() { const currentApp = useSelector(getCurrentApplication); - const handleDisconnect = () => { + const handleDisconnect = useCallback(() => { AnalyticsUtil.logEvent("GS_DISCONNECT_GIT_CLICK", { source: "GIT_CONNECTION_MODAL", }); @@ -94,9 +89,9 @@ function DangerZone() { }), ); dispatch(setIsDisconnectGitModalOpen(true)); - }; + }, [currentApp?.id, currentApp?.name, dispatch]); - const handleToggleAutocommit = () => { + const handleToggleAutocommit = useCallback(() => { if (isAutocommitEnabled) { dispatch(setGitSettingsModalOpenAction({ open: false })); dispatch(setIsAutocommitModalOpen(true)); @@ -104,10 +99,9 @@ function DangerZone() { dispatch(toggleAutocommitEnabledInit()); AnalyticsUtil.logEvent("GS_AUTO_COMMIT_ENABLED"); } - }; + }, [dispatch, isAutocommitEnabled]); - const showAutoCommit = - isAutocommitFeatureEnabled && isManageAutoCommitPermitted; + const showAutoCommit = isManageAutoCommitPermitted; const showDisconnect = isConnectToGitPermitted; const showDivider = showAutoCommit && showDisconnect; @@ -128,7 +122,7 @@ function DangerZone() { {createMessage(AUTOCOMMIT_MESSAGE)}