mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Handle switching state on first hover of button
This commit is contained in:
parent
9d5a90538a
commit
efb5286efa
2 changed files with 19 additions and 22 deletions
|
|
@ -6,7 +6,6 @@ import React from 'react'
|
|||
import { MultiSelectMode } from '../../templates/homeFeed/LibraryHeader'
|
||||
|
||||
type HeaderCheckboxIconProps = {
|
||||
color: string
|
||||
multiSelectMode: MultiSelectMode
|
||||
}
|
||||
|
||||
|
|
@ -16,20 +15,18 @@ export const HeaderCheckboxIcon = (
|
|||
switch (props.multiSelectMode) {
|
||||
case 'search':
|
||||
case 'visible':
|
||||
return <HeaderCheckboxCheckedIcon size={17} color={props.color} />
|
||||
return <HeaderCheckboxCheckedIcon size={17} />
|
||||
case 'none':
|
||||
case 'off':
|
||||
return <HeaderCheckboxUncheckedIcon size={17} color={props.color} />
|
||||
return <HeaderCheckboxUncheckedIcon size={17} />
|
||||
case 'some':
|
||||
return <HeaderCheckboxHalfCheckedIcon size={17} color={props.color} />
|
||||
return <HeaderCheckboxHalfCheckedIcon size={17} />
|
||||
}
|
||||
}
|
||||
|
||||
export class HeaderCheckboxUncheckedIcon extends React.Component<IconProps> {
|
||||
render() {
|
||||
const size = (this.props.size || 26).toString()
|
||||
const color = this.props.color || 'white'
|
||||
|
||||
return (
|
||||
<svg
|
||||
width={size}
|
||||
|
|
@ -57,8 +54,6 @@ export class HeaderCheckboxUncheckedIcon extends React.Component<IconProps> {
|
|||
export class HeaderCheckboxCheckedIcon extends React.Component<IconProps> {
|
||||
render() {
|
||||
const size = (this.props.size || 26).toString()
|
||||
const color = this.props.color || 'white'
|
||||
|
||||
return (
|
||||
<svg
|
||||
width={size}
|
||||
|
|
@ -71,17 +66,17 @@ export class HeaderCheckboxCheckedIcon extends React.Component<IconProps> {
|
|||
<path
|
||||
d="M3.479 4.16667C3.479 3.72464 3.6546 3.30072 3.96716 2.98816C4.27972 2.67559 4.70364 2.5 5.14567 2.5H16.8123C17.2544 2.5 17.6783 2.67559 17.9908 2.98816C18.3034 3.30072 18.479 3.72464 18.479 4.16667V15.8333C18.479 16.2754 18.3034 16.6993 17.9908 17.0118C17.6783 17.3244 17.2544 17.5 16.8123 17.5H5.14567C4.70364 17.5 4.27972 17.3244 3.96716 17.0118C3.6546 16.6993 3.479 16.2754 3.479 15.8333V4.16667Z"
|
||||
style={{
|
||||
stroke: 'white',
|
||||
stroke: 'var(--checkbox-color)',
|
||||
}}
|
||||
strokeWidth="1.25"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<g clip-path="url(#clip2_8938_4128)">
|
||||
<g>
|
||||
<path
|
||||
d="M7.73877 10.0004L10.0536 12.3152L14.6832 7.68555"
|
||||
style={{
|
||||
stroke: 'white',
|
||||
stroke: 'var(--checkbox-color)',
|
||||
}}
|
||||
strokeWidth="1.5"
|
||||
strokeLinecap="round"
|
||||
|
|
@ -97,8 +92,6 @@ export class HeaderCheckboxCheckedIcon extends React.Component<IconProps> {
|
|||
export class HeaderCheckboxHalfCheckedIcon extends React.Component<IconProps> {
|
||||
render() {
|
||||
const size = (this.props.size || 26).toString()
|
||||
const color = this.props.color || 'white'
|
||||
|
||||
return (
|
||||
<svg
|
||||
width={size}
|
||||
|
|
@ -107,7 +100,7 @@ export class HeaderCheckboxHalfCheckedIcon extends React.Component<IconProps> {
|
|||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<g clip-path="url(#clip0_8962_5484)">
|
||||
<g>
|
||||
<path
|
||||
d="M3.479 4.16667C3.479 3.72464 3.6546 3.30072 3.96716 2.98816C4.27972 2.67559 4.70364 2.5 5.14567 2.5H16.8123C17.2544 2.5 17.6783 2.67559 17.9908 2.98816C18.3034 3.30072 18.479 3.72464 18.479 4.16667V15.8333C18.479 16.2754 18.3034 16.6993 17.9908 17.0118C17.6783 17.3244 17.2544 17.5 16.8123 17.5H5.14567C4.70364 17.5 4.27972 17.3244 3.96716 17.0118C3.6546 16.6993 3.479 16.2754 3.479 15.8333V4.16667Z"
|
||||
style={{
|
||||
|
|
|
|||
|
|
@ -161,10 +161,7 @@ const CheckBoxButton = (props: LibraryHeaderProps): JSX.Element => {
|
|||
e.preventDefault()
|
||||
}}
|
||||
>
|
||||
<HeaderCheckboxIcon
|
||||
multiSelectMode={props.multiSelectMode}
|
||||
color={color}
|
||||
/>
|
||||
<HeaderCheckboxIcon multiSelectMode={props.multiSelectMode} />
|
||||
</Button>
|
||||
)
|
||||
}
|
||||
|
|
@ -413,6 +410,8 @@ export function SearchBox(props: LibraryHeaderProps): JSX.Element {
|
|||
function MultiSelectControls(props: LibraryHeaderProps): JSX.Element {
|
||||
const [showConfirmDelete, setShowConfirmDelete] = useState(false)
|
||||
const [showLabelsModal, setShowLabelsModal] = useState(false)
|
||||
// Don't change on immediate hover, the button has to be blurred at least once
|
||||
const [hoveredOut, setHoveredOut] = useState(false)
|
||||
const compact = false
|
||||
|
||||
return (
|
||||
|
|
@ -426,6 +425,10 @@ function MultiSelectControls(props: LibraryHeaderProps): JSX.Element {
|
|||
boxShadow:
|
||||
'0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);',
|
||||
}}
|
||||
onMouseLeave={(event) => {
|
||||
setHoveredOut(true)
|
||||
event.preventDefault()
|
||||
}}
|
||||
>
|
||||
<HStack
|
||||
alignment="center"
|
||||
|
|
@ -449,11 +452,12 @@ function MultiSelectControls(props: LibraryHeaderProps): JSX.Element {
|
|||
bg: props.multiSelectMode !== 'off' ? '$ctaBlue' : 'transparent',
|
||||
borderTopLeftRadius: '6px',
|
||||
borderBottomLeftRadius: '6px',
|
||||
'--checkbox-color': 'var(--colors-thLibraryMultiselectCheckbox)',
|
||||
'--checkbox-color': 'white',
|
||||
'&:hover': {
|
||||
bg: '$thLibraryMultiselectHover',
|
||||
'--checkbox-color':
|
||||
'var(--colors-thLibraryMultiselectCheckboxHover)',
|
||||
bg: hoveredOut ? '$thLibraryMultiselectHover' : '$ctaBlue',
|
||||
'--checkbox-color': hoveredOut
|
||||
? 'var(--colors-thLibraryMultiselectCheckboxHover)'
|
||||
: 'white',
|
||||
},
|
||||
}}
|
||||
>
|
||||
|
|
|
|||
Loading…
Reference in a new issue