diff --git a/packages/core/demos/vanilla/index.html b/packages/core/demos/vanilla/index.html
index 07dc8993bf..d3e7c29f2c 100644
--- a/packages/core/demos/vanilla/index.html
+++ b/packages/core/demos/vanilla/index.html
@@ -120,8 +120,8 @@
Gender
- Female
- Male
+ Female
+ Male
diff --git a/packages/core/src/components/item/item.tsx b/packages/core/src/components/item/item.tsx
index cba0da386e..6cc1b5f9bd 100644
--- a/packages/core/src/components/item/item.tsx
+++ b/packages/core/src/components/item/item.tsx
@@ -1,4 +1,4 @@
-import { Component, Element, Prop, Listen } from '@stencil/core';
+import { Component, Element, HostElement, Method, Prop, Listen } from '@stencil/core';
import { CssClassMap } from '../../index';
import { createThemedClasses } from '../../utils/theme';
@@ -13,6 +13,7 @@ import { createThemedClasses } from '../../utils/theme';
})
export class Item {
private childStyles: CssClassMap = Object.create(null);
+ private label: any;
@Element() private el: HTMLElement;
@@ -38,12 +39,28 @@ export class Item {
return hasChildStyleChange;
}
+ @Method()
+ getLabelText(): string {
+ return this.label ? this.label.getText() : '';
+ }
+
ionViewDidLoad() {
// Add item-button classes to each ion-button in the item
const buttons = this.el.querySelectorAll('ion-button') as any;
for (var i = 0; i < buttons.length; i++) {
buttons[i].itemButton = true;
}
+
+ this.label = this.el.querySelector('ion-label') as HostElement;
+
+ // if (label) {
+ // this.label = label;
+ // this.labelId = label.id = ('lbl-' + this.id);
+ // if (label.type) {
+ // this.setElementClass('item-label-' + label.type, true);
+ // }
+ // this.viewLabel = false;
+ // }
}
render() {
@@ -168,12 +185,6 @@ export class Item {
// }
// }
- // /**
- // * @hidden
- // */
- // getLabelText(): string {
- // return this._label ? this._label.text : '';
- // }
// /**
// * @hidden
diff --git a/packages/core/src/components/label/label.tsx b/packages/core/src/components/label/label.tsx
index 78d118e3ab..de2d30098c 100644
--- a/packages/core/src/components/label/label.tsx
+++ b/packages/core/src/components/label/label.tsx
@@ -1,4 +1,4 @@
-import { Component, Event, EventEmitter, Prop } from '@stencil/core';
+import { Component, Element, Event, EventEmitter, Method, Prop } from '@stencil/core';
@Component({
@@ -15,6 +15,8 @@ import { Component, Event, EventEmitter, Prop } from '@stencil/core';
export class Label {
styleTmr: any;
+ @Element() el: HTMLElement;
+
/**
* @output {event} Emitted when the styles change.
*/
@@ -35,6 +37,14 @@ export class Label {
*/
@Prop() stacked: boolean = false;
+ /**
+ * @hidden
+ */
+ @Method()
+ getText(): string {
+ return this.el.textContent || '';
+ }
+
ionViewDidLoad() {
this.emitStyle();
}
diff --git a/packages/core/src/components/select-option/select-option.tsx b/packages/core/src/components/select-option/select-option.tsx
new file mode 100644
index 0000000000..cf153dc753
--- /dev/null
+++ b/packages/core/src/components/select-option/select-option.tsx
@@ -0,0 +1,39 @@
+import { Component, Element, Event, EventEmitter, Method, Prop } from '@stencil/core';
+
+
+@Component({
+ tag: 'ion-select-option',
+ host: {
+ theme: 'select-option'
+ }
+})
+export class SelectOption {
+ @Element() el: HTMLElement;
+
+ @Event() ionSelect: EventEmitter;
+
+ /**
+ * @input {boolean} If true, the user cannot interact with this element.
+ */
+ @Prop() disabled: boolean = false;
+
+ /**
+ * @input {boolean} If true, the element is selected.
+ */
+ @Prop() selected: boolean = false;
+
+ /**
+ * @input {string} The text value of the option.
+ */
+ @Prop() value: string;
+
+ @Method()
+ getText(): string {
+ return this.el.textContent || '';
+ }
+
+ render() {
+ return ;
+ }
+
+}
\ No newline at end of file
diff --git a/packages/core/src/components/select/option.tsx b/packages/core/src/components/select/option.tsx
deleted file mode 100644
index 19e2e544fc..0000000000
--- a/packages/core/src/components/select/option.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Component } from '@stencil/core';
-
-
-@Component({
- tag: 'ion-option',
- host: {
- theme: 'option'
- }
-})
-export class option {
-
- render() {
- return
;
- }
-
-}
\ No newline at end of file
diff --git a/packages/core/src/components/select/select-popover.tsx b/packages/core/src/components/select/select-popover.tsx
new file mode 100644
index 0000000000..111abc5778
--- /dev/null
+++ b/packages/core/src/components/select/select-popover.tsx
@@ -0,0 +1,55 @@
+
+import { Component, Prop, PropDidChange } from '@stencil/core';
+
+export interface SelectPopoverOption {
+ text: string;
+ value: string;
+ disabled: boolean;
+ checked: boolean;
+ handler?: Function;
+}
+
+@Component({
+ tag: 'ion-select-popover'
+})
+export class SelectPopover {
+ @Prop() options: SelectPopoverOption[];
+
+ @Prop({ state: true }) value: string;
+
+ @PropDidChange('value')
+ valueChanged(val: string) {
+ console.log('Select popover value', val);
+ }
+
+ // public get value() {
+ // let checkedOption = this.options.find(option => option.checked);
+
+ // return checkedOption ? checkedOption.value : undefined;
+ // }
+
+ // public set value(value: any) {
+ // let checkedOption = this.options.find(option => option.value === value);
+ // if (checkedOption && checkedOption.handler) {
+ // checkedOption.handler();
+ // }
+ // this.viewController.dismiss(value);
+ // }
+
+ render() {
+ console.log(this.options);
+
+ return (
+
+ {this.options.map(option =>
+
+ {option.text}
+
+
+ )}
+
+ );
+ }
+}
+
+
diff --git a/packages/core/src/components/select/select.scss b/packages/core/src/components/select/select.scss
index dcd429f952..c85951c86b 100644
--- a/packages/core/src/components/select/select.scss
+++ b/packages/core/src/components/select/select.scss
@@ -17,6 +17,8 @@ $select-popover-list-margin-start: 0 !default;
ion-select {
+ position: relative;
+
display: flex;
overflow: hidden;
@@ -51,6 +53,6 @@ ion-select {
}
// TODO remove
-.select .option {
+.select-option {
display: none;
}
\ No newline at end of file
diff --git a/packages/core/src/components/select/select.tsx b/packages/core/src/components/select/select.tsx
index ab4760bd46..d8e320d8f2 100644
--- a/packages/core/src/components/select/select.tsx
+++ b/packages/core/src/components/select/select.tsx
@@ -1,4 +1,14 @@
-import { Component, CssClassMap, Event, EventEmitter, Prop } from '@stencil/core';
+import { Component, CssClassMap, Element, Event, EventEmitter, HostElement, Prop } from '@stencil/core';
+
+import { deepCopy } from '../../utils/helpers';
+
+import { ActionSheet } from '../action-sheet/action-sheet';
+import { Alert } from '../alert/alert';
+import { Popover } from '../popover/popover';
+
+import { ActionSheetController } from '../action-sheet-controller/action-sheet-controller';
+// import { AlertController } from '../alert-controller/alert-controller';
+import { PopoverController } from '../popover-controller/popover-controller';
@Component({
@@ -14,8 +24,18 @@ import { Component, CssClassMap, Event, EventEmitter, Prop } from '@stencil/core
})
export class Select {
text: any;
- id: any;
- labelId: any;
+ texts: any;
+ id: string;
+ labelId: string;
+ item: any;
+ options: any;
+ overlay: ActionSheet | Alert | Popover;
+
+ @Prop({ connect: 'ion-action-sheet-controller' }) actionSheetCtrl: ActionSheetController;
+ // @Prop({ connect: 'ion-alert-controller' }) alertCtrl: AlertController;
+ @Prop({ connect: 'ion-popover-controller' }) popoverCtrl: PopoverController;
+
+ @Element() el: HTMLElement;
/**
* @input {boolean} If true, the user cannot interact with this element. Defaults to `false`.
@@ -48,7 +68,7 @@ export class Select {
/**
* @input {string} The interface the select should use: `action-sheet`, `popover` or `alert`. Default: `alert`.
*/
- @Prop() interface: string = '';
+ @Prop() interface: string = 'alert';
/**
* @input {string} The text to display instead of the selected option's value.
@@ -61,284 +81,9 @@ export class Select {
@Prop() multiple: boolean;
/**
- * @output {EventEmitter} Emitted when the selection is cancelled.
+ * @input {string} the value of the select.
*/
- @Event() ionCancel: EventEmitter;
-
-
- hostData() {
- return {
- class: {
- 'select-disabled': this.disabled
- }
- };
- }
-
- render() {
- let addPlaceholderClass = false
-
- let selectText = this.selectedText || this.text;
- if (!selectText && this.placeholder) {
- selectText = this.placeholder;
- addPlaceholderClass = true;
- }
-
- const selectTextClasses: CssClassMap = {
- 'select-text': true,
- 'select-placeholder': addPlaceholderClass
- };
-
- return [
- // add placeholder class
- { selectText }
,
- ,
-
- ];
- }
-
-}
-
-// export class Select extends BaseInput implements OnDestroy {
-
-// _options: QueryList