Merge pull request #18560 from appsmithorg/release-29nov

chore: Release v1.8.11
This commit is contained in:
Rohit Agarwal 2022-11-30 00:09:52 +05:30 committed by GitHub
commit cfc1dde746
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
564 changed files with 16617 additions and 4312 deletions

View File

@ -1,37 +0,0 @@
name: 📖 Documentation Improvement
description: Suggest improvements to our documentation
title: "[Docs]: "
labels: [Documentation]
assignees:
- Nikhil-Nandagopal
- danciaclara
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this documentation improvement request!
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue realated to this already exists.
options:
- label: I have searched the existing issues
required: true
- type: input
attributes:
label: Documentation Link
description: Add a link to the page which needs improvement (if relevant)
validations:
required: false
- type: textarea
attributes:
label: Describe the problem
description: Is the documentation missing? Or is it confusing? Why is it confusing?
validations:
required: true
- type: textarea
attributes:
label: Describe the improvement
description: A clear and concise description of the improvement.
validations:
required: true

2
.github/config.json vendored

File diff suppressed because one or more lines are too long

View File

@ -168,6 +168,18 @@ jobs:
yarn global add serve
echo "$(yarn global bin)" >> $GITHUB_PATH
- name: Load docker image
if: steps.run_result.outputs.run_result != 'success'
env:
APPSMITH_LICENSE_KEY: ${{ secrets.APPSMITH_LICENSE_KEY }}
working-directory: "."
run: |
mkdir -p ~/git-server/keys
mkdir -p ~/git-server/repos
docker run --name test-event-driver -d -p 2222:22 -p 5001:5001 -p 3306:3306 \
-p 5432:5432 -p 28017:27017 -p 25:25 --privileged --pid=host --ipc=host --volume /:/host -v ~/git-server/keys:/git-server/keys \
-v ~/git-server/repos:/git-server/repos appsmith/test-event-driver:latest
- name: Setting up the perf tests
if: steps.run_result.outputs.run_result != 'success'
shell: bash

View File

@ -1476,7 +1476,7 @@ jobs:
# Force save the failed spec list into a cache
- name: Store the combined run result
if: needs.ui-test.result
if: needs.ui-test.result != 'success'
uses: martijnhols/actions-cache/save@v3
with:
path: |
@ -1487,7 +1487,7 @@ jobs:
# Force save the fat failed spec list into a cache
- name: Store the combined run result for fat
if: needs.ui-test.result
if: needs.fat-container-test.result != 'success'
uses: martijnhols/actions-cache/save@v3
with:
path: |
@ -1499,7 +1499,7 @@ jobs:
# Upload combined failed spec list to a file
# This is done for debugging.
- name: upload combined failed spec
if: needs.ui-test.result
if: needs.ui-test.result != 'success'
uses: actions/upload-artifact@v2
with:
name: combined_failed_spec
@ -1508,7 +1508,7 @@ jobs:
# Upload combined failed fat spec list to a file
# This is done for debugging.
- name: upload combined failed spec
if: needs.ui-test.result
if: needs.fat-container-test.result != 'success'
uses: actions/upload-artifact@v2
with:
name: combined_failed_spec_fat

View File

