mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-15 02:11:05 +00:00
feat!: dispatch "change" event in Pagination
, rename "change" to "update" in Select
(#1497)
Closes #1491 * feat(pagination): dispatch "change" event when interacting with previous/next buttons, page/page size dropdowns * breaking(select): rename dispatched "change" event to "update" * breaking(select): forward `change` event to `Select`
This commit is contained in:
parent
724d90bd7b
commit
9198ed5474
9 changed files with 76 additions and 23 deletions
|
@ -2682,11 +2682,12 @@ None.
|
||||||
|
|
||||||
### Events
|
### Events
|
||||||
|
|
||||||
| Event name | Type | Detail |
|
| Event name | Type | Detail |
|
||||||
| :--------------------- | :--------- | :----------------------------------------------- |
|
| :--------------------- | :--------- | :------------------------------------------------ |
|
||||||
| update | dispatched | <code>{ pageSize: number; page: number; }</code> |
|
| change | dispatched | <code>{ page?: number; pageSize?: number }</code> |
|
||||||
| click:button--previous | dispatched | <code>{ page: number; }</code> |
|
| click:button--previous | dispatched | <code>{ page: number; }</code> |
|
||||||
| click:button--next | dispatched | <code>{ page: number; }</code> |
|
| click:button--next | dispatched | <code>{ page: number; }</code> |
|
||||||
|
| update | dispatched | <code>{ pageSize: number; page: number; }</code> |
|
||||||
|
|
||||||
## `PaginationNav`
|
## `PaginationNav`
|
||||||
|
|
||||||
|
@ -3179,7 +3180,8 @@ None.
|
||||||
|
|
||||||
| Event name | Type | Detail |
|
| Event name | Type | Detail |
|
||||||
| :--------- | :--------- | :-------------------------------- |
|
| :--------- | :--------- | :-------------------------------- |
|
||||||
| change | dispatched | <code>string | number</code> |
|
| update | dispatched | <code>string | number</code> |
|
||||||
|
| change | forwarded | -- |
|
||||||
| input | forwarded | -- |
|
| input | forwarded | -- |
|
||||||
| focus | forwarded | -- |
|
| focus | forwarded | -- |
|
||||||
| blur | forwarded | -- |
|
| blur | forwarded | -- |
|
||||||
|
|
|
@ -8405,8 +8405,9 @@
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"type": "dispatched",
|
"type": "dispatched",
|
||||||
"name": "update",
|
"name": "change",
|
||||||
"detail": "{ pageSize: number; page: number; }"
|
"detail": "{ page?: number; pageSize?: number }",
|
||||||
|
"description": "Dispatched after any user interaction"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "dispatched",
|
"type": "dispatched",
|
||||||
|
@ -8417,6 +8418,11 @@
|
||||||
"type": "dispatched",
|
"type": "dispatched",
|
||||||
"name": "click:button--next",
|
"name": "click:button--next",
|
||||||
"detail": "{ page: number; }"
|
"detail": "{ page: number; }"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dispatched",
|
||||||
|
"name": "update",
|
||||||
|
"detail": "{ pageSize: number; page: number; }"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"typedefs": [],
|
"typedefs": [],
|
||||||
|
@ -10252,7 +10258,13 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
{ "type": "dispatched", "name": "change", "detail": "string | number" },
|
{
|
||||||
|
"type": "dispatched",
|
||||||
|
"name": "update",
|
||||||
|
"detail": "string | number",
|
||||||
|
"description": "The selected value."
|
||||||
|
},
|
||||||
|
{ "type": "forwarded", "name": "change", "element": "select" },
|
||||||
{ "type": "forwarded", "name": "input", "element": "select" },
|
{ "type": "forwarded", "name": "input", "element": "select" },
|
||||||
{ "type": "forwarded", "name": "focus", "element": "select" },
|
{ "type": "forwarded", "name": "focus", "element": "select" },
|
||||||
{ "type": "forwarded", "name": "blur", "element": "select" }
|
{ "type": "forwarded", "name": "blur", "element": "select" }
|
||||||
|
|
|
@ -168,11 +168,33 @@
|
||||||
<h2 id="dispatched-events">Dispatched events</h2>
|
<h2 id="dispatched-events">Dispatched events</h2>
|
||||||
|
|
||||||
{#if dispatched_events.length > 0}
|
{#if dispatched_events.length > 0}
|
||||||
<UnorderedList class="my-layout-01-03">
|
{@const hasDescription = dispatched_events.find((el) => el.description)}
|
||||||
{#each dispatched_events as event (event.name)}
|
<StructuredList flush>
|
||||||
<ListItem>on:{event.name}</ListItem>
|
<StructuredListHead>
|
||||||
{/each}
|
<StructuredListRow>
|
||||||
</UnorderedList>
|
<StructuredListCell>Event name</StructuredListCell>
|
||||||
|
<StructuredListCell><code>event.details</code> type</StructuredListCell>
|
||||||
|
{#if hasDescription}
|
||||||
|
<StructuredListCell>Description</StructuredListCell>
|
||||||
|
{/if}
|
||||||
|
</StructuredListRow>
|
||||||
|
</StructuredListHead>
|
||||||
|
<StructuredListBody>
|
||||||
|
{#each dispatched_events as event (event.name)}
|
||||||
|
<StructuredListRow>
|
||||||
|
<StructuredListCell>
|
||||||
|
<strong>on:{event.name}</strong>
|
||||||
|
</StructuredListCell>
|
||||||
|
<StructuredListCell>
|
||||||
|
<code>{event.detail}</code>
|
||||||
|
</StructuredListCell>
|
||||||
|
<StructuredListCell>
|
||||||
|
{event.description ?? ""}
|
||||||
|
</StructuredListCell>
|
||||||
|
</StructuredListRow>
|
||||||
|
{/each}
|
||||||
|
</StructuredListBody>
|
||||||
|
</StructuredList>
|
||||||
{:else}
|
{:else}
|
||||||
<p class="my-layout-01-03">No dispatched events.</p>
|
<p class="my-layout-01-03">No dispatched events.</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
@ -11,7 +11,7 @@ components: ["Select", "SelectItem", "SelectItemGroup", "SelectSkeleton"]
|
||||||
|
|
||||||
If the `selected` prop is not set, the value of the first `SelectItem` will be used as the default value.
|
If the `selected` prop is not set, the value of the first `SelectItem` will be used as the default value.
|
||||||
|
|
||||||
<Select labelText="Carbon theme" on:change={e => console.log("value", e.detail)}>
|
<Select labelText="Carbon theme" on:change={e => console.log("value", e.target.value)}>
|
||||||
<SelectItem value="white" />
|
<SelectItem value="white" />
|
||||||
<SelectItem value="g10" />
|
<SelectItem value="g10" />
|
||||||
<SelectItem value="g80" />
|
<SelectItem value="g80" />
|
||||||
|
@ -23,7 +23,7 @@ If the `selected` prop is not set, the value of the first `SelectItem` will be u
|
||||||
|
|
||||||
Use the `text` prop on `SelectItem` to customize the display value.
|
Use the `text` prop on `SelectItem` to customize the display value.
|
||||||
|
|
||||||
<Select labelText="Carbon theme" on:change={e => console.log("value", e.detail)}>
|
<Select labelText="Carbon theme" on:change={e => console.log("value", e.target.value)}>
|
||||||
<SelectItem value="white" text="White" />
|
<SelectItem value="white" text="White" />
|
||||||
<SelectItem value="g10" text="Gray 10" />
|
<SelectItem value="g10" text="Gray 10" />
|
||||||
<SelectItem value="g80" text="Gray 80" />
|
<SelectItem value="g80" text="Gray 80" />
|
||||||
|
@ -35,7 +35,7 @@ Use the `text` prop on `SelectItem` to customize the display value.
|
||||||
|
|
||||||
Use the `selected` prop to specify an initial value.
|
Use the `selected` prop to specify an initial value.
|
||||||
|
|
||||||
<Select labelText="Carbon theme" selected="g10" on:change={e => console.log("value", e.detail)}>
|
<Select labelText="Carbon theme" selected="g10" on:change={e => console.log("value", e.target.value)}>
|
||||||
<SelectItem value="white" text="White" />
|
<SelectItem value="white" text="White" />
|
||||||
<SelectItem value="g10" text="Gray 10" />
|
<SelectItem value="g10" text="Gray 10" />
|
||||||
<SelectItem value="g80" text="Gray 80" />
|
<SelectItem value="g80" text="Gray 80" />
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
<script>
|
<script>
|
||||||
/**
|
/**
|
||||||
* @event {{ pageSize: number; page: number; }} update
|
* @event {{ page?: number; pageSize?: number }} change - Dispatched after any user interaction
|
||||||
* @event {{ page: number; }} click:button--previous
|
* @event {{ page: number; }} click:button--previous
|
||||||
* @event {{ page: number; }} click:button--next
|
* @event {{ page: number; }} click:button--next
|
||||||
|
* @event {{ pageSize: number; page: number; }} update
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Specify the current page index */
|
/** Specify the current page index */
|
||||||
|
@ -109,6 +110,9 @@
|
||||||
hideLabel
|
hideLabel
|
||||||
noLabel
|
noLabel
|
||||||
inline
|
inline
|
||||||
|
on:change="{() => {
|
||||||
|
dispatch('change', { pageSize });
|
||||||
|
}}"
|
||||||
bind:selected="{pageSize}"
|
bind:selected="{pageSize}"
|
||||||
>
|
>
|
||||||
{#each pageSizes as size, i (size)}
|
{#each pageSizes as size, i (size)}
|
||||||
|
@ -136,6 +140,9 @@
|
||||||
labelText="Page number, of {totalPages} pages"
|
labelText="Page number, of {totalPages} pages"
|
||||||
inline
|
inline
|
||||||
hideLabel
|
hideLabel
|
||||||
|
on:change="{() => {
|
||||||
|
dispatch('change', { page });
|
||||||
|
}}"
|
||||||
bind:selected="{page}"
|
bind:selected="{page}"
|
||||||
>
|
>
|
||||||
{#each selectItems as size, i (size)}
|
{#each selectItems as size, i (size)}
|
||||||
|
@ -161,6 +168,7 @@
|
||||||
on:click="{() => {
|
on:click="{() => {
|
||||||
page--;
|
page--;
|
||||||
dispatch('click:button--previous', { page });
|
dispatch('click:button--previous', { page });
|
||||||
|
dispatch('change', { page });
|
||||||
}}"
|
}}"
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
|
@ -176,6 +184,7 @@
|
||||||
on:click="{() => {
|
on:click="{() => {
|
||||||
page++;
|
page++;
|
||||||
dispatch('click:button--next', { page });
|
dispatch('click:button--next', { page });
|
||||||
|
dispatch('change', { page });
|
||||||
}}"
|
}}"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<script>
|
<script>
|
||||||
/**
|
/**
|
||||||
* @event {string | number} change
|
* @event {string | number} update The selected value.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
selected = $selectedValue;
|
selected = $selectedValue;
|
||||||
|
|
||||||
if (prevSelected !== undefined && selected !== prevSelected) {
|
if (prevSelected !== undefined && selected !== prevSelected) {
|
||||||
dispatch("change", $selectedValue);
|
dispatch("update", $selectedValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
prevSelected = selected;
|
prevSelected = selected;
|
||||||
|
@ -163,6 +163,7 @@
|
||||||
class:bx--select-input--sm="{size === 'sm'}"
|
class:bx--select-input--sm="{size === 'sm'}"
|
||||||
class:bx--select-input--xl="{size === 'xl'}"
|
class:bx--select-input--xl="{size === 'xl'}"
|
||||||
on:change="{handleChange}"
|
on:change="{handleChange}"
|
||||||
|
on:change
|
||||||
on:input
|
on:input
|
||||||
on:focus
|
on:focus
|
||||||
on:blur
|
on:blur
|
||||||
|
@ -206,6 +207,7 @@
|
||||||
class:bx--select-input--sm="{size === 'sm'}"
|
class:bx--select-input--sm="{size === 'sm'}"
|
||||||
class:bx--select-input--xl="{size === 'xl'}"
|
class:bx--select-input--xl="{size === 'xl'}"
|
||||||
on:change="{handleChange}"
|
on:change="{handleChange}"
|
||||||
|
on:change
|
||||||
on:input
|
on:input
|
||||||
on:focus
|
on:focus
|
||||||
on:blur
|
on:blur
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
<Pagination
|
<Pagination
|
||||||
totalItems="{102}"
|
totalItems="{102}"
|
||||||
pageSizes="{[10, 15, 20]}"
|
pageSizes="{[10, 15, 20]}"
|
||||||
|
on:change="{(e) => {
|
||||||
|
console.log(e.detail); // { pageSize?: number, page?: number }
|
||||||
|
}}"
|
||||||
on:update="{(e) => {
|
on:update="{(e) => {
|
||||||
console.log(e.detail); // { pageSize: number; page: number; }
|
console.log(e.detail); // { pageSize: number; page: number; }
|
||||||
}}"
|
}}"
|
||||||
|
|
4
types/Pagination/Pagination.svelte.d.ts
vendored
4
types/Pagination/Pagination.svelte.d.ts
vendored
|
@ -103,9 +103,11 @@ export interface PaginationProps
|
||||||
export default class Pagination extends SvelteComponentTyped<
|
export default class Pagination extends SvelteComponentTyped<
|
||||||
PaginationProps,
|
PaginationProps,
|
||||||
{
|
{
|
||||||
update: CustomEvent<{ pageSize: number; page: number }>;
|
/** Dispatched after any user interaction */
|
||||||
|
change: CustomEvent<{ page?: number; pageSize?: number }>;
|
||||||
["click:button--previous"]: CustomEvent<{ page: number }>;
|
["click:button--previous"]: CustomEvent<{ page: number }>;
|
||||||
["click:button--next"]: CustomEvent<{ page: number }>;
|
["click:button--next"]: CustomEvent<{ page: number }>;
|
||||||
|
update: CustomEvent<{ pageSize: number; page: number }>;
|
||||||
},
|
},
|
||||||
{}
|
{}
|
||||||
> {}
|
> {}
|
||||||
|
|
3
types/Select/Select.svelte.d.ts
vendored
3
types/Select/Select.svelte.d.ts
vendored
|
@ -109,7 +109,8 @@ export interface SelectProps
|
||||||
export default class Select extends SvelteComponentTyped<
|
export default class Select extends SvelteComponentTyped<
|
||||||
SelectProps,
|
SelectProps,
|
||||||
{
|
{
|
||||||
change: CustomEvent<string | number>;
|
/** The selected value. */ update: CustomEvent<string | number>;
|
||||||
|
change: WindowEventMap["change"];
|
||||||
input: WindowEventMap["input"];
|
input: WindowEventMap["input"];
|
||||||
focus: WindowEventMap["focus"];
|
focus: WindowEventMap["focus"];
|
||||||
blur: WindowEventMap["blur"];
|
blur: WindowEventMap["blur"];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue