import { invoke } from '@tauri-apps/api/core';
import { ask } from '@tauri-apps/plugin-dialog';
import dayjs from 'dayjs';
import { useAtomValue, useSetAtom } from 'jotai';
import { FC, useCallback, useMemo } from 'react';
import { useNavigate } from 'react-router-dom';
import { NotificationType, useNotification } from '../../components/Notifications';
import PatternPreview from '../../components/PatternPreview';
import { CurrentPatternAtom, PatternsAtom, SelectedPatternIdAtom } from '../../context/Patterns';
import { Pattern, totalDuration } from '../../context/pattern-model';
import styles from './PatternDetail.module.css';
const EmptyPromption: FC = () => {
return (
Select a pattern from left first.
);
};
const Detail: FC<{ pattern: Pattern }> = ({ pattern }) => {
const { showToast } = useNotification();
const navigate = useNavigate();
const refreshPatterns = useSetAtom(PatternsAtom);
const resetSelected = useSetAtom(SelectedPatternIdAtom);
const patternDuration = useMemo(() => totalDuration(pattern), [pattern]);
const createTime = useMemo(
() => dayjs(pattern.createdAt).format('YYYY-MM-DD HH:mm:ss'),
[pattern],
);
const handleDeleteAction = useCallback(async () => {
try {
const answer = await ask(
`The pattern ${pattern.name} will be deleted, and cannot be revoked. Are you sure?`,
{
title: 'Confirm action',
kind: 'warning',
},
);
if (answer) {
await invoke('remove_pattern', { patternId: pattern.id });
showToast(NotificationType.SUCCESS, 'Pattern deleted.');
refreshPatterns();
resetSelected(null);
}
} catch (e) {
console.error('[delete pattern]', e);
showToast(NotificationType.ERROR, 'Failed to delete pattern. Please try again.');
}
}, [pattern]);
return (
{(patternDuration / 1000).toFixed(2)} s
{pattern.pulses.length} key frame{pattern.pulses.length > 1 && 's'}
);
};
const PatternDetail: FC = () => {
const currentPattern = useAtomValue(CurrentPatternAtom);
return !currentPattern ? : ;
};
export default PatternDetail;