comprehensively completed common control operations in Pattern List
This commit is contained in:
parent
579e7265fc
commit
57ba0e3d49
|
@ -1,14 +1,29 @@
|
||||||
import { Icon } from '@iconify/react/dist/iconify.js';
|
import { Icon } from '@iconify/react/dist/iconify.js';
|
||||||
import { FC } from 'react';
|
import { useAtom } from 'jotai';
|
||||||
|
import { FC, useCallback } from 'react';
|
||||||
|
import { useNavigate } from 'react-router-dom';
|
||||||
import EditableContent from '../../components/EditableContent';
|
import EditableContent from '../../components/EditableContent';
|
||||||
|
import { CurrentPatternAtom } from '../../context/Patterns';
|
||||||
import styles from './PatternHeader.module.css';
|
import styles from './PatternHeader.module.css';
|
||||||
|
|
||||||
const PatternHeader: FC = () => {
|
const PatternHeader: FC = () => {
|
||||||
|
const navigate = useNavigate();
|
||||||
|
const [currentPattern, setPattern] = useAtom(CurrentPatternAtom);
|
||||||
|
const handleClosePattern = useCallback(() => {
|
||||||
|
setPattern(null);
|
||||||
|
navigate('/library');
|
||||||
|
}, [currentPattern]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.pattern_header}>
|
<div className={styles.pattern_header}>
|
||||||
<EditableContent as="h3" placeholder="Pattern Name" additionalClassName={styles.content} />
|
<EditableContent
|
||||||
|
as="h3"
|
||||||
|
placeholder="Pattern Name"
|
||||||
|
value={currentPattern?.name ?? null}
|
||||||
|
additionalClassName={styles.content}
|
||||||
|
/>
|
||||||
<div className="spacer" />
|
<div className="spacer" />
|
||||||
<button className="tonal">
|
<button className="tonal" onClick={handleClosePattern}>
|
||||||
<Icon icon="material-symbols-light:close" />
|
<Icon icon="material-symbols-light:close" />
|
||||||
Close Edit
|
Close Edit
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Icon } from '@iconify/react/dist/iconify.js';
|
||||||
import cx from 'clsx';
|
import cx from 'clsx';
|
||||||
import { useAtom, useAtomValue } from 'jotai';
|
import { useAtom, useAtomValue } from 'jotai';
|
||||||
import { FC, useCallback, useMemo, useState } from 'react';
|
import { FC, useCallback, useMemo, useState } from 'react';
|
||||||
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { useDebounce } from 'react-use';
|
import { useDebounce } from 'react-use';
|
||||||
import { ScrollArea } from '../../components/ScrollArea';
|
import { ScrollArea } from '../../components/ScrollArea';
|
||||||
import { CurrentPatternAtom, Pattern, PatternsAtom, totalDuration } from '../../context/Patterns';
|
import { CurrentPatternAtom, Pattern, PatternsAtom, totalDuration } from '../../context/Patterns';
|
||||||
|
@ -9,6 +10,7 @@ import styles from './Patterns.module.css';
|
||||||
|
|
||||||
const PatternCard: FC<{ pattern: Pattern }> = ({ pattern }) => {
|
const PatternCard: FC<{ pattern: Pattern }> = ({ pattern }) => {
|
||||||
const [currentPattern, setCurrentPattern] = useAtom(CurrentPatternAtom);
|
const [currentPattern, setCurrentPattern] = useAtom(CurrentPatternAtom);
|
||||||
|
const navigate = useNavigate();
|
||||||
const duration = useMemo(() => {
|
const duration = useMemo(() => {
|
||||||
return totalDuration(pattern) / 1000;
|
return totalDuration(pattern) / 1000;
|
||||||
}, [pattern]);
|
}, [pattern]);
|
||||||
|
@ -20,12 +22,17 @@ const PatternCard: FC<{ pattern: Pattern }> = ({ pattern }) => {
|
||||||
setCurrentPattern(pattern);
|
setCurrentPattern(pattern);
|
||||||
}
|
}
|
||||||
}, [pattern, currentPattern]);
|
}, [pattern, currentPattern]);
|
||||||
|
const handleDblClick = useCallback(() => {
|
||||||
|
setCurrentPattern(pattern);
|
||||||
|
navigate('/pattern-editor/edit');
|
||||||
|
}, [pattern]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={cx(styles.pattern_card, selected && styles.selected)}
|
className={cx(styles.pattern_card, selected && styles.selected)}
|
||||||
onClick={handleSingleClick}>
|
onClick={handleSingleClick}
|
||||||
<h6 className={styles.name}>{pattern.name}</h6>
|
onDoubleClick={handleDblClick}>
|
||||||
|
<h5 className={styles.name}>{pattern.name}</h5>
|
||||||
<span>{duration.toFixed(2)} s</span>
|
<span>{duration.toFixed(2)} s</span>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user