carbon-components-svelte/src/components/InlineLoading/InlineLoading.svelte
Eric Liu 1286b9901d refactor(components): remove exported "props"
Closes #17

- Forward events
- Adds style prop, removes exported props
2019-12-22 09:29:45 -08:00

58 lines
1.6 KiB
Svelte

<script>
let className = undefined;
export { className as class };
export let status = 'active';
export let description = undefined;
export let iconDescription = undefined;
export let successDelay = 1500;
export let style = undefined;
import { createEventDispatcher, onDestroy } from 'svelte';
import CheckmarkFilled16 from 'carbon-icons-svelte/lib/CheckmarkFilled16';
import Error20 from 'carbon-icons-svelte/lib/Error20';
import { cx } from '../../lib';
import Loading from '../Loading';
const dispatch = createEventDispatcher();
const _class = cx('--inline-loading', className);
let timeoutId = undefined;
onDestroy(() => {
if (timeoutId !== undefined) {
window.clearTimeout(timeoutId);
timeoutId = undefined;
}
});
$: if (status === 'finished') {
timeoutId = window.setTimeout(() => {
dispatch('success');
}, successDelay);
}
</script>
<div
aria-live={$$props['aria-live'] || 'assertive'}
on:click
on:mouseover
on:mouseenter
on:mouseleave
class={_class}
{style}>
<div class={cx('--inline-loading__animation')}>
{#if status === 'error'}
<Error20 class={cx('--inline-loading--error')} />
{:else if status === 'finished'}
<CheckmarkFilled16 class={cx('--inline-loading__checkmark-container')} />
{:else if status === 'inactive' || status === 'active'}
<Loading
small
description={iconDescription}
withOverlay={false}
active={status === 'active'} />
{/if}
</div>
{#if description}
<div class={cx('--inline-loading__text')}>{description}</div>
{/if}
</div>