@ -21,7 +21,7 @@ We welcome all feature requests, whether it's to add new functionality to an exi
File your feature request through GitHub Issues using the [Feature Request](https://github.com/appsmithorg/appsmith/issues/new?assignees=Nikhil-Nandagopal&labels=Enhancement&template=--feature-request.yaml&title=%5BFeature%5D%3A+) template.
#### 📝 Improve the documentation
In the process of shipping features quickly, we may forget to keep our docs up to date. You can help by suggesting improvements to our documentation using the [Documentation Improvement](https://github.com/appsmithorg/appsmith/issues/new?assignees=Nikhil-Nandagopal&labels=Documentation&template=--documentation-improvement.yaml&title=%5BDocs%5D%3A+) template or dive right into our [Docs Contribution Guide](contributions/docs/CONTRIBUTING.md)!
In the process of shipping features quickly, we may forget to keep our docs up to date. You can help by suggesting improvements to our documentation using the [Documentation templates](https://github.com/appsmithorg/appsmith-docs/issues/new/choose) or dive right into our [Docs Contribution Guide](https://github.com/appsmithorg/appsmith-docs/blob/main/CONTRIBUTING.md)!
#### ⚙️ Close a Bug / Feature issue
We welcome contributions that help make appsmith bug free & improve the experience of our users. You can also find issues tagged [Good First Issues](https://github.com/appsmithorg/appsmith/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+First+Issue%22+bug). Check out our [Code Contribution Guide](contributions/CodeContributionsGuidelines.md) to begin.

View File

@ -165,8 +165,8 @@ Lets build great software together.
[![sharat87](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/120119?v=4&w=50&h=50&mask=circle)](https://github.com/sharat87)
[![riodeuno](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/103687?v=4&w=50&h=50&mask=circle)](https://github.com/riodeuno)
[![vicky-primathon](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/67091118?v=4&w=50&h=50&mask=circle)](https://github.com/vicky-primathon)
[![satbir121](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/39981226?v=4&w=50&h=50&mask=circle)](https://github.com/satbir121)
[![akash-codemonk](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/67054171?v=4&w=50&h=50&mask=circle)](https://github.com/akash-codemonk)
[![satbir121](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/39981226?v=4&w=50&h=50&mask=circle)](https://github.com/satbir121)
[![nidhi-nair](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5298848?v=4&w=50&h=50&mask=circle)](https://github.com/nidhi-nair)
[![Tooluloope](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31691737?v=4&w=50&h=50&mask=circle)](https://github.com/Tooluloope)
[![sumitsum](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1757421?v=4&w=50&h=50&mask=circle)](https://github.com/sumitsum)
@ -198,16 +198,16 @@ Lets build great software together.
[![ayushpahwa](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8526215?v=4&w=50&h=50&mask=circle)](https://github.com/ayushpahwa)
[![Parthvi12](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/80334441?v=4&w=50&h=50&mask=circle)](https://github.com/Parthvi12)
[![ashit-rath](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/88306433?v=4&w=50&h=50&mask=circle)](https://github.com/ashit-rath)
[![areyabhishek](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30255708?v=4&w=50&h=50&mask=circle)](https://github.com/areyabhishek)
[![AmanAgarwal041](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7565635?v=4&w=50&h=50&mask=circle)](https://github.com/AmanAgarwal041)
[![areyabhishek](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30255708?v=4&w=50&h=50&mask=circle)](https://github.com/areyabhishek)
[![rimildeyjsr](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10229595?v=4&w=50&h=50&mask=circle)](https://github.com/rimildeyjsr)
[![cokoghenun](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17744578?v=4&w=50&h=50&mask=circle)](https://github.com/cokoghenun)
[![ankurrsinghal](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17961105?v=4&w=50&h=50&mask=circle)](https://github.com/ankurrsinghal)
[![cokoghenun](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17744578?v=4&w=50&h=50&mask=circle)](https://github.com/cokoghenun)
[![vishnu-gp](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9128194?v=4&w=50&h=50&mask=circle)](https://github.com/vishnu-gp)
[![keyurparalkar](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14138515?v=4&w=50&h=50&mask=circle)](https://github.com/keyurparalkar)
[![vihar](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16307796?v=4&w=50&h=50&mask=circle)](https://github.com/vihar)
[![eco-monk](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/66776129?v=4&w=50&h=50&mask=circle)](https://github.com/eco-monk)
[![ChandanBalajiBP](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/104058110?v=4&w=50&h=50&mask=circle)](https://github.com/ChandanBalajiBP)
[![eco-monk](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/66776129?v=4&w=50&h=50&mask=circle)](https://github.com/eco-monk)
[![souma-ghosh](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/103924539?v=4&w=50&h=50&mask=circle)](https://github.com/souma-ghosh)
[![subrata71](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3524599?v=4&w=50&h=50&mask=circle)](https://github.com/subrata71)
[![dhruvikn](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22471214?v=4&w=50&h=50&mask=circle)](https://github.com/dhruvikn)
@ -215,23 +215,22 @@ Lets build great software together.
[![tanvibhakta](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13763558?v=4&w=50&h=50&mask=circle)](https://github.com/tanvibhakta)
[![berzerkeer](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/74818788?v=4&w=50&h=50&mask=circle)](https://github.com/berzerkeer)
[![nsarupr](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20905988?v=4&w=50&h=50&mask=circle)](https://github.com/nsarupr)
[![sondermanish](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/107841575?v=4&w=50&h=50&mask=circle)](https://github.com/sondermanish)
[![sneha122](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30018882?v=4&w=50&h=50&mask=circle)](https://github.com/sneha122)
[![pratapaprasanna](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/15846947?v=4&w=50&h=50&mask=circle)](https://github.com/pratapaprasanna)
[![sondermanish](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/107841575?v=4&w=50&h=50&mask=circle)](https://github.com/sondermanish)
[![Pranay105](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48308728?v=4&w=50&h=50&mask=circle)](https://github.com/Pranay105)
[![iamrkcheers](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16760643?v=4&w=50&h=50&mask=circle)](https://github.com/iamrkcheers)
[![vaibh1297](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/40293928?v=4&w=50&h=50&mask=circle)](https://github.com/vaibh1297)
[![ankitsrivas14](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/67647761?v=4&w=50&h=50&mask=circle)](https://github.com/ankitsrivas14)
[![kocharrahul7](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20532920?v=4&w=50&h=50&mask=circle)](https://github.com/kocharrahul7)
[![rohitagarwal88](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/890915?v=4&w=50&h=50&mask=circle)](https://github.com/rohitagarwal88)
[![ramsaptami](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/79509062?v=4&w=50&h=50&mask=circle)](https://github.com/ramsaptami)
[![ravikp7](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13567359?v=4&w=50&h=50&mask=circle)](https://github.com/ravikp7)
[![AS-Laguna](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/101155659?v=4&w=50&h=50&mask=circle)](https://github.com/AS-Laguna)
[![NilanshBansal](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25542733?v=4&w=50&h=50&mask=circle)](https://github.com/NilanshBansal)
[![RakshaKShetty](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/45958978?v=4&w=50&h=50&mask=circle)](https://github.com/RakshaKShetty)
[![ravikp7](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13567359?v=4&w=50&h=50&mask=circle)](https://github.com/ravikp7)
[![iamrkcheers](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16760643?v=4&w=50&h=50&mask=circle)](https://github.com/iamrkcheers)
[![Rishabhkaul](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1650391?v=4&w=50&h=50&mask=circle)](https://github.com/Rishabhkaul)
[![rohan-arthur](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/94514895?v=4&w=50&h=50&mask=circle)](https://github.com/rohan-arthur)
[![somnathdasadhikari](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17508328?v=4&w=50&h=50&mask=circle)](https://github.com/somnathdasadhikari)
[![hiteshjoshi](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/217911?v=4&w=50&h=50&mask=circle)](https://github.com/hiteshjoshi)
[![rlnorthcutt](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/673633?v=4&w=50&h=50&mask=circle)](https://github.com/rlnorthcutt)
[![vuiets](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1571370?v=4&w=50&h=50&mask=circle)](https://github.com/vuiets)
@ -245,6 +244,7 @@ Lets build great software together.
[![riteshkew](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20280935?v=4&w=50&h=50&mask=circle)](https://github.com/riteshkew)
[![andrewdietekoki](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23283551?v=4&w=50&h=50&mask=circle)](https://github.com/andrewdietekoki)
[![GreenFlux](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/24459976?v=4&w=50&h=50&mask=circle)](https://github.com/GreenFlux)
[![vivonk](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25587962?v=4&w=50&h=50&mask=circle)](https://github.com/vivonk)
[![danciaclara](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/32227135?v=4&w=50&h=50&mask=circle)](https://github.com/danciaclara)
[![Debsourabh](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/34486435?v=4&w=50&h=50&mask=circle)](https://github.com/Debsourabh)
[![tejasahluwalia](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/39881648?v=4&w=50&h=50&mask=circle)](https://github.com/tejasahluwalia)
@ -390,6 +390,7 @@ Lets build great software together.
[![Saket2](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/49346036?v=4&w=50&h=50&mask=circle)](https://github.com/Saket2)
[![withshubh](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25361949?v=4&w=50&h=50&mask=circle)](https://github.com/withshubh)
[![smrutiparida](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5945400?v=4&w=50&h=50&mask=circle)](https://github.com/smrutiparida)
[![somnathdasadhikari](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17508328?v=4&w=50&h=50&mask=circle)](https://github.com/somnathdasadhikari)
[![srijanshetty](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1744347?v=4&w=50&h=50&mask=circle)](https://github.com/srijanshetty)
[![Sufiyan1997](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22118049?v=4&w=50&h=50&mask=circle)](https://github.com/Sufiyan1997)
[![rayrny](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48341341?v=4&w=50&h=50&mask=circle)](https://github.com/rayrny)

View File

@ -15,7 +15,7 @@ plugins.push(
swSrc: "./src/serviceWorker.js",
mode: "development",
swDest: "./pageService.js",
maximumFileSizeToCacheInBytes: 10 * 1024 * 1024,
maximumFileSizeToCacheInBytes: 11 * 1024 * 1024,
}),
);

View File

@ -0,0 +1,857 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896.0,
"snapColumns": 64.0,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0.0,
"bottomRow": 560.0,
"containerStyle": "none",
"snapRows": 125.0,
"parentRowSpace": 1.0,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 69.0,
"minHeight": 1292.0,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1.0,
"dynamicBindingPathList": [],
"leftColumn": 0.0,
"children": [
{
"template": {
"Image1": {
"isVisible": true,
"defaultImage": "https://assets.appsmith.com/widgets/default.png",
"imageShape": "RECTANGLE",
"maxZoomLevel": 1.0,
"enableRotation": false,
"enableDownload": false,
"objectFit": "cover",
"image": "{{List1.listData.map((currentItem) => currentItem.img)}}",
"widgetName": "Image1",
"version": 1.0,
"animateLoading": true,
"type": "IMAGE_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Image",
"key": "n1szm8g77z",
"iconSVG": "/static/media/icon.52d8fb963abcb95c79b10f1553389f22.svg",
"boxShadow": "none",
"dynamicBindingPathList": [
{
"key": "image"
},
{
"key": "borderRadius"
}
],
"dynamicTriggerPathList": [],
"widgetId": "852qrq5vm1",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"leftColumn": 0.0,
"rightColumn": 16.0,
"topRow": 0.0,
"bottomRow": 8.0,
"parentId": "7z0hh0zvos"
},
"Text1": {
"isVisible": true,
"text": "{{List1.listData.map((currentItem) => currentItem.name)}}",
"fontSize": "1rem",
"fontStyle": "BOLD",
"textAlign": "LEFT",
"textColor": "#231F20",
"widgetName": "Text1",
"shouldTruncate": false,
"overflow": "NONE",
"version": 1.0,
"animateLoading": true,
"minDynamicHeight": 4.0,
"maxDynamicHeight": 9000.0,
"dynamicHeight": "AUTO_HEIGHT",
"searchTags": [
"typography",
"paragraph",
"label"
],
"type": "TEXT_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Text",
"key": "tf4er66bom",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"textStyle": "HEADING",
"boxShadow": "none",
"dynamicBindingPathList": [
{
"key": "text"
},
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
],
"dynamicTriggerPathList": [],
"widgetId": "1sfn18h25j",
"renderMode": "CANVAS",
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"leftColumn": 16.0,
"rightColumn": 28.0,
"topRow": 0.0,
"bottomRow": 4.0,
"parentId": "7z0hh0zvos"
},
"Text2": {
"isVisible": true,
"text": "{{List1.listData.map((currentItem) => currentItem.id)}}",
"fontSize": "1rem",
"fontStyle": "BOLD",
"textAlign": "LEFT",
"textColor": "#231F20",
"widgetName": "Text2",
"shouldTruncate": false,
"overflow": "NONE",
"version": 1.0,
"animateLoading": true,
"minDynamicHeight": 4.0,
"maxDynamicHeight": 9000.0,
"dynamicHeight": "AUTO_HEIGHT",
"searchTags": [
"typography",
"paragraph",
"label"
],
"type": "TEXT_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Text",
"key": "tf4er66bom",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"textStyle": "BODY",
"boxShadow": "none",
"dynamicBindingPathList": [
{
"key": "text"
},
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
],
"dynamicTriggerPathList": [],
"widgetId": "ekx7bft1ux",
"renderMode": "CANVAS",
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"leftColumn": 16.0,
"rightColumn": 24.0,
"topRow": 4.0,
"bottomRow": 8.0,
"parentId": "7z0hh0zvos"
},
"CheckboxGroup1": {
"isVisible": true,
"animateLoading": true,
"labelTextSize": "0.875rem",
"options": [
{
"label": "Blue",
"value": "BLUE"
},
{
"label": "Green",
"value": "GREEN"
},
{
"label": "Red",
"value": "RED"
}
],
"defaultSelectedValues": [
"BLUE"
],
"isDisabled": false,
"isInline": true,
"isRequired": false,
"labelText": "Label",
"labelPosition": "Top",
"labelAlignment": "left",
"labelWidth": 5.0,
"widgetName": "CheckboxGroup1",
"version": 2.0,
"minDynamicHeight": 4.0,
"maxDynamicHeight": 9000.0,
"dynamicHeight": "AUTO_HEIGHT",
"type": "CHECKBOX_GROUP_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Checkbox Group",
"key": "2ge4cq00z3",
"iconSVG": "/static/media/icon.ecb3847950c4515966ef642a32758afb.svg",
"widgetId": "30pveks53r",
"renderMode": "CANVAS",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 4.2734375,
"parentRowSpace": 10.0,
"leftColumn": 35.0,
"rightColumn": 58.0,
"topRow": 0.0,
"bottomRow": 6.0,
"parentId": "7z0hh0zvos",
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
}
],
"logBlackList": {
"isVisible": true,
"animateLoading": true,
"labelTextSize": true,
"options": true,
"defaultSelectedValues": true,
"isDisabled": true,
"isInline": true,
"isRequired": true,
"labelText": true,
"labelPosition": true,
"labelAlignment": true,
"labelWidth": true,
"widgetName": true,
"version": true,
"minDynamicHeight": true,
"maxDynamicHeight": true,
"dynamicHeight": true,
"searchTags": true,
"type": true,
"hideCard": true,
"isDeprecated": true,
"replacement": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"accentColor": true,
"borderRadius": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true,
"dynamicBindingPathList": true
}
}
},
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"widgetName": "List1",
"listData": [
{
"id": "001",
"name": "Blue",
"img": "https://assets.appsmith.com/widgets/default.png"
},
{
"id": "002",
"name": "Green",
"img": "https://assets.appsmith.com/widgets/default.png"
},
{
"id": "003",
"name": "Red",
"img": "https://assets.appsmith.com/widgets/default.png"
}
],
"isCanvas": true,
"displayName": "List",
"iconSVG": "/static/media/icon.9925ee17dee37bf1ba7374412563a8a7.svg",
"topRow": 8.0,
"bottomRow": 48.0,
"parentRowSpace": 10.0,
"type": "LIST_WIDGET",
"hideCard": false,
"gridGap": 0.0,
"animateLoading": true,
"parentColumnSpace": 12.5625,
"dynamicTriggerPathList": [],
"leftColumn": 18.0,
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
},
{
"key": "boxShadow"
},
{
"key": "template.Image1.image"
},
{
"key": "template.Text1.text"
},
{
"key": "template.Text2.text"
}
],
"gridType": "vertical",
"enhancements": true,
"children": [
{
"boxShadow": "none",
"widgetName": "Canvas1",
"displayName": "Canvas",
"topRow": 0.0,
"bottomRow": 400.0,
"parentRowSpace": 1.0,
"type": "CANVAS_WIDGET",
"canExtend": false,
"hideCard": true,
"dropDisabled": true,
"openParentPropertyPane": true,
"minHeight": 400.0,
"noPad": true,
"parentColumnSpace": 1.0,
"leftColumn": 0.0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
],
"children": [
{
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"widgetName": "Container1",
"borderColor": "#E0DEDE",
"disallowCopy": true,
"isCanvas": true,
"displayName": "Container",
"iconSVG": "/static/media/icon.1977dca3370505e2db3a8e44cfd54907.svg",
"searchTags": [
"div",
"parent",
"group"
],
"topRow": 0.0,
"bottomRow": 12.0,
"dragDisabled": true,
"type": "CONTAINER_WIDGET",
"hideCard": false,
"openParentPropertyPane": true,
"shouldScrollContents": true,
"isDeletable": false,
"animateLoading": true,
"leftColumn": 0.0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"children": [
{
"boxShadow": "none",
"widgetName": "Canvas2",
"displayName": "Canvas",
"topRow": 0.0,
"bottomRow": 150.0,
"parentRowSpace": 1.0,
"type": "CANVAS_WIDGET",
"canExtend": false,
"hideCard": true,
"minHeight": 150.0,
"parentColumnSpace": 1.0,
"leftColumn": 0.0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
],
"children": [
{
"boxShadow": "none",
"widgetName": "Image1",
"displayName": "Image",
"iconSVG": "/static/media/icon.52d8fb963abcb95c79b10f1553389f22.svg",
"topRow": 0.0,
"bottomRow": 8.0,
"type": "IMAGE_WIDGET",
"hideCard": false,
"animateLoading": true,
"dynamicTriggerPathList": [],
"imageShape": "RECTANGLE",
"dynamicBindingPathList": [
{
"key": "image"
},
{
"key": "borderRadius"
}
],
"leftColumn": 0.0,
"defaultImage": "https://assets.appsmith.com/widgets/default.png",
"key": "n1szm8g77z",
"image": "{{currentItem.img}}",
"isDeprecated": false,
"rightColumn": 16.0,
"objectFit": "cover",
"widgetId": "852qrq5vm1",
"logBlackList": {
"isVisible": true,
"defaultImage": true,
"imageShape": true,
"maxZoomLevel": true,
"enableRotation": true,
"enableDownload": true,
"objectFit": true,
"image": true,
"widgetName": true,
"version": true,
"animateLoading": true,
"searchTags": true,
"type": true,
"hideCard": true,
"isDeprecated": true,
"replacement": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"boxShadow": true,
"dynamicBindingPathList": true,
"dynamicTriggerPathList": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"borderRadius": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"version": 1.0,
"parentId": "7z0hh0zvos",
"renderMode": "CANVAS",
"isLoading": false,
"maxZoomLevel": 1.0,
"enableDownload": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"enableRotation": false
},
{
"boxShadow": "none",
"widgetName": "Text1",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"searchTags": [
"typography",
"paragraph",
"label"
],
"topRow": 0.0,
"bottomRow": 4.0,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"overflow": "NONE",
"dynamicTriggerPathList": [],
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"dynamicBindingPathList": [
{
"key": "text"
},
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
],
"leftColumn": 16.0,
"shouldTruncate": false,
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"text": "{{currentItem.name}}",
"key": "tf4er66bom",
"isDeprecated": false,
"rightColumn": 28.0,
"textAlign": "LEFT",
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "1sfn18h25j",
"logBlackList": {
"isVisible": true,
"text": true,
"fontSize": true,
"fontStyle": true,
"textAlign": true,
"textColor": true,
"widgetName": true,
"shouldTruncate": true,
"overflow": true,
"version": true,
"animateLoading": true,
"minDynamicHeight": true,
"maxDynamicHeight": true,
"dynamicHeight": true,
"searchTags": true,
"type": true,
"hideCard": true,
"isDeprecated": true,
"replacement": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"textStyle": true,
"boxShadow": true,
"dynamicBindingPathList": true,
"dynamicTriggerPathList": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"truncateButtonColor": true,
"fontFamily": true,
"borderRadius": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"version": 1.0,
"parentId": "7z0hh0zvos",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000.0,
"fontSize": "1rem",
"textStyle": "HEADING",
"minDynamicHeight": 4.0
},
{
"boxShadow": "none",
"widgetName": "Text2",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"searchTags": [
"typography",
"paragraph",
"label"
],
"topRow": 4.0,
"bottomRow": 9.0,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"overflow": "NONE",
"dynamicTriggerPathList": [],
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"dynamicBindingPathList": [
{
"key": "text"
},
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
],
"leftColumn": 16.0,
"shouldTruncate": false,
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"text": "{{currentItem.id}}",
"key": "tf4er66bom",
"isDeprecated": false,
"rightColumn": 24.0,
"textAlign": "LEFT",
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "ekx7bft1ux",
"logBlackList": {
"isVisible": true,
"text": true,
"fontSize": true,
"fontStyle": true,
"textAlign": true,
"textColor": true,
"widgetName": true,
"shouldTruncate": true,
"overflow": true,
"version": true,
"animateLoading": true,
"minDynamicHeight": true,
"maxDynamicHeight": true,
"dynamicHeight": true,
"searchTags": true,
"type": true,
"hideCard": true,
"isDeprecated": true,
"replacement": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"textStyle": true,
"boxShadow": true,
"dynamicBindingPathList": true,
"dynamicTriggerPathList": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"truncateButtonColor": true,
"fontFamily": true,
"borderRadius": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"version": 1.0,
"parentId": "7z0hh0zvos",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 4.0,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000.0,
"originalBottomRow": 9.0,
"fontSize": "1rem",
"textStyle": "BODY",
"minDynamicHeight": 4.0
},
{
"widgetName": "CheckboxGroup1",
"displayName": "Checkbox Group",
"iconSVG": "/static/media/icon.ecb3847950c4515966ef642a32758afb.svg",
"labelText": "Label",
"topRow": 0.0,
"bottomRow": 13.0,
"parentRowSpace": 10.0,
"labelWidth": 5.0,
"type": "CHECKBOX_GROUP_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 4.2734375,
"leftColumn": 35.0,
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
}
],
"labelPosition": "Top",
"options": [
{
"label": "Blue",
"value": "BLUE"
},
{
"label": "Green",
"value": "GREEN"
},
{
"label": "Red",
"value": "RED"
}
],
"isDisabled": false,
"key": "2ge4cq00z3",
"labelTextSize": "0.875rem",
"isRequired": false,
"isDeprecated": false,
"rightColumn": 58.0,
"defaultSelectedValues": [
"BLUE"
],
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "30pveks53r",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"logBlackList": {
"isVisible": true,
"animateLoading": true,
"labelTextSize": true,
"options": true,
"defaultSelectedValues": true,
"isDisabled": true,
"isInline": true,
"isRequired": true,
"labelText": true,
"labelPosition": true,
"labelAlignment": true,
"labelWidth": true,
"widgetName": true,
"version": true,
"minDynamicHeight": true,
"maxDynamicHeight": true,
"dynamicHeight": true,
"searchTags": true,
"type": true,
"hideCard": true,
"isDeprecated": true,
"replacement": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"accentColor": true,
"borderRadius": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true,
"dynamicBindingPathList": true
},
"isVisible": true,
"version": 2.0,
"parentId": "7z0hh0zvos",
"labelAlignment": "left",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 0.0,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000.0,
"originalBottomRow": 6.0,
"isInline": true,
"minDynamicHeight": 4.0
}
],
"key": "8xilm9v7l4",
"isDeprecated": false,
"detachFromLayout": true,
"widgetId": "7z0hh0zvos",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"containerStyle": "none",
"isVisible": true,
"version": 1.0,
"parentId": "s5iecr6n8i",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
}
],
"borderWidth": "1",
"key": "h9n2njehd3",
"disablePropertyPane": true,
"backgroundColor": "white",
"isDeprecated": false,
"rightColumn": 64.0,
"dynamicHeight": "FIXED",
"widgetId": "s5iecr6n8i",
"containerStyle": "card",
"isVisible": true,
"version": 1.0,
"parentId": "9iszxoqodt",
"renderMode": "CANVAS",
"isLoading": false,
"disabledWidgetFeatures": [
"dynamicHeight"
],
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000.0,
"minDynamicHeight": 10.0
}
],
"key": "8xilm9v7l4",
"isDeprecated": false,
"rightColumn": 301.5,
"detachFromLayout": true,
"widgetId": "9iszxoqodt",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"containerStyle": "none",
"isVisible": true,
"version": 1.0,
"parentId": "3c9elfu0p5",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
}
],
"privateWidgets": {
"undefined": true
},
"key": "5a7y7jpy4y",
"backgroundColor": "transparent",
"isDeprecated": false,
"rightColumn": 42.0,
"itemBackgroundColor": "#FFFFFF",
"widgetId": "3c9elfu0p5",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isVisible": true,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
}
]
}
}

View File

@ -0,0 +1,426 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 1224,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 2670,
"containerStyle": "none",
"snapRows": 121,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 69,
"minHeight": 1220,
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"widgetName": "Text1",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"searchTags": [
"typography",
"paragraph",
"label"
],
"topRow": 17,
"bottomRow": 82,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"overflow": "NONE",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"parentColumnSpace": 15.265625,
"dynamicTriggerPathList": [],
"leftColumn": 5,
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
},
{
"key": "text"
}
],
"shouldTruncate": false,
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"text": "{{appsmith.store.text}}",
"key": "9ccwuxni06",
"isDeprecated": false,
"rightColumn": 57,
"textAlign": "LEFT",
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "l3kr1x82zd",
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 17,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"originalBottomRow": 22,
"fontSize": "1rem",
"minDynamicHeight": 4
},
{
"widgetName": "Text3",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"searchTags": [
"typography",
"paragraph",
"label"
],
"topRow": 83,
"bottomRow": 165,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"overflow": "NONE",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"parentColumnSpace": 15.265625,
"dynamicTriggerPathList": [],
"leftColumn": 27,
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
},
{
"key": "text"
}
],
"shouldTruncate": false,
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"text": "{{appsmith.store.text}}",
"key": "9ccwuxni06",
"isDeprecated": false,
"rightColumn": 64,
"textAlign": "LEFT",
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "o3bwh27p3h",
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 23,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"originalBottomRow": 28,
"fontSize": "1rem",
"minDynamicHeight": 4
},
{
"resetFormOnClick": false,
"boxShadow": "none",
"widgetName": "Button2",
"onClick": "{{storeValue('text', `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,`)}}",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"dynamicPropertyPathList": [
{
"key": "onClick"
}
],
"displayName": "Button",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"searchTags": [
"click",
"submit"
],
"topRow": 89,
"bottomRow": 93,
"parentRowSpace": 10,
"type": "BUTTON_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 15.265625,
"dynamicTriggerPathList": [
{
"key": "onClick"
}
],
"leftColumn": 5,
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
],
"text": "Small",
"isDisabled": false,
"key": "gpamqfjowi",
"isDeprecated": false,
"rightColumn": 21,
"isDefaultClickDisabled": true,
"widgetId": "pgpxxkqql0",
"isVisible": true,
"recaptchaType": "V3",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 29,
"disabledWhenInvalid": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"originalBottomRow": 33,
"buttonVariant": "PRIMARY",
"placement": "CENTER"
},
{
"resetFormOnClick": false,
"boxShadow": "none",
"widgetName": "Button1",
"onClick": "{{storeValue('text', `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum`)}}",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"dynamicPropertyPathList": [
{
"key": "onClick"
}
],
"displayName": "Button",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"searchTags": [
"click",
"submit"
],
"topRow": 101,
"bottomRow": 105,
"parentRowSpace": 10,
"type": "BUTTON_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 15.265625,
"dynamicTriggerPathList": [
{
"key": "onClick"
}
],
"leftColumn": 4,
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
],
"text": "Medium",
"isDisabled": false,
"key": "gpamqfjowi",
"isDeprecated": false,
"rightColumn": 20,
"isDefaultClickDisabled": true,
"widgetId": "oh3y8w2j1p",
"isVisible": true,
"recaptchaType": "V3",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 34,
"disabledWhenInvalid": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"originalBottomRow": 38,
"buttonVariant": "PRIMARY",
"placement": "CENTER"
},
{
"resetFormOnClick": false,
"boxShadow": "none",
"widgetName": "Button1Copy",
"onClick": "{{storeValue('text', `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\n\nWhy do we use it?\nIt is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).\n\n\nWhere does it come from?\nContrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of \"de Finibus Bonorum et Malorum\" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, \"Lorem ipsum dolor sit amet..\", comes from a line in section 1.10.32.\n\nThe standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from \"de Finibus Bonorum et Malorum\" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.\n\nWhere can I get some?\nThere are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model senten`)}}",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"dynamicPropertyPathList": [
{
"key": "onClick"
}
],
"displayName": "Button",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"searchTags": [
"click",
"submit"
],
"topRow": 167,
"bottomRow": 171,
"parentRowSpace": 10,
"type": "BUTTON_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 15.265625,
"dynamicTriggerPathList": [
{
"key": "onClick"
}
],
"leftColumn": 28,
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
],
"text": "Large",
"isDisabled": false,
"key": "gpamqfjowi",
"isDeprecated": false,
"rightColumn": 44,
"isDefaultClickDisabled": true,
"widgetId": "ter388gte5",
"isVisible": true,
"recaptchaType": "V3",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 39,
"disabledWhenInvalid": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"originalBottomRow": 43,
"buttonVariant": "PRIMARY",
"placement": "CENTER"
},
{
"widgetName": "Text2",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"searchTags": [
"typography",
"paragraph",
"label"
],
"topRow": 181,
"bottomRow": 251,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"overflow": "NONE",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"parentColumnSpace": 15.265625,
"dynamicTriggerPathList": [],
"leftColumn": 5,
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
},
{
"key": "text"
}
],
"shouldTruncate": false,
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"text": "{{appsmith.store.text}}",
"key": "9ccwuxni06",
"isDeprecated": false,
"rightColumn": 53,
"textAlign": "LEFT",
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "22trl91ovs",
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 44,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"originalBottomRow": 49,
"fontSize": "1rem",
"minDynamicHeight": 4
},
{
"widgetName": "Text4",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"searchTags": [
"typography",
"paragraph",
"label"
],
"topRow": 187,
"bottomRow": 259,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"overflow": "NONE",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"parentColumnSpace": 15.265625,
"dynamicTriggerPathList": [],
"leftColumn": 16,
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
},
{
"key": "text"
}
],
"shouldTruncate": false,
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"text": "{{appsmith.store.text}}",
"key": "9ccwuxni06",
"isDeprecated": false,
"rightColumn": 60,
"textAlign": "LEFT",
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "wdz3pjzsi5",
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 50,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"originalBottomRow": 55,
"fontSize": "1rem",
"minDynamicHeight": 4
}
]
}
}

View File

@ -0,0 +1,170 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 1290,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 69,
"minHeight": 1292,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"widgetName": "Container1",
"borderColor": "#E0DEDE",
"isCanvas": true,
"displayName": "Container",
"iconSVG": "/static/media/icon.1977dca3370505e2db3a8e44cfd54907.svg",
"searchTags": [
"div",
"parent",
"group"
],
"topRow": 6,
"bottomRow": 16,
"parentRowSpace": 10,
"type": "CONTAINER_WIDGET",
"hideCard": false,
"shouldScrollContents": true,
"animateLoading": true,
"parentColumnSpace": 11.9375,
"leftColumn": 16,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"children": [
{
"boxShadow": "none",
"widgetName": "Canvas1",
"displayName": "Canvas",
"topRow": 0,
"bottomRow": 100,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": false,
"hideCard": true,
"minHeight": 100,
"parentColumnSpace": 1,
"leftColumn": 0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
],
"children": [
{
"isVisible": true,
"animateLoading": true,
"labelTextSize": "0.875rem",
"options": [
{
"label": "Blue",
"value": "BLUE"
},
{
"label": "Green",
"value": "GREEN"
},
{
"label": "Red",
"value": "RED"
}
],
"defaultSelectedValues": [
"BLUE"
],
"isDisabled": false,
"isInline": true,
"isRequired": false,
"labelText": "Label",
"labelPosition": "Top",
"labelAlignment": "left",
"labelWidth": 5,
"widgetName": "CheckboxGroup1",
"version": 2,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"type": "CHECKBOX_GROUP_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Checkbox Group",
"key": "px8e5kndcb",
"iconSVG": "/static/media/icon.ecb3847950c4515966ef642a32758afb.svg",
"widgetId": "li1gq4tzny",
"renderMode": "CANVAS",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 3.42578125,
"parentRowSpace": 10,
"leftColumn": 18,
"rightColumn": 41,
"topRow": 0,
"bottomRow": 6,
"parentId": "tbezx4vcxu",
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
}
]
}
],
"key": "49f4d77rwd",
"isDeprecated": false,
"rightColumn": 286.5,
"detachFromLayout": true,
"widgetId": "tbezx4vcxu",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"containerStyle": "none",
"isVisible": true,
"version": 1,
"parentId": "57nv0ufxq1",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
}
],
"borderWidth": "1",
"key": "g4phrz9m3l",
"backgroundColor": "#FFFFFF",
"isDeprecated": false,
"rightColumn": 40,
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "57nv0ufxq1",
"containerStyle": "card",
"isVisible": true,
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"minDynamicHeight": 10
}
]
}
}

View File

@ -0,0 +1,109 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 1292,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 69,
"minHeight": 1292,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"isVisible": true,
"backgroundColor": "#FFFFFF",
"widgetName": "Container1",
"containerStyle": "card",
"borderColor": "#E0DEDE",
"borderWidth": "1",
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"animateLoading": true,
"children": [
{
"isVisible": true,
"widgetName": "Canvas1",
"version": 1,
"detachFromLayout": true,
"type": "CANVAS_WIDGET",
"hideCard": true,
"isDeprecated": false,
"displayName": "Canvas",
"key": "49f4d77rwd",
"containerStyle": "none",
"canExtend": false,
"children": [],
"minHeight": 100,
"widgetId": "tbezx4vcxu",
"renderMode": "CANVAS",
"boxShadow": "none",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 286.5,
"topRow": 0,
"bottomRow": 100,
"parentId": "57nv0ufxq1",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
]
}
],
"version": 1,
"minDynamicHeight": 10,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"shouldScrollContents": true,
"searchTags": [
"div",
"parent",
"group"
],
"type": "CONTAINER_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Container",
"key": "g4phrz9m3l",
"iconSVG": "/static/media/icon.1977dca3370505e2db3a8e44cfd54907.svg",
"isCanvas": true,
"widgetId": "57nv0ufxq1",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 11.9375,
"parentRowSpace": 10,
"leftColumn": 20,
"rightColumn": 44,
"topRow": 23,
"bottomRow": 33,
"parentId": "0",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
]
}
]
}
}

View File

@ -0,0 +1,481 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 1290,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 69,
"minHeight": 1292,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "FIXED",
"shouldScrollContents": true,
"borderColor": "#E0DEDE",
"borderWidth": "1",
"animateLoading": true,
"widgetName": "Form1",
"backgroundColor": "#FFFFFF",
"children": [
{
"isVisible": true,
"widgetName": "Canvas1",
"version": 1,
"detachFromLayout": true,
"type": "CANVAS_WIDGET",
"hideCard": true,
"isDeprecated": false,
"displayName": "Canvas",
"key": "74zfu9g19a",
"containerStyle": "none",
"canExtend": false,
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "FIXED",
"overflow": "NONE",
"text": "Form",
"fontSize": "1.25rem",
"fontStyle": "BOLD",
"textAlign": "LEFT",
"textColor": "#231F20",
"widgetName": "Text1",
"shouldTruncate": false,
"version": 1,
"animateLoading": true,
"searchTags": [
"typography",
"paragraph",
"label"
],
"type": "TEXT_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Text",
"key": "qjy37lgbc3",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"widgetId": "8c07j99hsy",
"renderMode": "CANVAS",
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"leftColumn": 1.5,
"rightColumn": 25.5,
"topRow": 1,
"bottomRow": 5,
"parentId": "5fswq5m00l",
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
]
},
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "FIXED",
"widgetName": "SwitchGroup1",
"options": [
{
"label": "Blue",
"value": "BLUE"
},
{
"label": "Green",
"value": "GREEN"
},
{
"label": "Red",
"value": "RED"
}
],
"defaultSelectedValues": [
"BLUE"
],
"isDisabled": false,
"isRequired": false,
"isInline": true,
"animateLoading": true,
"alignment": "left",
"labelText": "Label",
"labelPosition": "Left",
"labelAlignment": "left",
"labelWidth": 5,
"version": 1,
"labelTextSize": "0.875rem",
"type": "SWITCH_GROUP_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Switch Group",
"key": "gu5yyvgl2n",
"iconSVG": "/static/media/icon.c98225eee52c61080cd91042d88545c8.svg",
"isCanvas": false,
"widgetId": "k6h69sgn79",
"renderMode": "CANVAS",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 4.1640625,
"parentRowSpace": 10,
"leftColumn": 9,
"rightColumn": 35,
"topRow": 27,
"bottomRow": 31,
"parentId": "5fswq5m00l",
"dynamicBindingPathList": [
{
"key": "accentColor"
}
],
"onSelectionChange": "{{showModal('Modal1')}}",
"dynamicTriggerPathList": [
{
"key": "onSelectionChange"
}
]
}
],
"minHeight": 310,
"widgetId": "5fswq5m00l",
"renderMode": "CANVAS",
"boxShadow": "none",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 286.5,
"topRow": 0,
"bottomRow": 310,
"parentId": "qx47bk6wx8",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
]
}
],
"searchTags": [
"group"
],
"type": "FORM_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Form",
"key": "d7jgl29xqe",
"iconSVG": "/static/media/icon.ea3e08d130e59c56867ae40114c10eed.svg",
"isCanvas": true,
"widgetId": "qx47bk6wx8",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"isLoading": false,
"parentColumnSpace": 11.9375,
"parentRowSpace": 10,
"leftColumn": 14,
"rightColumn": 38,
"topRow": 10,
"bottomRow": 43,
"parentId": "0",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"dynamicTriggerPathList": []
},
{
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"shouldScrollContents": true,
"width": 456,
"height": 240,
"canEscapeKeyClose": true,
"animateLoading": true,
"detachFromLayout": true,
"canOutsideClickClose": true,
"widgetName": "Modal1",
"children": [
{
"isVisible": true,
"widgetName": "Canvas2",
"version": 1,
"detachFromLayout": true,
"type": "CANVAS_WIDGET",
"hideCard": true,
"isDeprecated": false,
"displayName": "Canvas",
"key": "74zfu9g19a",
"canExtend": true,
"isDisabled": false,
"shouldScrollContents": false,
"children": [
{
"isVisible": true,
"iconName": "cross",
"buttonVariant": "TERTIARY",
"isDisabled": false,
"widgetName": "IconButton1",
"version": 1,
"animateLoading": true,
"searchTags": [
"click",
"submit"
],
"type": "ICON_BUTTON_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Icon Button",
"key": "oipik9z0jf",
"iconSVG": "/static/media/icon.1a0c634ac75f9fa6b6ae7a8df882a3ba.svg",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"iconSize": 24,
"widgetId": "h84z4pqq7d",
"renderMode": "CANVAS",
"boxShadow": "none",
"isLoading": false,
"leftColumn": 58,
"rightColumn": 64,
"topRow": 0,
"bottomRow": 4,
"parentId": "b8h15fewxw",
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
],
"onClick": "{{closeModal('Modal1')}}"
},
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "FIXED",
"overflow": "NONE",
"text": "Modal Title",
"fontSize": "1.5rem",
"fontStyle": "BOLD",
"textAlign": "LEFT",
"textColor": "#231F20",
"widgetName": "Text2",
"shouldTruncate": false,
"version": 1,
"animateLoading": true,
"searchTags": [
"typography",
"paragraph",
"label"
],
"type": "TEXT_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Text",
"key": "qjy37lgbc3",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"widgetId": "j98rl5e7a1",
"renderMode": "CANVAS",
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"leftColumn": 1,
"rightColumn": 41,
"topRow": 1,
"bottomRow": 5,
"parentId": "b8h15fewxw",
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
]
},
{
"isVisible": true,
"animateLoading": true,
"text": "Close",
"buttonVariant": "SECONDARY",
"placement": "CENTER",
"widgetName": "Button1",
"isDisabled": false,
"isDefaultClickDisabled": true,
"disabledWhenInvalid": false,
"resetFormOnClick": false,
"recaptchaType": "V3",
"version": 1,
"searchTags": [
"click",
"submit"
],
"type": "BUTTON_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Button",
"key": "8fy9at549y",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"buttonStyle": "PRIMARY",
"widgetId": "w3gw0z0hul",
"renderMode": "CANVAS",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"isLoading": false,
"leftColumn": 31,
"rightColumn": 47,
"topRow": 18,
"bottomRow": 22,
"parentId": "b8h15fewxw",
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
],
"onClick": "{{closeModal('Modal1')}}"
},
{
"isVisible": true,
"animateLoading": true,
"text": "Confirm",
"buttonVariant": "PRIMARY",
"placement": "CENTER",
"widgetName": "Button2",
"isDisabled": false,
"isDefaultClickDisabled": true,
"disabledWhenInvalid": false,
"resetFormOnClick": false,
"recaptchaType": "V3",
"version": 1,
"searchTags": [
"click",
"submit"
],
"type": "BUTTON_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Button",
"key": "8fy9at549y",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"buttonStyle": "PRIMARY_BUTTON",
"widgetId": "dcky71d9uv",
"renderMode": "CANVAS",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"isLoading": false,
"leftColumn": 47,
"rightColumn": 63,
"topRow": 18,
"bottomRow": 22,
"parentId": "b8h15fewxw",
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
]
}
],
"minHeight": 0,
"widgetId": "b8h15fewxw",
"renderMode": "CANVAS",
"boxShadow": "none",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 0,
"topRow": 0,
"bottomRow": 0,
"parentId": "d0r5dcpeqm",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
]
}
],
"version": 2,
"searchTags": [
"dialog",
"popup",
"notification"
],
"type": "MODAL_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Modal",
"key": "1y0e1crldi",
"iconSVG": "/static/media/icon.4975978e9a961fb0bfb4e38de7ecc7c5.svg",
"isCanvas": true,
"widgetId": "d0r5dcpeqm",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 0,
"topRow": 0,
"bottomRow": 0,
"parentId": "0",
"dynamicBindingPathList": [
{
"key": "borderRadius"
}
]
}
]
}
}

View File

@ -0,0 +1,281 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 1280,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 1230,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 69,
"minHeight": 1240,
"parentColumnSpace": 1,
"dynamicTriggerPathList": [],
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"labelTextSize": "0.875rem",
"boxShadow": "none",
"widgetName": "Statbox1",
"backgroundColor": "white",
"rightColumn": 21,
"dynamicHeight": "FIXED",
"widgetId": "3sii8uhhjs",
"topRow": 17,
"bottomRow": 33,
"parentRowSpace": 10,
"isVisible": true,
"type": "STATBOX_WIDGET",
"parentId": "0",
"isLoading": false,
"parentColumnSpace": 19.8125,
"leftColumn": 5,
"borderRadius": "0px",
"children": [
{
"labelTextSize": "0.875rem",
"boxShadow": "none",
"widgetName": "Canvas1",
"rightColumn": 317,
"detachFromLayout": true,
"widgetId": "l752czyef7",
"containerStyle": "none",
"topRow": 0,
"bottomRow": 160,
"parentRowSpace": 1,
"isVisible": true,
"canExtend": false,
"type": "CANVAS_WIDGET",
"version": 1,
"parentId": "3sii8uhhjs",
"minHeight": 160,
"isLoading": false,
"parentColumnSpace": 1,
"leftColumn": 0,
"borderRadius": "0px",
"children": [
{
"boxShadow": "none",
"widgetName": "Text1",
"dynamicPropertyPathList": [
{
"key": "fontSize"
}
],
"topRow": 0.5,
"bottomRow": 4.5,
"type": "TEXT_WIDGET",
"overflow": "NONE",
"fontFamily": "System Default",
"dynamicTriggerPathList": [],
"leftColumn": 1.5,
"dynamicBindingPathList": [
{
"key": "text"
}
],
"text": "{{MockApi.data.users[0].id}}",
"labelTextSize": "0.875rem",
"rightColumn": 37.5,
"textAlign": "LEFT",
"dynamicHeight": "FIXED",
"widgetId": "4mtayc9eas",
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#999999",
"version": 1,
"parentId": "l752czyef7",
"isLoading": false,
"borderRadius": "0px",
"maxDynamicHeight": 9000,
"fontSize": "0.75rem",
"minDynamicHeight": 4
},
{
"boxShadow": "none",
"widgetName": "Text2",
"dynamicPropertyPathList": [
{
"key": "fontSize"
}
],
"topRow": 5.5,
"bottomRow": 9.5,
"type": "TEXT_WIDGET",
"overflow": "NONE",
"fontFamily": "System Default",
"leftColumn": 1.5,
"text": "2.6 M",
"labelTextSize": "0.875rem",
"rightColumn": 37.5,
"textAlign": "LEFT",
"dynamicHeight": "FIXED",
"widgetId": "ii2tk6m48f",
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"version": 1,
"parentId": "l752czyef7",
"isLoading": false,
"borderRadius": "0px",
"maxDynamicHeight": 9000,
"fontSize": "1.5rem",
"minDynamicHeight": 4
},
{
"boxShadow": "none",
"widgetName": "Text3",
"dynamicPropertyPathList": [
{
"key": "fontSize"
}
],
"topRow": 10,
"bottomRow": 14,
"type": "TEXT_WIDGET",
"overflow": "NONE",
"fontFamily": "System Default",
"leftColumn": 1.5,
"text": "21% more than last month",
"labelTextSize": "0.875rem",
"rightColumn": 37.5,
"textAlign": "LEFT",
"dynamicHeight": "FIXED",
"widgetId": "ptbhksx9p1",
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#03B365",
"version": 1,
"parentId": "l752czyef7",
"isLoading": false,
"borderRadius": "0px",
"maxDynamicHeight": 9000,
"fontSize": "0.75rem",
"minDynamicHeight": 4
},
{
"labelTextSize": "0.875rem",
"boxShadow": "none",
"widgetName": "IconButton1",
"rightColumn": 61,
"iconName": "arrow-top-right",
"buttonColor": "#03B365",
"dynamicPropertyPathList": [
{
"key": "borderRadius"
}
],
"widgetId": "x35ni1hugn",
"topRow": 3,
"bottomRow": 11,
"isVisible": true,
"type": "ICON_BUTTON_WIDGET",
"version": 1,
"parentId": "l752czyef7",
"isLoading": false,
"borderRadius": "9999px",
"leftColumn": 45,
"buttonVariant": "PRIMARY",
"isDisabled": false
}
]
}
],
"maxDynamicHeight": 9000,
"minDynamicHeight": 4
},
{
"isVisible": true,
"backgroundColor": "#FFFFFF",
"widgetName": "Container1",
"containerStyle": "card",
"borderColor": "#E0DEDE",
"borderWidth": "1",
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"animateLoading": true,
"children": [
{
"isVisible": true,
"widgetName": "Canvas2",
"version": 1,
"detachFromLayout": true,
"type": "CANVAS_WIDGET",
"hideCard": true,
"isDeprecated": false,
"displayName": "Canvas",
"key": "vhu8oytsk7",
"containerStyle": "none",
"canExtend": false,
"children": [],
"minHeight": 580,
"widgetId": "p7wc0hnc0o",
"renderMode": "CANVAS",
"boxShadow": "none",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 286.5,
"topRow": 0,
"bottomRow": 580,
"parentId": "q00fefx59g",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
]
}
],
"version": 1,
"minDynamicHeight": 10,
"maxDynamicHeight": 12,
"dynamicHeight": "FIXED",
"shouldScrollContents": true,
"searchTags": [
"div",
"parent",
"group"
],
"type": "CONTAINER_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Container",
"key": "fcexgq4024",
"iconSVG": "/static/media/icon.1977dca3370505e2db3a8e44cfd54907.svg",
"isCanvas": true,
"widgetId": "q00fefx59g",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 11.9375,
"parentRowSpace": 10,
"leftColumn": 22,
"rightColumn": 64,
"topRow": 3,
"bottomRow": 61,
"parentId": "0",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"dynamicTriggerPathList": []
}
]
}
}

View File

@ -0,0 +1,448 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 400,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 64,
"minHeight": 1292,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"widgetName": "Tabs1",
"borderColor": "#E0DEDE",
"isCanvas": true,
"displayName": "Tabs",
"iconSVG": "/static/media/icon.74a6d653c8201e66f1cd367a3fba2657.svg",
"topRow": 1,
"bottomRow": 20,
"parentRowSpace": 10,
"type": "TABS_WIDGET",
"hideCard": false,
"shouldScrollContents": true,
"animateLoading": true,
"parentColumnSpace": 9.96875,
"leftColumn": 18,
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"children": [
{
"tabId": "tab1",
"boxShadow": "none",
"widgetName": "Canvas1",
"displayName": "Canvas",
"topRow": 0,
"bottomRow": 190,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"hideCard": true,
"shouldScrollContents": false,
"minHeight": 190,
"parentColumnSpace": 1,
"leftColumn": 0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
],
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"animateLoading": true,
"labelTextSize": "0.875rem",
"options": [
{
"label": "Blue",
"value": "BLUE"
},
{
"label": "Green",
"value": "GREEN"
},
{
"label": "Red",
"value": "RED"
}
],
"defaultSelectedValues": [
"BLUE"
],
"isDisabled": false,
"isInline": true,
"isRequired": false,
"labelText": "Label",
"labelPosition": "Left",
"labelAlignment": "left",
"labelWidth": 5,
"widgetName": "CheckboxGroup1",
"version": 2,
"type": "CHECKBOX_GROUP_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Checkbox Group",
"key": "2hr4hycu4v",
"iconSVG": "/static/media/icon.ecb3847950c4515966ef642a32758afb.svg",
"widgetId": "9uc345gnqg",
"renderMode": "CANVAS",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 3.42578125,
"parentRowSpace": 10,
"leftColumn": 13,
"rightColumn": 36,
"topRow": 9,
"bottomRow": 19,
"parentId": "zpypn0rx6a",
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
}
],
"dynamicTriggerPathList": []
}
],
"isDisabled": false,
"key": "wibrs53af5",
"isDeprecated": false,
"tabName": "Tab 1",
"rightColumn": 239.25,
"detachFromLayout": true,
"widgetId": "zpypn0rx6a",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isVisible": true,
"version": 1,
"parentId": "ynm15ab6f2",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
},
{
"tabId": "tab2",
"boxShadow": "none",
"widgetName": "Canvas2",
"displayName": "Canvas",
"topRow": 0,
"bottomRow": 190,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"hideCard": true,
"shouldScrollContents": false,
"minHeight": 190,
"parentColumnSpace": 1,
"leftColumn": 0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
],
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"shouldScrollContents": true,
"borderColor": "#E0DEDE",
"borderWidth": "1",
"animateLoading": true,
"widgetName": "Form1",
"backgroundColor": "#FFFFFF",
"children": [
{
"isVisible": true,
"widgetName": "Canvas3",
"version": 1,
"detachFromLayout": true,
"type": "CANVAS_WIDGET",
"hideCard": true,
"isDeprecated": false,
"displayName": "Canvas",
"key": "xp8804b2ms",
"containerStyle": "none",
"canExtend": false,
"children": [
{
"isVisible": true,
"minDynamicHeight": 0,
"maxDynamicHeight": 0,
"dynamicHeight": "FIXED",
"text": "Form",
"fontSize": "1.25rem",
"fontStyle": "BOLD",
"textAlign": "LEFT",
"textColor": "#231F20",
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"widgetName": "Text1",
"shouldTruncate": false,
"overflow": "NONE",
"version": 1,
"animateLoading": true,
"searchTags": [
"typography",
"paragraph",
"label"
],
"type": "TEXT_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Text",
"key": "qjibufjufj",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"widgetId": "oltjpz4xge",
"renderMode": "CANVAS",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"leftColumn": 1.5,
"rightColumn": 25.5,
"topRow": 1,
"bottomRow": 5,
"parentId": "gfw87mvf4s",
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
]
},
{
"isVisible": true,
"animateLoading": true,
"text": "Submit",
"buttonVariant": "PRIMARY",
"placement": "CENTER",
"widgetName": "Button1",
"isDisabled": false,
"isDefaultClickDisabled": true,
"disabledWhenInvalid": true,
"resetFormOnClick": true,
"recaptchaType": "V3",
"version": 1,
"searchTags": [
"click",
"submit"
],
"type": "BUTTON_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Button",
"key": "fkiknl12i3",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"widgetId": "jdvk4o9jli",
"renderMode": "CANVAS",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"isLoading": false,
"leftColumn": 46,
"rightColumn": 62,
"topRow": 33,
"bottomRow": 37,
"parentId": "gfw87mvf4s",
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
]
},
{
"isVisible": true,
"animateLoading": true,
"text": "Reset",
"buttonVariant": "SECONDARY",
"placement": "CENTER",
"widgetName": "Button2",
"isDisabled": false,
"isDefaultClickDisabled": true,
"disabledWhenInvalid": false,
"resetFormOnClick": true,
"recaptchaType": "V3",
"version": 1,
"searchTags": [
"click",
"submit"
],
"type": "BUTTON_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Button",
"key": "fkiknl12i3",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"widgetId": "1u527b0c32",
"renderMode": "CANVAS",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"isLoading": false,
"leftColumn": 30,
"rightColumn": 46,
"topRow": 33,
"bottomRow": 37,
"parentId": "gfw87mvf4s",
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
]
}
],
"minHeight": 390,
"widgetId": "gfw87mvf4s",
"renderMode": "CANVAS",
"boxShadow": "none",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 100.91015625,
"topRow": 0,
"bottomRow": 390,
"parentId": "hxyieil09m",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
]
}
],
"searchTags": [
"group"
],
"type": "FORM_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Form",
"key": "23o06odb25",
"iconSVG": "/static/media/icon.ea3e08d130e59c56867ae40114c10eed.svg",
"isCanvas": true,
"widgetId": "hxyieil09m",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"isLoading": false,
"parentColumnSpace": 4.20458984375,
"parentRowSpace": 10,
"leftColumn": 11,
"rightColumn": 35,
"topRow": 1,
"bottomRow": 40,
"parentId": "gmq0wikmsj",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"dynamicTriggerPathList": []
}
],
"isDisabled": false,
"key": "wibrs53af5",
"isDeprecated": false,
"tabName": "Tab 2",
"rightColumn": 239.25,
"detachFromLayout": true,
"widgetId": "gmq0wikmsj",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isVisible": true,
"version": 1,
"parentId": "ynm15ab6f2",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
}
],
"borderWidth": 1,
"key": "hf8p55gs4n",
"backgroundColor": "#FFFFFF",
"isDeprecated": false,
"rightColumn": 47,
"dynamicHeight": "FIXED",
"widgetId": "ynm15ab6f2",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"defaultTab": "Tab 1",
"shouldShowTabs": true,
"tabsObj": {
"tab1": {
"label": "Tab 1",
"id": "tab1",
"widgetId": "zpypn0rx6a",
"isVisible": true,
"index": 0
},
"tab2": {
"label": "Tab 2",
"id": "tab2",
"widgetId": "gmq0wikmsj",
"isVisible": true,
"index": 1
}
},
"isVisible": true,
"version": 3,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"minDynamicHeight": 4,
"dynamicTriggerPathList": []
}
]
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,287 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 570,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 65,
"minHeight": 1292,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"widgetName": "Container1",
"borderColor": "#E0DEDE",
"isCanvas": true,
"displayName": "Container",
"iconSVG": "/static/media/icon.1977dca3370505e2db3a8e44cfd54907.svg",
"searchTags": [
"div",
"parent",
"group"
],
"topRow": 16,
"bottomRow": 40,
"parentRowSpace": 10,
"type": "CONTAINER_WIDGET",
"hideCard": false,
"shouldScrollContents": true,
"animateLoading": true,
"parentColumnSpace": 9.96875,
"dynamicTriggerPathList": [],
"leftColumn": 8,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"children": [
{
"boxShadow": "none",
"widgetName": "Canvas1",
"displayName": "Canvas",
"topRow": 0,
"bottomRow": 240,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": false,
"hideCard": true,
"minHeight": 240,
"parentColumnSpace": 1,
"leftColumn": 0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
],
"children": [
{
"boxShadow": "none",
"widgetName": "Input1",
"dynamicPropertyPathList": [
{
"key": "isVisible"
}
],
"displayName": "Input",
"iconSVG": "/static/media/icon.9f505595da61a34f563dba82adeb06ec.svg",
"searchTags": [
"form",
"text input",
"number",
"textarea"
],
"topRow": 5,
"bottomRow": 12,
"parentRowSpace": 10,
"labelWidth": 5,
"autoFocus": false,
"type": "INPUT_WIDGET_V2",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 3.42578125,
"dynamicTriggerPathList": [],
"resetOnSubmit": true,
"leftColumn": 18,
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
},
{
"key": "isVisible"
}
],
"labelPosition": "Top",
"labelStyle": "",
"inputType": "TEXT",
"isDisabled": false,
"key": "xeqahmz2n0",
"labelTextSize": "0.875rem",
"isRequired": false,
"isDeprecated": false,
"rightColumn": 38,
"dynamicHeight": "FIXED",
"widgetId": "8bfucv7r1x",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isVisible": "{{!Checkbox1.isChecked}}",
"label": "Off",
"version": 2,
"parentId": "7k7dojtq6h",
"labelAlignment": "left",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"iconAlign": "left",
"defaultText": "",
"minDynamicHeight": 4
},
{
"boxShadow": "none",
"widgetName": "Input2",
"dynamicPropertyPathList": [
{
"key": "isVisible"
}
],
"displayName": "Input",
"iconSVG": "/static/media/icon.9f505595da61a34f563dba82adeb06ec.svg",
"searchTags": [
"form",
"text input",
"number",
"textarea"
],
"topRow": 15,
"bottomRow": 22,
"parentRowSpace": 10,
"labelWidth": 5,
"autoFocus": false,
"type": "INPUT_WIDGET_V2",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 6.38525390625,
"dynamicTriggerPathList": [],
"resetOnSubmit": true,
"leftColumn": 16,
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
},
{
"key": "isVisible"
}
],
"labelPosition": "Top",
"labelStyle": "",
"inputType": "TEXT",
"isDisabled": false,
"key": "xeqahmz2n0",
"labelTextSize": "0.875rem",
"isRequired": false,
"isDeprecated": false,
"rightColumn": 36,
"dynamicHeight": "FIXED",
"widgetId": "xiw6br6yni",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isVisible": "{{Checkbox1.isChecked}}",
"label": "On",
"version": 2,
"parentId": "7k7dojtq6h",
"labelAlignment": "left",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"iconAlign": "left",
"defaultText": "",
"minDynamicHeight": 4
}
],
"key": "j130wuw4eb",
"isDeprecated": false,
"rightColumn": 239.25,
"detachFromLayout": true,
"widgetId": "7k7dojtq6h",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"containerStyle": "none",
"isVisible": true,
"version": 1,
"parentId": "9ti9l1m9zc",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
}
],
"borderWidth": "1",
"key": "0hl3710evc",
"backgroundColor": "#FFFFFF",
"isDeprecated": false,
"rightColumn": 51,
"dynamicHeight": "AUTO_HEIGHT",
"widgetId": "9ti9l1m9zc",
"containerStyle": "card",
"isVisible": true,
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"originalTopRow": 16,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"originalBottomRow": 59,
"minDynamicHeight": 4
},
{
"widgetName": "Checkbox1",
"displayName": "Checkbox",
"iconSVG": "/static/media/icon.aaab032b43383e4fa53ffc0ef40c90ef.svg",
"searchTags": [
"boolean"
],
"topRow": 45,
"bottomRow": 49,
"parentRowSpace": 10,
"type": "CHECKBOX_WIDGET",
"alignWidget": "LEFT",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 9.96875,
"leftColumn": 22,
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
}
],
"labelPosition": "Left",
"isDisabled": false,
"key": "u8vvhzphvk",
"isRequired": false,
"isDeprecated": false,
"rightColumn": 34,
"dynamicHeight": "FIXED",
"widgetId": "vdfj8it9cv",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isVisible": true,
"label": "Label",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"defaultCheckedState": true,
"maxDynamicHeight": 9000,
"minDynamicHeight": 4,
"originalTopRow": 45,
"originalBottomRow": 49
}
]
}
}

