Merge pull request #113 from IBM/refactor

fix(select): use afterUpdate, correct subscription behavior
This commit is contained in:
Eric Liu 2020-01-20 16:58:57 -08:00 committed by GitHub
commit ce469df6db
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 62 additions and 42 deletions

View file

@ -36,7 +36,7 @@
.icon { .icon {
position: absolute; position: absolute;
bottom: 1rem; bottom: 1rem;
fill: var(--cds-ui-05); fill: var(--cds-icon-01);
} }
.icon--left { .icon--left {

View file

@ -60,7 +60,7 @@
<style> <style>
main { main {
margin-top: 5rem; margin-top: 5rem;
padding-left: 12rem; padding-left: 16rem;
padding-bottom: 2.5rem; padding-bottom: 2.5rem;
} }

View file

@ -4,14 +4,14 @@
import ButtonTile from './ButtonTile.svelte'; import ButtonTile from './ButtonTile.svelte';
$: { $: {
document.title = `Carbon Components Svelte`; document.title = 'Carbon Components Svelte';
} }
</script> </script>
<style> <style>
main { main {
margin-top: 5rem; margin-top: 2.5rem;
padding-left: 12rem; padding-left: 16rem;
padding-bottom: 2.5rem; padding-bottom: 2.5rem;
} }
@ -21,6 +21,11 @@
} }
} }
.banner {
background: var(--cds-ui-01);
padding: 2.5rem 0 1.5rem;
}
.bx--grid { .bx--grid {
max-width: 66rem; max-width: 66rem;
} }
@ -41,13 +46,14 @@
} }
h3 { h3 {
margin-top: 4rem; margin-top: 2.5rem;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
font-size: 1.5rem; font-size: 1.5rem;
} }
</style> </style>
<main> <main>
<div class="banner">
<div class="bx--grid"> <div class="bx--grid">
<div class="bx--row"> <div class="bx--row">
<div class="bx--col"> <div class="bx--col">
@ -63,9 +69,12 @@
<strong>Svelte</strong> <strong>Svelte</strong>
</span> </span>
</h1> </h1>
<p>The Carbon Design System implemented in Svelte</p> <h3>The Carbon Design System implemented in Svelte.</h3>
</div> </div>
</div> </div>
</div>
</div>
<div class="bx--grid">
<div class="bx--row"> <div class="bx--row">
<div class="bx--col"> <div class="bx--col">
<h3>Packages</h3> <h3>Packages</h3>

View file

@ -30,7 +30,7 @@
z-index: 9999; z-index: 9999;
top: 2.5rem; top: 2.5rem;
left: 0; left: 0;
width: 12rem; width: 16rem;
height: calc(100% - 2.5rem); height: calc(100% - 2.5rem);
background-color: var(--cds-ui-01); background-color: var(--cds-ui-01);
overflow-y: scroll; overflow-y: scroll;
@ -110,7 +110,12 @@
}} /> }} />
<nav class:toggled={$sideNavToggled}> <nav class:toggled={$sideNavToggled}>
<Search small id="search-components" labelText="Components" bind:value /> <Search
small
id="search-components"
labelText="Components"
placeholder="Search components..."
bind:value />
<ul> <ul>
{#each results as { name }, i (name)} {#each results as { name }, i (name)}
<li> <li>

View file

@ -1,21 +1,29 @@
<script> <script>
export let inline = false; export let inline = false;
import { onMount, afterUpdate } from 'svelte';
import { Select, SelectItem } from 'carbon-components-svelte'; import { Select, SelectItem } from 'carbon-components-svelte';
import { theme } from '../store'; import { theme } from '../store';
$: { onMount(() => {
document.documentElement.setAttribute('carbon-theme', $theme); let currentTheme = localStorage.getItem('theme');
if (currentTheme) {
theme.set(currentTheme);
} else {
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
theme.set('g90');
} }
}
});
afterUpdate(() => {
localStorage.setItem('theme', $theme);
document.documentElement.setAttribute('carbon-theme', $theme);
});
</script> </script>
<Select <Select {inline} labelText="Theme" bind:selected={$theme}>
{inline}
labelText="Theme"
selected={$theme}
on:change={({ detail }) => {
theme.set(detail);
}}>
<SelectItem value="white" text="White" /> <SelectItem value="white" text="White" />
<SelectItem value="g10" text="Gray 10" /> <SelectItem value="g10" text="Gray 10" />
<SelectItem value="g90" text="Gray 90" /> <SelectItem value="g90" text="Gray 90" />

View file

@ -14,7 +14,7 @@
export let selected = undefined; export let selected = undefined;
export let style = undefined; export let style = undefined;
import { createEventDispatcher, setContext } from 'svelte'; import { createEventDispatcher, setContext, afterUpdate } from 'svelte';
import { writable } from 'svelte/store'; import { writable } from 'svelte/store';
import ChevronDown16 from 'carbon-icons-svelte/lib/ChevronDown16'; import ChevronDown16 from 'carbon-icons-svelte/lib/ChevronDown16';
import WarningFilled16 from 'carbon-icons-svelte/lib/WarningFilled16'; import WarningFilled16 from 'carbon-icons-svelte/lib/WarningFilled16';
@ -26,12 +26,13 @@
setContext('Select', { selectedValue }); setContext('Select', { selectedValue });
afterUpdate(() => {
selected = $selectedValue;
dispatch('change', $selectedValue);
});
$: errorId = `error-${id}`; $: errorId = `error-${id}`;
$: selectedValue.set(selected); $: selectedValue.set(selected);
$: selected = $selectedValue;
$: {
dispatch('change', $selectedValue);
}
</script> </script>
<div class={cx('--form-item')} {style}> <div class={cx('--form-item')} {style}>
@ -85,7 +86,6 @@
aria-describedby={invalid ? errorId : undefined} aria-describedby={invalid ? errorId : undefined}
disabled={disabled || undefined} disabled={disabled || undefined}
aria-invalid={invalid || undefined} aria-invalid={invalid || undefined}
on:change
on:change={({ target }) => { on:change={({ target }) => {
selectedValue.set(target.value); selectedValue.set(target.value);
}} }}

View file

@ -15,9 +15,7 @@
let selected = false; let selected = false;
ctx.selectedValue.subscribe(currentValue => { ctx.selectedValue.subscribe(currentValue => {
if (currentValue === value) { selected = currentValue === value;
selected = true;
}
}); });
</script> </script>