2023-03-04 07:25:54 +00:00
import { Alignment } from "@blueprintjs/core" ;
import { LabelPosition } from "components/constants" ;
2022-02-02 14:15:07 +00:00
import { EventType } from "constants/AppsmithActionConstants/ActionConstants" ;
chore: upgrade to prettier v2 + enforce import types (#21013)Co-authored-by: Satish Gandham <hello@satishgandham.com> Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
## Description
This PR upgrades Prettier to v2 + enforces TypeScript’s [`import
type`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export)
syntax where applicable. It’s submitted as a separate PR so we can merge
it easily.
As a part of this PR, we reformat the codebase heavily:
- add `import type` everywhere where it’s required, and
- re-format the code to account for Prettier 2’s breaking changes:
https://prettier.io/blog/2020/03/21/2.0.0.html#breaking-changes
This PR is submitted against `release` to make sure all new code by team
members will adhere to new formatting standards, and we’ll have fewer
conflicts when merging `bundle-optimizations` into `release`. (I’ll
merge `release` back into `bundle-optimizations` once this PR is
merged.)
### Why is this needed?
This PR is needed because, for the Lodash optimization from
https://github.com/appsmithorg/appsmith/commit/7cbb12af886621256224be0c93e6a465dd710ad3,
we need to use `import type`. Otherwise, `babel-plugin-lodash` complains
that `LoDashStatic` is not a lodash function.
However, just using `import type` in the current codebase will give you
this:
<img width="962" alt="Screenshot 2023-03-08 at 17 45 59"
src="https://user-images.githubusercontent.com/2953267/223775744-407afa0c-e8b9-44a1-90f9-b879348da57f.png">
That’s because Prettier 1 can’t parse `import type` at all. To parse it,
we need to upgrade to Prettier 2.
### Why enforce `import type`?
Apart from just enabling `import type` support, this PR enforces
specifying `import type` everywhere it’s needed. (Developers will get
immediate TypeScript and ESLint errors when they forget to do so.)
I’m doing this because I believe `import type` improves DX and makes
refactorings easier.
Let’s say you had a few imports like below. Can you tell which of these
imports will increase the bundle size? (Tip: it’s not all of them!)
```ts
// app/client/src/workers/Linting/utils.ts
import { Position } from "codemirror";
import { LintError as JSHintError, LintOptions } from "jshint";
import { get, isEmpty, isNumber, keys, last, set } from "lodash";
```
It’s pretty hard, right?
What about now?
```ts
// app/client/src/workers/Linting/utils.ts
import type { Position } from "codemirror";
import type { LintError as JSHintError, LintOptions } from "jshint";
import { get, isEmpty, isNumber, keys, last, set } from "lodash";
```
Now, it’s clear that only `lodash` will be bundled.
This helps developers to see which imports are problematic, but it
_also_ helps with refactorings. Now, if you want to see where
`codemirror` is bundled, you can just grep for `import \{.*\} from
"codemirror"` – and you won’t get any type-only imports.
This also helps (some) bundlers. Upon transpiling, TypeScript erases
type-only imports completely. In some environment (not ours), this makes
the bundle smaller, as the bundler doesn’t need to bundle type-only
imports anymore.
## Type of change
- Chore (housekeeping or task changes that don't impact user perception)
## How Has This Been Tested?
This was tested to not break the build.
### Test Plan
> Add Testsmith test cases links that relate to this PR
### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)
## Checklist:
### Dev activity
- [x] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag
### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
---------
Co-authored-by: Satish Gandham <hello@satishgandham.com>
Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
2023-03-16 11:41:47 +00:00
import type { WidgetType } from "constants/WidgetConstants" ;
import type { ValidationResponse } from "constants/WidgetValidation" ;
import { ValidationTypes } from "constants/WidgetValidation" ;
import type { Stylesheet } from "entities/AppTheming" ;
2022-02-02 14:15:07 +00:00
import { EvaluationSubstitutionType } from "entities/DataTree/dataTreeFactory" ;
2023-03-04 07:25:54 +00:00
import equal from "fast-deep-equal/es6" ;
chore: upgrade to prettier v2 + enforce import types (#21013)Co-authored-by: Satish Gandham <hello@satishgandham.com> Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
## Description
This PR upgrades Prettier to v2 + enforces TypeScript’s [`import
type`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export)
syntax where applicable. It’s submitted as a separate PR so we can merge
it easily.
As a part of this PR, we reformat the codebase heavily:
- add `import type` everywhere where it’s required, and
- re-format the code to account for Prettier 2’s breaking changes:
https://prettier.io/blog/2020/03/21/2.0.0.html#breaking-changes
This PR is submitted against `release` to make sure all new code by team
members will adhere to new formatting standards, and we’ll have fewer
conflicts when merging `bundle-optimizations` into `release`. (I’ll
merge `release` back into `bundle-optimizations` once this PR is
merged.)
### Why is this needed?
This PR is needed because, for the Lodash optimization from
https://github.com/appsmithorg/appsmith/commit/7cbb12af886621256224be0c93e6a465dd710ad3,
we need to use `import type`. Otherwise, `babel-plugin-lodash` complains
that `LoDashStatic` is not a lodash function.
However, just using `import type` in the current codebase will give you
this:
<img width="962" alt="Screenshot 2023-03-08 at 17 45 59"
src="https://user-images.githubusercontent.com/2953267/223775744-407afa0c-e8b9-44a1-90f9-b879348da57f.png">
That’s because Prettier 1 can’t parse `import type` at all. To parse it,
we need to upgrade to Prettier 2.
### Why enforce `import type`?
Apart from just enabling `import type` support, this PR enforces
specifying `import type` everywhere it’s needed. (Developers will get
immediate TypeScript and ESLint errors when they forget to do so.)
I’m doing this because I believe `import type` improves DX and makes
refactorings easier.
Let’s say you had a few imports like below. Can you tell which of these
imports will increase the bundle size? (Tip: it’s not all of them!)
```ts
// app/client/src/workers/Linting/utils.ts
import { Position } from "codemirror";
import { LintError as JSHintError, LintOptions } from "jshint";
import { get, isEmpty, isNumber, keys, last, set } from "lodash";
```
It’s pretty hard, right?
What about now?
```ts
// app/client/src/workers/Linting/utils.ts
import type { Position } from "codemirror";
import type { LintError as JSHintError, LintOptions } from "jshint";
import { get, isEmpty, isNumber, keys, last, set } from "lodash";
```
Now, it’s clear that only `lodash` will be bundled.
This helps developers to see which imports are problematic, but it
_also_ helps with refactorings. Now, if you want to see where
`codemirror` is bundled, you can just grep for `import \{.*\} from
"codemirror"` – and you won’t get any type-only imports.
This also helps (some) bundlers. Upon transpiling, TypeScript erases
type-only imports completely. In some environment (not ours), this makes
the bundle smaller, as the bundler doesn’t need to bundle type-only
imports anymore.
## Type of change
- Chore (housekeeping or task changes that don't impact user perception)
## How Has This Been Tested?
This was tested to not break the build.
### Test Plan
> Add Testsmith test cases links that relate to this PR
### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)
## Checklist:
### Dev activity
- [x] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag
### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
---------
Co-authored-by: Satish Gandham <hello@satishgandham.com>
Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
2023-03-16 11:41:47 +00:00
import type { LoDashStatic } from "lodash" ;
import { findIndex , isArray , isNil , isNumber , isString } from "lodash" ;
2023-03-04 07:25:54 +00:00
import React from "react" ;
2023-05-11 05:26:03 +00:00
import { AutocompleteDataType } from "utils/autocomplete/AutocompleteDataType" ;
2023-04-07 13:51:35 +00:00
import { isAutoLayout } from "utils/autoLayout/flexWidgetUtils" ;
2023-03-04 07:25:54 +00:00
import { GRID_DENSITY_MIGRATION_V1 , MinimumPopupRows } from "widgets/constants" ;
2023-04-14 06:27:49 +00:00
import {
isAutoHeightEnabledForWidget ,
DefaultAutocompleteDefinitions ,
} from "widgets/WidgetUtils" ;
chore: upgrade to prettier v2 + enforce import types (#21013)Co-authored-by: Satish Gandham <hello@satishgandham.com> Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
## Description
This PR upgrades Prettier to v2 + enforces TypeScript’s [`import
type`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export)
syntax where applicable. It’s submitted as a separate PR so we can merge
it easily.
As a part of this PR, we reformat the codebase heavily:
- add `import type` everywhere where it’s required, and
- re-format the code to account for Prettier 2’s breaking changes:
https://prettier.io/blog/2020/03/21/2.0.0.html#breaking-changes
This PR is submitted against `release` to make sure all new code by team
members will adhere to new formatting standards, and we’ll have fewer
conflicts when merging `bundle-optimizations` into `release`. (I’ll
merge `release` back into `bundle-optimizations` once this PR is
merged.)
### Why is this needed?
This PR is needed because, for the Lodash optimization from
https://github.com/appsmithorg/appsmith/commit/7cbb12af886621256224be0c93e6a465dd710ad3,
we need to use `import type`. Otherwise, `babel-plugin-lodash` complains
that `LoDashStatic` is not a lodash function.
However, just using `import type` in the current codebase will give you
this:
<img width="962" alt="Screenshot 2023-03-08 at 17 45 59"
src="https://user-images.githubusercontent.com/2953267/223775744-407afa0c-e8b9-44a1-90f9-b879348da57f.png">
That’s because Prettier 1 can’t parse `import type` at all. To parse it,
we need to upgrade to Prettier 2.
### Why enforce `import type`?
Apart from just enabling `import type` support, this PR enforces
specifying `import type` everywhere it’s needed. (Developers will get
immediate TypeScript and ESLint errors when they forget to do so.)
I’m doing this because I believe `import type` improves DX and makes
refactorings easier.
Let’s say you had a few imports like below. Can you tell which of these
imports will increase the bundle size? (Tip: it’s not all of them!)
```ts
// app/client/src/workers/Linting/utils.ts
import { Position } from "codemirror";
import { LintError as JSHintError, LintOptions } from "jshint";
import { get, isEmpty, isNumber, keys, last, set } from "lodash";
```
It’s pretty hard, right?
What about now?
```ts
// app/client/src/workers/Linting/utils.ts
import type { Position } from "codemirror";
import type { LintError as JSHintError, LintOptions } from "jshint";
import { get, isEmpty, isNumber, keys, last, set } from "lodash";
```
Now, it’s clear that only `lodash` will be bundled.
This helps developers to see which imports are problematic, but it
_also_ helps with refactorings. Now, if you want to see where
`codemirror` is bundled, you can just grep for `import \{.*\} from
"codemirror"` – and you won’t get any type-only imports.
This also helps (some) bundlers. Upon transpiling, TypeScript erases
type-only imports completely. In some environment (not ours), this makes
the bundle smaller, as the bundler doesn’t need to bundle type-only
imports anymore.
## Type of change
- Chore (housekeeping or task changes that don't impact user perception)
## How Has This Been Tested?
This was tested to not break the build.
### Test Plan
> Add Testsmith test cases links that relate to this PR
### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)
## Checklist:
### Dev activity
- [x] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag
### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
---------
Co-authored-by: Satish Gandham <hello@satishgandham.com>
Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
2023-03-16 11:41:47 +00:00
import type { WidgetProps , WidgetState } from "../../BaseWidget" ;
import BaseWidget from "../../BaseWidget" ;
2023-03-04 07:25:54 +00:00
import SelectComponent from "../component" ;
chore: upgrade to prettier v2 + enforce import types (#21013)Co-authored-by: Satish Gandham <hello@satishgandham.com> Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
## Description
This PR upgrades Prettier to v2 + enforces TypeScript’s [`import
type`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export)
syntax where applicable. It’s submitted as a separate PR so we can merge
it easily.
As a part of this PR, we reformat the codebase heavily:
- add `import type` everywhere where it’s required, and
- re-format the code to account for Prettier 2’s breaking changes:
https://prettier.io/blog/2020/03/21/2.0.0.html#breaking-changes
This PR is submitted against `release` to make sure all new code by team
members will adhere to new formatting standards, and we’ll have fewer
conflicts when merging `bundle-optimizations` into `release`. (I’ll
merge `release` back into `bundle-optimizations` once this PR is
merged.)
### Why is this needed?
This PR is needed because, for the Lodash optimization from
https://github.com/appsmithorg/appsmith/commit/7cbb12af886621256224be0c93e6a465dd710ad3,
we need to use `import type`. Otherwise, `babel-plugin-lodash` complains
that `LoDashStatic` is not a lodash function.
However, just using `import type` in the current codebase will give you
this:
<img width="962" alt="Screenshot 2023-03-08 at 17 45 59"
src="https://user-images.githubusercontent.com/2953267/223775744-407afa0c-e8b9-44a1-90f9-b879348da57f.png">
That’s because Prettier 1 can’t parse `import type` at all. To parse it,
we need to upgrade to Prettier 2.
### Why enforce `import type`?
Apart from just enabling `import type` support, this PR enforces
specifying `import type` everywhere it’s needed. (Developers will get
immediate TypeScript and ESLint errors when they forget to do so.)
I’m doing this because I believe `import type` improves DX and makes
refactorings easier.
Let’s say you had a few imports like below. Can you tell which of these
imports will increase the bundle size? (Tip: it’s not all of them!)
```ts
// app/client/src/workers/Linting/utils.ts
import { Position } from "codemirror";
import { LintError as JSHintError, LintOptions } from "jshint";
import { get, isEmpty, isNumber, keys, last, set } from "lodash";
```
It’s pretty hard, right?
What about now?
```ts
// app/client/src/workers/Linting/utils.ts
import type { Position } from "codemirror";
import type { LintError as JSHintError, LintOptions } from "jshint";
import { get, isEmpty, isNumber, keys, last, set } from "lodash";
```
Now, it’s clear that only `lodash` will be bundled.
This helps developers to see which imports are problematic, but it
_also_ helps with refactorings. Now, if you want to see where
`codemirror` is bundled, you can just grep for `import \{.*\} from
"codemirror"` – and you won’t get any type-only imports.
This also helps (some) bundlers. Upon transpiling, TypeScript erases
type-only imports completely. In some environment (not ours), this makes
the bundle smaller, as the bundler doesn’t need to bundle type-only
imports anymore.
## Type of change
- Chore (housekeeping or task changes that don't impact user perception)
## How Has This Been Tested?
This was tested to not break the build.
### Test Plan
> Add Testsmith test cases links that relate to this PR
### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)
## Checklist:
### Dev activity
- [x] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag
### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
---------
Co-authored-by: Satish Gandham <hello@satishgandham.com>
Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
2023-03-16 11:41:47 +00:00
import type { DropdownOption } from "../constants" ;
2022-08-01 05:02:48 +00:00
import derivedProperties from "./parseDerivedProperties" ;
2023-04-14 06:27:49 +00:00
import type { AutocompletionDefinitions } from "widgets/constants" ;
2022-02-22 08:43:35 +00:00
export function defaultOptionValueValidation (
value : unknown ,
props : SelectWidgetProps ,
2022-03-29 07:07:01 +00:00
_ : LoDashStatic ,
2022-02-22 08:43:35 +00:00
) : ValidationResponse {
let isValid ;
let parsed ;
2023-02-18 12:55:46 +00:00
let message = { name : "" , message : "" } ;
2022-08-01 05:02:48 +00:00
const isServerSideFiltered = props . serverSideFiltering ;
// TODO: validation of defaultOption is dependent on serverSideFiltering and options, this property should reValidated once the dependencies change
//this issue is been tracked here https://github.com/appsmithorg/appsmith/issues/15303
2022-08-11 04:32:55 +00:00
let options = props . options ;
2022-02-22 08:43:35 +00:00
/ *
* Function to check if the object has ` label ` and ` value `
* /
const hasLabelValue = ( obj : any ) = > {
return (
_ . isPlainObject ( value ) &&
obj . hasOwnProperty ( "label" ) &&
obj . hasOwnProperty ( "value" ) &&
_ . isString ( obj . label ) &&
( _ . isString ( obj . value ) || _ . isFinite ( obj . value ) )
) ;
} ;
/ *
* When value is "{label: 'green', value: 'green'}"
* /
if ( typeof value === "string" ) {
try {
2022-03-29 07:07:01 +00:00
const parsedValue = JSON . parse ( value ) ;
if ( _ . isObject ( parsedValue ) ) {
value = parsedValue ;
}
2022-02-22 08:43:35 +00:00
} catch ( e ) { }
}
if ( _ . isString ( value ) || _ . isFinite ( value ) || hasLabelValue ( value ) ) {
/ *
* When value is "" , "green" , 444 , { label : "green" , value : "green" }
* /
isValid = true ;
parsed = value ;
} else {
isValid = false ;
2022-08-01 05:02:48 +00:00
parsed = undefined ;
2023-02-18 12:55:46 +00:00
message = {
name : "TypeError" ,
message :
'value does not evaluate to type: string | number | { "label": "label1", "value": "value1" }' ,
} ;
2022-02-22 08:43:35 +00:00
}
2022-08-01 05:02:48 +00:00
if ( isValid && ! _ . isNil ( parsed ) && parsed !== "" ) {
2022-08-11 04:32:55 +00:00
if ( ! Array . isArray ( options ) && typeof options === "string" ) {
try {
const parsedOptions = JSON . parse ( options ) ;
if ( Array . isArray ( parsedOptions ) ) {
options = parsedOptions ;
} else {
options = [ ] ;
}
} catch ( e ) {
options = [ ] ;
}
}
2022-08-01 05:02:48 +00:00
const parsedValue = ( parsed as any ) . hasOwnProperty ( "value" )
? ( parsed as any ) . value
: parsed ;
const valueIndex = _ . findIndex (
options ,
( option ) = > option . value === parsedValue ,
) ;
if ( valueIndex === - 1 ) {
if ( ! isServerSideFiltered ) {
isValid = false ;
2023-02-18 12:55:46 +00:00
message = {
name : "ValidationError" ,
message : ` Default value is missing in options. Please update the value. ` ,
} ;
2022-08-01 05:02:48 +00:00
} else {
if ( ! hasLabelValue ( parsed ) ) {
isValid = false ;
2023-02-18 12:55:46 +00:00
message = {
name : "ValidationError" ,
message : ` Default value is missing in options. Please use {label : <string | num>, value : < string | num>} format to show default for server side data. ` ,
} ;
2022-08-01 05:02:48 +00:00
}
}
}
}
2022-02-22 08:43:35 +00:00
return {
isValid ,
parsed ,
messages : [ message ] ,
} ;
}
2022-02-02 14:15:07 +00:00
class SelectWidget extends BaseWidget < SelectWidgetProps , WidgetState > {
2022-02-22 08:43:35 +00:00
constructor ( props : SelectWidgetProps ) {
super ( props ) ;
}
2023-04-14 06:27:49 +00:00
static getAutocompleteDefinitions ( ) : AutocompletionDefinitions {
return {
"!doc" :
"Select is used to capture user input/s from a specified list of permitted inputs. A Select can capture a single choice" ,
"!url" : "https://docs.appsmith.com/widget-reference/dropdown" ,
isVisible : DefaultAutocompleteDefinitions.isVisible ,
filterText : {
"!type" : "string" ,
"!doc" : "The filter text for Server side filtering" ,
} ,
selectedOptionValue : {
"!type" : "string" ,
"!doc" : "The value selected in a single select dropdown" ,
"!url" : "https://docs.appsmith.com/widget-reference/dropdown" ,
} ,
selectedOptionLabel : {
"!type" : "string" ,
"!doc" : "The selected option label in a single select dropdown" ,
"!url" : "https://docs.appsmith.com/widget-reference/dropdown" ,
} ,
isDisabled : "bool" ,
isValid : "bool" ,
isDirty : "bool" ,
options : "[$__dropdownOption__$]" ,
} ;
}
2022-08-15 07:38:30 +00:00
static getPropertyPaneContentConfig() {
return [
{
sectionName : "Data" ,
children : [
{
helpText :
"Allows users to select a single option. Values must be unique" ,
propertyName : "options" ,
label : "Options" ,
controlType : "INPUT_TEXT" ,
placeholderText : '[{ "label": "label1", "value": "value1" }]' ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : {
type : ValidationTypes . ARRAY ,
params : {
unique : [ "value" ] ,
children : {
type : ValidationTypes . OBJECT ,
params : {
required : true ,
allowedKeys : [
{
name : "label" ,
type : ValidationTypes . TEXT ,
params : {
default : "" ,
requiredKey : true ,
} ,
} ,
{
name : "value" ,
type : ValidationTypes . TEXT ,
params : {
default : "" ,
requiredKey : true ,
} ,
} ,
] ,
} ,
} ,
} ,
} ,
evaluationSubstitutionType :
EvaluationSubstitutionType . SMART_SUBSTITUTE ,
} ,
{
helpText : "Selects the option with value by default" ,
propertyName : "defaultOptionValue" ,
2023-05-19 18:37:06 +00:00
label : "Default selected value" ,
2022-09-05 04:52:39 +00:00
controlType : "SELECT_DEFAULT_VALUE_CONTROL" ,
2022-08-15 07:38:30 +00:00
placeholderText : '{ "label": "label1", "value": "value1" }' ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : {
type : ValidationTypes . FUNCTION ,
params : {
fn : defaultOptionValueValidation ,
expected : {
type : 'value1 or { "label": "label1", "value": "value1" }' ,
example : ` value1 | { "label": "label1", "value": "value1" } ` ,
autocompleteDataType : AutocompleteDataType.STRING ,
} ,
} ,
} ,
dependencies : [ "serverSideFiltering" , "options" ] ,
} ,
] ,
} ,
{
sectionName : "Label" ,
children : [
{
helpText : "Sets the label text of the widget" ,
propertyName : "labelText" ,
label : "Text" ,
controlType : "INPUT_TEXT" ,
placeholderText : "Enter label text" ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
{
helpText : "Sets the label position of the widget" ,
propertyName : "labelPosition" ,
label : "Position" ,
2022-10-20 14:06:32 +00:00
controlType : "ICON_TABS" ,
2023-06-07 11:03:22 +00:00
fullWidth : true ,
2022-08-15 07:38:30 +00:00
options : [
{ label : "Left" , value : LabelPosition.Left } ,
{ label : "Top" , value : LabelPosition.Top } ,
{ label : "Auto" , value : LabelPosition.Auto } ,
] ,
2023-04-07 13:51:35 +00:00
hidden : isAutoLayout ,
2022-11-23 09:48:23 +00:00
defaultValue : LabelPosition.Top ,
2022-08-15 07:38:30 +00:00
isBindProperty : false ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
{
helpText : "Sets the label alignment of the widget" ,
propertyName : "labelAlignment" ,
label : "Alignment" ,
controlType : "LABEL_ALIGNMENT_OPTIONS" ,
2023-05-19 18:37:06 +00:00
fullWidth : false ,
2022-08-15 07:38:30 +00:00
options : [
{
2023-05-19 18:37:06 +00:00
startIcon : "align-left" ,
2022-08-15 07:38:30 +00:00
value : Alignment.LEFT ,
} ,
{
2023-05-19 18:37:06 +00:00
startIcon : "align-right" ,
2022-08-15 07:38:30 +00:00
value : Alignment.RIGHT ,
} ,
] ,
isBindProperty : false ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
hidden : ( props : SelectWidgetProps ) = >
props . labelPosition !== LabelPosition . Left ,
dependencies : [ "labelPosition" ] ,
} ,
{
helpText :
"Sets the label width of the widget as the number of columns" ,
propertyName : "labelWidth" ,
label : "Width (in columns)" ,
controlType : "NUMERIC_INPUT" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
min : 0 ,
validation : {
type : ValidationTypes . NUMBER ,
params : {
natural : true ,
} ,
} ,
hidden : ( props : SelectWidgetProps ) = >
props . labelPosition !== LabelPosition . Left ,
dependencies : [ "labelPosition" ] ,
} ,
] ,
} ,
{
2023-05-19 18:37:06 +00:00
sectionName : "Search & filters" ,
2022-08-15 07:38:30 +00:00
children : [
{
propertyName : "isFilterable" ,
2023-05-19 18:37:06 +00:00
label : "Allow searching" ,
2022-08-15 07:38:30 +00:00
helpText : "Makes the dropdown list filterable" ,
controlType : "SWITCH" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . BOOLEAN } ,
} ,
{
helpText : "Enables server side filtering of the data" ,
propertyName : "serverSideFiltering" ,
2023-05-19 18:37:06 +00:00
label : "Server side filtering" ,
2022-08-15 07:38:30 +00:00
controlType : "SWITCH" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . BOOLEAN } ,
} ,
{
helpText : "Trigger an action on change of filterText" ,
hidden : ( props : SelectWidgetProps ) = > ! props . serverSideFiltering ,
dependencies : [ "serverSideFiltering" ] ,
propertyName : "onFilterUpdate" ,
label : "onFilterUpdate" ,
controlType : "ACTION_SELECTOR" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : true ,
} ,
] ,
} ,
{
sectionName : "Validations" ,
children : [
{
propertyName : "isRequired" ,
label : "Required" ,
helpText : "Makes input to the widget mandatory" ,
controlType : "SWITCH" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . BOOLEAN } ,
} ,
] ,
} ,
{
sectionName : "General" ,
children : [
2022-12-03 11:58:02 +00:00
{
2022-12-13 10:35:08 +00:00
helpText : "Show help text or details about current selection" ,
2022-12-03 11:58:02 +00:00
propertyName : "labelTooltip" ,
label : "Tooltip" ,
controlType : "INPUT_TEXT" ,
2022-12-13 10:35:08 +00:00
placeholderText : "Add tooltip text here" ,
2022-12-03 11:58:02 +00:00
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
2022-08-15 07:38:30 +00:00
{
helpText : "Sets a Placeholder Text" ,
propertyName : "placeholderText" ,
label : "Placeholder" ,
controlType : "INPUT_TEXT" ,
placeholderText : "Enter placeholder text" ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
{
helpText : "Controls the visibility of the widget" ,
propertyName : "isVisible" ,
label : "Visible" ,
controlType : "SWITCH" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . BOOLEAN } ,
} ,
{
propertyName : "isDisabled" ,
label : "Disabled" ,
helpText : "Disables input to this widget" ,
controlType : "SWITCH" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . BOOLEAN } ,
} ,
{
propertyName : "animateLoading" ,
2023-05-19 18:37:06 +00:00
label : "Animate loading" ,
2022-08-15 07:38:30 +00:00
controlType : "SWITCH" ,
helpText : "Controls the loading of the widget" ,
defaultValue : true ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . BOOLEAN } ,
} ,
] ,
} ,
{
sectionName : "Events" ,
children : [
{
2023-04-06 16:49:12 +00:00
helpText : "when a user selects an option" ,
2022-08-15 07:38:30 +00:00
propertyName : "onOptionChange" ,
label : "onOptionChange" ,
controlType : "ACTION_SELECTOR" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : true ,
} ,
2022-12-12 07:09:22 +00:00
{
2023-04-06 16:49:12 +00:00
helpText : "when the dropdown opens" ,
2022-12-12 07:09:22 +00:00
propertyName : "onDropdownOpen" ,
label : "onDropdownOpen" ,
controlType : "ACTION_SELECTOR" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : true ,
} ,
{
2023-04-06 16:49:12 +00:00
helpText : "when the dropdown closes" ,
2022-12-12 07:09:22 +00:00
propertyName : "onDropdownClose" ,
label : "onDropdownClose" ,
controlType : "ACTION_SELECTOR" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : true ,
} ,
2022-08-15 07:38:30 +00:00
] ,
} ,
] ;
}
static getPropertyPaneStyleConfig() {
return [
{
2023-05-19 18:37:06 +00:00
sectionName : "Label styles" ,
2022-08-15 07:38:30 +00:00
children : [
{
propertyName : "labelTextColor" ,
2023-05-19 18:37:06 +00:00
label : "Font color" ,
2022-10-20 14:06:32 +00:00
helpText : "Control the color of the label associated" ,
2022-08-15 07:38:30 +00:00
controlType : "COLOR_PICKER" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
{
propertyName : "labelTextSize" ,
2023-05-19 18:37:06 +00:00
label : "Font size" ,
2022-10-20 14:06:32 +00:00
helpText : "Control the font size of the label associated" ,
2022-08-15 07:38:30 +00:00
controlType : "DROP_DOWN" ,
defaultValue : "0.875rem" ,
2023-04-07 13:51:35 +00:00
hidden : isAutoLayout ,
2022-08-15 07:38:30 +00:00
options : [
{
label : "S" ,
value : "0.875rem" ,
subText : "0.875rem" ,
} ,
{
label : "M" ,
value : "1rem" ,
subText : "1rem" ,
} ,
{
label : "L" ,
value : "1.25rem" ,
subText : "1.25rem" ,
} ,
{
label : "XL" ,
value : "1.875rem" ,
subText : "1.875rem" ,
} ,
{
label : "XXL" ,
value : "3rem" ,
subText : "3rem" ,
} ,
{
label : "3XL" ,
value : "3.75rem" ,
subText : "3.75rem" ,
} ,
] ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
{
propertyName : "labelStyle" ,
label : "Emphasis" ,
2022-10-20 14:06:32 +00:00
helpText : "Control if the label should be bold or italics" ,
2022-12-29 11:08:13 +00:00
controlType : "BUTTON_GROUP" ,
2022-08-15 07:38:30 +00:00
options : [
{
2023-05-19 18:37:06 +00:00
icon : "text-bold" ,
2022-08-15 07:38:30 +00:00
value : "BOLD" ,
} ,
{
2023-05-19 18:37:06 +00:00
icon : "text-italic" ,
2022-08-15 07:38:30 +00:00
value : "ITALIC" ,
} ,
] ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
] ,
} ,
{
2023-05-19 18:37:06 +00:00
sectionName : "Border and shadow" ,
2022-08-15 07:38:30 +00:00
children : [
{
propertyName : "borderRadius" ,
2023-05-19 18:37:06 +00:00
label : "Border radius" ,
2022-08-15 07:38:30 +00:00
helpText :
"Rounds the corners of the icon button's outer border edge" ,
controlType : "BORDER_RADIUS_OPTIONS" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
{
propertyName : "boxShadow" ,
2023-05-19 18:37:06 +00:00
label : "Box shadow" ,
2022-08-15 07:38:30 +00:00
helpText :
"Enables you to cast a drop shadow from the frame of the widget" ,
controlType : "BOX_SHADOW_OPTIONS" ,
isJSConvertible : true ,
isBindProperty : true ,
isTriggerProperty : false ,
validation : { type : ValidationTypes . TEXT } ,
} ,
] ,
} ,
] ;
}
2022-11-28 04:44:31 +00:00
static getStylesheetConfig ( ) : Stylesheet {
return {
accentColor : "{{appsmith.theme.colors.primaryColor}}" ,
borderRadius : "{{appsmith.theme.borderRadius.appBorderRadius}}" ,
boxShadow : "none" ,
} ;
}
2022-02-22 08:43:35 +00:00
static getDefaultPropertiesMap ( ) : Record < string , string > {
2022-02-02 14:15:07 +00:00
return {
2022-02-22 08:43:35 +00:00
value : "defaultOptionValue" ,
label : "defaultOptionValue" ,
filterText : "" ,
2022-02-02 14:15:07 +00:00
} ;
}
2022-02-22 08:43:35 +00:00
static getMetaPropertiesMap ( ) : Record < string , any > {
2022-02-02 14:15:07 +00:00
return {
2022-02-22 08:43:35 +00:00
value : undefined ,
label : undefined ,
filterText : "" ,
2022-03-01 19:02:10 +00:00
isDirty : false ,
2022-02-02 14:15:07 +00:00
} ;
}
2022-08-01 05:02:48 +00:00
// https://github.com/appsmithorg/appsmith/issues/13664#issuecomment-1120814337
2022-02-22 08:43:35 +00:00
static getDerivedPropertiesMap() {
2022-02-02 14:15:07 +00:00
return {
2022-08-01 05:02:48 +00:00
isValid : ` {{(()=>{ ${ derivedProperties . getIsValid } })()}} ` ,
selectedOptionValue : ` {{(()=>{ ${ derivedProperties . getSelectedOptionValue } })()}} ` ,
selectedOptionLabel : ` {{(()=>{ ${ derivedProperties . getSelectedOptionLabel } })()}} ` ,
2022-02-02 14:15:07 +00:00
} ;
}
componentDidMount() {
2022-02-22 08:43:35 +00:00
super . componentDidMount ( ) ;
2022-02-02 14:15:07 +00:00
}
2022-03-01 19:02:10 +00:00
componentDidUpdate ( prevProps : SelectWidgetProps ) : void {
// Reset isDirty to false if defaultOptionValue changes
2022-03-03 13:57:22 +00:00
if (
2022-09-02 09:16:30 +00:00
! equal ( this . props . defaultOptionValue , prevProps . defaultOptionValue ) &&
2022-03-03 13:57:22 +00:00
this . props . isDirty
) {
2022-03-01 19:02:10 +00:00
this . props . updateWidgetMetaProperty ( "isDirty" , false ) ;
}
}
2022-02-22 08:43:35 +00:00
isStringOrNumber = ( value : any ) : value is string | number = >
isString ( value ) || isNumber ( value ) ;
2022-02-02 14:15:07 +00:00
getPageView() {
2022-02-22 08:43:35 +00:00
const options = isArray ( this . props . options ) ? this . props . options : [ ] ;
2022-02-02 14:15:07 +00:00
const isInvalid =
"isValid" in this . props && ! this . props . isValid && ! ! this . props . isDirty ;
const dropDownWidth = MinimumPopupRows * this . props . parentColumnSpace ;
2022-02-22 08:43:35 +00:00
const selectedIndex = findIndex ( this . props . options , {
2022-02-02 14:15:07 +00:00
value : this.props.selectedOptionValue ,
} ) ;
const { componentHeight , componentWidth } = this . getComponentDimensions ( ) ;
return (
< SelectComponent
2022-05-04 09:45:57 +00:00
accentColor = { this . props . accentColor }
borderRadius = { this . props . borderRadius }
boxShadow = { this . props . boxShadow }
2022-02-02 14:15:07 +00:00
compactMode = {
! (
( this . props . bottomRow - this . props . topRow ) /
GRID_DENSITY_MIGRATION_V1 >
1
)
}
disabled = { this . props . isDisabled }
dropDownWidth = { dropDownWidth }
filterText = { this . props . filterText }
hasError = { isInvalid }
height = { componentHeight }
2022-11-23 09:48:23 +00:00
isDynamicHeightEnabled = { isAutoHeightEnabledForWidget ( this . props ) }
2022-02-02 14:15:07 +00:00
isFilterable = { this . props . isFilterable }
isLoading = { this . props . isLoading }
isValid = { this . props . isValid }
2022-02-22 08:43:35 +00:00
label = { this . props . selectedOptionLabel }
feat: Controls for labels in widgets to align the widgets in forms and other places (#10600)
* feat: When there are multiple input widgets with different label lengths then the input box looks misaligned
-- Create a new property control for a label position
-- Create a new property control for a label alignment
-- Prototype a label section for Input widget
* feat: When there are multiple input widgets with different label lengths then the input box looks misaligned
-- Add a property, labelWidth in the property pane
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Input widget: Implement all the requirements in case its type is Text
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Adapt the functionalty on other types of the input widget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into DropdownWidget
-- Clean up for the input widget and DRY
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into MultiSelectWidget
-- Eliminate unnecessary component prop, columns
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalties into Tree Select widget
-- Add styles for alignment between lable and input control over the widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into MultiSelectTreeWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Introduce label functionalities into DatePickerWidget2
-- Use width instead of columns prop in InputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into RichTextEditorWidget
-- Eliminate compactMode from StyledLabel
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into CheckboxGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement switch group for the correct meaning of right alignment
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into RadioGroupWidget
-- Add new properties, alignment and inline for consistency
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Adjust cols and rows for RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused StyledRadioProps
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Complete first MVP of enhanced SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Complete the first MVP of enhanced RadioGroupWidget
-- Eliminate unused StyledSwitch component for SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add min-height, align-self rules for LabelContainer
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Use original label property for RadioGroupWidget
-- Add a migration for adding isInline and alignment properties for RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Update version to latest one in DSLMigrationsUtils.test.ts
* fix failing jest test
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement label functionalities on BaseInputWidget, InputWidgetV2, CurrencyInputWidget, PhoneInputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused imports in DSLMigrationsUtils
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the label related test case which is failed in Input_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on #10119: The label text truncates on resizing the input widget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix scroll issue when shrink with MultiSelectWidget and MultiSelectTreeWidget
* fix: Widget Popup test
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement width and alginment features on the level of label element
-- Prevent actual inputs from DropdownWidget, MultiSelectWidget, SingleSelectTreeWidget, MultiSelectTreeWidget from overflow when resizing
-- Enable label feature on a RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set label container's default width to 33% when width is not set
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix crash issue when labelWidth is filled by non-numeric value, eliminating passing NaN as its value
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set flex-grow to zero on input types other than TEXT
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Implement label features on newly created MultiSelectWidgetV2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate LabelPositionTypes, directly using enum LabelPosition
-- Add a comment for a constant LABEL_MAX_WIDTH_RATE
-- Directly import React for LabelAlignmentOptionsControl
-- Remove unnecessary constructor for LabelAlignmentOptionsControl
-- Define handleAlign instance method as a higher-order function
-- Only migrate alignment property for RadioGroupWidget
-- Use Object.hasOwnProperty instead of in operator
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Migrate alignment property of RadioGroupWidget in case of currentDSL.version is 52
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Revert currentDSL.version to 52
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add a Jest test case for RadioGroupWidget's alignment property migration
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Replace all nested ternary operators with if statements
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Implement label feature on new version of SelectWidget
-- Add Cypress tests for widgets' label section
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor code for BaseInputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change CSS selector for step buttons for Numeric BaseInputWidget
-- Directly use migrateRadioGroupAlignmentProperty migration function without using transformDSL
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on typo about migrateRadioGroupAlignmentProperty
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add data-testid attributes for Cypress selectors
* feat: Deprecate form button widget
-- Assert flex-direction to row in CheckboxGroup_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add a missing data-testid for SelectWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on failed test cases: CheckboxGroup_spec, DatePicker_2_spec, MultiSelectWidgetV2
* fix: Select popup DSL
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Create a new property control, NumericInputControl
-- Replace all the label properties with the newly created controls
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Create a new Cypress command, checkLabelWidth and apply to all related test cases
-- Increase width in checkboxgroupDsl.json
-- Rename className for label in MultiSelectWidgetV2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement the tooltip feature for labels
-- Add missing props for labels in DateField, MultiSelectField, RadioGroupField, SelectField fields for JSONFormWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor property controls, including LabelPositionOptionsControl, LabelAlignmentOptionsControl, NumericInputControl to keep consistency
-- Apply default values into label section
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Extract the label related parts from the various widgets as an independent component
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate TypeScript any type from BaseInputComponent
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change labelPosition property type to DROP_DOWN
-- Modify LabelAlignmentOptionsControl to use ButtonTabComponent
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Define getLabelWidth method into BaseWidget
-- Extract the common CSS rules for the widget containers
-- Revert rows and columns for SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the failed test case in DSLMigrationsUtils.test.ts
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on overflow issue on CheckboxGroupWidget
-- Create a distinctive spec file for label feature
-- Eliminate the redundant label specs with the relevant widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Delete unnecessary files, including Select_spec.js, LabelButton.tsx and LabelPositionOptionsControl.tsx
-- Revise wrong comment for checkLabelForWidget Cypress command
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Do not set the label width only if its value is 0
-- Clean up the component for DatePickerWidget2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused imports in DatePickerWidget2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Make RadioGroupWidget's layout flexible in all modes
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on Cypress test case for RadioGroupWidget in Widgets_Labels_spec
-- Change Cypress commands, including addAction, addSuccessMessage, enterActionValue to accept parentSelector
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change getLabelWidth method to not have any argument
-- Define some constants for label numbers
-- Extract the common styles for SwitchGroupWidget and RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor some constants
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused width prop from RadioGroupWidget
-- Get labelWidth from getLabelWidth
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate the min-height restriction on a label
-- Eliminate the scroll on the earlier InputWidgetV2 which was not in compact mode
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add one more condition checking if the current input type is text
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Extract common code base for MultiSelectTreeWidget and MultiSelectWidgetV2
-- Apply a few CSS fixes on the scrollbar issue select related widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply some tweaks for earlier widgets with labels so as not to be broken UX
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the failed Cypress test case in Widget_Popup_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add constants, LABEL_DEFAULT_WIDTH_RATE, SELECT_DEFAULT_HEIGHT, LABEL_MARGIN_OLD_SELECT
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Increase the widths of CheckboxGroupWidget and SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set the font size to 14px for NumericInputControl
Co-authored-by: ohansFavour <fohanekwu@gmail.com>
Co-authored-by: Tolulope Adetula <31691737+Tooluloope@users.noreply.github.com>
2022-04-14 08:47:25 +00:00
labelAlignment = { this . props . labelAlignment }
labelPosition = { this . props . labelPosition }
2022-02-02 14:15:07 +00:00
labelStyle = { this . props . labelStyle }
labelText = { this . props . labelText }
labelTextColor = { this . props . labelTextColor }
labelTextSize = { this . props . labelTextSize }
2022-12-03 11:58:02 +00:00
labelTooltip = { this . props . labelTooltip }
feat: Controls for labels in widgets to align the widgets in forms and other places (#10600)
* feat: When there are multiple input widgets with different label lengths then the input box looks misaligned
-- Create a new property control for a label position
-- Create a new property control for a label alignment
-- Prototype a label section for Input widget
* feat: When there are multiple input widgets with different label lengths then the input box looks misaligned
-- Add a property, labelWidth in the property pane
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Input widget: Implement all the requirements in case its type is Text
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Adapt the functionalty on other types of the input widget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into DropdownWidget
-- Clean up for the input widget and DRY
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into MultiSelectWidget
-- Eliminate unnecessary component prop, columns
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalties into Tree Select widget
-- Add styles for alignment between lable and input control over the widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into MultiSelectTreeWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Introduce label functionalities into DatePickerWidget2
-- Use width instead of columns prop in InputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into RichTextEditorWidget
-- Eliminate compactMode from StyledLabel
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into CheckboxGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement switch group for the correct meaning of right alignment
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into RadioGroupWidget
-- Add new properties, alignment and inline for consistency
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Adjust cols and rows for RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused StyledRadioProps
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Complete first MVP of enhanced SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Complete the first MVP of enhanced RadioGroupWidget
-- Eliminate unused StyledSwitch component for SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add min-height, align-self rules for LabelContainer
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Use original label property for RadioGroupWidget
-- Add a migration for adding isInline and alignment properties for RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Update version to latest one in DSLMigrationsUtils.test.ts
* fix failing jest test
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement label functionalities on BaseInputWidget, InputWidgetV2, CurrencyInputWidget, PhoneInputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused imports in DSLMigrationsUtils
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the label related test case which is failed in Input_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on #10119: The label text truncates on resizing the input widget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix scroll issue when shrink with MultiSelectWidget and MultiSelectTreeWidget
* fix: Widget Popup test
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement width and alginment features on the level of label element
-- Prevent actual inputs from DropdownWidget, MultiSelectWidget, SingleSelectTreeWidget, MultiSelectTreeWidget from overflow when resizing
-- Enable label feature on a RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set label container's default width to 33% when width is not set
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix crash issue when labelWidth is filled by non-numeric value, eliminating passing NaN as its value
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set flex-grow to zero on input types other than TEXT
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Implement label features on newly created MultiSelectWidgetV2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate LabelPositionTypes, directly using enum LabelPosition
-- Add a comment for a constant LABEL_MAX_WIDTH_RATE
-- Directly import React for LabelAlignmentOptionsControl
-- Remove unnecessary constructor for LabelAlignmentOptionsControl
-- Define handleAlign instance method as a higher-order function
-- Only migrate alignment property for RadioGroupWidget
-- Use Object.hasOwnProperty instead of in operator
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Migrate alignment property of RadioGroupWidget in case of currentDSL.version is 52
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Revert currentDSL.version to 52
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add a Jest test case for RadioGroupWidget's alignment property migration
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Replace all nested ternary operators with if statements
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Implement label feature on new version of SelectWidget
-- Add Cypress tests for widgets' label section
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor code for BaseInputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change CSS selector for step buttons for Numeric BaseInputWidget
-- Directly use migrateRadioGroupAlignmentProperty migration function without using transformDSL
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on typo about migrateRadioGroupAlignmentProperty
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add data-testid attributes for Cypress selectors
* feat: Deprecate form button widget
-- Assert flex-direction to row in CheckboxGroup_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add a missing data-testid for SelectWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on failed test cases: CheckboxGroup_spec, DatePicker_2_spec, MultiSelectWidgetV2
* fix: Select popup DSL
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Create a new property control, NumericInputControl
-- Replace all the label properties with the newly created controls
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Create a new Cypress command, checkLabelWidth and apply to all related test cases
-- Increase width in checkboxgroupDsl.json
-- Rename className for label in MultiSelectWidgetV2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement the tooltip feature for labels
-- Add missing props for labels in DateField, MultiSelectField, RadioGroupField, SelectField fields for JSONFormWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor property controls, including LabelPositionOptionsControl, LabelAlignmentOptionsControl, NumericInputControl to keep consistency
-- Apply default values into label section
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Extract the label related parts from the various widgets as an independent component
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate TypeScript any type from BaseInputComponent
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change labelPosition property type to DROP_DOWN
-- Modify LabelAlignmentOptionsControl to use ButtonTabComponent
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Define getLabelWidth method into BaseWidget
-- Extract the common CSS rules for the widget containers
-- Revert rows and columns for SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the failed test case in DSLMigrationsUtils.test.ts
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on overflow issue on CheckboxGroupWidget
-- Create a distinctive spec file for label feature
-- Eliminate the redundant label specs with the relevant widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Delete unnecessary files, including Select_spec.js, LabelButton.tsx and LabelPositionOptionsControl.tsx
-- Revise wrong comment for checkLabelForWidget Cypress command
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Do not set the label width only if its value is 0
-- Clean up the component for DatePickerWidget2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused imports in DatePickerWidget2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Make RadioGroupWidget's layout flexible in all modes
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on Cypress test case for RadioGroupWidget in Widgets_Labels_spec
-- Change Cypress commands, including addAction, addSuccessMessage, enterActionValue to accept parentSelector
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change getLabelWidth method to not have any argument
-- Define some constants for label numbers
-- Extract the common styles for SwitchGroupWidget and RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor some constants
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused width prop from RadioGroupWidget
-- Get labelWidth from getLabelWidth
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate the min-height restriction on a label
-- Eliminate the scroll on the earlier InputWidgetV2 which was not in compact mode
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add one more condition checking if the current input type is text
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Extract common code base for MultiSelectTreeWidget and MultiSelectWidgetV2
-- Apply a few CSS fixes on the scrollbar issue select related widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply some tweaks for earlier widgets with labels so as not to be broken UX
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the failed Cypress test case in Widget_Popup_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add constants, LABEL_DEFAULT_WIDTH_RATE, SELECT_DEFAULT_HEIGHT, LABEL_MARGIN_OLD_SELECT
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Increase the widths of CheckboxGroupWidget and SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set the font size to 14px for NumericInputControl
Co-authored-by: ohansFavour <fohanekwu@gmail.com>
Co-authored-by: Tolulope Adetula <31691737+Tooluloope@users.noreply.github.com>
2022-04-14 08:47:25 +00:00
labelWidth = { this . getLabelWidth ( ) }
2022-12-12 07:09:22 +00:00
onDropdownClose = { this . onDropdownClose }
onDropdownOpen = { this . onDropdownOpen }
2022-02-02 14:15:07 +00:00
onFilterChange = { this . onFilterChange }
onOptionSelected = { this . onOptionSelected }
options = { options }
placeholder = { this . props . placeholderText }
2022-09-30 04:03:53 +00:00
resetFilterTextOnClose = { ! this . props . serverSideFiltering }
2022-02-02 14:15:07 +00:00
selectedIndex = { selectedIndex > - 1 ? selectedIndex : undefined }
serverSideFiltering = { this . props . serverSideFiltering }
2022-02-22 08:43:35 +00:00
value = { this . props . selectedOptionValue }
2022-02-02 14:15:07 +00:00
widgetId = { this . props . widgetId }
width = { componentWidth }
/ >
) ;
}
onOptionSelected = ( selectedOption : DropdownOption ) = > {
let isChanged = true ;
// Check if the value has changed. If no option
// selected till now, there is a change
2022-08-01 05:02:48 +00:00
if ( ! isNil ( this . props . selectedOptionValue ) ) {
isChanged = this . props . selectedOptionValue !== selectedOption . value ;
2022-02-02 14:15:07 +00:00
}
if ( isChanged ) {
2022-03-01 19:02:10 +00:00
if ( ! this . props . isDirty ) {
this . props . updateWidgetMetaProperty ( "isDirty" , true ) ;
}
2022-02-22 08:43:35 +00:00
this . props . updateWidgetMetaProperty ( "label" , selectedOption . label ? ? "" ) ;
this . props . updateWidgetMetaProperty ( "value" , selectedOption . value ? ? "" , {
2022-02-02 14:15:07 +00:00
triggerPropertyName : "onOptionChange" ,
2022-02-22 08:43:35 +00:00
dynamicString : this.props.onOptionChange ,
2022-02-02 14:15:07 +00:00
event : {
type : EventType . ON_OPTION_CHANGE ,
} ,
} ) ;
}
2022-08-01 05:02:48 +00:00
// When Label changes but value doesnt change, Applies to serverside Filtering
if ( ! isChanged && this . props . selectedOptionLabel !== selectedOption . label ) {
this . props . updateWidgetMetaProperty ( "label" , selectedOption . label ? ? "" ) ;
}
2022-02-22 08:43:35 +00:00
} ;
2022-02-02 14:15:07 +00:00
onFilterChange = ( value : string ) = > {
this . props . updateWidgetMetaProperty ( "filterText" , value ) ;
2022-02-22 08:43:35 +00:00
if ( this . props . onFilterUpdate && this . props . serverSideFiltering ) {
super . executeAction ( {
triggerPropertyName : "onFilterUpdate" ,
dynamicString : this.props.onFilterUpdate ,
event : {
type : EventType . ON_FILTER_UPDATE ,
} ,
} ) ;
}
2022-02-02 14:15:07 +00:00
} ;
2022-12-12 07:09:22 +00:00
onDropdownOpen = ( ) = > {
if ( this . props . onDropdownOpen ) {
super . executeAction ( {
triggerPropertyName : "onDropdownOpen" ,
dynamicString : this.props.onDropdownOpen ,
event : {
type : EventType . ON_DROPDOWN_OPEN ,
} ,
} ) ;
}
} ;
onDropdownClose = ( ) = > {
if ( this . props . onDropdownClose ) {
super . executeAction ( {
triggerPropertyName : "onDropdownClose" ,
dynamicString : this.props.onDropdownClose ,
event : {
type : EventType . ON_DROPDOWN_CLOSE ,
} ,
} ) ;
}
} ;
2022-02-02 14:15:07 +00:00
static getWidgetType ( ) : WidgetType {
return "SELECT_WIDGET" ;
}
}
export interface SelectWidgetProps extends WidgetProps {
placeholderText? : string ;
feat: Controls for labels in widgets to align the widgets in forms and other places (#10600)
* feat: When there are multiple input widgets with different label lengths then the input box looks misaligned
-- Create a new property control for a label position
-- Create a new property control for a label alignment
-- Prototype a label section for Input widget
* feat: When there are multiple input widgets with different label lengths then the input box looks misaligned
-- Add a property, labelWidth in the property pane
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Input widget: Implement all the requirements in case its type is Text
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Adapt the functionalty on other types of the input widget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into DropdownWidget
-- Clean up for the input widget and DRY
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into MultiSelectWidget
-- Eliminate unnecessary component prop, columns
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalties into Tree Select widget
-- Add styles for alignment between lable and input control over the widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add label functionalities into MultiSelectTreeWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Introduce label functionalities into DatePickerWidget2
-- Use width instead of columns prop in InputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into RichTextEditorWidget
-- Eliminate compactMode from StyledLabel
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into CheckboxGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement switch group for the correct meaning of right alignment
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply label functionalities into RadioGroupWidget
-- Add new properties, alignment and inline for consistency
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Adjust cols and rows for RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused StyledRadioProps
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Complete first MVP of enhanced SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Complete the first MVP of enhanced RadioGroupWidget
-- Eliminate unused StyledSwitch component for SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add min-height, align-self rules for LabelContainer
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Use original label property for RadioGroupWidget
-- Add a migration for adding isInline and alignment properties for RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Update version to latest one in DSLMigrationsUtils.test.ts
* fix failing jest test
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement label functionalities on BaseInputWidget, InputWidgetV2, CurrencyInputWidget, PhoneInputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused imports in DSLMigrationsUtils
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the label related test case which is failed in Input_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on #10119: The label text truncates on resizing the input widget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix scroll issue when shrink with MultiSelectWidget and MultiSelectTreeWidget
* fix: Widget Popup test
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement width and alginment features on the level of label element
-- Prevent actual inputs from DropdownWidget, MultiSelectWidget, SingleSelectTreeWidget, MultiSelectTreeWidget from overflow when resizing
-- Enable label feature on a RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set label container's default width to 33% when width is not set
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix crash issue when labelWidth is filled by non-numeric value, eliminating passing NaN as its value
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set flex-grow to zero on input types other than TEXT
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Implement label features on newly created MultiSelectWidgetV2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate LabelPositionTypes, directly using enum LabelPosition
-- Add a comment for a constant LABEL_MAX_WIDTH_RATE
-- Directly import React for LabelAlignmentOptionsControl
-- Remove unnecessary constructor for LabelAlignmentOptionsControl
-- Define handleAlign instance method as a higher-order function
-- Only migrate alignment property for RadioGroupWidget
-- Use Object.hasOwnProperty instead of in operator
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Migrate alignment property of RadioGroupWidget in case of currentDSL.version is 52
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Revert currentDSL.version to 52
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add a Jest test case for RadioGroupWidget's alignment property migration
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Replace all nested ternary operators with if statements
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Implement label feature on new version of SelectWidget
-- Add Cypress tests for widgets' label section
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor code for BaseInputWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change CSS selector for step buttons for Numeric BaseInputWidget
-- Directly use migrateRadioGroupAlignmentProperty migration function without using transformDSL
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on typo about migrateRadioGroupAlignmentProperty
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add data-testid attributes for Cypress selectors
* feat: Deprecate form button widget
-- Assert flex-direction to row in CheckboxGroup_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add a missing data-testid for SelectWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on failed test cases: CheckboxGroup_spec, DatePicker_2_spec, MultiSelectWidgetV2
* fix: Select popup DSL
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Create a new property control, NumericInputControl
-- Replace all the label properties with the newly created controls
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Create a new Cypress command, checkLabelWidth and apply to all related test cases
-- Increase width in checkboxgroupDsl.json
-- Rename className for label in MultiSelectWidgetV2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Reimplement the tooltip feature for labels
-- Add missing props for labels in DateField, MultiSelectField, RadioGroupField, SelectField fields for JSONFormWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor property controls, including LabelPositionOptionsControl, LabelAlignmentOptionsControl, NumericInputControl to keep consistency
-- Apply default values into label section
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Extract the label related parts from the various widgets as an independent component
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate TypeScript any type from BaseInputComponent
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change labelPosition property type to DROP_DOWN
-- Modify LabelAlignmentOptionsControl to use ButtonTabComponent
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Define getLabelWidth method into BaseWidget
-- Extract the common CSS rules for the widget containers
-- Revert rows and columns for SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the failed test case in DSLMigrationsUtils.test.ts
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on overflow issue on CheckboxGroupWidget
-- Create a distinctive spec file for label feature
-- Eliminate the redundant label specs with the relevant widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Delete unnecessary files, including Select_spec.js, LabelButton.tsx and LabelPositionOptionsControl.tsx
-- Revise wrong comment for checkLabelForWidget Cypress command
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Do not set the label width only if its value is 0
-- Clean up the component for DatePickerWidget2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused imports in DatePickerWidget2
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Make RadioGroupWidget's layout flexible in all modes
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on Cypress test case for RadioGroupWidget in Widgets_Labels_spec
-- Change Cypress commands, including addAction, addSuccessMessage, enterActionValue to accept parentSelector
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Change getLabelWidth method to not have any argument
-- Define some constants for label numbers
-- Extract the common styles for SwitchGroupWidget and RadioGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Refactor some constants
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate unused width prop from RadioGroupWidget
-- Get labelWidth from getLabelWidth
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Eliminate the min-height restriction on a label
-- Eliminate the scroll on the earlier InputWidgetV2 which was not in compact mode
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add one more condition checking if the current input type is text
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Extract common code base for MultiSelectTreeWidget and MultiSelectWidgetV2
-- Apply a few CSS fixes on the scrollbar issue select related widgets
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Apply some tweaks for earlier widgets with labels so as not to be broken UX
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Fix on the failed Cypress test case in Widget_Popup_spec.js
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Add constants, LABEL_DEFAULT_WIDTH_RATE, SELECT_DEFAULT_HEIGHT, LABEL_MARGIN_OLD_SELECT
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Increase the widths of CheckboxGroupWidget and SwitchGroupWidget
* feat: Controls for labels in widgets to align the widgets in forms and other places
-- Set the font size to 14px for NumericInputControl
Co-authored-by: ohansFavour <fohanekwu@gmail.com>
Co-authored-by: Tolulope Adetula <31691737+Tooluloope@users.noreply.github.com>
2022-04-14 08:47:25 +00:00
labelText : string ;
labelPosition? : LabelPosition ;
labelAlignment? : Alignment ;
labelWidth? : number ;
2022-02-02 14:15:07 +00:00
selectedIndex? : number ;
options? : DropdownOption [ ] ;
onOptionChange? : string ;
2022-12-12 07:09:22 +00:00
onDropdownOpen? : string ;
onDropdownClose? : string ;
2022-02-22 08:43:35 +00:00
defaultOptionValue? : any ;
value? : any ;
label? : any ;
2022-02-02 14:15:07 +00:00
isRequired : boolean ;
isFilterable : boolean ;
selectedOptionLabel : string ;
serverSideFiltering : boolean ;
onFilterUpdate : string ;
isDirty? : boolean ;
2022-03-24 12:57:39 +00:00
filterText : string ;
2022-02-02 14:15:07 +00:00
}
export default SelectWidget ;