View File

@ -0,0 +1,776 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 1292,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 65,
"minHeight": 1292,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"boxShadow": "none",
"widgetName": "Modal1",
"isCanvas": true,
"displayName": "Modal",
"iconSVG": "/static/media/icon.4975978e9a961fb0bfb4e38de7ecc7c5.svg",
"searchTags": [
"dialog",
"popup",
"notification"
],
"topRow": 0,
"bottomRow": 0,
"parentRowSpace": 1,
"type": "MODAL_WIDGET",
"hideCard": false,
"shouldScrollContents": true,
"animateLoading": true,
"parentColumnSpace": 1,
"dynamicTriggerPathList": [],
"leftColumn": 0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
}
],
"children": [
{
"boxShadow": "none",
"widgetName": "Canvas2",
"displayName": "Canvas",
"topRow": 0,
"bottomRow": 240,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"hideCard": true,
"shouldScrollContents": false,
"minHeight": 240,
"parentColumnSpace": 1,
"leftColumn": 0,
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
],
"children": [
{
"boxShadow": "none",
"widgetName": "IconButton1",
"onClick": "{{closeModal('Modal1')}}",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"displayName": "Icon Button",
"iconSVG": "/static/media/icon.1a0c634ac75f9fa6b6ae7a8df882a3ba.svg",
"searchTags": [
"click",
"submit"
],
"topRow": 0,
"bottomRow": 4,
"type": "ICON_BUTTON_WIDGET",
"hideCard": false,
"animateLoading": true,
"leftColumn": 58,
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
],
"iconSize": 24,
"isDisabled": false,
"key": "oipik9z0jf",
"isDeprecated": false,
"rightColumn": 64,
"iconName": "cross",
"widgetId": "h84z4pqq7d",
"isVisible": true,
"version": 1,
"parentId": "b8h15fewxw",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"buttonVariant": "TERTIARY"
},
{
"widgetName": "Text2",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"searchTags": [
"typography",
"paragraph",
"label"
],
"topRow": 1,
"bottomRow": 5,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"overflow": "NONE",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"leftColumn": 1,
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
],
"shouldTruncate": false,
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"text": "Modal Title",
"key": "qjy37lgbc3",
"isDeprecated": false,
"rightColumn": 41,
"dynamicHeight": "FIXED",
"textAlign": "LEFT",
"widgetId": "j98rl5e7a1",
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"version": 1,
"parentId": "b8h15fewxw",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 9000,
"fontSize": "1.5rem",
"minDynamicHeight": 4
},
{
"resetFormOnClick": false,
"boxShadow": "none",
"widgetName": "Button1",
"onClick": "{{closeModal('Modal1')}}",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"displayName": "Button",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"searchTags": [
"click",
"submit"
],
"topRow": 18,
"bottomRow": 22,
"type": "BUTTON_WIDGET",
"hideCard": false,
"animateLoading": true,
"leftColumn": 31,
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
],
"text": "Close",
"isDisabled": false,
"key": "8fy9at549y",
"isDeprecated": false,
"rightColumn": 47,
"isDefaultClickDisabled": true,
"widgetId": "w3gw0z0hul",
"buttonStyle": "PRIMARY",
"isVisible": true,
"recaptchaType": "V3",
"version": 1,
"parentId": "b8h15fewxw",
"renderMode": "CANVAS",
"isLoading": false,
"disabledWhenInvalid": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"buttonVariant": "SECONDARY",
"placement": "CENTER"
},
{
"resetFormOnClick": false,
"boxShadow": "none",
"widgetName": "Button2",
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"displayName": "Button",
"iconSVG": "/static/media/icon.cca026338f1c8eb6df8ba03d084c2fca.svg",
"searchTags": [
"click",
"submit"
],
"topRow": 18,
"bottomRow": 22,
"type": "BUTTON_WIDGET",
"hideCard": false,
"animateLoading": true,
"leftColumn": 47,
"dynamicBindingPathList": [
{
"key": "buttonColor"
},
{
"key": "borderRadius"
}
],
"text": "Confirm",
"isDisabled": false,
"key": "8fy9at549y",
"isDeprecated": false,
"rightColumn": 63,
"isDefaultClickDisabled": true,
"widgetId": "dcky71d9uv",
"buttonStyle": "PRIMARY_BUTTON",
"isVisible": true,
"recaptchaType": "V3",
"version": 1,
"parentId": "b8h15fewxw",
"renderMode": "CANVAS",
"isLoading": false,
"disabledWhenInvalid": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"buttonVariant": "PRIMARY",
"placement": "CENTER"
}
],
"isDisabled": false,
"key": "74zfu9g19a",
"isDeprecated": false,
"rightColumn": 0,
"detachFromLayout": true,
"widgetId": "b8h15fewxw",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isVisible": true,
"version": 1,
"parentId": "d0r5dcpeqm",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
}
],
"key": "1y0e1crldi",
"height": 240,
"isDeprecated": false,
"rightColumn": 0,
"detachFromLayout": true,
"dynamicHeight": "FIXED",
"widgetId": "d0r5dcpeqm",
"canOutsideClickClose": true,
"canEscapeKeyClose": true,
"version": 2,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"maxDynamicHeight": 0,
"width": 456,
"minDynamicHeight": 4
},
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "FIXED",
"animateLoading": true,
"backgroundColor": "#fff",
"disabledWhenInvalid": true,
"fixedFooter": true,
"schema": {
"__root_schema__": {
"children": {
"name": {
"children": {},
"dataType": "string",
"defaultValue": "{{((sourceData, formData, fieldState) => (sourceData.name))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"fieldType": "Text Input",
"sourceData": "John",
"isCustomField": false,
"accessor": "name",
"identifier": "name",
"position": 0,
"originalIdentifier": "name",
"accentColor": "{{((sourceData, formData, fieldState) => (appsmith.theme.colors.primaryColor))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"borderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"boxShadow": "none",
"iconAlign": "left",
"isDisabled": false,
"isRequired": false,
"isSpellCheck": false,
"isVisible": true,
"labelTextSize": "0.875rem",
"label": "Name"
},
"date_of_birth": {
"children": {},
"dataType": "string",
"defaultValue": "{{((sourceData, formData, fieldState) => (moment(sourceData.date_of_birth, \"DD/MM/YYYY\").format(\"YYYY-MM-DDTHH:mm:ss.sssZ\")))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"fieldType": "Datepicker",
"sourceData": "20/02/1990",
"isCustomField": false,
"accessor": "date_of_birth",
"identifier": "date_of_birth",
"position": 1,
"originalIdentifier": "date_of_birth",
"accentColor": "{{((sourceData, formData, fieldState) => (appsmith.theme.colors.primaryColor))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"borderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"boxShadow": "none",
"closeOnSelection": false,
"convertToISO": false,
"dateFormat": "DD/MM/YYYY",
"isDisabled": false,
"isRequired": false,
"isVisible": true,
"label": "Date Of Birth",
"maxDate": "2121-12-31T18:29:00.000Z",
"minDate": "1920-12-31T18:30:00.000Z",
"shortcuts": false,
"timePrecision": "minute",
"labelTextSize": "0.875rem"
},
"employee_id": {
"children": {},
"dataType": "number",
"defaultValue": "{{((sourceData, formData, fieldState) => (sourceData.employee_id))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"fieldType": "Number Input",
"sourceData": 1001,
"isCustomField": false,
"accessor": "employee_id",
"identifier": "employee_id",
"position": 2,
"originalIdentifier": "employee_id",
"accentColor": "{{((sourceData, formData, fieldState) => (appsmith.theme.colors.primaryColor))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"borderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"boxShadow": "none",
"iconAlign": "left",
"isDisabled": false,
"isRequired": false,
"isSpellCheck": false,
"isVisible": true,
"labelTextSize": "0.875rem",
"label": "Employee Id"
},
"customField1": {
"children": {},
"dataType": "string",
"fieldType": "Text Input",
"sourceData": "",
"isCustomField": true,
"accessor": "customField1",
"identifier": "customField1",
"position": 3,
"originalIdentifier": "customField1",
"accentColor": "{{((sourceData, formData, fieldState) => (appsmith.theme.colors.primaryColor))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"borderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"boxShadow": "none",
"iconAlign": "left",
"isDisabled": false,
"isRequired": false,
"isSpellCheck": false,
"isVisible": true,
"labelTextSize": "0.875rem",
"label": "Custom Field 1"
},
"customField2": {
"children": {},
"dataType": "string",
"fieldType": "Text Input",
"sourceData": "",
"isCustomField": true,
"accessor": "customField2",
"identifier": "customField2",
"position": 4,
"originalIdentifier": "customField2",
"accentColor": "{{((sourceData, formData, fieldState) => (appsmith.theme.colors.primaryColor))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"borderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"boxShadow": "none",
"iconAlign": "left",
"isDisabled": false,
"isRequired": false,
"isSpellCheck": false,
"isVisible": true,
"labelTextSize": "0.875rem",
"label": "Custom Field 2"
},
"customField3": {
"children": {},
"dataType": "string",
"fieldType": "Text Input",
"sourceData": "",
"isCustomField": true,
"accessor": "customField3",
"identifier": "customField3",
"position": 5,
"originalIdentifier": "customField3",
"accentColor": "{{((sourceData, formData, fieldState) => (appsmith.theme.colors.primaryColor))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"borderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"boxShadow": "none",
"iconAlign": "left",
"isDisabled": false,
"isRequired": false,
"isSpellCheck": false,
"isVisible": true,
"labelTextSize": "0.875rem",
"label": "Custom Field 3"
},
"customField4": {
"children": {},
"dataType": "string",
"fieldType": "Text Input",
"sourceData": "",
"isCustomField": true,
"accessor": "customField4",
"identifier": "customField4",
"position": 6,
"originalIdentifier": "customField4",
"accentColor": "{{((sourceData, formData, fieldState) => (appsmith.theme.colors.primaryColor))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"borderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"boxShadow": "none",
"iconAlign": "left",
"isDisabled": false,
"isRequired": false,
"isSpellCheck": false,
"isVisible": true,
"labelTextSize": "0.875rem",
"label": "Custom Field 4"
}
},
"dataType": "object",
"defaultValue": "{{((sourceData, formData, fieldState) => (sourceData))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"fieldType": "Object",
"sourceData": {
"name": "John",
"date_of_birth": "20/02/1990",
"employee_id": 1001
},
"isCustomField": false,
"accessor": "__root_schema__",
"identifier": "__root_schema__",
"position": -1,
"originalIdentifier": "__root_schema__",
"borderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"boxShadow": "none",
"cellBorderRadius": "{{((sourceData, formData, fieldState) => (appsmith.theme.borderRadius.appBorderRadius))(JSONForm1.sourceData, JSONForm1.formData, JSONForm1.fieldState)}}",
"cellBoxShadow": "none",
"isDisabled": false,
"isRequired": false,
"isVisible": true,
"labelTextSize": "0.875rem",
"label": ""
}
},
"scrollContents": true,
"showReset": true,
"title": "Form",
"version": 1,
"borderWidth": "1",
"borderColor": "#E0DEDE",
"widgetName": "JSONForm1",
"autoGenerateForm": true,
"fieldLimitExceeded": false,
"sourceData": {
"name": "John",
"date_of_birth": "20/02/1990",
"employee_id": 1001
},
"submitButtonLabel": "Submit",
"resetButtonLabel": "Reset",
"type": "JSON_FORM_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "JSON Form",
"key": "wrvbzxoh9c",
"iconSVG": "/static/media/icon.5b428de12db9ad6a591955ead07f86e9.svg",
"widgetId": "s10ovhzkte",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"submitButtonStyles": {
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"buttonVariant": "PRIMARY"
},
"resetButtonStyles": {
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"buttonVariant": "SECONDARY"
},
"childStylesheet": {
"ARRAY": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"cellBorderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"cellBoxShadow": "none"
},
"OBJECT": {
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none",
"cellBorderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"cellBoxShadow": "none"
},
"CHECKBOX": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}"
},
"CURRENCY_INPUT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"DATEPICKER": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"EMAIL_INPUT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"MULTISELECT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"MULTILINE_TEXT_INPUT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"NUMBER_INPUT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"PASSWORD_INPUT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"PHONE_NUMBER_INPUT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"RADIO_GROUP": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"boxShadow": "none"
},
"SELECT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
},
"SWITCH": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"boxShadow": "none"
},
"TEXT_INPUT": {
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"boxShadow": "none"
}
},
"isLoading": false,
"parentColumnSpace": 9.96875,
"parentRowSpace": 10,
"leftColumn": 15,
"rightColumn": 40,
"topRow": 28,
"bottomRow": 78,
"parentId": "0",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
},
{
"key": "submitButtonStyles.buttonColor"
},
{
"key": "submitButtonStyles.borderRadius"
},
{
"key": "resetButtonStyles.buttonColor"
},
{
"key": "resetButtonStyles.borderRadius"
},
{
"key": "childStylesheet.ARRAY.accentColor"
},
{
"key": "childStylesheet.ARRAY.borderRadius"
},
{
"key": "childStylesheet.ARRAY.cellBorderRadius"
},
{
"key": "childStylesheet.OBJECT.borderRadius"
},
{
"key": "childStylesheet.OBJECT.cellBorderRadius"
},
{
"key": "childStylesheet.CHECKBOX.accentColor"
},
{
"key": "childStylesheet.CHECKBOX.borderRadius"
},
{
"key": "childStylesheet.CURRENCY_INPUT.accentColor"
},
{
"key": "childStylesheet.CURRENCY_INPUT.borderRadius"
},
{
"key": "childStylesheet.DATEPICKER.accentColor"
},
{
"key": "childStylesheet.DATEPICKER.borderRadius"
},
{
"key": "childStylesheet.EMAIL_INPUT.accentColor"
},
{
"key": "childStylesheet.EMAIL_INPUT.borderRadius"
},
{
"key": "childStylesheet.MULTISELECT.accentColor"
},
{
"key": "childStylesheet.MULTISELECT.borderRadius"
},
{
"key": "childStylesheet.MULTILINE_TEXT_INPUT.accentColor"
},
{
"key": "childStylesheet.MULTILINE_TEXT_INPUT.borderRadius"
},
{
"key": "childStylesheet.NUMBER_INPUT.accentColor"
},
{
"key": "childStylesheet.NUMBER_INPUT.borderRadius"
},
{
"key": "childStylesheet.PASSWORD_INPUT.accentColor"
},
{
"key": "childStylesheet.PASSWORD_INPUT.borderRadius"
},
{
"key": "childStylesheet.PHONE_NUMBER_INPUT.accentColor"
},
{
"key": "childStylesheet.PHONE_NUMBER_INPUT.borderRadius"
},
{
"key": "childStylesheet.RADIO_GROUP.accentColor"
},
{
"key": "childStylesheet.SELECT.accentColor"
},
{
"key": "childStylesheet.SELECT.borderRadius"
},
{
"key": "childStylesheet.SWITCH.accentColor"
},
{
"key": "childStylesheet.TEXT_INPUT.accentColor"
},
{
"key": "childStylesheet.TEXT_INPUT.borderRadius"
},
{
"key": "schema.__root_schema__.children.name.defaultValue"
},
{
"key": "schema.__root_schema__.children.name.accentColor"
},
{
"key": "schema.__root_schema__.children.name.borderRadius"
},
{
"key": "schema.__root_schema__.children.date_of_birth.defaultValue"
},
{
"key": "schema.__root_schema__.children.date_of_birth.accentColor"
},
{
"key": "schema.__root_schema__.children.date_of_birth.borderRadius"
},
{
"key": "schema.__root_schema__.children.employee_id.defaultValue"
},
{
"key": "schema.__root_schema__.children.employee_id.accentColor"
},
{
"key": "schema.__root_schema__.children.employee_id.borderRadius"
},
{
"key": "schema.__root_schema__.defaultValue"
},
{
"key": "schema.__root_schema__.borderRadius"
},
{
"key": "schema.__root_schema__.cellBorderRadius"
},
{
"key": "schema.__root_schema__.children.customField1.accentColor"
},
{
"key": "schema.__root_schema__.children.customField1.borderRadius"
},
{
"key": "schema.__root_schema__.children.customField2.accentColor"
},
{
"key": "schema.__root_schema__.children.customField2.borderRadius"
},
{
"key": "schema.__root_schema__.children.customField3.accentColor"
},
{
"key": "schema.__root_schema__.children.customField3.borderRadius"
},
{
"key": "schema.__root_schema__.children.customField4.accentColor"
},
{
"key": "schema.__root_schema__.children.customField4.borderRadius"
}
],
"dynamicPropertyPathList": [
{
"key": "schema.__root_schema__.children.date_of_birth.defaultValue"
}
],
"dynamicTriggerPathList": []
}
]
}
}

