Skip to content

Commit a4b336c

Browse files
authored
Merge branch 'master' into inline-select
2 parents 2e23605 + 9c5210f commit a4b336c

20 files changed

+591
-303
lines changed

package-lock.json

Lines changed: 226 additions & 234 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "carbon-components-angular",
3-
"version": "0.1.0",
3+
"version": "0.0.0",
44
"description": "Next generation components",
55
"main": "index.js",
66
"scripts": {
@@ -82,9 +82,9 @@
8282
"@angular/platform-browser-dynamic": "6.1.0",
8383
"@angular/platform-server": "6.1.0",
8484
"@angular/router": "6.1.0",
85-
"@commitlint/cli": "7.0.0",
85+
"@commitlint/cli": "7.2.1",
8686
"@commitlint/config-conventional": "7.0.1",
87-
"@compodoc/compodoc": "1.1.5",
87+
"@compodoc/compodoc": "1.0.4",
8888
"@storybook/addon-actions": "3.4.8",
8989
"@storybook/addon-knobs": "3.4.8",
9090
"@storybook/addon-links": "3.4.8",

scripts/deploy.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@ if [[ $TRAVIS_BRANCH == "master" ]]; then
1717
mkdir pages
1818
cp -R dist/docs/documentation/ pages/documentation
1919
cp -R dist/docs/storybook/* pages
20+
version=$(node -e 'const package = require("./dist/package.json"); console.log(package.version);')
21+
mkdir pages/$version
22+
cp -R dist/docs/documentation/ pages/$version/documentation
23+
cp -R dist/docs/storybook/* pages/$version
2024
echo "angular.carbondesignsystem.com" > pages/CNAME
2125
fi

src/dialog/tooltip/tooltip.stories.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ storiesOf("Tooltip", module)
99
.addDecorator(
1010
moduleMetadata({
1111
imports: [
12-
DialogModule,
12+
DialogModule
1313
]
1414
})
1515
)

src/dropdown/dropdown.component.ts

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ export class Dropdown implements OnInit, AfterContentInit, OnDestroy {
115115
* @memberof Dropdown
116116
*/
117117
@Input() scrollableContainer: string;
118+
/**
119+
* Specifies the property to be used as the return value to `ngModel`
120+
*/
121+
@Input() value: string;
118122
/**
119123
* Accessible label for the button that opens the dropdown list.
120124
* Defaults to the `DROPDOWN.OPEN` value from the i18n service.
@@ -221,15 +225,17 @@ export class Dropdown implements OnInit, AfterContentInit, OnDestroy {
221225
this.view.size = this.size;
222226
this.elementRef.nativeElement.classList.add(this.buildClass());
223227
this.view.select.subscribe(event => {
224-
if (this.type === "single") {
225-
this.closeMenu();
226-
this.dropdownButton.nativeElement.focus();
227-
}
228228
if (this.type === "multi") {
229229
this.propagateChange(this.view.getSelected());
230230
} else {
231-
if (event.item.selected) {
232-
this.propagateChange(event.item);
231+
this.closeMenu();
232+
this.dropdownButton.nativeElement.focus();
233+
if (event.item && event.item.selected) {
234+
if (this.value) {
235+
this.propagateChange(event.item[this.value]);
236+
} else {
237+
this.propagateChange(event.item);
238+
}
233239
} else {
234240
this.propagateChange(null);
235241
}
@@ -266,12 +272,16 @@ export class Dropdown implements OnInit, AfterContentInit, OnDestroy {
266272
* @memberof Dropdown
267273
*/
268274
writeValue(value: any) {
269-
if (value) {
270-
if (this.type === "single") {
271-
this.view.propagateSelected([value]);
275+
if (this.type === "single") {
276+
if (this.value) {
277+
const newValue = Object.assign({}, this.view.items.find(item => item[this.value] === value));
278+
newValue.selected = true;
279+
this.view.propagateSelected([newValue]);
272280
} else {
273-
this.view.propagateSelected(value);
281+
this.view.propagateSelected([value]);
274282
}
283+
} else {
284+
this.view.propagateSelected(value);
275285
}
276286
}
277287

src/dropdown/dropdown.stories.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { storiesOf, moduleMetadata } from "@storybook/angular";
22
import { withNotes } from "@storybook/addon-notes";
33
import { action } from "@storybook/addon-actions";
4-
import { withKnobs, boolean, object } from "@storybook/addon-knobs/angular";
4+
import { withKnobs, boolean, object, text } from "@storybook/addon-knobs/angular";
55

66
import { DropdownModule } from "../";
77

88
// needed to init ngx translate and load the translations
99
import { BootstrapModule } from "../../.storybook/bootstrap.module";
10+
import { stringify } from "querystring";
1011

1112
storiesOf("Dropdown", module)
1213
.addDecorator(
@@ -62,4 +63,26 @@ storiesOf("Dropdown", module)
6263
selected: action("Selected fired for multi-select dropdown"),
6364
onClose: action("Multi-select dropdown closed")
6465
}
65-
})));
66+
})))
67+
.add("With ngModel", () => ({
68+
template: `
69+
<ibm-dropdown
70+
placeholder="Select"
71+
[disabled]="disabled"
72+
[(ngModel)]="model"
73+
value="content">
74+
<ibm-dropdown-list [items]="items"></ibm-dropdown-list>
75+
</ibm-dropdown>
76+
<span>{{model | json}}</span>
77+
`,
78+
props: {
79+
disabled: boolean("disabled", false),
80+
items: [
81+
{ content: "one" },
82+
{ content: "two" },
83+
{ content: "three" },
84+
{ content: "four" }
85+
],
86+
model: null
87+
}
88+
}));

src/dropdown/list-item.interface.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,9 @@ export interface ListItem {
4444
* @memberof ListItem
4545
*/
4646
items?: ListItem[];
47+
48+
/**
49+
* Allows for any other custom properties to be included in the ListItem
50+
*/
51+
[x: string]: any;
4752
}

src/dropdown/list/dropdown-list.component.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,13 @@ export class DropdownList implements AbstractDropdownView, AfterViewInit, OnChan
218218
}, 0);
219219
this.index = this.items.findIndex(item => item.selected);
220220
this.setupFocusObservable();
221+
setTimeout(() => {
222+
if (this.type === "single") {
223+
this.select.emit({ item: this.items.find(item => item.selected) });
224+
} else {
225+
this.select.emit(this.getSelected() || []);
226+
}
227+
});
221228
}
222229

223230
/**

src/i18n/en.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@
6363
"RESET_SEARCH": "Reset search"
6464
}
6565
},
66+
"LOADING": {
67+
"TITLE": "Loading"
68+
},
6669
"MODAL": {
6770
"CLOSE": "Close modal"
6871
},

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ export * from "./tiles/tiles.module";
2424
export * from "./progress-indicator/progress-indicator.module";
2525
export * from "./i18n/i18n.module";
2626
export * from "./pagination/pagination.module";
27+
export * from "./loading/loading.module";

0 commit comments

Comments
 (0)