Skip to content

Commit 8146363

Browse files
committed
Pass events to parent component
1 parent 8ad8c50 commit 8146363

File tree

17 files changed

+182
-222
lines changed

17 files changed

+182
-222
lines changed

src/components.d.ts

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,11 @@ import {
1616
} from 'types/Service';
1717
import {
1818
Option,
19-
Value,
2019
} from 'types/Select';
2120

2221

2322
export namespace Components {
2423

25-
interface CustomPlanFeature {
26-
'feature': Catalog.ExpandedFeature;
27-
'planLabel': string;
28-
'selectedValue': string;
29-
}
30-
interface CustomPlanFeatureAttributes extends StencilHTMLAttributes {
31-
'feature'?: Catalog.ExpandedFeature;
32-
'planLabel'?: string;
33-
'selectedValue'?: string;
34-
}
35-
3624
interface FeaturedService {
3725
'logo': string;
3826
'name': string;
@@ -167,52 +155,53 @@ export namespace Components {
167155
}
168156

169157
interface MfSelect {
158+
'defaultValue'?: string;
170159
'name': string;
171-
'onChange': (e: UIEvent) => void;
172160
'options': Option[];
173161
'required'?: boolean;
174-
'selectedValue'?: Value;
175162
}
176163
interface MfSelectAttributes extends StencilHTMLAttributes {
164+
'defaultValue'?: string;
177165
'name'?: string;
178-
'onChange'?: (e: UIEvent) => void;
166+
'onOnInputChange'?: (event: CustomEvent) => void;
179167
'options'?: Option[];
180168
'required'?: boolean;
181-
'selectedValue'?: Value;
182169
}
183170

184171
interface MfSlider {
172+
'defaultValue'?: number;
185173
'error'?: string;
186174
'increment': number;
187175
'max': number;
188176
'min': number;
189177
'name': string;
190-
'onChange': (e: Event) => void;
191-
'selectedValue': number;
192178
'suffix': string;
193179
}
194180
interface MfSliderAttributes extends StencilHTMLAttributes {
181+
'defaultValue'?: number;
195182
'error'?: string;
196183
'increment'?: number;
197184
'max'?: number;
198185
'min'?: number;
199186
'name'?: string;
200-
'onChange'?: (e: Event) => void;
201-
'selectedValue'?: number;
187+
'onOnInputChange'?: (event: CustomEvent) => void;
202188
'suffix'?: string;
203189
}
204190

205191
interface MfToggle {
206192
'ariaLabelledby'?: string;
193+
'defaultValue'?: boolean;
207194
'disabled'?: boolean;
208195
'label'?: string;
209196
'name': string;
210197
}
211198
interface MfToggleAttributes extends StencilHTMLAttributes {
212199
'ariaLabelledby'?: string;
200+
'defaultValue'?: boolean;
213201
'disabled'?: boolean;
214202
'label'?: string;
215203
'name'?: string;
204+
'onOnInputChange'?: (event: CustomEvent) => void;
216205
}
217206

218207
interface PlanDetails {
@@ -291,7 +280,6 @@ export namespace Components {
291280

292281
declare global {
293282
interface StencilElementInterfaces {
294-
'CustomPlanFeature': Components.CustomPlanFeature;
295283
'FeaturedService': Components.FeaturedService;
296284
'ImageGallery': Components.ImageGallery;
297285
'LinkButton': Components.LinkButton;
@@ -317,7 +305,6 @@ declare global {
317305
}
318306

319307
interface StencilIntrinsicElements {
320-
'custom-plan-feature': Components.CustomPlanFeatureAttributes;
321308
'featured-service': Components.FeaturedServiceAttributes;
322309
'image-gallery': Components.ImageGalleryAttributes;
323310
'link-button': Components.LinkButtonAttributes;
@@ -343,12 +330,6 @@ declare global {
343330
}
344331

345332

346-
interface HTMLCustomPlanFeatureElement extends Components.CustomPlanFeature, HTMLStencilElement {}
347-
var HTMLCustomPlanFeatureElement: {
348-
prototype: HTMLCustomPlanFeatureElement;
349-
new (): HTMLCustomPlanFeatureElement;
350-
};
351-
352333
interface HTMLFeaturedServiceElement extends Components.FeaturedService, HTMLStencilElement {}
353334
var HTMLFeaturedServiceElement: {
354335
prototype: HTMLFeaturedServiceElement;
@@ -482,7 +463,6 @@ declare global {
482463
};
483464

484465
interface HTMLElementTagNameMap {
485-
'custom-plan-feature': HTMLCustomPlanFeatureElement
486466
'featured-service': HTMLFeaturedServiceElement
487467
'image-gallery': HTMLImageGalleryElement
488468
'link-button': HTMLLinkButtonElement
@@ -508,7 +488,6 @@ declare global {
508488
}
509489

510490
interface ElementTagNameMap {
511-
'custom-plan-feature': HTMLCustomPlanFeatureElement;
512491
'featured-service': HTMLFeaturedServiceElement;
513492
'image-gallery': HTMLImageGalleryElement;
514493
'link-button': HTMLLinkButtonElement;

src/components/custom-plan-feature/custom-plan-feature.tsx

Lines changed: 0 additions & 74 deletions
This file was deleted.

src/components/custom-plan-feature/readme.md

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/components/mf-select/mf-select.tsx

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
1-
import { Component, Prop, Event, EventEmitter } from '@stencil/core';
2-
import { Option, Value } from 'types/Select';
1+
import { Component, Prop, Event, EventEmitter, Watch } from '@stencil/core';
2+
import { Option } from 'types/Select';
33

44
@Component({
55
tag: 'mf-select',
66
styleUrl: 'mf-select.css',
77
scoped: true,
88
})
99
export class MfSelect {
10-
@Prop() eventName?: string;
10+
@Prop() defaultValue?: string;
1111
@Prop() name: string;
1212
@Prop() options: Option[] = [];
1313
@Prop() required?: boolean;
14-
@Prop() selectedValue?: Value;
15-
@Event({ eventName: this.eventName }) onChange: EventEmitter;
16-
17-
private onChangeHandler(e: Event) {
18-
console.log('changed');
19-
if (!e.target || !this.eventName) return;
20-
const el = e.target as HTMLSelectElement;
21-
this.onChange.emit({ name: el.getAttribute('name'), value: el.value });
14+
@Event() onInputChange: EventEmitter;
15+
@Watch('defaultValue') watchHandler(newVal: string) {
16+
this.onInputChange.emit({ name: this.name, value: newVal });
2217
}
2318

19+
onChangeHandler = (e: Event) => {
20+
if (!e.target) return;
21+
const { value } = e.target as HTMLSelectElement;
22+
this.onInputChange.emit({ name: this.name, value });
23+
};
24+
2425
render() {
2526
return (
2627
<select name={this.name} required={this.required} onChange={this.onChangeHandler}>
2728
{this.options.map(({ label, value }) => (
28-
<option value={value} selected={this.selectedValue === value}>
29+
<option value={value} selected={value === this.defaultValue}>
2930
{label}
3031
</option>
3132
))}

src/components/mf-select/readme.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,19 @@
77

88
## Properties
99

10-
| Property | Attribute | Description | Type | Default |
11-
| --------------- | ---------------- | ----------- | ------------------------------- | ----------- |
12-
| `eventName` | `event-name` | | `string \| undefined` | `undefined` |
13-
| `name` | `name` | | `string` | `undefined` |
14-
| `options` | -- | | `Option[]` | `[]` |
15-
| `required` | `required` | | `boolean \| undefined` | `undefined` |
16-
| `selectedValue` | `selected-value` | | `number \| string \| undefined` | `undefined` |
10+
| Property | Attribute | Description | Type | Default |
11+
| -------------- | --------------- | ----------- | ---------------------- | ----------- |
12+
| `defaultValue` | `default-value` | | `string \| undefined` | `undefined` |
13+
| `name` | `name` | | `string` | `undefined` |
14+
| `options` | -- | | `Option[]` | `[]` |
15+
| `required` | `required` | | `boolean \| undefined` | `undefined` |
1716

1817

1918
## Events
2019

21-
| Event | Description | Type |
22-
| ---------- | ----------- | ------------------- |
23-
| `onChange` | | `CustomEvent<void>` |
20+
| Event | Description | Type |
21+
| --------------- | ----------- | ------------------- |
22+
| `onInputChange` | | `CustomEvent<void>` |
2423

2524

2625
----------------------------------------------

src/components/mf-slider/mf-slider.tsx

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,38 @@
1-
import { Component, Prop, Event, EventEmitter } from '@stencil/core';
1+
import { Component, Prop, Event, EventEmitter, Watch } from '@stencil/core';
22

33
@Component({
44
tag: 'mf-slider',
55
styleUrl: 'mf-slider.css',
66
scoped: true,
77
})
88
export class MfSlider {
9+
@Prop() defaultValue?: number;
910
@Prop() error?: string;
10-
@Prop() eventName?: string;
1111
@Prop() increment: number = 1;
1212
@Prop() max: number;
1313
@Prop() min: number = 0;
1414
@Prop() name: string = '';
15-
@Prop() selectedValue: number;
1615
@Prop() suffix: string = '';
17-
@Event({ eventName: this.eventName }) onChange: EventEmitter;
18-
19-
private onChangeHandler(e: Event) {
20-
if (!e.target || !this.eventName) return;
21-
const el = e.target as HTMLInputElement;
22-
this.onChange.emit({ name: el.getAttribute('name'), value: parseInt(el.value, 10) });
16+
@Event() onInputChange: EventEmitter;
17+
@Watch('defaultValue') watchHandler(newVal: number) {
18+
this.onInputChange.emit({ name: this.name, value: newVal });
2319
}
2420

21+
onChangeHandler = (e: Event) => {
22+
if (!e.target) return;
23+
const { value } = e.target as HTMLInputElement;
24+
this.onInputChange.emit({
25+
name: this.name,
26+
value: parseInt(value, 10),
27+
});
28+
};
29+
2530
get positionCount() {
2631
return (this.max - this.min) / this.increment;
2732
}
2833

2934
render() {
30-
const value = this.selectedValue || this.min;
35+
const value = this.defaultValue || this.min;
3136
return (
3237
<div class="container">
3338
{this.positionCount < 500 ? (

src/components/mf-slider/readme.md

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,22 @@
77

88
## Properties
99

10-
| Property | Attribute | Description | Type | Default |
11-
| --------------- | ---------------- | ----------- | --------------------- | ----------- |
12-
| `error` | `error` | | `string \| undefined` | `undefined` |
13-
| `eventName` | `event-name` | | `string \| undefined` | `undefined` |
14-
| `increment` | `increment` | | `number` | `1` |
15-
| `max` | `max` | | `number` | `undefined` |
16-
| `min` | `min` | | `number` | `0` |
17-
| `name` | `name` | | `string` | `''` |
18-
| `selectedValue` | `selected-value` | | `number` | `undefined` |
19-
| `suffix` | `suffix` | | `string` | `''` |
10+
| Property | Attribute | Description | Type | Default |
11+
| -------------- | --------------- | ----------- | --------------------- | ----------- |
12+
| `defaultValue` | `default-value` | | `number \| undefined` | `undefined` |
13+
| `error` | `error` | | `string \| undefined` | `undefined` |
14+
| `increment` | `increment` | | `number` | `1` |
15+
| `max` | `max` | | `number` | `undefined` |
16+
| `min` | `min` | | `number` | `0` |
17+
| `name` | `name` | | `string` | `''` |
18+
| `suffix` | `suffix` | | `string` | `''` |
2019

2120

2221
## Events
2322

24-
| Event | Description | Type |
25-
| ---------- | ----------- | ------------------- |
26-
| `onChange` | | `CustomEvent<void>` |
23+
| Event | Description | Type |
24+
| --------------- | ----------- | ------------------- |
25+
| `onInputChange` | | `CustomEvent<void>` |
2726

2827

2928
----------------------------------------------

0 commit comments

Comments
 (0)