View File

@ -0,0 +1,344 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 600,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 69,
"minHeight": 1292,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"shouldScrollContents": true,
"backgroundColor": "#FFFFFF",
"widgetName": "Container1",
"containerStyle": "card",
"borderColor": "#E0DEDE",
"borderWidth": "1",
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"animateLoading": true,
"children": [
{
"isVisible": true,
"widgetName": "Canvas1",
"version": 1,
"detachFromLayout": true,
"type": "CANVAS_WIDGET",
"hideCard": true,
"isDeprecated": false,
"displayName": "Canvas",
"key": "mqfi7o9374",
"containerStyle": "none",
"canExtend": false,
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"shouldScrollContents": true,
"backgroundColor": "#FFFFFF",
"widgetName": "Container2",
"containerStyle": "card",
"borderColor": "#E0DEDE",
"borderWidth": "1",
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"animateLoading": true,
"children": [
{
"isVisible": true,
"widgetName": "Canvas2",
"version": 1,
"detachFromLayout": true,
"type": "CANVAS_WIDGET",
"hideCard": true,
"isDeprecated": false,
"displayName": "Canvas",
"key": "mqfi7o9374",
"containerStyle": "none",
"canExtend": false,
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"shouldScrollContents": true,
"backgroundColor": "#FFFFFF",
"widgetName": "Container3",
"containerStyle": "card",
"borderColor": "#E0DEDE",
"borderWidth": "1",
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
"animateLoading": true,
"children": [
{
"isVisible": true,
"widgetName": "Canvas3",
"version": 1,
"detachFromLayout": true,
"type": "CANVAS_WIDGET",
"hideCard": true,
"isDeprecated": false,
"displayName": "Canvas",
"key": "mqfi7o9374",
"containerStyle": "none",
"canExtend": false,
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"animateLoading": true,
"labelTextSize": "0.875rem",
"options": [
{
"label": "Blue",
"value": "BLUE"
},
{
"label": "Green",
"value": "GREEN"
},
{
"label": "Red",
"value": "RED"
}
],
"defaultSelectedValues": [
"BLUE"
],
"isDisabled": false,
"isInline": true,
"isRequired": false,
"labelText": "Label",
"labelPosition": "Left",
"labelAlignment": "left",
"labelWidth": 5,
"widgetName": "CheckboxGroup1",
"version": 2,
"type": "CHECKBOX_GROUP_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Checkbox Group",
"key": "hm1iv7bfuy",
"iconSVG": "/static/media/icon.ecb3847950c4515966ef642a32758afb.svg",
"widgetId": "v37fp7if60",
"renderMode": "CANVAS",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 2.9258722066879272,
"parentRowSpace": 10,
"leftColumn": 8,
"rightColumn": 57,
"topRow": 33,
"bottomRow": 45,
"parentId": "05i6e0t0fa",
"dynamicBindingPathList": [
{
"key": "accentColor"
},
{
"key": "borderRadius"
}
],
"dynamicTriggerPathList": []
}
],
"minHeight": 470,
"widgetId": "05i6e0t0fa",
"renderMode": "CANVAS",
"boxShadow": "none",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 47.16357421875,
"topRow": 0,
"bottomRow": 470,
"parentId": "l44iyd101d",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
]
}
],
"version": 1,
"searchTags": [
"div",
"parent",
"group"
],
"type": "CONTAINER_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Container",
"key": "ojfkbwpxhu",
"iconSVG": "/static/media/icon.1977dca3370505e2db3a8e44cfd54907.svg",
"isCanvas": true,
"widgetId": "l44iyd101d",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 1.96514892578125,
"parentRowSpace": 10,
"leftColumn": 4,
"rightColumn": 59,
"topRow": 1,
"bottomRow": 48,
"parentId": "wor0jspl6z",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"dynamicTriggerPathList": []
}
],
"minHeight": 500,
"widgetId": "wor0jspl6z",
"renderMode": "CANVAS",
"boxShadow": "none",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 145.76953125,
"topRow": 0,
"bottomRow": 500,
"parentId": "429zp6cdxf",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
]
}
],
"version": 1,
"searchTags": [
"div",
"parent",
"group"
],
"type": "CONTAINER_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Container",
"key": "ojfkbwpxhu",
"iconSVG": "/static/media/icon.1977dca3370505e2db3a8e44cfd54907.svg",
"isCanvas": true,
"widgetId": "429zp6cdxf",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 6.07373046875,
"parentRowSpace": 10,
"leftColumn": 9,
"rightColumn": 52,
"topRow": 5,
"bottomRow": 55,
"parentId": "stwsepims4",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"dynamicTriggerPathList": []
}
],
"minHeight": 570,
"widgetId": "stwsepims4",
"renderMode": "CANVAS",
"boxShadow": "none",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
"isLoading": false,
"parentColumnSpace": 1,
"parentRowSpace": 1,
"leftColumn": 0,
"rightColumn": 239.25,
"topRow": 0,
"bottomRow": 570,
"parentId": "v7qrdx618b",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "accentColor"
}
]
}
],
"version": 1,
"searchTags": [
"div",
"parent",
"group"
],
"type": "CONTAINER_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Container",
"key": "ojfkbwpxhu",
"iconSVG": "/static/media/icon.1977dca3370505e2db3a8e44cfd54907.svg",
"isCanvas": true,
"widgetId": "v7qrdx618b",
"renderMode": "CANVAS",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 9.96875,
"parentRowSpace": 10,
"leftColumn": 18,
"rightColumn": 59,
"topRow": 1,
"bottomRow": 58,
"parentId": "0",
"dynamicBindingPathList": [
{
"key": "borderRadius"
},
{
"key": "boxShadow"
}
],
"dynamicTriggerPathList": []
}
]
}
}

View File

@ -0,0 +1,77 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 4896,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 400,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 64,
"minHeight": 1292,
"dynamicTriggerPathList": [],
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"isVisible": true,
"minDynamicHeight": 4,
"maxDynamicHeight": 9000,
"dynamicHeight": "AUTO_HEIGHT",
"text": "Test Auto Height",
"fontSize": "1rem",
"fontStyle": "BOLD",
"textAlign": "LEFT",
"textColor": "#231F20",
"truncateButtonColor": "{{appsmith.theme.colors.primaryColor}}",
"widgetName": "Text1",
"shouldTruncate": false,
"overflow": "NONE",
"version": 1,
"animateLoading": true,
"searchTags": [
"typography",
"paragraph",
"label"
],
"type": "TEXT_WIDGET",
"hideCard": false,
"isDeprecated": false,
"displayName": "Text",
"key": "t24h8uem36",
"iconSVG": "/static/media/icon.97c59b523e6f70ba6f40a10fc2c7c5b5.svg",
"widgetId": "nwkbwkxa62",
"renderMode": "CANVAS",
"fontFamily": "{{appsmith.theme.fontFamily.appFont}}",
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
"isLoading": false,
"parentColumnSpace": 9.96875,
"parentRowSpace": 10,
"leftColumn": 19,
"rightColumn": 35,
"topRow": 11,
"bottomRow": 15,
"parentId": "0",
"dynamicBindingPathList": [
{
"key": "truncateButtonColor"
},
{
"key": "fontFamily"
},
{
"key": "borderRadius"
}
],
"dynamicTriggerPathList": []
}
]
}
}

View File

