Skip to content

Commit 050fc16

Browse files
authored
Merge pull request #764 from dxc-technology/jcheng-selectDefaultValue
[Minor] Adding default value to select component
2 parents f44109e + 23932b0 commit 050fc16

File tree

5 files changed

+88
-1
lines changed

5 files changed

+88
-1
lines changed

projects/dxc-ngx-cdk-site/src/app/components/examples/select/select-properties/select-properties.component.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@
2828
the value will be managed internally by the component.
2929
</td>
3030
</tr>
31+
<tr>
32+
<td>defaultValue: string | string[]</td>
33+
<td></td>
34+
<td>
35+
Default value given to the select and also maintains the uncontrolled behaviour.
36+
</td>
37+
</tr>
3138
<tr>
3239
<td>options: Option[] | OptionGroup[]</td>
3340
<td></td>

projects/dxc-ngx-cdk-site/src/app/pages/theme-builder/previews/select-preview/select-preview.component.html

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@
7070
[value]="arrayValue"
7171
>
7272
</dxc-select>
73+
<dxc-select
74+
label="default value"
75+
helperText="HelperText"
76+
multiple="true"
77+
margin="xsmall"
78+
[options]="array1"
79+
[defaultValue]="arrayValue"
80+
>
81+
</dxc-select>
7382
<dxc-select
7483
label="Label"
7584
helperText="HelperText"
@@ -136,6 +145,31 @@
136145
>
137146
</dxc-select>
138147

148+
<dxc-select
149+
label="defaultvalue searchable"
150+
helperText="HelperText"
151+
margin="xsmall"
152+
[defaultValue]="selectedValues"
153+
[options]="array1"
154+
placeholder="Another placeholder"
155+
size="large"
156+
searchable="true"
157+
tabIndex="3"
158+
>
159+
</dxc-select>
160+
161+
<dxc-select
162+
label="defaultvalue single"
163+
helperText="HelperText"
164+
margin="xsmall"
165+
[defaultValue]="selectedValues"
166+
[options]="array1"
167+
placeholder="Another placeholder"
168+
size="large"
169+
tabIndex="3"
170+
>
171+
</dxc-select>
172+
139173
<dxc-select
140174
label="Controlled not optional"
141175
helperText="HelperText"

projects/dxc-ngx-cdk-site/src/app/pages/theme-builder/previews/select-preview/select-preview.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { OptionGroup } from "@dxc-technology/halstack-angular/lib/dxc-select/int
77
templateUrl: "./select-preview.component.html",
88
})
99
export class SelectPreviewComponent implements OnInit {
10-
selectedValues: string = "";
10+
selectedValues: string = "1";
1111
array1: Option[] = [
1212
{
1313
label: "label1",

projects/dxc-ngx-cdk/src/lib/dxc-select/dxc-select.component.spec.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,43 @@ describe("DxcSelectComponent tests", () => {
5555
expect(dxcSelect.getByText("label1"));
5656
});
5757

58+
test("dxc-select defaultValue functionality", async () => {
59+
const array1: Option[] = [
60+
{ label: "label1", value: "1" },
61+
{ label: "label2", value: "2" },
62+
{ label: "label6", value: "6" },
63+
{ label: "label9", value: "9" },
64+
{ label: "aida", value: "10" },
65+
{ label: "pepe", value: "11" },
66+
];
67+
const changeMock = jest.fn((x) => {});
68+
const dxcSelect = await render(DxcSelectComponent, {
69+
componentProperties: {
70+
label: "Select label",
71+
helperText: "Helper Text",
72+
options: array1,
73+
onChange: {
74+
emit: changeMock,
75+
} as any,
76+
defaultValue: "1",
77+
},
78+
imports: [DxcSelectModule],
79+
excludeComponentDeclaration: true,
80+
});
81+
expect(dxcSelect.getByText("Select label"));
82+
expect(dxcSelect.getByText("Helper Text"));
83+
expect(dxcSelect.getByText("label1"));
84+
fireEvent.click(dxcSelect.getByRole("combobox"));
85+
expect(screen.getAllByText("label1")[1].getAttribute("aria-selected")).toBe(
86+
"true"
87+
);
88+
fireEvent.click(screen.getByText("aida"));
89+
expect(changeMock).toHaveBeenCalledWith({ value: "10", error: null });
90+
fireEvent.click(dxcSelect.getByRole("combobox"));
91+
expect(dxcSelect.getByText("aida"));
92+
93+
});
94+
5895
test("dxc-select single controlled functionality", async () => {
5996
const array1: Option[] = [
6097
{ label: "label1", value: "1" },

projects/dxc-ngx-cdk/src/lib/dxc-select/dxc-select.component.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ interface SelectProperties {
2929
label: string;
3030
name: string;
3131
value: string | string[];
32+
defaultValue: string | string[];
3233
placeholder: string;
3334
helperText: string;
3435
searchable: boolean;
@@ -68,6 +69,9 @@ export class DxcSelectComponent implements OnInit, ControlValueAccessor {
6869
@Input()
6970
value: string | string[];
7071

72+
@Input()
73+
defaultValue: string | string[];
74+
7175
@Input()
7276
helperText: string;
7377

@@ -129,6 +133,7 @@ export class DxcSelectComponent implements OnInit, ControlValueAccessor {
129133
label: "",
130134
name: "",
131135
value: null,
136+
defaultValue: null,
132137
placeholder: "",
133138
helperText: "",
134139
searchable: false,
@@ -237,6 +242,10 @@ export class DxcSelectComponent implements OnInit, ControlValueAccessor {
237242
...this.defaultInputs.getValue(),
238243
})}`;
239244
this.controlled = this.value || this.value === "" ? true : false;
245+
if (this.defaultValue || this.defaultValue === "" && !this.controlled) {
246+
this.value = this.defaultValue;
247+
this.setDefaultValues();
248+
}
240249
this.service.visualFocused.subscribe((value) => {
241250
this.focusedOption = value;
242251
this.setActiveDescendantAttr();

0 commit comments

Comments
 (0)