mirror of
https://github.com/hcengineering/platform.git
synced 2025-06-03 14:19:56 +00:00
Merge pull request #692 from hcengineering/update-statusesbar
Update StatusesBar
This commit is contained in:
commit
efc8266dc2
@ -15,22 +15,50 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { IntlString } from '@anticrm/platform'
|
import { IntlString } from '@anticrm/platform'
|
||||||
|
import { onMount, onDestroy } from 'svelte/internal'
|
||||||
import Label from './Label.svelte'
|
import Label from './Label.svelte'
|
||||||
import StatusesBarElement from './StatusesBarElement.svelte'
|
import StatusesBarElement from './StatusesBarElement.svelte'
|
||||||
|
|
||||||
export let items: IntlString[]
|
export let items: IntlString[]
|
||||||
= ['New' as IntlString, 'In progress' as IntlString, 'Interview' as IntlString, 'Interview' as IntlString, 'Final' as IntlString]
|
= ['New' as IntlString, 'In progress' as IntlString, 'Interview' as IntlString, 'Interview' as IntlString, 'Final' as IntlString]
|
||||||
export let selected: IntlString | undefined = undefined
|
export let selected: IntlString | undefined = undefined
|
||||||
|
|
||||||
|
let div: HTMLElement
|
||||||
|
let maskLeft: boolean = false
|
||||||
|
let maskRight: boolean = false
|
||||||
|
let mask: 'left' | 'right' | 'both' | 'none' = 'none'
|
||||||
|
|
||||||
|
const checkMask = (): void => {
|
||||||
|
maskLeft = (div && div.scrollLeft > 1) ? true : false
|
||||||
|
maskRight = (div && div.scrollWidth - div.scrollLeft - div.clientWidth > 1) ? true : false
|
||||||
|
if (maskLeft || maskRight) {
|
||||||
|
if (maskLeft && maskRight) mask = 'both'
|
||||||
|
else if (maskLeft) mask = 'left'
|
||||||
|
else if (maskRight) mask = 'right'
|
||||||
|
} else mask = 'none'
|
||||||
|
}
|
||||||
|
|
||||||
|
const selectItem = (ev: Event, item: IntlString): void => {
|
||||||
|
const el: HTMLElement = ev.currentTarget as HTMLElement
|
||||||
|
el.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' })
|
||||||
|
selected = item
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
if (div) {
|
||||||
|
checkMask()
|
||||||
|
div.addEventListener('scroll', checkMask)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
onDestroy(() => { if (div) div.removeEventListener('scroll', checkMask) })
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex-row-center statusesbar-container">
|
<div bind:this={div} class="flex-row-center statusesbar-container {mask}">
|
||||||
{#each items as item, i}
|
{#each items as item, i}
|
||||||
<div
|
<div
|
||||||
class="flex-row-center cursor-pointer step-lr25"
|
class="flex-row-center cursor-pointer step-lr25"
|
||||||
class:selected={item === selected}
|
class:selected={item === selected}
|
||||||
on:click={() => {
|
on:click={(ev) => { if (item !== selected) selectItem(ev, item) }}
|
||||||
if (item !== selected) selected = item
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<StatusesBarElement side={'left'} kind={i ? 'arrow' : 'round'} selected={item === selected} />
|
<StatusesBarElement side={'left'} kind={i ? 'arrow' : 'round'} selected={item === selected} />
|
||||||
<div class="flex-row-center overflow-label label">
|
<div class="flex-row-center overflow-label label">
|
||||||
@ -45,10 +73,12 @@
|
|||||||
.statusesbar-container {
|
.statusesbar-container {
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
padding: .125rem 0;
|
padding: .125rem 0;
|
||||||
|
|
||||||
&::-webkit-scrollbar:horizontal { height: .125rem; }
|
&::-webkit-scrollbar:horizontal { height: .125rem; }
|
||||||
&::-webkit-scrollbar-track { margin: .25rem; }
|
&::-webkit-scrollbar-track { margin: .25rem; }
|
||||||
&::-webkit-scrollbar-thumb { background-color: var(--theme-bg-accent-color); }
|
&::-webkit-scrollbar-thumb { background-color: var(--theme-bg-accent-color); }
|
||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.label {
|
||||||
padding: .5rem 2rem;
|
padding: .5rem 2rem;
|
||||||
height: 2.25rem;
|
height: 2.25rem;
|
||||||
@ -67,4 +97,8 @@
|
|||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.left { mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 1) 1rem); }
|
||||||
|
.right { mask-image: linear-gradient(to left, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 1) 1rem); }
|
||||||
|
.both { mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 1) 1rem, rgba(0, 0, 0, 1) calc(100% - 1rem), rgba(0, 0, 0, 0) 100%); }
|
||||||
|
.none { mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 1); }
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
Reference in New Issue
Block a user