@ -7,6 +7,9 @@ describe("Dynamic input autocomplete", () => {
cy.addDsl(dsl);
});
it("opens autocomplete for bindings", () => {
cy.selectEntityByName("TestModal");
cy.wait(3000);
cy.selectEntityByName("Aditya");
cy.openPropertyPane("buttonwidget");
cy.get(dynamicInputLocators.input)
.first()

View File

@ -49,6 +49,7 @@ describe("Binding Expressions should not be truncated in Url and path extraction
// })
//.trigger("mouseover")
.dblclick()
.dblclick()
.type("{{JSObject1.");
agHelper.GetNAssertElementText(locator._hints, "offsetValue", "have.text", 1);
agHelper.Sleep();
@ -65,6 +66,7 @@ describe("Binding Expressions should not be truncated in Url and path extraction
.contains("__limit__")
//.trigger("mouseover")
.dblclick()
.dblclick()
.type("{{JSObject1.");
agHelper.GetNClickByContains(locator._hints, "limitValue");
agHelper.Sleep(2000);

View File

@ -0,0 +1,48 @@
const dsl = require("../../../../fixtures/dynamicHeightContainerdsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
describe("Dynamic Height Width validation with limits", function() {
it("Validate change in auto height with limits width for widgets and highlight section validation", function() {
cy.addDsl(dsl);
cy.wait(3000); //for dsl to settle
cy.openPropertyPane("containerwidget");
cy.changeLayoutHeight(commonlocators.autoHeightWithLimits);
cy.wait(3000); //for dsl to settle
//cy.checkMinDefaultValue(commonlocators.minHeight,"4")
//cy.testJsontext(commonlocators.minHeight, "5");
//cy.get(commonlocators.overlayMin).should("be.visible");
cy.get("[data-cy='t--auto-height-overlay-handles-min']").trigger(
"mouseover",
);
cy.contains("Min-Height: 10 rows");
cy.get("[data-cy='t--auto-height-overlay-handles-min']").should(
"be.visible",
);
cy.get("[data-cy='t--auto-height-overlay-handles-min'] div")
.eq(0)
.should("have.css", "background-color", "rgb(243, 43, 139)");
/*cy.get(commonlocators.overlayMin).should(
"have.css",
"background-color",
"rgba(243, 43, 139, 0.1)",
);*/
cy.get("[data-cy='t--auto-height-overlay-handles-max']").trigger(
"mouseover",
);
cy.contains("Max-Height: 12 rows");
//cy.checkMaxDefaultValue(commonlocators.maxHeight,"40")
//cy.testJsontext(commonlocators.maxHeight, "60");
cy.get("[data-cy='t--auto-height-overlay-handles-max']").should(
"be.visible",
);
cy.get("[data-cy='t--auto-height-overlay-handles-max'] div")
.eq(0)
.should("have.css", "background-color", "rgb(243, 43, 139)");
//cy.contains("Max-Height: 60 rows");
cy.changeLayoutHeight(commonlocators.fixed);
cy.changeLayoutHeight(commonlocators.autoHeightWithLimits);
//cy.contains("Min-Height: 5 rows");
//cy.checkMinDefaultValue(commonlocators.minHeight,"5")
// cy.checkMaxDefaultValue(commonlocators.maxHeight,"60")
});
});

View File

@ -0,0 +1,38 @@
const dsl = require("../../../../fixtures/dynamicHeightContainerCheckboxdsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
describe("Dynamic Height Width validation", function() {
it("Validate change with auto height width for widgets", function() {
cy.addDsl(dsl);
cy.wait(3000); //for dsl to settle
cy.openPropertyPane("containerwidget");
//cy.changeLayoutHeight(commonlocators.autoHeight);
cy.openPropertyPane("checkboxgroupwidget");
//cy.changeLayoutHeight(commonlocators.autoHeight);
cy.get(".t--widget-containerwidget")
.invoke("css", "height")
.then((height) => {
cy.get(".t--widget-checkboxgroupwidget")
.invoke("css", "height")
.then((checkboxheight) => {
cy.get(commonlocators.addOption).click();
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.get(".t--widget-checkboxgroupwidget")
.invoke("css", "height")
.then((newcheckboxheight) => {
expect(checkboxheight).to.not.equal(newcheckboxheight);
});
});
cy.wait(2000);
cy.get(".t--widget-containerwidget")
.invoke("css", "height")
.then((newheight) => {
expect(height).to.not.equal(newheight);
});
});
});
});

View File

@ -0,0 +1,95 @@
const dsl = require("../../../../fixtures/dynamicHeightFormSwitchdsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
describe("Dynamic Height Width validation", function() {
it("Validate change with auto height width for Form/Switch", function() {
cy.addDsl(dsl);
cy.wait(3000); //for dsl to settle
cy.openPropertyPane("formwidget");
cy.get(".t--widget-formwidget")
.invoke("css", "height")
.then((formheight) => {
cy.changeLayoutHeight(commonlocators.autoHeight);
cy.openPropertyPane("switchgroupwidget");
cy.changeLayoutHeight(commonlocators.autoHeight);
cy.get(".t--widget-switchgroupwidget")
.invoke("css", "height")
.then((switchheight) => {
cy.get(".t--widget-formwidget")
.invoke("css", "height")
.then((newformheight) => {
//expect(formheight).to.not.equal(newformheight)
cy.updateCodeInput(
".t--property-control-options",
`[
{
"label": "Blue",
"value": "BLUE"
},
{
"label": "Green",
"value": "GREEN"
},
{
"label": "Red",
"value": "RED"
},
{
"label": "Yellow",
"value": "YELLOW"
},
{
"label": "Purple",
"value": "PURPLE"
},
{
"label": "Pink",
"value": "PINK"
},
{
"label": "Black",
"value": "BLACK"
},
{
"label": "Grey",
"value": "GREY"
},
{
"label": "Orange",
"value": "ORANGE"
},
{
"label": "Cream",
"value": "CREAM"
}
]`,
);
cy.get(".t--widget-switchgroupwidget")
.invoke("css", "height")
.then((newswitchheight) => {
cy.get(".t--widget-formwidget")
.invoke("css", "height")
.then((updatedformheight) => {
expect(newformheight).to.not.equal(updatedformheight);
expect(switchheight).to.not.equal(newswitchheight);
});
});
});
});
});
cy.get(".t--draggable-switchgroupwidget .bp3-control-indicator")
.first()
.click({ force: true });
cy.wait(3000);
cy.get(".t--modal-widget").should("have.length", 1);
cy.get(".t--widget-propertypane-toggle")
.first()
.click({ force: true });
//cy.changeLayoutHeight(commonlocators.autoHeightWithLimits);
//cy.checkMinDefaultValue(commonlocators.minHeight,"4")
//cy.checkMaxDefaultValue(commonlocators.maxHeight,"24")
cy.changeLayoutHeight(commonlocators.autoHeight);
cy.wait(3000);
cy.get("button:contains('Close')").click({ force: true });
});
});

View File

@ -0,0 +1,62 @@
const dsl = require("../../../../fixtures/jsonFormDynamicHeightDsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
describe("Dynamic Height Width validation", function() {
it("Validate change with auto height width for JsonForm", function() {
cy.addDsl(dsl);
cy.wait(3000); //for dsl to settle
cy.openPropertyPane("jsonformwidget");
cy.get(".t--widget-jsonformwidget")
.invoke("css", "height")
.then((formheight) => {
cy.changeLayoutHeight(commonlocators.autoHeight);
cy.wait(5000);
cy.get(".t--widget-jsonformwidget")
.invoke("css", "height")
.then((newformheight) => {
expect(formheight).to.not.equal(newformheight);
cy.get(".t--show-column-btn")
.eq(0)
.click({ force: true });
cy.get(".t--show-column-btn")
.eq(1)
.click({ force: true });
cy.get(".t--show-column-btn")
.eq(2)
.click({ force: true });
// cy.get("[data-cy='t--resizable-handle-TOP']")
// .within(($el) => {
// cy.window().then((win) => {
// const after = win.getComputedStyle($el[0], "::after");
// expect(after).not.to.exist
// });
// });
// cy.get("[data-cy='t--resizable-handle-BOTTOM']").should("not.exist");
cy.changeLayoutHeight(commonlocators.fixed);
cy.wait(5000);
cy.get(".t--widget-jsonformwidget")
.invoke("css", "height")
.then((updatedformheight) => {
expect(newformheight).to.not.equal(updatedformheight);
cy.get(".t--show-column-btn")
.eq(2)
.click({ force: true });
cy.get(".t--show-column-btn")
.eq(1)
.click({ force: true });
// cy.get("[data-cy='t--resizable-handle-TOP']").should("exist");
// cy.get("[data-cy='t--resizable-handle-BOTTOM']").should("exist");
cy.changeLayoutHeight(commonlocators.autoHeight);
cy.wait(5000);
cy.get(".t--widget-jsonformwidget")
.invoke("css", "height")
.then((newupdatedformheight) => {
expect(updatedformheight).to.not.equal(
newupdatedformheight,
);
});
});
});
});
});
});

View File

@ -0,0 +1,71 @@
const dsl = require("../../../../fixtures/multipleContainerdsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
describe("Dynamic Height Width validation for multiple container", function() {
before(() => {
cy.addDsl(dsl);
});
it("Validate change in auto height width with multiple containers", function() {
cy.wait(3000); //for dsl to settle
cy.openPropertyPaneWithIndex("containerwidget", 0);
cy.changeLayoutHeight(commonlocators.fixed);
cy.changeLayoutHeight(commonlocators.autoHeight);
cy.openPropertyPaneWithIndex("containerwidget", 1);
cy.changeLayoutHeight(commonlocators.fixed);
cy.changeLayoutHeight(commonlocators.autoHeight);
cy.openPropertyPane("checkboxgroupwidget");
cy.changeLayoutHeight(commonlocators.fixed);
cy.changeLayoutHeight(commonlocators.autoHeight);
cy.wait(2000);
cy.get(".t--widget-containerwidget")
.eq(0)
.invoke("css", "height")
.then((oheight) => {
cy.get(".t--widget-containerwidget")
.eq(1)
.invoke("css", "height")
.then((mheight) => {
cy.get(".t--widget-containerwidget")
.eq(2)
.invoke("css", "height")
.then((iheight) => {
cy.get(".t--widget-checkboxgroupwidget")
.invoke("css", "height")
.then((checkboxheight) => {
cy.get(commonlocators.addOption).click({ force: true });
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.wait(3000);
cy.get(".t--widget-checkboxgroupwidget")
.invoke("css", "height")
.then((newcheckboxheight) => {
expect(checkboxheight).to.not.equal(newcheckboxheight);
});
});
cy.wait(2000);
cy.get(".t--widget-containerwidget")
.eq(0)
.invoke("css", "height")
.then((onewheight) => {
expect(oheight).to.not.equal(onewheight);
});
cy.get(".t--widget-containerwidget")
.eq(1)
.invoke("css", "height")
.then((mnewheight) => {
expect(mheight).to.not.equal(mnewheight);
});
cy.get(".t--widget-containerwidget")
.eq(2)
.invoke("css", "height")
.then((inewheight) => {
expect(iheight).to.not.equal(inewheight);
});
});
});
});
});
});

View File

@ -0,0 +1,64 @@
const dsl = require("../../../../fixtures/dynamicTabWidgetdsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
describe("Dynamic Height Width validation for Tab widget", function() {
before(() => {
cy.addDsl(dsl);
});
it("Tab widget validation of height with dynamic height feature", function() {
//changing the Text Name and verifying
cy.wait(3000);
cy.openPropertyPane("tabswidget");
cy.changeLayoutHeightWithoutWait(commonlocators.autoHeight);
cy.get(".t--tabid-tab1").click({ force: true });
cy.wait(3000);
cy.get(".t--widget-tabswidget")
.invoke("css", "height")
.then((theight) => {
cy.get(".t--tabid-tab2").click({ force: true });
cy.wait(3000);
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
//cy.get(".t--draggable-checkboxwidget .bp3-control-indicator").click({ force: true })
cy.get(".t--widget-tabswidget")
.invoke("css", "height")
.then((tnewheight) => {
expect(theight).to.not.equal(tnewheight);
cy.reload();
cy.openPropertyPane("tabswidget");
expect(theight).to.equal(theight);
});
});
cy.changeLayoutHeight(commonlocators.fixed);
cy.get(".t--tabid-tab1").click({ force: true });
cy.wait(3000);
cy.get(".t--widget-tabswidget")
.invoke("css", "height")
.then((theight) => {
cy.get(".t--tabid-tab2").click({ force: true });
cy.wait(3000);
//cy.get(".t--draggable-checkboxwidget .bp3-control-indicator").click({ force: true })
cy.get(".t--widget-tabswidget")
.invoke("css", "height")
.then((tnewheight) => {
expect(theight).to.equal(tnewheight);
cy.get(commonlocators.showTabsControl).click({ force: true });
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.get(".t--widget-tabswidget")
.invoke("css", "height")
.then((upheight) => {
expect(tnewheight).to.equal(upheight);
cy.get(".t--tabid-tab1").should("not.exist");
cy.get(".t--tabid-tab2").should("not.exist");
});
});
});
});
});

View File

@ -0,0 +1,41 @@
const dsl = require("../../../../fixtures/textWidgetDynamicdsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
describe("Dynamic Height Width validation for text widget", function() {
before(() => {
cy.addDsl(dsl);
});
it("Text widget validation of height with dynamic height feature", function() {
const textMsg = "Dynamic panel validation for text widget wrt height";
//changing the Text Name and verifying
cy.openPropertyPane("textwidget");
cy.changeLayoutHeightWithoutWait(commonlocators.autoHeight);
cy.get(".t--widget-textwidget")
.invoke("css", "height")
.then((theight) => {
//Changing the text label
cy.testCodeMirror(textMsg);
cy.moveToStyleTab();
cy.ChangeTextStyle(
this.data.TextHeading,
commonlocators.headingTextStyle,
textMsg,
);
cy.wait("@updateLayout");
cy.get(".t--widget-textwidget")
.invoke("css", "height")
.then((tnewheight) => {
expect(theight).to.not.equal(tnewheight);
});
cy.PublishtheApp();
cy.get(commonlocators.headingTextStyle)
.should("have.text", textMsg)
.should("have.css", "font-size", "16px");
cy.get(".t--widget-textwidget")
.invoke("css", "height")
.then((tnewheight) => {
expect(theight).to.not.equal(tnewheight);
});
});
});
});

View File

@ -0,0 +1,138 @@
const dsl = require("../../../../fixtures/alignmentWithDynamicHeightDsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
describe("Dynamic Height Width validation", function() {
function validateCssProperties(property) {
cy.get("button:contains('Small')").click({ force: true });
cy.wait(3000);
cy.selectEntityByName("Text1");
cy.get(".t--widget-textwidget")
.eq(0)
.invoke("css", property)
.then((firstText) => {
cy.selectEntityByName("Text2");
cy.get(".t--widget-textwidget")
.eq(1)
.invoke("css", property)
.then((secondText) => {
cy.selectEntityByName("Text3");
cy.get(".t--widget-textwidget")
.eq(2)
.invoke("css", property)
.then((thirdText) => {
cy.selectEntityByName("Text4");
cy.get(".t--widget-textwidget")
.eq(3)
.invoke("css", property)
.then((fourthText) => {
cy.get("button:contains('Large')").click({ force: true });
cy.selectEntityByName("Text1");
cy.get(".t--widget-textwidget")
.eq(0)
.invoke("css", property)
.then((largefirstText) => {
cy.selectEntityByName("Text2");
cy.get(".t--widget-textwidget")
.eq(1)
.invoke("css", property)
.then((largesecondText) => {
cy.selectEntityByName("Text3");
cy.get(".t--widget-textwidget")
.eq(2)
.invoke("css", property)
.then((largethirdText) => {
cy.selectEntityByName("Text4");
cy.get(".t--widget-textwidget")
.eq(3)
.invoke("css", property)
.then((largefourthText) => {
if (property == "left") {
expect(firstText).to.equal(
largefirstText,
);
expect(secondText).to.equal(
largesecondText,
);
expect(thirdText).to.equal(
largethirdText,
);
expect(fourthText).to.equal(
largefourthText,
);
} else {
expect(firstText).to.not.equal(
largefirstText,
);
expect(secondText).to.not.equal(
largesecondText,
);
expect(thirdText).to.not.equal(
largethirdText,
);
expect(fourthText).to.not.equal(
largefourthText,
);
}
cy.get("button:contains('Small')").click({
force: true,
});
cy.wait(3000);
cy.selectEntityByName("Text1");
cy.get(".t--widget-textwidget")
.eq(0)
.invoke("css", property)
.then((updatelargefirstText) => {
cy.selectEntityByName("Text2");
cy.get(".t--widget-textwidget")
.eq(1)
.invoke("css", property)
.then((updatelargesecondText) => {
cy.selectEntityByName("Text3");
cy.get(".t--widget-textwidget")
.eq(2)
.invoke("css", property)
.then((updatelargethirdText) => {
cy.selectEntityByName("Text4");
cy.get(".t--widget-textwidget")
.eq(3)
.invoke("css", property)
.then(
(updatelargefourthText) => {
//expect(firstText).to.equal(updatelargefirstText);
expect(
secondText,
).to.equal(
updatelargesecondText,
);
expect(
thirdText,
).to.equal(
updatelargethirdText,
);
expect(
fourthText,
).to.equal(
updatelargefourthText,
);
},
);
});
});
});
});
});
});
});
});
});
});
});
}
it("Validate change with auto height width for text widgets", function() {
cy.addDsl(dsl);
cy.wait(30000); //for dsl to settled
validateCssProperties("height");
//validateCssProperties("top");
validateCssProperties("left");
});
});

View File

@ -0,0 +1,52 @@
const commonlocators = require("../../../../locators/commonlocators.json");
const dsl = require("../../../../fixtures/invisibleWidgetdsl.json");
describe("Dynamic Height Width validation for Visibility", function() {
before(() => {
cy.addDsl(dsl);
});
it("Validating visbility/invisiblity of widget with dynamic height feature", function() {
//changing the Text Name and verifying
cy.wait(3000);
cy.openPropertyPane("containerwidget");
cy.changeLayoutHeightWithoutWait(commonlocators.autoHeight);
cy.openPropertyPaneWithIndex("inputwidgetv2", 0);
cy.changeLayoutHeightWithoutWait(commonlocators.autoHeight);
cy.openPropertyPaneWithIndex("inputwidgetv2", 1);
cy.changeLayoutHeightWithoutWait(commonlocators.autoHeight);
cy.get(".t--widget-containerwidget")
.invoke("css", "height")
.then((theight) => {
cy.get(commonlocators.checkboxIndicator).click({ force: true });
cy.get(".t--widget-containerwidget")
.invoke("css", "height")
.then((tnewheight) => {
expect(theight).to.equal(tnewheight);
cy.get("label:Contains('On')").should("not.be.enabled");
});
});
cy.PublishtheApp();
cy.get(".t--widget-containerwidget")
.invoke("css", "height")
.then((theight) => {
cy.get(".bp3-control-indicator").click({ force: true });
cy.wait(2000);
cy.get(".t--widget-containerwidget")
.invoke("css", "height")
.then((tnewheight) => {
expect(theight).to.not.equal(tnewheight);
cy.get("label:Contains('On')").should("not.exist");
cy.get("label:Contains('Off')").should("be.visible");
cy.get(".bp3-control-indicator").click({ force: true });
cy.wait(2000);
cy.get(".t--widget-containerwidget")
.invoke("css", "height")
.then((tonheight) => {
expect(tonheight).to.not.equal(tnewheight);
cy.get("label:Contains('Off')").should("not.exist");
cy.get("label:Contains('On')").should("be.visible");
});
});
});
});
});

View File

@ -37,7 +37,6 @@ describe("Entity explorer Drag and Drop widgets testcases", function() {
* @param{toggleButton Css} Assert to be checked
*/
cy.moveToContentTab();
cy.togglebar(commonlocators.scrollView);
cy.get(formWidgetsPage.formD)
.scrollTo("bottom")
.should("be.visible");

View File

@ -0,0 +1,23 @@
const dsl = require("../../../../fixtures/Bugs/CheckboxGroupInListWidgetDsl.json");
describe("Canvas context Property Pane", function() {
it("Bug Fix: Unable to delete checkbox child when it is inside list widget #18191", () => {
cy.addDsl(dsl);
cy.openPropertyPane("checkboxgroupwidget");
//check number of options
cy.get(".t--property-control-options > div:nth-child(2) > div").should(
"have.length",
3,
);
//click on delete button
cy.get(
".t--property-control-options > div:nth-child(2) > div:nth-child(2) > button",
).click();
//verify deletion
cy.get(".t--property-control-options > div:nth-child(2) > div").should(
"have.length",
2,
);
});
});

View File

@ -4,6 +4,8 @@ import { ObjectsRegistry } from "../../../../support/Objects/Registry";
const homePage = ObjectsRegistry.HomePage;
const agHelper = ObjectsRegistry.AggregateHelper;
const ee = ObjectsRegistry.EntityExplorer;
const apiPage = ObjectsRegistry.ApiPage;
describe("MaintainContext&Focus", function() {
it("1. Import the test application", () => {
@ -135,4 +137,12 @@ describe("MaintainContext&Focus", function() {
cy.SearchEntityandOpen("JSObject2");
cy.assertCursorOnCodeInput(".js-editor", { ch: 2, line: 2 });
});
it("7. Check if selected tab on right tab persists", () => {
ee.SelectEntityByName("Rest_Api_1");
apiPage.SelectRightPaneTab("connections");
ee.SelectEntityByName("SQL_Query");
ee.SelectEntityByName("Rest_Api_1");
apiPage.AssertRightPaneSelectedTab("connections");
});
});

View File

@ -271,9 +271,10 @@ describe("Linting", () => {
apiPage.CreateAndFillApi("https://jsonplaceholder.typicode.com/");
createMySQLDatasourceQuery();
agHelper.RefreshPage();//Since this seems failing a bit
clickButtonAndAssertLintError(false);
});
it("8. Doesn't show lint errors for supported web apis", () => {
const JS_OBJECT_WITH_WEB_API = `export default {
myFun1: () => {

View File

@ -17,6 +17,7 @@ describe("Preview mode functionality", function() {
it("checks if widgets can be selected or not", function() {
// in preview mode, entity explorer and property pane are not visible
// Also, draggable and resizable components are not available.
const selector = `.t--draggable-buttonwidget`;
cy.wait(500);
cy.get(selector)

View File

@ -16,7 +16,7 @@ describe("Canvas Resize", function() {
cy.get(commonlocators.dropTarget).should(
"have.css",
"height",
`${dsl.bottomRow}px`,
`${dsl.minHeight}px`,
);
});
});

View File

@ -10,7 +10,7 @@ let propPane = ObjectsRegistry.PropertyPane,
ee = ObjectsRegistry.EntityExplorer;
describe("Theme validation usecase for multi-select widget", function() {
it("Drag and drop multi-select widget and validate Default font and list of font validation + Bug 15007", function() {
it("1. Drag and drop multi-select widget and validate Default font and list of font validation + Bug 15007", function() {
//cy.reload(); // To remove the rename tooltip
ee.DragDropWidgetNVerify("multiselectwidgetv2", 300, 80);
cy.get(themelocator.canvas).click({ force: true });
@ -96,7 +96,7 @@ describe("Theme validation usecase for multi-select widget", function() {
cy.contains("Color").click({ force: true });
});
it.skip("Publish the App and validate Font across the app + Bug 15007", function() {
it.skip("2. Publish the App and validate Font across the app + Bug 15007", function() {
//Skipping due to mentioned bug
cy.PublishtheApp();
cy.get(".rc-select-selection-item > .rc-select-selection-item-content")
@ -118,7 +118,7 @@ describe("Theme validation usecase for multi-select widget", function() {
cy.goToEditFromPublish();
});
it("Validate current theme feature", function() {
it("3. Validate current theme feature", function() {
cy.get("#canvas-selection-0").click({ force: true });
//Change the Theme
cy.get(commonlocators.changeThemeBtn).click({ force: true });
@ -138,7 +138,7 @@ describe("Theme validation usecase for multi-select widget", function() {
});
});
it("Publish the App and validate change of Theme across the app in publish mode", function() {
it("4. Publish the App and validate change of Theme across the app in publish mode", function() {
cy.PublishtheApp();
cy.get(".rc-select-selection-item > .rc-select-selection-item-content")
.first()

View File

@ -1,7 +1,8 @@
describe("Visual regression tests", () => {
// for any changes in UI, update the screenshot in snapshot folder, to do so:
// 1. Delete the required screenshot which you want to update
// 2. Run test in headless mode with any browser (to maintain same resolution in CI)
// 2. Run test in headless mode with chrome (to maintain same resolution in CI)
// command: "npx cypress run --spec cypress/integration/Smoke_TestSuite/ClientSideTests/VisualTests/WidgetsLayout_spec.js --browser chrome"
// 3. New screenshot will be generated in the snapshot folder
it("Verify SwitchGroup inline enable/disbale", () => {
@ -18,7 +19,7 @@ describe("Visual regression tests", () => {
//Unchecking & verify snap
cy.get(".t--property-control-inline input")
.uncheck({ force: true })
.wait(200)
.wait(2000)
.should("not.be.checked");
cy.get("[data-testid=switchgroup-container]").matchImageSnapshot(
"inlineDisabled",
@ -27,7 +28,7 @@ describe("Visual regression tests", () => {
//Checking again & verify snap
cy.get(".t--property-control-inline input")
.check({ force: true })
.wait(200)
.wait(2000)
.should("be.checked");
cy.get("[data-testid=switchgroup-container]").matchImageSnapshot(
@ -37,7 +38,7 @@ describe("Visual regression tests", () => {
//Unchecking again & verify snap
cy.get(".t--property-control-inline input")
.uncheck({ force: true })
.wait(200)
.wait(2000)
.should("not.be.checked");
// taking screenshot of app home page in edit mode
cy.get("[data-testid=switchgroup-container]").matchImageSnapshot(

View File

@ -12,20 +12,18 @@ describe("Form reset functionality", function() {
.eq(2)
.click()
.should("have.class", "selected-row");
// Select three options
cy.get(widgets.multiSelectWidget).click({ force: true });
cy.get(widgets.multiSelectWidget).type("Option");
cy.wait(2000);
cy.get(".rc-select-selection-overflow").click({ force: true });
cy.dropdownMultiSelectDynamic("Option 1");
cy.dropdownMultiSelectDynamic("Option 2");
cy.dropdownMultiSelectDynamic("Option 3");
// Verify input should include the name "lindsay.ferguson@reqres.in"
cy.get(widgets.inputWidget + " " + "input")
cy.get(".text-input-wrapper input")
.eq(0)
.invoke("attr", "value")
.should("contain", "lindsay.ferguson@reqres.in");
// Reset the form
cy.get(widgets.formButtonWidget)
.contains("Reset")
.click({ force: true });
cy.get("button:contains('Reset')").click({ force: true });
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(500);
// verify table should not have selected row
@ -39,32 +37,27 @@ describe("Form reset functionality", function() {
},
);
// Verify input should not include "lindsay.ferguson@reqres.in"
cy.get(widgets.inputWidget + " " + "input")
cy.get(".text-input-wrapper input")
.eq(0)
.invoke("attr", "value")
.should("not.contain", "lindsay.ferguson@reqres.in");
// input widgets should not be in error state
cy.get(widgets.inputWidget + " " + "input").should(
"not.have.css",
"border-color",
"rgb(242, 43, 43)",
);
cy.get(".text-input-wrapper input")
.eq(0)
.should("not.have.css", "border-color", "rgb(242, 43, 43)");
cy.get(widgets.currencyInputWidget + " " + "input").should(
"not.have.css",
"border-color",
"rgb(242, 43, 43)",
);
cy.get(".text-input-wrapper input")
.eq(0)
.should("not.have.css", "border-color", "rgb(242, 43, 43)");
cy.get(widgets.phoneInputWidget + " " + "input").should(
"not.have.css",
"border-color",
"rgb(242, 43, 43)",
);
cy.get(".text-input-wrapper input")
.eq(1)
.should("not.have.css", "border-color", "rgb(242, 43, 43)");
// Earlier select widget used to remain in error state which wasn't an expected behavior after reset
// now even select widget will not show error after reset.
cy.get(`.rc-select-selector`).should(
cy.get(`.rc-select-selection-overflow`).should(
"not.have.css",
"border-color",
"rgb(242, 43, 43)",

View File

@ -18,7 +18,9 @@ describe("Input Widget Max Char Functionality", function() {
it("Text Input maxChar shows error if defaultText longer", () => {
cy.get(widgetsPage.innertext).click();
cy.get(".bp3-popover-content").should(($x) => {
expect($x).contain("Default text length must be less than 5 characters");
expect($x).contain(
"Default text length must be less than or equal to 5 characters",
);
});
});

View File

@ -38,7 +38,9 @@ describe("Text Field Property Control", () => {
cy.testJsontext("maxchars", 5);
cy.get(`${fieldPrefix}-name input`).click();
cy.get(".bp3-popover-content").should(($x) => {
expect($x).contain("Default text length must be less than 5 characters");
expect($x).contain(
"Default text length must be less than or equal to 5 characters",
);
});
cy.testJsontext("maxchars", "");
});

View File

@ -83,7 +83,7 @@ describe("JSON Form Hidden fields", () => {
cy.testJsontext("text", "{{JSON.stringify(JSONForm1.formData)}}");
});
it("can hide Array Field", () => {
it("1. can hide Array Field", () => {
cy.openPropertyPane("jsonformwidget");
cy.openFieldConfiguration("education");
hideAndVerifyProperties("education", [
@ -94,7 +94,7 @@ describe("JSON Form Hidden fields", () => {
]);
});
it("can hide Array Field's inner fields", () => {
it("2. can hide Array Field's inner fields", () => {
cy.openPropertyPane("jsonformwidget");
cy.openFieldConfiguration("education");
cy.openFieldConfiguration("__array_item__");
@ -105,7 +105,7 @@ describe("JSON Form Hidden fields", () => {
});
});
it("can hide Checkbox Field", () => {
it("3. can hide Checkbox Field", () => {
// Add new custom field
addCustomField("Checkbox");
@ -114,7 +114,7 @@ describe("JSON Form Hidden fields", () => {
removeCustomField();
});
it("can hide Currency Field", () => {
it("4. can hide Currency Field", () => {
const defaultValue = 1000;
// Add new custom field
addCustomField("Currency Input");
@ -123,28 +123,28 @@ describe("JSON Form Hidden fields", () => {
removeCustomField();
});
it("can hide Date Field", () => {
it("5. can hide Date Field", () => {
cy.openPropertyPane("jsonformwidget");
cy.openFieldConfiguration("dob");
hideAndVerifyProperties("dob", "10/12/1992");
});
it("can hide Input Field", () => {
it("6. can hide Input Field", () => {
cy.openPropertyPane("jsonformwidget");
cy.openFieldConfiguration("name");
hideAndVerifyProperties("name", "John");
});
it("can hide Multiselect Field", () => {
it("7. can hide Multiselect Field", () => {
cy.openPropertyPane("jsonformwidget");
cy.openFieldConfiguration("hobbies");
hideAndVerifyProperties("hobbies", ["travelling", "swimming"]);
});
it("can hide Object Field", () => {
it("8. can hide Object Field", () => {
cy.openPropertyPane("jsonformwidget");
cy.openFieldConfiguration("address");
@ -154,7 +154,7 @@ describe("JSON Form Hidden fields", () => {
});
});
it("can hide Phone Number Input Field", () => {
it("9. can hide Phone Number Input Field", () => {
const defaultValue = "1000";
// Add new custom field
addCustomField("Phone Number Input");
@ -166,7 +166,7 @@ describe("JSON Form Hidden fields", () => {
removeCustomField();
});
it("can hide Radio Group Field", () => {
it("10. can hide Radio Group Field", () => {
const defaultValue = "Y";
// Add new custom field
addCustomField("Phone Number Input");
@ -178,7 +178,7 @@ describe("JSON Form Hidden fields", () => {
removeCustomField();
});
it("can hide Select Field", () => {
it("11. can hide Select Field", () => {
const defaultValue = "BLUE";
// Add new custom field
addCustomField(/^Select/);
@ -190,7 +190,7 @@ describe("JSON Form Hidden fields", () => {
removeCustomField();
});
it("can hide Switch Field", () => {
it("12. can hide Switch Field", () => {
// Add new custom field
addCustomField("Switch");
@ -199,7 +199,7 @@ describe("JSON Form Hidden fields", () => {
removeCustomField();
});
it("hides fields on first load", () => {
it("13. hides fields on first load", () => {
cy.openPropertyPane("jsonformwidget");
// hide education field
@ -214,6 +214,7 @@ describe("JSON Form Hidden fields", () => {
// publish the app
cy.PublishtheApp();
cy.wait(1000);
// Check if name is hidden
cy.get(`${fieldPrefix}-name`).should("not.exist");

View File

@ -1,4 +1,5 @@
const dsl = require("../../../../../fixtures/StatboxDsl.json");
const dsl1 = require("../../../../../fixtures/dynamicHeightStatboxdsl.json");
const explorer = require("../../../../../locators/explorerlocators.json");
const data = require("../../../../../fixtures/example.json");
const widgetsPage = require("../../../../../locators/Widgets.json");
@ -87,9 +88,10 @@ describe("Statbox Widget Functionality", function() {
});
it("5. Verify Statbox can be placed inside another widget", () => {
cy.addDsl(dsl1);
cy.get(explorer.addWidget).click();
// placing statbox widget inside container widget
cy.dragAndDropToCanvas("containerwidget", { x: 500, y: 300 });
//cy.dragAndDropToCanvas("containerwidget", { x: 500, y: 300 });
cy.dragAndDropToWidget("statboxwidget", "containerwidget", {
x: 100,
y: 100,

View File

@ -233,7 +233,7 @@ describe("RichTextEditor Widget Functionality", function() {
});
});
it.only("Check if the cursor position is at the end for the RTE widget", function() {
it("Check if the cursor position is at the end for the RTE widget", function() {
const tinyMceId = "rte-6h8j08u7ea";
const testString = "Test Content";
const testStringLen = testString.length;
@ -274,6 +274,18 @@ describe("RichTextEditor Widget Functionality", function() {
});
});
it("Check if button for Underline exists within the Toolbar of RTE widget", () => {
cy.get('[aria-label="Underline"]').should("exist");
});
it("Check if button for Background Color is rendered only once within the Toolbar of RTE widget", () => {
cy.get('[aria-label="Background color"]').should("have.length", 1);
});
it("Check if button for Text Color is rendered only once within the Toolbar of RTE widget", () => {
cy.get('[aria-label="Text color"]').should("have.length", 1);
});
afterEach(() => {
cy.goToEditFromPublish();
});

View File

@ -85,13 +85,13 @@ describe("Number Slider spec", () => {
propPane.UpdatePropertyFieldValue("Default Value", "-10");
agHelper.VerifyEvaluatedErrorMessage(
"This value must be greater than min value",
"This value must be greater than or equal to the min value",
);
propPane.UpdatePropertyFieldValue("Default Value", "110");
agHelper.VerifyEvaluatedErrorMessage(
"This value must be less than max value",
"This value must be less than or equal to the max value",
);
propPane.UpdatePropertyFieldValue("Default Value", "asd");
@ -121,6 +121,8 @@ describe("Number Slider spec", () => {
.focus()
.type("{rightArrow}");
agHelper.Sleep(2000); //for the changes to reflect in text widget
// Assert the Text widget has value 20
agHelper.GetText(getWidgetSelector(WIDGET.TEXT)).then(($label) => {
expect($label).to.eq("20");
@ -133,8 +135,7 @@ describe("Number Slider spec", () => {
.type("{leftArrow}")
.type("{leftArrow}");
agHelper.Sleep(200);
agHelper.Sleep(2000); //for the changes to reflect in text widget
// Assert the Text widget has value 0
agHelper.GetText(getWidgetSelector(WIDGET.TEXT)).then(($label) => {
expect($label).to.eq("0");

View File

@ -39,8 +39,6 @@ describe("Range Slider spec", () => {
agHelper.VerifyEvaluatedErrorMessage("This value must be a number");
propPane.UpdatePropertyFieldValue("Min. Value", "0");
// agHelper.VerifyEvaluatedValue("0");
});
it("2. Validates Max. Value", () => {
@ -59,8 +57,6 @@ describe("Range Slider spec", () => {
agHelper.VerifyEvaluatedErrorMessage("This value must be a number");
propPane.UpdatePropertyFieldValue("Max. Value", "100");
// agHelper.VerifyEvaluatedValue("100");
});
it("3. Validates Step Size", () => {
@ -79,8 +75,6 @@ describe("Range Slider spec", () => {
agHelper.VerifyEvaluatedErrorMessage("This value must be a number");
propPane.UpdatePropertyFieldValue("Step Size", "1");
// agHelper.VerifyEvaluatedValue("1");
});
it("4. Validates Min Range", () => {
@ -101,15 +95,13 @@ describe("Range Slider spec", () => {
agHelper.VerifyEvaluatedErrorMessage("This value must be less than 100");
propPane.UpdatePropertyFieldValue("Min. Range", "10");
// agHelper.VerifyEvaluatedValue("10");
});
it("5. Validates Default Start Value", () => {
propPane.UpdatePropertyFieldValue("Default Start Value", "-100");
agHelper.VerifyEvaluatedErrorMessage(
"This value must be greater than min value",
"This value must be greater than or equal to the min value",
);
propPane.UpdatePropertyFieldValue("Default Start Value", "110");
@ -123,8 +115,6 @@ describe("Range Slider spec", () => {
agHelper.VerifyEvaluatedErrorMessage("This value must be a number");
propPane.UpdatePropertyFieldValue("Default Start Value", "10");
// agHelper.VerifyEvaluatedValue("10");
});
it("6. Validates Default End Value", () => {
@ -137,7 +127,7 @@ describe("Range Slider spec", () => {
propPane.UpdatePropertyFieldValue("Default End Value", "110");
agHelper.VerifyEvaluatedErrorMessage(
"This value must be less than max value",
"This value must be less than or equal to the max value",
);
propPane.UpdatePropertyFieldValue("Default End Value", "asd");
@ -145,8 +135,6 @@ describe("Range Slider spec", () => {
agHelper.VerifyEvaluatedErrorMessage("This value must be a number");
propPane.UpdatePropertyFieldValue("Default End Value", "100");
// agHelper.VerifyEvaluatedValue("100");
});
it("7. Change Step Size and check if binding value changes", () => {

View File

@ -16,7 +16,7 @@ describe("Table widget Add new row feature's", () => {
cy.addDsl(dsl);
});
it("should test that allow Add new row property is present", () => {
it("1.1. should test that allow Add new row property is present", () => {
cy.openPropertyPane("tablewidgetv2");
cy.get(".t--property-control-allowaddingarow").should("exist");
cy.get(
@ -24,7 +24,7 @@ describe("Table widget Add new row feature's", () => {
).should("exist");
});
it("should test that Add new row link appears on the UI when the allow add new row property is enabled", () => {
it("1.2. should test that Add new row link appears on the UI when the allow add new row property is enabled", () => {
cy.get(".t--add-new-row").should("not.exist");
propPane.ToggleOnOrOff("Allow adding a row", "On");
cy.get(".t--add-new-row").should("exist");
@ -32,7 +32,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".t--add-new-row").should("not.exist");
});
it("should test that onSave, onDiscard and default row are showing up only when the allow add new property is enabled", () => {
it("1.3. should test that onSave, onDiscard and default row are showing up only when the allow add new property is enabled", () => {
cy.get(".t--property-control-onsave").should("not.exist");
cy.get(".t--property-control-ondiscard").should("not.exist");
cy.get(".t--property-control-defaultvalues").should("not.exist");
@ -42,14 +42,14 @@ describe("Table widget Add new row feature's", () => {
cy.get(".t--property-control-defaultvalues").should("exist");
});
it("should test that add new row link is disabled during the inline editing flow", () => {
it("1.4. should test that add new row link is disabled during the inline editing flow", () => {
cy.get(".t--add-new-row.disabled").should("not.exist");
cy.makeColumnEditable("step");
cy.editTableCell(0, 0);
cy.get(".t--add-new-row.disabled").should("exist");
});
it("should test that clicking on add new row link adds an empty row at the top of the table", () => {
it("1.5. should test that clicking on add new row link adds an empty row at the top of the table", () => {
cy.openPropertyPane("tablewidgetv2");
cy.get(".tableWrap .new-row").should("not.exist");
cy.get(".t--add-new-row").click();
@ -57,7 +57,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".t--discard-new-row").click({ force: true });
});
it("should test that new row is getting populated with the default row property value", () => {
it("1.6. should test that new row is getting populated with the default row property value", () => {
cy.updateCodeInput(
".t--property-control-defaultvalues",
"{{{step: 'newStepCell'}}}",
@ -70,7 +70,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".t--discard-new-row").click({ force: true });
});
it("should test that inline editing, row selection, pagination, search, filters are actions cannot be performed while in add new row feature", () => {
it("1.7. should test that inline editing, row selection, pagination, search, filters are actions cannot be performed while in add new row feature", () => {
cy.get(".t--widget-tablewidgetv2 .t--search-input").should("exist");
cy.get(".t--widget-tablewidgetv2 .t--table-filter-toggle-btn").should(
"exist",
@ -111,7 +111,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".t--discard-new-row").click({ force: true });
});
it("should test that only editable column cells are in editmode in the new row", () => {
it("1.8. should test that only editable column cells are in editmode in the new row", () => {
cy.get(".t--add-new-row").click();
cy.get(
`[data-colindex=0][data-rowindex=0] .t--inlined-cell-editor`,
@ -136,7 +136,7 @@ describe("Table widget Add new row feature's", () => {
).should("not.exist");
});
it("should test that newRow property holds the entered data", () => {
it("1.9. should test that newRow property holds the entered data", () => {
cy.makeColumnEditable("step");
cy.makeColumnEditable("task");
cy.enterTableCellValue(0, 0, "22");
@ -150,7 +150,7 @@ describe("Table widget Add new row feature's", () => {
);
});
it("should test that non data (iconBitton, button, menubutton) column cells are not showing up", () => {
it("1.10. should test that non data (iconBitton, button, menubutton) column cells are not showing up", () => {
cy.openPropertyPane("tablewidgetv2");
cy.editColumn("step");
["Button", "Menu Button", "Icon Button"].forEach((columnType) => {
@ -174,7 +174,7 @@ describe("Table widget Add new row feature's", () => {
cy.addDsl(dsl);
});
it("should test that validation is working for a new row cell", () => {
it("2.1. should test that validation is working for a new row cell", () => {
cy.openPropertyPane("tablewidgetv2");
propPane.ToggleOnOrOff("Allow adding a row", "On");
cy.get(".t--add-new-row").click();
@ -262,7 +262,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".t--discard-new-row").click({ force: true });
});
it("should test that validation variable isNewRow is working", () => {
it("2.2. should test that validation variable isNewRow is working", () => {
propPane.UpdatePropertyFieldValue(
"Valid",
"{{isNewRow ? (editedValue === 1) : (editedValue === 2)}}",
@ -290,7 +290,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".t--discard-new-row").click({ force: true });
});
it("should test that validation is working for more than one add new row cell at a time", () => {
it("2.3. should test that validation is working for more than one add new row cell at a time", () => {
propPane.UpdatePropertyFieldValue("Valid", "{{editedValue === 1}}");
cy.get(".t--property-pane-back-btn").click();
cy.wait(500);
@ -306,7 +306,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(`.t--inlined-cell-editor-has-error`).should("have.length", 2);
});
it("should test that validation error message only appears when a cell is in focus", () => {
it("2.4. should test that validation error message only appears when a cell is in focus", () => {
cy.get(".error-tooltip .bp3-popover-content").should("not.exist");
cy.get(`[data-colindex=1][data-rowindex=0] input`).focus();
cy.get(".error-tooltip .bp3-popover-content").should("have.length", 1);
@ -316,7 +316,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".error-tooltip .bp3-popover-content").should("have.length", 1);
});
it("should test that save button is disabled when there is an error", () => {
it("2.5. should test that save button is disabled when there is an error", () => {
cy.get(".t--save-new-row").should("be.disabled");
cy.get(`.t--inlined-cell-editor-has-error`).should("have.length", 2);
cy.enterTableCellValue(0, 0, "1");
@ -335,7 +335,7 @@ describe("Table widget Add new row feature's", () => {
cy.addDsl(dsl);
});
it("should test that discard button is undoing the add new feature", () => {
it("3.1. should test that discard button is undoing the add new feature", () => {
cy.openPropertyPane("tablewidgetv2");
propPane.ToggleOnOrOff("Allow adding a row", "On");
cy.get(".tableWrap .new-row").should("not.exist");
@ -344,7 +344,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".t--discard-new-row").click({ force: true });
});
it("should test that discard events is triggered when user clicks on the discard button", () => {
it("3.2. should test that discard events is triggered when user clicks on the discard button", () => {
cy.get(
".t--property-control-ondiscard .t--open-dropdown-Select-Action",
).click({ force: true });
@ -354,16 +354,11 @@ describe("Table widget Add new row feature's", () => {
cy.get(".tableWrap .new-row").should("exist");
cy.get(".t--discard-new-row").click({ force: true });
cy.get(widgetsPage.toastAction).should("be.visible");
cy.get(widgetsPage.toastActionText)
.last()
.invoke("text")
.then((text) => {
expect(text).to.equal("discarded!!");
});
agHelper.AssertContains("discarded!!");
cy.get(".tableWrap .new-row").should("not.exist");
});
it("should test that save event is triggered when user clicks on the save button", () => {
it("3.3. should test that save event is triggered when user clicks on the save button", () => {
cy.get(
".t--property-control-onsave .t--open-dropdown-Select-Action",
).click({ force: true });
@ -373,12 +368,7 @@ describe("Table widget Add new row feature's", () => {
cy.get(".tableWrap .new-row").should("exist");
cy.get(".t--save-new-row").click({ force: true });
cy.get(widgetsPage.toastAction).should("be.visible");
cy.get(widgetsPage.toastActionText)
.last()
.invoke("text")
.then((text) => {
expect(text).to.equal("saved!!");
});
agHelper.AssertContains("saved!!");
cy.get(".tableWrap .new-row").should("not.exist");
});
});

View File

@ -2,6 +2,7 @@ const dsl = require("../../../../../fixtures/Table/InlineEditingDSL.json");
const commonlocators = require("../../../../../locators/commonlocators.json");
const widgetsPage = require("../../../../../locators/Widgets.json");
import { ObjectsRegistry } from "../../../../../support/Objects/Registry";
import { PROPERTY_SELECTOR } from "../../../../../locators/WidgetLocators";
const agHelper = ObjectsRegistry.AggregateHelper;
describe("Table widget inline editing functionality", () => {
@ -711,4 +712,104 @@ describe("Table widget inline editing functionality", () => {
"[data-colindex='0'][data-rowindex='0'] .t--inlined-cell-editor",
).should("not.have.css", "height", "34px");
});
it("26. should check if updatedRowIndex is getting updated for single row update mode", () => {
cy.dragAndDropToCanvas("textwidget", { x: 400, y: 400 });
cy.get(".t--widget-textwidget").should("exist");
cy.updateCodeInput(
".t--property-control-text",
`{{Table1.updatedRowIndex}}`,
);
cy.dragAndDropToCanvas("buttonwidget", { x: 300, y: 300 });
cy.get(".t--widget-buttonwidget").should("exist");
cy.get(PROPERTY_SELECTOR.onClick)
.find(".t--js-toggle")
.click();
cy.updateCodeInput(".t--property-control-label", "Reset");
cy.updateCodeInput(
PROPERTY_SELECTOR.onClick,
`{{resetWidget("Table1",true)}}`,
);
// case 1: check if updatedRowIndex has -1 as the default value:
cy.get(commonlocators.textWidgetContainer).should("contain.text", -1);
cy.openPropertyPane("tablewidgetv2");
cy.makeColumnEditable("step");
cy.wait(1000);
// case 2: check if updatedRowIndex is 0, when cell at row 0 is updated.
cy.editTableCell(0, 0);
cy.enterTableCellValue(0, 0, "#12").type("{enter}");
cy.get(commonlocators.textWidgetContainer).should("contain.text", 0);
// case 3: check if updatedRowIndex is -1 when changes are discarded.
cy.discardTableRow(4, 0);
cy.get(commonlocators.textWidgetContainer).should("contain.text", -1);
// case 4: check if the updateRowIndex is -1 when widget is reset
cy.editTableCell(0, 1);
cy.enterTableCellValue(0, 1, "#13").type("{enter}");
cy.contains("Reset").click({ force: true });
cy.get(commonlocators.textWidgetContainer).should("contain.text", -1);
// case 5: check if the updatedRowIndex changes to -1 when the table data changes.
cy.wait(1000);
cy.editTableCell(0, 2);
cy.enterTableCellValue(0, 2, "#14").type("{enter}");
cy.openPropertyPane("tablewidgetv2");
cy.get(widgetsPage.tabedataField).type("{backspace}");
cy.wait(300);
cy.get(commonlocators.textWidgetContainer).should("contain.text", -1);
});
it.only("27. should check if updatedRowIndex is getting updated for multi row update mode", () => {
cy.dragAndDropToCanvas("textwidget", { x: 400, y: 400 });
cy.get(".t--widget-textwidget").should("exist");
cy.updateCodeInput(
".t--property-control-text",
`{{Table1.updatedRowIndex}}`,
);
cy.dragAndDropToCanvas("buttonwidget", { x: 300, y: 300 });
cy.get(".t--widget-buttonwidget").should("exist");
cy.get(PROPERTY_SELECTOR.onClick)
.find(".t--js-toggle")
.click();
cy.updateCodeInput(".t--property-control-label", "Reset");
cy.updateCodeInput(
PROPERTY_SELECTOR.onClick,
`{{resetWidget("Table1",true)}}`,
);
cy.openPropertyPane("tablewidgetv2");
cy.makeColumnEditable("step");
cy.get(".t--button-tab-CUSTOM").click({ force: true });
cy.wait(1000);
// case 1: check if updatedRowIndex is 0, when cell at row 0 is updated.
cy.editTableCell(0, 0);
cy.enterTableCellValue(0, 0, "#12").type("{enter}");
cy.get(commonlocators.textWidgetContainer).should("contain.text", 0);
// case 2: check if the updateRowIndex is -1 when widget is reset
cy.editTableCell(0, 1);
cy.enterTableCellValue(0, 1, "#13").type("{enter}");
cy.get(commonlocators.textWidgetContainer).should("contain.text", 1);
cy.contains("Reset").click({ force: true });
cy.get(commonlocators.textWidgetContainer).should("contain.text", -1);
// case 3: check if the updatedRowIndex changes to -1 when the table data changes.
cy.wait(1000);
cy.editTableCell(0, 2);
cy.enterTableCellValue(0, 2, "#14").type("{enter}");
cy.get(commonlocators.textWidgetContainer).should("contain.text", 2);
cy.openPropertyPane("tablewidgetv2");
cy.get(widgetsPage.tabedataField).type("{backspace}");
cy.wait(300);
cy.get(commonlocators.textWidgetContainer).should("contain.text", -1);
});
});

View File

@ -44,7 +44,7 @@ describe("Test Suite to validate copy/paste table Widget V2", function() {
cy.hoverAndClickParticularIndex(1);
cy.selectAction("Show Bindings");
cy.get(apiwidget.propertyList).then(function($lis) {
expect($lis).to.have.length(19);
expect($lis).to.have.length(20);
expect($lis.eq(0)).to.contain("{{Table1Copy.selectedRow}}");
expect($lis.eq(1)).to.contain("{{Table1Copy.selectedRows}}");
});

View File

@ -12,6 +12,15 @@ describe("Text Widget color/font/alignment Functionality", function() {
cy.openPropertyPane("textwidget");
});
it("Test to validate parsing link", function() {
// Add link to text widget
cy.testCodeMirror("app.appsmith.com");
// check if it's a link when no http or https is passed,
cy.get(`${commonlocators.headingTextStyle} a`).should(
"have.attr",
"href",
"http://app.appsmith.com",
);
// Add link to text widget
cy.testCodeMirror("https://app.appsmith.com");
// check if it's parsed as link

View File

@ -1,6 +1,10 @@
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const datasourceFormData = require("../../../../fixtures/datasources.json");
const datasourceEditor = require("../../../../locators/DatasourcesEditor.json");
const testdata = require("../../../../fixtures/testdata.json");
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
let dataSources = ObjectsRegistry.DataSources;
describe("Authenticated API Datasource", function() {
const URL = datasourceFormData["authenticatedApiUrl"];
@ -44,4 +48,28 @@ describe("Authenticated API Datasource", function() {
cy.contains(queryParams).should("not.exist");
cy.deleteDatasource("FakeAuthenticatedApi");
});
it("4. Bug: 18051 - Save and Authorise should return to datasource page in view mode and not new datasource page", () => {
cy.NavigateToAPI_Panel();
cy.get(apiwidget.createAuthApiDatasource).click();
cy.generateUUID().then((uuid) => {
cy.renameDatasource(uuid);
cy.fillAuthenticatedAPIForm();
cy.addOAuth2AuthorizationCodeDetails(
testdata.accessTokenUrl,
testdata.clientID,
testdata.clientSecret,
testdata.authorizationURL,
);
dataSources.AuthAPISaveAndAuthorize();
cy.xpath('//input[@name="email"]').type("Test@email.com");
cy.xpath('//input[@name="email"]').type("Test");
cy.xpath("//input[@name='password']").type("Test@123");
cy.xpath("//input[@id='login-submit']").click();
cy.wait(2000);
cy.reload();
cy.get(".t--edit-datasource").should("be.visible");
dataSources.DeleteDatasouceFromActiveTab(uuid);
});
});
});

View File

@ -0,0 +1,28 @@
const testdata = require("../../../../fixtures/testdata.json");
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
const agHelper = ObjectsRegistry.AggregateHelper,
dataSources = ObjectsRegistry.DataSources;
describe("Datasource form related tests", function() {
it("1. Verify datasource structure refresh on save", () => {
agHelper.GenerateUUID();
cy.get("@guid").then((uid) => {
const guid = uid;
const dataSourceName = "Postgres " + guid;
cy.get(dataSources._dsEntityItem).click();
dataSources.NavigateToDSCreateNew();
dataSources.CreatePlugIn("PostgreSQL");
agHelper.RenameWithInPane(dataSourceName, false);
dataSources.FillPostgresDSForm(false, "docker", "wrongPassword");
dataSources.verifySchema("Failed to initialize pool");
cy.get(dataSources._activeDS)
.contains(dataSourceName)
.click();
dataSources.updatePassword("docker");
dataSources.verifySchema("public.");
dataSources.DeleteDatasouceFromActiveTab(dataSourceName);
});
});
});

View File

@ -0,0 +1,143 @@
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
const adminSettings = require("../../../../locators/AdminsSettings");
describe("Embed settings options", function() {
const {
AggregateHelper: agHelper,
DeployMode: deployMode,
EntityExplorer: ee,
HomePage: homePage,
} = ObjectsRegistry;
const getIframeBody = () => {
// get the iframe > document > body
// and retry until the body element is not empty
return (
cy
.get(".t--widget-iframewidget iframe")
.its("0.contentDocument.body")
.should("not.be.empty")
// wraps "body" DOM element to allow
// chaining more Cypress commands, like ".find(...)"
// https://on.cypress.io/wrap
.then(cy.wrap)
);
};
before(() => {
ee.DragDropWidgetNVerify("buttonwidget", 100, 100);
deployMode.DeployApp();
cy.get("[data-cy='viewmode-share']").click();
cy.get(".t--deployed-url input")
.invoke("attr", "value")
.as("embeddedAppUrl");
cy.enablePublicAccess();
cy.get(".t--back-to-home").click();
homePage.CreateNewApplication();
ee.DragDropWidgetNVerify("iframewidget", 100, 100);
cy.get("@embeddedAppUrl").then((url) => {
cy.testJsontext("url", url);
});
// cy.testJsontext("url", this.embeddedAppUrl);
deployMode.DeployApp();
cy.get("[data-cy='viewmode-share']").click();
cy.get(".t--deployed-url input")
.invoke("attr", "value")
.as("deployUrl");
cy.enablePublicAccess();
cy.wait(6000);
getIframeBody()
.contains("Submit")
.should("exist");
});
beforeEach(() => {
agHelper.RestoreLocalStorageCache();
});
afterEach(() => {
agHelper.SaveLocalStorageCache();
});
describe("Wrapper to get access to the alias in all tests", () => {
it("1. Allow embedding everywhere", function() {
cy.log(this.deployUrl);
cy.get(".t--back-to-home").click();
cy.get(".admin-settings-menu-option").click();
cy.get(".t--admin-settings-APPSMITH_ALLOWED_FRAME_ANCESTORS").within(
() => {
cy.get("input")
.eq(0)
.click();
},
);
cy.get(adminSettings.saveButton).click();
cy.wait(60000);
cy.wait(["@getEnvVariables", "@getEnvVariables"]).then((interception) => {
const {
APPSMITH_ALLOWED_FRAME_ANCESTORS,
} = interception[1].response.body.data;
expect(APPSMITH_ALLOWED_FRAME_ANCESTORS).to.equal("*");
});
cy.get(adminSettings.restartNotice).should("not.exist");
cy.visit(this.deployUrl);
getIframeBody()
.contains("Submit")
.should("exist");
});
it("2. Limit embedding", function() {
cy.log(this.deployUrl);
cy.get(".t--back-to-home").click();
cy.get(".admin-settings-menu-option").click();
cy.get(".t--admin-settings-APPSMITH_ALLOWED_FRAME_ANCESTORS").within(
() => {
cy.get("input")
.eq(1)
.click();
cy.get(".bp3-tag-remove")
.eq(1)
.click();
cy.get(".bp3-tag-remove")
.eq(0)
.click();
cy.get(".bp3-input-ghost")
.type(window.location.origin)
.blur();
},
);
cy.get(adminSettings.saveButton).click();
cy.wait(50000);
cy.get(adminSettings.restartNotice).should("not.exist");
cy.visit(this.deployUrl);
getIframeBody()
.contains("Submit")
.should("exist");
});
it("3. Disable everywhere", function() {
cy.log(this.deployUrl);
cy.get(".t--back-to-home").click();
cy.get(".admin-settings-menu-option").click();
cy.get(".t--admin-settings-APPSMITH_ALLOWED_FRAME_ANCESTORS").within(
() => {
cy.get("input")
.last()
.click();
},
);
cy.get(adminSettings.saveButton).click();
cy.wait(60000);
cy.get(adminSettings.restartNotice).should("not.exist");
cy.visit(this.deployUrl);
cy.wait(["@getEnvVariables", "@getEnvVariables"]).then((interception) => {
const {
APPSMITH_ALLOWED_FRAME_ANCESTORS,
} = interception[1].response.body.data;
expect(APPSMITH_ALLOWED_FRAME_ANCESTORS).to.equal("'none'");
});
getIframeBody()
.contains("Submit")
.should("not.exist");
});
});
});

View File

@ -25,4 +25,5 @@ export default {
disconnectBtn: "[data-testid='disconnect-service-button']",
formSignupDisabled: "[data-cy='APPSMITH_SIGNUP_DISABLED']",
formLoginDisabled: "[data-cy='APPSMITH_FORM_LOGIN_DISABLED']",
embedSettings: ".t--admin-settings-APPSMITH_ALLOWED_FRAME_ANCESTORS",
};

View File

@ -192,5 +192,16 @@
"cancelActionExecution": ".t--cancel-action-button",
"codeScannerScannerLayout": ".t--property-control-scannerlayout",
"codeScannerVideo": ".code-scanner-camera-container video",
"codeScannerDisabledSVGIcon": ".code-scanner-camera-container div[disabled] svg"
"codeScannerDisabledSVGIcon": ".code-scanner-camera-container div[disabled] svg",
"layoutHeightDropdown": ".t--property-control-height .remixicon-icon",
"fixed": "[data-cy='t--dropdown-option-Fixed']",
"autoHeight": "[data-cy='t--dropdown-option-Auto Height']",
"autoHeightWithLimits": "[data-cy='t--dropdown-option-Auto Height with limits']",
"minHeight": "minheight\\(inrows\\)",
"maxHeight": "maxheight\\(inrows\\)",
"overlayMin": "[data-cy='t--auto-height-overlay-min']",
"overlayMax": "[data-cy='t--auto-height-overlay-max']",
"addOption": ".t--property-control-options-add",
"showTabsControl": ".t--property-control-showtabs .bp3-control-indicator",
"checkboxIndicator": ".t--draggable-checkboxwidget .bp3-control-indicator"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -426,9 +426,14 @@ export class AggregateHelper {
.invoke("text");
}
public EnterActionValue(actionName: string, value: string, paste = true) {
public EnterActionValue(
actionName: string,
value: string,
paste = true,
index = 0,
) {
cy.xpath(this.locator._actionTextArea(actionName))
.first()
.eq(index)
.scrollIntoView()
.focus()
.type("{uparrow}", { force: true })
@ -437,7 +442,7 @@ export class AggregateHelper {
if ($cm.contents != "") {
cy.log("The field is not empty");
cy.xpath(this.locator._actionTextArea(actionName))
.first()
.eq(index)
.scrollIntoView()
.click({ force: true })
.focused()
@ -447,7 +452,7 @@ export class AggregateHelper {
}
this.Sleep();
cy.xpath(this.locator._actionTextArea(actionName))
.first()
.eq(index)
.scrollIntoView()
.then((el: any) => {
if (paste) {

View File

@ -1,4 +1,7 @@
import { ObjectsRegistry } from "../Objects/Registry";
type RightPaneTabs = "datasources" | "connections";
export class ApiPage {
public agHelper = ObjectsRegistry.AggregateHelper;
public locator = ObjectsRegistry.CommonLocators;
@ -30,6 +33,7 @@ export class ApiPage {
verb +
"')]";
private _bodySubTab = (subTab: string) => `[data-cy='tab--${subTab}']`;
private _rightPaneTab = (tab: string) => `[data-cy='t--tab-${tab}']`;
_visibleTextSpan = (spanText: string) => "//span[text()='" + spanText + "']";
_visibleTextDiv = (divText: string) => "//div[text()='" + divText + "']";
_noBodyMessageDiv = "#NoBodyMessageDiv";
@ -241,6 +245,17 @@ export class ApiPage {
this.agHelper.GetNClick(this._bodySubTab(subTabName));
}
AssertRightPaneSelectedTab(tabName: RightPaneTabs) {
cy.get(this._rightPaneTab(tabName)).should(
"have.class",
"react-tabs__tab--selected",
);
}
SelectRightPaneTab(tabName: RightPaneTabs) {
this.agHelper.GetNClick(this._rightPaneTab(tabName));
}
ValidateQueryParams(param: { key: string; value: string }) {
this.SelectPaneTab("Params");
this.agHelper.ValidateCodeEditorContent(this._paramKey(0), param.key);

View File

@ -28,7 +28,9 @@ export class DataSources {
"input[name = 'datasourceConfiguration.authentication.password']";
private _testDs = ".t--test-datasource";
private _saveDs = ".t--save-datasource";
private _saveAndAuthorizeDS = ".t--save-and-authorize-datasource";
private _datasourceCard = ".t--datasource";
_dsEntityItem = "[data-guided-tour-id='explorer-entity-Datasources']";
_activeDS = "[data-testid='active-datasource-name']";
_templateMenu = ".t--template-menu";
_templateMenuOption = (action: string) =>
@ -45,6 +47,7 @@ export class DataSources {
"//div[contains(@class, 't--ds-list')]//span[text()='" + dbName + "']";
_runQueryBtn = ".t--run-query";
_newDatabases = "#new-datasources";
_newDatasourceContainer = "#new-integrations-wrapper"
_selectDatasourceDropdown = "[data-cy=t--datasource-dropdown]";
_selectTableDropdown = "[data-cy=t--table-dropdown]";
_selectSheetNameDropdown = "[data-cy=t--sheetName-dropdown]";
@ -106,6 +109,7 @@ export class DataSources {
_gsScopeOptions = ".ads-dropdown-options-wrapper div > span div span";
private _queryTimeout =
"//input[@name='actionConfiguration.timeoutInMillisecond']";
_getStructureReq = "/api/v1/datasources/*/structure?ignoreCache=true";
public StartDataSourceRoutes() {
cy.intercept("PUT", "/api/v1/datasources/*").as("saveDatasource");
@ -217,6 +221,7 @@ export class DataSources {
// cy.get(this._dsCreateNewTab)
// .should("be.visible")
// .click({ force: true });
cy.get(this._newDatasourceContainer).scrollTo("bottom");
cy.get(this._newDatabases).should("be.visible");
}
@ -331,6 +336,11 @@ export class DataSources {
// }).should("have.nested.property", "response.body.responseMeta.status", 200);
}
public AuthAPISaveAndAuthorize() {
cy.get(this._saveAndAuthorizeDS).click();
this.agHelper.ValidateNetworkStatus("@saveDatasource", 200);
}
public DeleteDatasouceFromActiveTab(
datasourceName: string,
expectedRes = 200,
@ -680,4 +690,19 @@ export class DataSources {
this.agHelper.AssertAutoSave();
this.agHelper.GetNClick(this._queryResponse("QUERY"));
}
//Update with new password in the datasource conf page
public updatePassword(newPassword: string){
cy.get(this._sectionAuthentication).click();
cy.get(this._password).type(newPassword);
}
//Fetch schema from server and validate UI for the updates
public verifySchema(schema: string){
cy.intercept("GET", this._getStructureReq).as("getDSStructure");
this.SaveDatasource();
cy.wait("@getDSStructure").then(() => {
cy.get(".bp3-collapse-body").contains(schema);
});
}
}

View File

@ -95,7 +95,9 @@ export class PropertyPane {
this.agHelper.GetNClick(this._colorPickerV2Popover);
this.agHelper.GetNClick(this._colorPickerV2Color, colorIndex);
} else {
this.agHelper.GetElement(this._colorInput(type)).clear();
this.agHelper.GetElement(this._colorInput(type)).clear().wait(200);
this.agHelper.TypeText(this._colorInput(type), colorIndex);
this.agHelper.GetElement(this._colorInput(type)).clear().wait(200);
this.agHelper.TypeText(this._colorInput(type), colorIndex);
//this.agHelper.UpdateInput(this._colorInputField(type), colorIndex);//not working!
}

View File

@ -1581,3 +1581,62 @@ Cypress.Commands.add("moveToContentTab", () => {
.first()
.click({ force: true });
});
Cypress.Commands.add("openPropertyPaneWithIndex", (widgetType, index) => {
const selector = `.t--draggable-${widgetType}`;
cy.wait(500);
cy.get(selector)
.eq(index)
.scrollIntoView()
.trigger("mouseover", { force: true })
.wait(500);
cy.get(
`${selector}:first-of-type .t--widget-propertypane-toggle > .t--widget-name`,
)
.eq(index)
.scrollIntoView()
.click({ force: true });
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(1000);
});
Cypress.Commands.add("changeLayoutHeight", (locator) => {
cy.get(".t--property-control-height .remixicon-icon")
.scrollIntoView()
.click({ force: true });
cy.get(locator).click({ force: true });
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
});
Cypress.Commands.add("changeLayoutHeightWithoutWait", (locator) => {
cy.get(".t--property-control-height .remixicon-icon")
.scrollIntoView()
.click({ force: true });
cy.get(locator).click({ force: true });
});
Cypress.Commands.add("checkMinDefaultValue", (endp, value) => {
cy.get(".cm-m-null")
.first()
.invoke("text")
.then((text) => {
const someText = text;
cy.log(someText);
expect(someText).to.equal(value);
});
});
Cypress.Commands.add("checkMaxDefaultValue", (endp, value) => {
cy.get(".cm-m-null")
.last()
.invoke("text")
.then((text) => {
const someText = text;
cy.log(someText);
expect(someText).to.equal(value);
});
});

View File

@ -7,6 +7,9 @@ export const CONFIG = {
iconSVG: IconSVG,
needsMeta: false, // Defines if this widget adds any meta properties
isCanvas: false, // Defines if this widget has a canvas within in which we can drop other widgets
features: {
dynamicHeight: false,
},
defaults: {
widgetName: "{{name}}",
rows: 1,

View File

@ -13,7 +13,6 @@
"@blueprintjs/icons": "^3.10.0",
"@blueprintjs/popover2": "^0.5.0",
"@blueprintjs/select": "^3.10.0",
"@craco/craco": "^7.0.0-alpha.3",
"@draft-js-plugins/editor": "^4.1.0",
"@draft-js-plugins/mention": "^4.5.1",
"@fusioncharts/powercharts": "^3.16.0",
@ -37,7 +36,6 @@
"algoliasearch": "^4.2.0",
"astring": "^1.7.5",
"axios": "^0.27.2",
"caniuse-lite": "^1.0.30001208",
"classnames": "^2.3.1",
"codemirror": "^5.59.2",
"codemirror-graphql": "^1.2.14",
@ -50,12 +48,10 @@
"design-system": "npm:@appsmithorg/design-system@1.0.32",
"downloadjs": "^1.4.7",
"draft-js": "^0.11.7",
"emoji-mart": "^3.0.1",
"exceljs-lightweight": "^1.14.0",
"fast-deep-equal": "^3.1.3",
"fast-xml-parser": "^3.17.5",
"fastdom": "^1.0.11",
"flow-bin": "^0.148.0",
"focus-trap-react": "^8.9.2",
"fuse.js": "^3.4.5",
"fusioncharts": "^3.18.0",
@ -66,20 +62,17 @@
"husky": "^3.0.5",
"immer": "^9.0.6",
"instantsearch.css": "^7.4.2",
"instantsearch.js": "^4.4.1",
"interweave": "^12.7.2",
"interweave-autolink": "^4.4.2",
"js-beautify": "^1.14.0",
"js-sha256": "^0.9.0",
"jshint": "^2.13.4",
"json-fn": "^1.1.1",
"klona": "^2.0.5",
"libphonenumber-js": "^1.9.44",
"lint-staged": "^13.0.3",
"localforage": "^1.7.3",
"lodash": "^4.17.21",
"lodash-es": "4.17.21",
"lodash-move": "^1.1.1",
"loglevel": "^1.7.1",
"lottie-web": "^5.7.4",
"mammoth": "^1.4.19",
@ -102,7 +95,6 @@
"rc-tree-select": "^5.4.0",
"re-reselect": "^3.4.0",
"react": "^16.12.0",
"react-base-table": "^1.9.1",
"react-beautiful-dnd": "^12.2.0",
"react-custom-scrollbars": "^4.2.1",
"react-device-detect": "^2.2.2",
@ -117,12 +109,10 @@
"react-google-recaptcha": "^2.1.0",
"react-helmet": "^5.2.1",
"react-hook-form": "^7.28.0",
"react-infinite-scroller": "^1.2.4",
"react-instantsearch-dom": "^6.4.0",
"react-json-view": "^1.21.3",
"react-masonry-css": "^1.0.16",
"react-media-recorder": "^1.6.1",
"react-mentions": "^4.1.1",
"react-modal": "^3.15.1",
"react-page-visibility": "^7.0.0",
"react-paginating": "^1.4.0",
@ -141,7 +131,6 @@
"react-tabs": "^3.0.0",
"react-timer-hook": "^3.0.4",
"react-toastify": "^5.5.0",
"react-transition-group": "^4.3.0",
"react-use-gesture": "^7.0.4",
"react-virtuoso": "^1.9.0",
"react-webcam": "^7.0.1",
@ -198,6 +187,7 @@
"devDependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-string-parser": "^7.19.4",
"@craco/craco": "^7.0.0",
"@faker-js/faker": "^7.4.0",
"@sentry/webpack-plugin": "^1.18.9",
"@testing-library/jest-dom": "5.16.1",

View File

@ -17,6 +17,7 @@ export type URLBuilderParams = {
hash?: string;
params?: Record<string, any>;
pageId: string;
persistExistingParams?: boolean;
};
export const fillPathname = (

View File

@ -116,3 +116,10 @@ export const setApiPaneResponsePaneHeight: (
type: ReduxActionTypes.SET_API_PANE_RESPONSE_PANE_HEIGHT,
payload: { height: payload },
});
export const setApiRightPaneSelectedTab: (
payload: number,
) => ReduxAction<{ selectedTab: number }> = (payload: number) => ({
type: ReduxActionTypes.SET_API_RIGHT_PANE_SELECTED_TAB,
payload: { selectedTab: payload },
});

View File

@ -20,13 +20,13 @@ export function setAutoHeightLayoutTreeAction(
}
export function generateAutoHeightLayoutTreeAction(
shouldCheckContainersForDynamicHeightUpdates: boolean,
shouldCheckContainersForAutoHeightUpdates: boolean,
layoutUpdated?: boolean,
) {
return {
type: ReduxActionTypes.GENERATE_AUTO_HEIGHT_LAYOUT_TREE,
payload: {
shouldCheckContainersForDynamicHeightUpdates,
shouldCheckContainersForAutoHeightUpdates,
layoutUpdated: !!layoutUpdated,
},
};

View File

@ -1,6 +1,7 @@
import {
ReduxActionTypes,
ReduxAction,
ReduxActionType,
} from "@appsmith/constants/ReduxActionConstants";
import { UpdateWidgetsPayload } from "reducers/entityReducers/canvasWidgetsReducer";
import { DynamicPath } from "utils/DynamicBindingUtils";
@ -24,6 +25,7 @@ export interface BatchPropertyUpdatePayload {
modify?: Record<string, unknown>; //Key value pairs of paths and values to update
remove?: string[]; //Array of paths to delete
triggerPaths?: string[]; // Array of paths in the modify and remove list which are trigger paths
postUpdateAction?: ReduxActionType; // Array of action types we need to dispatch after propert updates.
}
export const batchUpdateWidgetProperty = (

View File

@ -36,17 +36,12 @@ export const deleteCanvasCardsState = () => ({
* action that update canvas layout
*
* @param width
* @param height
* @returns
*/
export const updateCanvasLayoutAction = (
width: number,
height: number | undefined,
) => {
export const updateCanvasLayoutAction = (width: number) => {
return {
type: ReduxActionTypes.UPDATE_CANVAS_LAYOUT,
payload: {
height,
width,
},
};

View File

@ -9,6 +9,7 @@ import PerformanceTracker, {
PerformanceTransactionName,
} from "utils/PerformanceTracker";
import { WidgetProps } from "widgets/BaseWidget";
import { UpdateWidgetsPayload } from "reducers/entityReducers/canvasWidgetsReducer";
export const executeTrigger = (
payload: ExecuteTriggerPayload,
@ -154,3 +155,12 @@ export const groupWidgets = () => {
type: ReduxActionTypes.GROUP_WIDGETS_INIT,
};
};
export const updateMultipleWidgetProperties = (
widgetsToUpdate: UpdateWidgetsPayload,
) => {
return {
type: ReduxActionTypes.UPDATE_MULTIPLE_WIDGET_PROPERTIES,
payload: widgetsToUpdate,
};
};

View File

@ -688,6 +688,7 @@ export const ReduxActionTypes = {
SET_API_PANE_CONFIG_SELECTED_TAB: "SET_API_PANE_CONFIG_SELECTED_TAB",
SET_API_PANE_RESPONSE_SELECTED_TAB: "SET_API_PANE_RESPONSE_SELECTED_TAB",
SET_API_PANE_RESPONSE_PANE_HEIGHT: "SET_API_PANE_RESPONSE_PANE_HEIGHT",
SET_API_RIGHT_PANE_SELECTED_TAB: "SET_API_RIGHT_PANE_SELECTED_TAB",
GENERATE_KEY_AND_SET_CODE_EDITOR_LAST_FOCUS:
"GENERATE_KEY_AND_SET_CODE_EDITOR_LAST_FOCUS",
SET_CODE_EDITOR_CURSOR_HISTORY: "SET_CODE_EDITOR_CURSOR_HISTORY",
@ -712,6 +713,7 @@ export const ReduxActionTypes = {
CHECK_CONTAINERS_FOR_AUTO_HEIGHT: "CHECK_CONTAINERS_FOR_AUTO_HEIGHT",
UPDATE_WIDGET_AUTO_HEIGHT: "UPDATE_WIDGET_AUTO_HEIGHT",
SET_LINT_ERRORS: "SET_LINT_ERRORS",
SET_AUTO_HEIGHT_WITH_LIMITS_CHANGING: "SET_AUTO_HEIGHT_WITH_LIMITS_CHANGING",
PROCESS_AUTO_HEIGHT_UPDATES: "PROCESS_AUTO_HEIGHT_UPDATES",
};

View File

@ -28,7 +28,7 @@ export const ERROR_EMPTY_APPLICATION_NAME = () =>
export const API_PATH_START_WITH_SLASH_ERROR = () => `Path cannot start with /`;
export const FIELD_REQUIRED_ERROR = () => `This field is required`;
export const INPUT_DEFAULT_TEXT_MAX_CHAR_ERROR = (max: number) =>
`Default text length must be less than ${max} characters`;
`Default text length must be less than or equal to ${max} characters`;
export const INPUT_TEXT_MAX_CHAR_ERROR = (max: number) =>
`Input text length must be less than ${max} characters`;
export const INPUT_DEFAULT_TEXT_MAX_NUM_ERROR = () =>

View File

@ -10,6 +10,10 @@ import {
Setting,
} from "@appsmith/pages/AdminSettings/config/types";
import BrandingBadge from "pages/AppViewer/BrandingBadge";
import { TagInput } from "design-system";
import QuestionFillIcon from "remixicon-react/QuestionFillIcon";
import localStorage from "utils/localStorage";
import isUndefined from "lodash/isUndefined";
export const APPSMITH_INSTANCE_NAME_SETTING_SETTING: Setting = {
id: "APPSMITH_INSTANCE_NAME",
@ -81,6 +85,83 @@ export const APPSMITH_HIDE_WATERMARK_SETTING: Setting = {
"Hello, I would like to upgrade and remove the watermark.",
};
export const APPSMITH_ALLOWED_FRAME_ANCESTORS_SETTING: Setting = {
id: "APPSMITH_ALLOWED_FRAME_ANCESTORS",
name: "APPSMITH_ALLOWED_FRAME_ANCESTORS",
category: SettingCategories.GENERAL,
controlType: SettingTypes.RADIO,
label: "Embed Settings",
controlTypeProps: {
options: [
{
badge: "NOT RECOMMENDED",
tooltip: {
icon: <QuestionFillIcon />,
text:
"Lets all domains, including malicious ones, embed your Appsmith apps. ",
linkText: "SEE WHY THIS IS RISKY",
link:
"https://docs.appsmith.com/getting-started/setup/instance-configuration/frame-ancestors#why-should-i-control-this",
},
label: "Allow embedding everywhere",
value: "ALLOW_EMBEDDING_EVERYWHERE",
},
{
label: "Limit embedding to certain URLs",
value: "LIMIT_EMBEDDING",
nodeLabel: "You can add one or more URLs",
node: <TagInput input={{}} placeholder={""} type={"text"} />,
nodeInputPath: "input",
nodeParentClass: "tag-input",
},
{
label: "Disable embedding everywhere",
value: "DISABLE_EMBEDDING_EVERYWHERE",
},
],
},
format: (value: string) => {
if (value === "*") {
return {
value: "ALLOW_EMBEDDING_EVERYWHERE",
};
} else if (value === "'none'") {
return {
value: "DISABLE_EMBEDDING_EVERYWHERE",
};
} else {
return {
value: "LIMIT_EMBEDDING",
additionalData: value ? value.replaceAll(" ", ",") : "",
};
}
},
parse: (value: { value: string; additionalData?: any }) => {
// Retrieve values from local storage while switching to limit by url option
const sources = isUndefined(value.additionalData)
? localStorage.getItem("ALLOWED_FRAME_ANCESTORS") ?? ""
: value.additionalData.replaceAll(",", " ");
// If they are one of the other options we don't store it in storage since it will
// set in the env variable on save
if (sources !== "*" && sources !== "'none'") {
localStorage.setItem("ALLOWED_FRAME_ANCESTORS", sources);
}
if (value.value === "ALLOW_EMBEDDING_EVERYWHERE") {
return "*";
} else if (value.value === "DISABLE_EMBEDDING_EVERYWHERE") {
return "'none'";
} else {
return sources;
}
},
validate: (value: string) => {
if (!value) {
return "This field cannot be empty";
}
},
};
export const config: AdminConfigType = {
icon: "settings-2-line",
type: SettingCategories.GENERAL,
@ -93,5 +174,6 @@ export const config: AdminConfigType = {
APPSMITH_DOWNLOAD_DOCKER_COMPOSE_FILE_SETTING,
APPSMITH_DISABLE_TELEMETRY_SETTING,
APPSMITH_HIDE_WATERMARK_SETTING,
APPSMITH_ALLOWED_FRAME_ANCESTORS_SETTING,
],
} as AdminConfigType;

View File

@ -2,8 +2,32 @@ import React from "react";
import { ReduxAction } from "@appsmith/constants/ReduxActionConstants";
import { Dispatch } from "react";
import { EventName } from "utils/AnalyticsUtil";
import { RadioProps } from "pages/Settings/FormGroup/Radio";
type ControlType = {
[K in keyof ControlPropsType]: {
controlType: K;
controlTypeProps?: ControlPropsType[K];
};
}[keyof ControlPropsType];
type ControlPropsType = {
[SettingTypes.RADIO]: RadioProps;
[SettingTypes.TEXTINPUT]: unknown;
[SettingTypes.TOGGLE]: unknown;
[SettingTypes.LINK]: unknown;
[SettingTypes.BUTTON]: unknown;
[SettingTypes.GROUP]: unknown;
[SettingTypes.TEXT]: unknown;
[SettingTypes.UNEDITABLEFIELD]: unknown;
[SettingTypes.ACCORDION]: unknown;
[SettingTypes.TAGINPUT]: unknown;
[SettingTypes.DROPDOWN]: unknown;
[SettingTypes.CHECKBOX]: unknown;
};
export enum SettingTypes {
RADIO = "RADIO",
TEXTINPUT = "TEXTINPUT",
TOGGLE = "TOGGLE",
LINK = "LINK",
@ -25,11 +49,12 @@ export enum SettingSubtype {
PASSWORD = "password",
}
export interface Setting {
export type Setting = ControlType & {
id: string;
category?: string;
controlType: SettingTypes;
controlSubType?: SettingSubtype;
format?: (value: string) => any;
parse?: (value: any) => any;
helpText?: string;
label?: string;
name?: string;
@ -60,7 +85,7 @@ export interface Setting {
needsUpgrade?: boolean;
upgradeLogEventName?: EventName;
upgradeIntercomMessage?: string;
}
};
export interface Category {
title: string;

View File

@ -70,6 +70,7 @@ import { AutoHeightLayoutTreeReduxState } from "reducers/entityReducers/autoHeig
import { CanvasLevelsReduxState } from "reducers/entityReducers/autoHeightReducers/canvasLevelsReducer";
import { LintErrors } from "reducers/lintingReducers/lintErrorsReducers";
import lintErrorReducer from "reducers/lintingReducers";
import { AutoHeightUIState } from "reducers/uiReducers/autoHeightReducer";
export const reducerObject = {
entities: entityReducer,
@ -126,6 +127,7 @@ export interface AppState {
mainCanvas: MainCanvasReduxState;
focusHistory: FocusHistoryState;
editorContext: EditorContextState;
autoHeightUI: AutoHeightUIState;
};
entities: {
canvasWidgetsStructure: CanvasWidgetStructure;

View File

@ -41,6 +41,7 @@ import SuperUserSagas from "@appsmith/sagas/SuperUserSagas";
import NavigationSagas from "sagas/NavigationSagas";
import editorContextSagas from "sagas/editorContextSagas";
import PageVisibilitySaga from "sagas/PageVisibilitySagas";
import AutoHeightSagas from "sagas/autoHeightSagas";
import tenantSagas from "@appsmith/sagas/tenantSagas";
export const sagas = [
@ -87,5 +88,6 @@ export const sagas = [
NavigationSagas,
editorContextSagas,
PageVisibilitySaga,
AutoHeightSagas,
tenantSagas,
];

View File

@ -16,15 +16,16 @@ describe("<AutoHeightContainer />", () => {
maxDynamicHeight={0}
minDynamicHeight={0}
onHeightUpdate={onHeightUpdate}
widgetHeightInPixels={200}
>
<div data-testid="test" />
</AutoHeightContainer>,
)
.toJSON();
expect(tree).toHaveStyleRule("height", "auto");
expect(tree).toHaveStyleRule("height", "auto !important");
});
describe("when isAutoHeightWithLimits is false", () => {
describe("when isAutoHeightWithLimits is false.", () => {
it("should wrap the children in a simple div with class auto-height-container", async () => {
const getTestComponent = () => (
<AutoHeightContainer
@ -32,6 +33,7 @@ describe("<AutoHeightContainer />", () => {
maxDynamicHeight={0}
minDynamicHeight={0}
onHeightUpdate={onHeightUpdate}
widgetHeightInPixels={200}
>
<div data-testid="test" />
</AutoHeightContainer>
@ -53,6 +55,7 @@ describe("<AutoHeightContainer />", () => {
maxDynamicHeight={0}
minDynamicHeight={0}
onHeightUpdate={onHeightUpdate}
widgetHeightInPixels={200}
>
<div data-testid="test" />
</AutoHeightContainer>

View File

@ -1,10 +1,13 @@
import React, { PropsWithChildren, useRef, useEffect, useState } from "react";
import { GridDefaults } from "constants/WidgetConstants";
import React, { PropsWithChildren, useEffect, useRef, useState } from "react";
import { GridDefaults, WIDGET_PADDING } from "constants/WidgetConstants";
import styled from "styled-components";
import { WidgetProps } from "widgets/BaseWidget";
const StyledAutoHeightContainer = styled.div<{ isOverflow?: boolean }>`
overflow-y: ${(props) => (props.isOverflow ? "auto" : "unset")};
overflow-x: ${(props) => (props.isOverflow ? "hidden" : "unset")};
padding-right: 4px;
height: 100%;
`;
interface AutoHeightContainerProps {
@ -12,10 +15,12 @@ interface AutoHeightContainerProps {
minDynamicHeight: number;
isAutoHeightWithLimits: boolean;
onHeightUpdate: (height: number) => void;
widgetHeightInPixels: number;
widgetProps?: WidgetProps;
}
const SimpleContainer = styled.div`
height: auto;
height: auto !important;
`;
export default function AutoHeightContainer({
@ -24,12 +29,14 @@ export default function AutoHeightContainer({
maxDynamicHeight,
minDynamicHeight,
onHeightUpdate,
widgetHeightInPixels,
widgetProps,
}: PropsWithChildren<AutoHeightContainerProps>) {
const [expectedHeight, setExpectedHeight] = useState(0);
const ref = useRef<HTMLDivElement>(null);
const observer = useRef(
const observer = React.useRef(
new ResizeObserver((entries) => {
const height = entries[0].contentRect.height;
setExpectedHeight(height);
@ -53,15 +60,34 @@ export default function AutoHeightContainer({
onHeightUpdate(expectedHeight);
}, [minDynamicHeight, maxDynamicHeight]);
useEffect(() => {
if (
widgetHeightInPixels !==
Math.ceil(
Math.ceil(expectedHeight + WIDGET_PADDING * 2) /
GridDefaults.DEFAULT_GRID_ROW_HEIGHT,
) *
GridDefaults.DEFAULT_GRID_ROW_HEIGHT
) {
onHeightUpdate(expectedHeight);
}
}, [widgetHeightInPixels]);
if (isAutoHeightWithLimits) {
const expectedHeightInRows = Math.ceil(
expectedHeight / GridDefaults.DEFAULT_GRID_ROW_HEIGHT,
);
const backgroundColor =
widgetProps?.type === "TEXT_WIDGET"
? widgetProps?.backgroundColor
: undefined;
return (
<StyledAutoHeightContainer
className="auto-height-scroll-container"
isOverflow={maxDynamicHeight < expectedHeightInRows}
style={{ backgroundColor }}
>
<SimpleContainer className="auto-height-container" ref={ref}>
{children}

View File

@ -0,0 +1,51 @@
import { GridDefaults } from "constants/WidgetConstants";
import React, { ReactNode } from "react";
import useWidgetConfig from "utils/hooks/useWidgetConfig";
import { DynamicHeight } from "utils/WidgetFeatures";
import { WidgetProps } from "widgets/BaseWidget";
import {
getWidgetMaxAutoHeight,
getWidgetMinAutoHeight,
} from "widgets/WidgetUtils";
import AutoHeightContainer from "./AutoHeightContainer";
export type AutoHeightWrapperProps = {
widgetProps: WidgetProps;
children: ReactNode;
onUpdateDynamicHeight: (height: number) => void;
};
function AutoHeightContainerWrapper(props: AutoHeightWrapperProps) {
const { children, widgetProps } = props;
const isCanvas = useWidgetConfig(widgetProps.type, "isCanvas");
// eslint-disable-next-line react/jsx-no-useless-fragment
if (isCanvas) return <>{children}</>;
const onHeightUpdate = (height: number) => {
props.onUpdateDynamicHeight(height);
};
const maxDynamicHeight = getWidgetMaxAutoHeight(widgetProps);
const minDynamicHeight = getWidgetMinAutoHeight(widgetProps);
const widgetHeightInPixels =
(widgetProps.bottomRow - widgetProps.topRow) *
GridDefaults.DEFAULT_GRID_ROW_HEIGHT;
const isAutoHeightWithLimits =
widgetProps.dynamicHeight === DynamicHeight.AUTO_HEIGHT_WITH_LIMITS;
return (
<AutoHeightContainer
isAutoHeightWithLimits={isAutoHeightWithLimits}
maxDynamicHeight={maxDynamicHeight}
minDynamicHeight={minDynamicHeight}
onHeightUpdate={onHeightUpdate}
widgetHeightInPixels={widgetHeightInPixels}
widgetProps={widgetProps}
>
{children}
</AutoHeightContainer>
);
}
export default AutoHeightContainerWrapper;

View File

@ -0,0 +1,164 @@
import React, { useRef } from "react";
import styled from "styled-components";
import AutoHeightLimitHandleBorder from "./ui/AutoHeightLimitHandleBorder";
import { useDrag } from "react-use-gesture";
import { heightToRows } from "./utils";
import AutoHeightLimitHandleLabel from "./ui/AutoHeightLimitHandleLabel";
import { onDragCallbacksProps, onMouseHoverCallbacksProps } from "./types";
import AutoHeightLimitHandleDot from "./ui/AutoHeightLimitHandleDot";
const AutoHeightLimitHandleGroupContainer = styled.div`
position: absolute;
left: 50%;
transform: translateX(-50%);
pointer-events: all;
width: 100%;
z-index: 1;
`;
interface AutoHeightLimitHandleGroupProps {
isMaxDotActive: boolean;
isMinDotActive: boolean;
isMaxDotDragging: boolean;
isMinDotDragging: boolean;
maxY: number;
minY: number;
onMaxLimitDragCallbacks: onDragCallbacksProps;
onMinLimitDragCallbacks: onDragCallbacksProps;
onMaxHeightSet: (height: number) => void;
onMinHeightSet: (height: number) => void;
onMaxLimitMouseHoverCallbacks: onMouseHoverCallbacksProps;
onMinLimitMouseHoverCallbacks: onMouseHoverCallbacksProps;
}
interface AutoHeightLimitHandleContainerProps {
height: number;
}
const AutoHeightLimitHandleContainer = styled.div<
AutoHeightLimitHandleContainerProps
>`
position: absolute;
display: flex;
align-items: center;
width: 100%;
height: 13px;
transform: translateY(${(props) => props.height - 6}px);
cursor: ns-resize;
display: flex;
align-items: center;
`;
interface AutoHeightLimitHandleProps {
cypressDataID: string;
height: number;
isActive: boolean;
isColliding: boolean;
isDragging: boolean;
label: string;
onDragCallbacks: onDragCallbacksProps;
onMouseHoverFunctions: onMouseHoverCallbacksProps;
}
const AutoHeightLimitHandle = ({
cypressDataID,
height,
isActive,
isColliding,
isDragging,
label,
onDragCallbacks,
onMouseHoverFunctions,
}: AutoHeightLimitHandleProps) => {
const ref = useRef<HTMLDivElement>(null);
const { onStart, onStop, onUpdate } = onDragCallbacks;
const bind = useDrag((state) => {
if (state.first) {
onStart();
return;
}
if (state.last) {
onStop();
return;
}
const [mx, my] = state.movement;
onUpdate(mx, my);
});
const bindings = bind();
return (
<AutoHeightLimitHandleContainer
data-cy={cypressDataID}
height={height}
ref={ref}
{...bindings}
onClick={(e) => {
e.stopPropagation();
}}
onDragStart={(e) => {
e.preventDefault();
e.stopPropagation();
}}
onMouseDown={(e) => {
e.preventDefault();
e.stopPropagation();
bindings?.onMouseDown && bindings.onMouseDown(e);
}}
{...onMouseHoverFunctions}
>
<AutoHeightLimitHandleBorder isActive={isActive} />
<AutoHeightLimitHandleDot isDragging={isDragging} />
{!isColliding ? (
<AutoHeightLimitHandleLabel isActive={isActive}>
{label}: {heightToRows(height)} rows
</AutoHeightLimitHandleLabel>
) : null}
</AutoHeightLimitHandleContainer>
);
};
const AutoHeightLimitHandleGroup: React.FC<AutoHeightLimitHandleGroupProps> = ({
isMaxDotActive,
isMaxDotDragging,
isMinDotActive,
isMinDotDragging,
maxY,
minY,
onMaxLimitDragCallbacks,
onMaxLimitMouseHoverCallbacks,
onMinLimitDragCallbacks,
onMinLimitMouseHoverCallbacks,
}) => {
const isColliding = maxY === minY;
return (
<AutoHeightLimitHandleGroupContainer data-cy="t-auto-height-overlay-handles">
<AutoHeightLimitHandle
cypressDataID="t--auto-height-overlay-handles-min"
height={minY}
isActive={isMinDotActive}
isColliding={isColliding}
isDragging={isMinDotDragging}
label="Min-Height"
onDragCallbacks={onMinLimitDragCallbacks}
onMouseHoverFunctions={onMinLimitMouseHoverCallbacks}
/>
<AutoHeightLimitHandle
cypressDataID="t--auto-height-overlay-handles-max"
height={maxY}
isActive={isMaxDotActive}
isColliding={false}
isDragging={isMaxDotDragging}
label={isColliding ? "Height" : "Max-Height"}
onDragCallbacks={onMaxLimitDragCallbacks}
onMouseHoverFunctions={onMaxLimitMouseHoverCallbacks}
/>
</AutoHeightLimitHandleGroupContainer>
);
};
export default AutoHeightLimitHandleGroup;

View File

@ -0,0 +1,5 @@
export const OVERLAY_COLOR = "#F32B8B";
// During dragging we have to scale the size
// of the dot to increase its focus
export const OVERLAY_HANDLE_DOT_DRAGGING_SCALE = "1.67";

View File

@ -0,0 +1,144 @@
import { CONTAINER_GRID_PADDING } from "constants/WidgetConstants";
import { CSSProperties, useEffect, useMemo, useState } from "react";
import { CallbackHandlerEventType } from "utils/CallbackHandler/CallbackHandlerEventType";
import DynamicHeightCallbackHandler from "utils/CallbackHandler/DynamicHeightCallbackHandler";
import { onMouseHoverCallbacksProps } from "./types";
type UseHoverStateReturnType = [boolean, onMouseHoverCallbacksProps];
export function useHoverState(): UseHoverStateReturnType {
const [isActive, setIsActive] = useState(false);
function handleMouseEnter(state: boolean) {
setIsActive(state);
}
return [
isActive,
{
onMouseEnter: () => handleMouseEnter(true),
onMouseLeave: () => handleMouseEnter(false),
},
];
}
interface UsePositionedStylesProps {
bottomRow: number;
leftColumn: number;
noContainerOffset?: boolean;
parentColumnSpace: number;
parentRowSpace: number;
rightColumn: number;
topRow: number;
}
export const usePositionedStyles = ({
bottomRow,
leftColumn,
noContainerOffset,
parentColumnSpace,
parentRowSpace,
rightColumn,
topRow,
}: UsePositionedStylesProps) => {
const styles: CSSProperties = useMemo(
() => ({
height: (bottomRow - topRow) * parentRowSpace,
width: (rightColumn - leftColumn) * parentColumnSpace,
left:
leftColumn * parentColumnSpace +
(noContainerOffset ? 0 : CONTAINER_GRID_PADDING),
top:
topRow * parentRowSpace +
(noContainerOffset ? 0 : CONTAINER_GRID_PADDING),
}),
[
bottomRow,
leftColumn,
noContainerOffset,
parentColumnSpace,
parentRowSpace,
rightColumn,
topRow,
],
);
return styles;
};
export const useMaxMinPropertyPaneFieldsFocused = () => {
const [
isPropertyPaneMinFieldFocused,
setPropertyPaneMinFieldFocused,
] = useState(false);
const [
isPropertyPaneMaxFieldFocused,
setPropertyPaneMaxFieldFocused,
] = useState(false);
function handleOnMaxLimitPropertyPaneFieldFocus() {
setPropertyPaneMaxFieldFocused(true);
}
function handleOnMaxLimitPropertyPaneFieldBlur() {
setPropertyPaneMaxFieldFocused(false);
}
function handleOnMinLimitPropertyPaneFieldFocus() {
setPropertyPaneMinFieldFocused(true);
}
function handleOnMinLimitPropertyPaneFieldBlur() {
setPropertyPaneMinFieldFocused(false);
}
useEffect(() => {
DynamicHeightCallbackHandler.add(
CallbackHandlerEventType.MAX_HEIGHT_LIMIT_FOCUS,
handleOnMaxLimitPropertyPaneFieldFocus,
);
DynamicHeightCallbackHandler.add(
CallbackHandlerEventType.MAX_HEIGHT_LIMIT_BLUR,
handleOnMaxLimitPropertyPaneFieldBlur,
);
DynamicHeightCallbackHandler.add(
CallbackHandlerEventType.MIN_HEIGHT_LIMIT_FOCUS,
handleOnMinLimitPropertyPaneFieldFocus,
);
DynamicHeightCallbackHandler.add(
CallbackHandlerEventType.MIN_HEIGHT_LIMIT_BLUR,
handleOnMinLimitPropertyPaneFieldBlur,
);
return () => {
DynamicHeightCallbackHandler.remove(
CallbackHandlerEventType.MAX_HEIGHT_LIMIT_FOCUS,
handleOnMaxLimitPropertyPaneFieldFocus,
);
DynamicHeightCallbackHandler.remove(
CallbackHandlerEventType.MAX_HEIGHT_LIMIT_BLUR,
handleOnMaxLimitPropertyPaneFieldBlur,
);
DynamicHeightCallbackHandler.remove(
CallbackHandlerEventType.MIN_HEIGHT_LIMIT_FOCUS,
handleOnMinLimitPropertyPaneFieldFocus,
);
DynamicHeightCallbackHandler.remove(
CallbackHandlerEventType.MIN_HEIGHT_LIMIT_BLUR,
handleOnMinLimitPropertyPaneFieldBlur,
);
};
}, []);
return {
isPropertyPaneMaxFieldFocused,
isPropertyPaneMinFieldFocused,
};
};

View File

@ -0,0 +1,396 @@
import { focusWidget } from "actions/widgetActions";
import React, {
CSSProperties,
memo,
useEffect,
useMemo,
useReducer,
} from "react";
import { useSelector } from "react-redux";
import { AppState } from "@appsmith/reducers";
import styled from "styled-components";
import {
useShowPropertyPane,
useShowTableFilterPane,
} from "utils/hooks/dragResizeHooks";
import { useWidgetSelection } from "utils/hooks/useWidgetSelection";
import { WidgetProps } from "widgets/BaseWidget";
import { GridDefaults, WidgetHeightLimits } from "constants/WidgetConstants";
import { getParentToOpenSelector } from "selectors/widgetSelectors";
import AutoHeightLimitHandleGroup from "./AutoHeightLimitHandleGroup";
import AutoHeightLimitOverlayDisplay from "./ui/AutoHeightLimitOverlayDisplay";
import { useHoverState, usePositionedStyles } from "./hooks";
import { getSnappedValues } from "./utils";
import { useAutoHeightUIState } from "utils/hooks/autoHeightUIHooks";
import { LayersContext } from "constants/Layers";
import {
AutoHeightOverlayUIStateReducer,
createInitialAutoHeightUIState,
} from "./store";
import { previewModeSelector } from "selectors/editorSelectors";
interface StyledAutoHeightOverlayProps {
layerIndex: number;
isHidden: boolean;
}
const StyledAutoHeightOverlay = styled.div<StyledAutoHeightOverlayProps>`
width: 100%;
height: 100%;
position: absolute;
z-index: ${(props) => props.layerIndex};
pointer-events: none;
display: ${(props) => (props.isHidden ? "none" : "block")};
`;
interface MinMaxHeightProps {
maxDynamicHeight: number;
minDynamicHeight: number;
}
interface AutoHeightOverlayContainerProps
extends MinMaxHeightProps,
WidgetProps {
batchUpdate: (height: number) => void;
onMaxHeightSet: (height: number) => void;
onMinHeightSet: (height: number) => void;
style?: CSSProperties;
}
interface AutoHeightOverlayProps extends AutoHeightOverlayContainerProps {
isHidden: boolean;
}
const AutoHeightOverlay: React.FC<AutoHeightOverlayProps> = memo(
({
batchUpdate,
isHidden,
maxDynamicHeight,
minDynamicHeight,
onMaxHeightSet,
onMinHeightSet,
style,
...props
}) => {
const showPropertyPane = useShowPropertyPane();
const { selectWidget } = useWidgetSelection();
const selectedWidget = useSelector(
(state: AppState) => state.ui.widgetDragResize.lastSelectedWidget,
);
const parentWidgetToSelect = useSelector(
getParentToOpenSelector(props.widgetId),
);
const showTableFilterPane = useShowTableFilterPane();
const {
isAutoHeightWithLimitsChanging,
setIsAutoHeightWithLimitsChanging,
} = useAutoHeightUIState();
const [autoHeightUIState, autoHeightUIStateDispatch] = useReducer(
AutoHeightOverlayUIStateReducer,
createInitialAutoHeightUIState({ maxDynamicHeight, minDynamicHeight }),
);
const {
isMaxDotDragging,
isMinDotDragging,
maxdY,
maxY,
mindY,
minY,
} = autoHeightUIState;
function setIsMaxDotDragging(isMaxDotDragging: boolean) {
autoHeightUIStateDispatch({
type: "SET_IS_MAX_DOT_DRAGGING",
payload: {
isMaxDotDragging,
},
});
}
function setIsMinDotDragging(isMinDotDragging: boolean) {
autoHeightUIStateDispatch({
type: "SET_IS_MIN_DOT_DRAGGING",
payload: {
isMinDotDragging,
},
});
}
function setMaxY(maxY: number) {
autoHeightUIStateDispatch({
type: "SET_MAX_Y",
payload: {
maxY,
},
});
}
function setMinY(minY: number) {
autoHeightUIStateDispatch({
type: "SET_MIN_Y",
payload: {
minY,
},
});
}
function setMaxdY(maxdY: number) {
autoHeightUIStateDispatch({
type: "SET_MAX_D_Y",
payload: {
maxdY,
},
});
}
function setMindY(mindY: number) {
autoHeightUIStateDispatch({
type: "SET_MIN_D_Y",
payload: {
mindY,
},
});
}
const finalMaxY = maxY + maxdY;
const finalMinY = minY + mindY;
useEffect(() => {
setMaxY(maxDynamicHeight * GridDefaults.DEFAULT_GRID_ROW_HEIGHT);
}, [maxDynamicHeight]);
function onAnyDotStop() {
// Tell the Canvas that we've stopped resizing
// Put it later in the stack so that other updates like click, are not propagated to the parent container
setTimeout(() => {
setIsAutoHeightWithLimitsChanging &&
setIsAutoHeightWithLimitsChanging(false);
}, 0);
selectWidget && selectWidget(props.widgetId);
if (parentWidgetToSelect) {
selectWidget &&
selectedWidget !== parentWidgetToSelect.widgetId &&
selectWidget(parentWidgetToSelect.widgetId);
focusWidget(parentWidgetToSelect.widgetId);
} else {
selectWidget &&
selectedWidget !== props.widgetId &&
selectWidget(props.widgetId);
}
// Property pane closes after a resize/drag
showPropertyPane && showPropertyPane();
}
function onMaxUpdate(dx: number, dy: number) {
if (
maxY + dy <=
WidgetHeightLimits.MIN_HEIGHT_IN_ROWS *
GridDefaults.DEFAULT_GRID_ROW_HEIGHT
) {
return;
}
const snapped = getSnappedValues(dx, dy, snapGrid);
if (maxY + snapped.y <= minY) {
setMindY(snapped.y + (maxY - minY));
}
setMaxdY(snapped.y);
}
function updateMaxHeight(height: number) {
setMaxY(height);
onMaxHeightSet(height);
}
function updateMinHeight(height: number) {
setMinY(height);
onMinHeightSet(height);
}
function onMaxStop() {
setIsMaxDotDragging(false);
const heightToSet = maxY + maxdY;
if (heightToSet === minY + mindY) {
batchUpdate(heightToSet);
setMindY(0);
setMaxdY(0);
} else {
updateMaxHeight(heightToSet);
setMaxdY(0);
}
onAnyDotStop();
}
useEffect(() => {
setMinY(minDynamicHeight * GridDefaults.DEFAULT_GRID_ROW_HEIGHT);
}, [minDynamicHeight]);
function onMinUpdate(dx: number, dy: number) {
if (
minY + dy <=
WidgetHeightLimits.MIN_HEIGHT_IN_ROWS *
GridDefaults.DEFAULT_GRID_ROW_HEIGHT
) {
return;
}
const snapped = getSnappedValues(dx, dy, snapGrid);
if (minY + snapped.y >= maxY) {
setMaxdY(snapped.y - (maxY - minY));
}
setMindY(snapped.y);
}
function onMinStop() {
setIsMinDotDragging(false);
const heightToSet = minY + mindY;
if (heightToSet === maxY + maxdY) {
batchUpdate(heightToSet);
setMindY(0);
setMaxdY(0);
} else {
updateMinHeight(heightToSet);
setMindY(0);
}
onAnyDotStop();
}
function onMinDotStart() {
setIsMinDotDragging(true);
onAnyDotStart();
}
function onAnyDotStart() {
setIsAutoHeightWithLimitsChanging &&
!isAutoHeightWithLimitsChanging &&
setIsAutoHeightWithLimitsChanging(true);
selectWidget &&
selectedWidget !== props.widgetId &&
selectWidget(props.widgetId);
// Make sure that this tableFilterPane should close
showTableFilterPane && showTableFilterPane();
}
function onMaxDotStart() {
setIsMaxDotDragging(true);
onAnyDotStart();
}
const [isMinDotActive, minHoverFns] = useHoverState();
const [isMaxDotActive, maxHoverFns] = useHoverState();
const snapGrid = useMemo(
() => ({
x: props.parentColumnSpace,
y: props.parentRowSpace,
}),
[props.parentColumnSpace, props.parentRowSpace],
);
const {
bottomRow,
leftColumn,
noContainerOffset,
parentColumnSpace,
parentRowSpace,
rightColumn,
topRow,
} = props;
const styles = usePositionedStyles({
bottomRow,
leftColumn,
noContainerOffset,
parentColumnSpace,
parentRowSpace,
rightColumn,
topRow,
});
const { autoHeightWithLimitsOverlay } = React.useContext(LayersContext);
return (
<StyledAutoHeightOverlay
isHidden={isHidden}
layerIndex={autoHeightWithLimitsOverlay}
onClick={(e) => {
// avoid DropTarget handleFocus
e.stopPropagation();
}}
style={style ?? styles}
>
<AutoHeightLimitOverlayDisplay
data-cy="t--auto-height-overlay-min"
height={finalMinY}
isActive={isMinDotDragging || isMinDotActive}
/>
<AutoHeightLimitOverlayDisplay
data-cy="t--auto-height-overlay-max"
height={finalMaxY}
isActive={isMaxDotDragging || isMaxDotActive}
/>
<AutoHeightLimitHandleGroup
isMaxDotActive={isMaxDotDragging || isMaxDotActive}
isMaxDotDragging={isMaxDotDragging}
isMinDotActive={isMinDotDragging || isMinDotActive}
isMinDotDragging={isMinDotDragging}
maxY={finalMaxY}
minY={finalMinY}
onMaxHeightSet={onMaxHeightSet}
onMaxLimitDragCallbacks={{
onUpdate: onMaxUpdate,
onStop: onMaxStop,
onStart: onMaxDotStart,
}}
onMaxLimitMouseHoverCallbacks={maxHoverFns}
onMinHeightSet={onMinHeightSet}
onMinLimitDragCallbacks={{
onUpdate: onMinUpdate,
onStop: onMinStop,
onStart: onMinDotStart,
}}
onMinLimitMouseHoverCallbacks={minHoverFns}
/>
</StyledAutoHeightOverlay>
);
},
);
const AutoHeightOverlayContainer: React.FC<AutoHeightOverlayContainerProps> = memo(
(props) => {
const widgetId = props.widgetId;
const {
isDragging,
isResizing,
lastSelectedWidget: selectedWidget,
selectedWidgets,
} = useSelector((state: AppState) => state.ui.widgetDragResize);
const isPreviewMode = useSelector(previewModeSelector);
const isWidgetSelected = selectedWidget === widgetId;
const multipleWidgetsSelected = selectedWidgets.length > 1;
const isHidden = multipleWidgetsSelected || isDragging || isResizing;
if (isWidgetSelected && !isPreviewMode) {
return <AutoHeightOverlay isHidden={isHidden} {...props} />;
}
return null;
},
);
export default AutoHeightOverlayContainer;

View File

@ -0,0 +1,100 @@
import { GridDefaults } from "constants/WidgetConstants";
interface AutoHeightLimitsUIState {
isMaxDotDragging: boolean;
isMinDotDragging: boolean;
maxY: number; // the actual value
maxdY: number; // the difference during dragging
minY: number; // the actual value
mindY: number; // the difference during dragging
}
type SET_MAX_Y = { type: "SET_MAX_Y"; payload: { maxY: number } };
type SET_MIN_Y = { type: "SET_MIN_Y"; payload: { minY: number } };
type SET_MAX_D_Y = { type: "SET_MAX_D_Y"; payload: { maxdY: number } };
type SET_MIN_D_Y = { type: "SET_MIN_D_Y"; payload: { mindY: number } };
type SET_IS_MIN_DOT_DRAGGING = {
type: "SET_IS_MIN_DOT_DRAGGING";
payload: { isMinDotDragging: boolean };
};
type SET_IS_MAX_DOT_DRAGGING = {
type: "SET_IS_MAX_DOT_DRAGGING";
payload: { isMaxDotDragging: boolean };
};
type AutoHeightLimitsUIAction =
| SET_MAX_Y
| SET_MIN_Y
| SET_MAX_D_Y
| SET_MIN_D_Y
| SET_IS_MIN_DOT_DRAGGING
| SET_IS_MAX_DOT_DRAGGING;
export function AutoHeightOverlayUIStateReducer(
state: AutoHeightLimitsUIState,
action: AutoHeightLimitsUIAction,
) {
if (action.type === "SET_IS_MAX_DOT_DRAGGING") {
return {
...state,
isMaxDotDragging: action.payload.isMaxDotDragging,
};
}
if (action.type === "SET_IS_MIN_DOT_DRAGGING") {
return {
...state,
isMinDotDragging: action.payload.isMinDotDragging,
};
}
if (action.type === "SET_MAX_Y") {
return {
...state,
maxY: action.payload.maxY,
};
}
if (action.type === "SET_MIN_Y") {
return {
...state,
minY: action.payload.minY,
};
}
if (action.type === "SET_MAX_D_Y") {
return {
...state,
maxdY: action.payload.maxdY,
};
}
if (action.type === "SET_MIN_D_Y") {
return {
...state,
mindY: action.payload.mindY,
};
}
return state;
}
interface CreateInitialAutoHeightUIStateProps {
maxDynamicHeight: number;
minDynamicHeight: number;
}
export function createInitialAutoHeightUIState({
maxDynamicHeight,
minDynamicHeight,
}: CreateInitialAutoHeightUIStateProps) {
return {
isMinDotDragging: false,
isMaxDotDragging: false,
maxY: maxDynamicHeight * GridDefaults.DEFAULT_GRID_ROW_HEIGHT, // the actual value
maxdY: 0, // the difference during dragging
minY: minDynamicHeight * GridDefaults.DEFAULT_GRID_ROW_HEIGHT, // the actual value
mindY: 0, // the difference during dragging
};
}

View File

@ -0,0 +1,10 @@
export interface onDragCallbacksProps {
onStart: () => void;
onStop: () => void;
onUpdate: (x: number, y: number) => void;
}
export interface onMouseHoverCallbacksProps {
onMouseEnter: () => void;
onMouseLeave: () => void;
}

View File

@ -0,0 +1,22 @@
import React from "react";
import "@testing-library/jest-dom";
import AutoHeightLimitHandleBorder from "./AutoHeightLimitHandleBorder";
import "jest-styled-components";
import renderer from "react-test-renderer";
import { OVERLAY_COLOR } from "../constants";
describe("<AutoHeightLimitHandleBorder />", () => {
it("should have background-color style set to OVERLAY_COLOR when isActive is true", () => {
const tree = renderer
.create(<AutoHeightLimitHandleBorder isActive />)
.toJSON();
expect(tree).toHaveStyleRule("background-color", OVERLAY_COLOR);
});
it("should have background-color style set to undefined when isActive is false", () => {
const tree = renderer
.create(<AutoHeightLimitHandleBorder isActive={false} />)
.toJSON();
expect(tree).toHaveStyleRule("background-color");
});
});

View File

@ -0,0 +1,24 @@
import styled from "styled-components";
import { OVERLAY_COLOR } from "../constants";
interface AutoHeightLimitHandleBorderProps {
isActive: boolean;
}
const AutoHeightLimitHandleBorder = styled.div<
AutoHeightLimitHandleBorderProps
>`
background-image: linear-gradient(
to right,
${OVERLAY_COLOR} 50%,
rgba(255, 255, 255, 0) 0%
);
background-size: 8% 1px;
background-repeat: repeat-x;
height: 1px;
width: 100%;
${(props) => (props.isActive ? `background-color: ${OVERLAY_COLOR}` : "")}
`;
export default AutoHeightLimitHandleBorder;

View File

@ -0,0 +1,22 @@
import React from "react";
import "@testing-library/jest-dom";
import AutoHeightLimitHandleDot from "./AutoHeightLimitHandleDot";
import "jest-styled-components";
import renderer from "react-test-renderer";
import { OVERLAY_COLOR } from "../constants";
describe("<AutoHeightLimitHandleDot />", () => {
it("should have scale style set to 1 when isDragging is false", () => {
const tree = renderer
.create(<AutoHeightLimitHandleDot isDragging={false} />)
.toJSON();
expect(tree).toHaveStyleRule("transform", "translateX(-50%) scale( 1 )");
});
it("should have scale style set to 1.67 when isDragging is true", () => {
const tree = renderer
.create(<AutoHeightLimitHandleDot isDragging />)
.toJSON();
expect(tree).toHaveStyleRule("transform", "translateX(-50%) scale( 1.67 )");
});
});

View File

@ -0,0 +1,23 @@
import styled from "styled-components";
import { OVERLAY_COLOR, OVERLAY_HANDLE_DOT_DRAGGING_SCALE } from "../constants";
interface AutoHeightLimitHandleDotProps {
isDragging: boolean;
}
const AutoHeightLimitHandleDot = styled.div<AutoHeightLimitHandleDotProps>`
position: absolute;
left: 50%;
border-radius: 50%;
width: 7px;
height: 7px;
transform: translateX(-50%)
scale(
${(props) => (props.isDragging ? OVERLAY_HANDLE_DOT_DRAGGING_SCALE : "1")}
);
border: 1px solid ${OVERLAY_COLOR};
background-color: ${OVERLAY_COLOR};
box-shadow: 0px 0px 0px 2px white;
`;
export default AutoHeightLimitHandleDot;

View File

@ -0,0 +1,21 @@
import React from "react";
import "@testing-library/jest-dom";
import AutoHeightLimitHandleLabel from "./AutoHeightLimitHandleLabel";
import "jest-styled-components";
import renderer from "react-test-renderer";
describe("<AutoHeightLimitHandleLabel />", () => {
it("should have display none when isActive is false", () => {
const tree = renderer
.create(<AutoHeightLimitHandleLabel isActive={false} />)
.toJSON();
expect(tree).toHaveStyleRule("display", "none");
});
it("should have display initial when isActive is true", () => {
const tree = renderer
.create(<AutoHeightLimitHandleLabel isActive />)
.toJSON();
expect(tree).toHaveStyleRule("display", "initial");
});
});

View File

@ -0,0 +1,23 @@
import styled from "styled-components";
interface AutoHeightLimitHandleLabel {
isActive: boolean;
}
const AutoHeightLimitHandleLabel = styled.div<AutoHeightLimitHandleLabel>`
position: absolute;
pointer-events: none;
padding: 1px 4px;
background: #191919;
font-weight: 400;
font-size: 10px;
line-height: 16px;
color: #ffffff;
text-align: center;
white-space: nowrap;
left: 0px;
transform: translate(calc(-100% - 4px), -2px);
display: ${(props) => (props.isActive ? "initial" : "none")};
`;
export default AutoHeightLimitHandleLabel;

View File

@ -0,0 +1,28 @@
import React from "react";
import "@testing-library/jest-dom";
import AutoHeightLimitOverlayDisplay from "./AutoHeightLimitOverlayDisplay";
import "jest-styled-components";
import renderer from "react-test-renderer";
describe("<AutoHeightLimitOverlayDisplay />", () => {
it("should have display none when isActive is false", () => {
const tree = renderer
.create(<AutoHeightLimitOverlayDisplay height={0} isActive={false} />)
.toJSON();
expect(tree).toHaveStyleRule("display", "none");
});
it("should have display block when isActive is true", () => {
const tree = renderer
.create(<AutoHeightLimitOverlayDisplay height={0} isActive />)
.toJSON();
expect(tree).toHaveStyleRule("display", "block");
});
it("should have height style equal to the height passed in props", () => {
const tree = renderer
.create(<AutoHeightLimitOverlayDisplay height={10} isActive />)
.toJSON();
expect(tree).toHaveStyleRule("height", "10px");
});
});

View File

@ -0,0 +1,20 @@
import styled from "styled-components";
interface AutoHeightLimitOverlayDisplayProps {
isActive: boolean;
height: number;
}
const AutoHeightLimitOverlayDisplay = styled.div<
AutoHeightLimitOverlayDisplayProps
>`
display: ${(props) => (props.isActive ? "block" : "none")};
position: absolute;
top: 0;
left: 0;
width: 100%;
height: ${(props) => props.height}px;
background-color: rgba(243, 43, 139, 0.1);
`;
export default AutoHeightLimitOverlayDisplay;

View File

@ -0,0 +1,15 @@
import { GridDefaults } from "constants/WidgetConstants";
export const heightToRows = (height: number) =>
Math.floor(height / GridDefaults.DEFAULT_GRID_ROW_HEIGHT);
export const getSnappedValues = (
x: number,
y: number,
snapGrid: { x: number; y: number },
) => {
return {
x: Math.round(x / snapGrid.x) * snapGrid.x,
y: Math.round(y / snapGrid.y) * snapGrid.y,
};
};

View File

@ -4,7 +4,7 @@ import {
FieldWrapper,
} from "components/propertyControls/StyledControls";
import { InputText } from "components/propertyControls/InputTextControl";
import { AutocompleteDataType } from "utils/autocomplete/TernServer";
import { AutocompleteDataType } from "utils/autocomplete/CodemirrorTernService";
import React from "react";
export function TextView(props: TextViewProps) {

View File

@ -1,5 +1,5 @@
import React, { memo } from "react";
import { useDispatch } from "react-redux";
import { useDispatch, useSelector } from "react-redux";
import styled from "styled-components";
import { generateReactKey } from "utils/generators";
import { Collapsible } from ".";
@ -14,7 +14,6 @@ import {
} from "@appsmith/constants/messages";
import { SuggestedWidget } from "api/ActionAPI";
import { useSelector } from "store";
import { getDataTree } from "selectors/dataTreeSelectors";
import { getWidgets } from "sagas/selectors";
import { getNextWidgetName } from "sagas/WidgetOperationUtils";

View File

@ -1,7 +1,7 @@
import CodeMirror from "codemirror";
import { DataTree, ENTITY_TYPE } from "entities/DataTree/dataTreeFactory";
import { AdditionalDynamicDataTree } from "utils/autocomplete/customTreeTypeDefCreator";
import { AutocompleteDataType } from "utils/autocomplete/TernServer";
import { AutocompleteDataType } from "utils/autocomplete/CodemirrorTernService";
export enum EditorModes {
TEXT = "text/plain",

View File

@ -3,7 +3,7 @@ import { HintHelper } from "components/editorComponents/CodeEditor/EditorConfig"
import {
AutocompleteDataType,
CommandsCompletion,
} from "utils/autocomplete/TernServer";
} from "utils/autocomplete/CodemirrorTernService";
import { generateQuickCommands } from "./generateQuickCommands";
import { Datasource } from "entities/Datasource";
import AnalyticsUtil from "utils/AnalyticsUtil";

View File

@ -3,7 +3,7 @@ import React from "react";
import {
AutocompleteDataType,
CommandsCompletion,
} from "utils/autocomplete/TernServer";
} from "utils/autocomplete/CodemirrorTernService";
import ReactDOM from "react-dom";
import sortBy from "lodash/sortBy";
import { PluginType, SlashCommand, SlashCommandPayload } from "entities/Action";

View File

@ -1,5 +1,5 @@
import CodeMirror from "codemirror";
import TernServer from "utils/autocomplete/TernServer";
import CodemirrorTernService from "utils/autocomplete/CodemirrorTernService";
import KeyboardShortcuts from "constants/KeyboardShortcuts";
import { HintHelper } from "components/editorComponents/CodeEditor/EditorConfig";
import AnalyticsUtil from "utils/AnalyticsUtil";
@ -11,12 +11,12 @@ export const bindingHint: HintHelper = (editor) => {
// @ts-expect-error: Types are not available
...editor.options.extraKeys,
[KeyboardShortcuts.CodeEditor.OpenAutocomplete]: (cm: CodeMirror.Editor) =>
checkIfCursorInsideBinding(cm) && TernServer.complete(cm),
checkIfCursorInsideBinding(cm) && CodemirrorTernService.complete(cm),
[KeyboardShortcuts.CodeEditor.ShowTypeAndInfo]: (cm: CodeMirror.Editor) => {
TernServer.showType(cm);
CodemirrorTernService.showType(cm);
},
[KeyboardShortcuts.CodeEditor.OpenDocsLink]: (cm: CodeMirror.Editor) => {
TernServer.showDocs(cm);
CodemirrorTernService.showDocs(cm);
},
});
return {
@ -26,12 +26,12 @@ export const bindingHint: HintHelper = (editor) => {
additionalData,
): boolean => {
if (additionalData && additionalData.blockCompletions) {
TernServer.setEntityInformation({
CodemirrorTernService.setEntityInformation({
...entityInformation,
blockCompletions: additionalData.blockCompletions,
});
} else {
TernServer.setEntityInformation(entityInformation);
CodemirrorTernService.setEntityInformation(entityInformation);
}
const entityType = entityInformation?.entityType;
@ -43,7 +43,7 @@ export const bindingHint: HintHelper = (editor) => {
}
if (shouldShow) {
AnalyticsUtil.logEvent("AUTO_COMPLETE_SHOW", {});
TernServer.complete(editor);
CodemirrorTernService.complete(editor);
return true;
}
// @ts-expect-error: Types are not available

Some files were not shown because too many files have changed in this diff Show More