carbon-components-svelte/src/Tile/TileGroup.svelte
brunnerh e8be9280c7
Update TileGroup on programmatic selection change. (#971)
Only fire `select` event for user interaction (from RadioTile).

Uses `set` function instead of `$` to prevent cyclic dependency error.
2022-01-08 09:24:33 -08:00

44 lines
983 B
Svelte

<script>
/**
* Specify the selected tile value
* @type {string}
*/
export let selected = undefined;
/** Set to `true` to disable the tile group */
export let disabled = false;
/** Specify the legend text */
export let legend = "";
import { createEventDispatcher, setContext } from "svelte";
import { writable } from "svelte/store";
const dispatch = createEventDispatcher();
const selectedValue = writable(selected);
setContext("TileGroup", {
selectedValue,
add: ({ checked, value }) => {
if (checked) {
selectedValue.set(value);
}
},
update: (value) => {
selectedValue.set(value);
dispatch("select", value);
},
});
$: selected = $selectedValue;
$: selectedValue.set(selected);
</script>
<fieldset disabled="{disabled}" class:bx--tile-group="{true}" {...$$restProps}>
{#if legend}
<legend class:bx--label="{true}">{legend}</legend>
{/if}
<div>
<slot />
</div>
</fieldset>