-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathNewFolderButton.tsx
More file actions
88 lines (82 loc) · 2.21 KB
/
NewFolderButton.tsx
File metadata and controls
88 lines (82 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import { classes, properties, useResource, useTitle } from '@tomic/react';
import React, { FormEvent, useCallback, useState } from 'react';
import { Button } from '../Button';
import {
Dialog,
DialogActions,
DialogContent,
DialogTitle,
useDialog,
} from '../Dialog';
import Field from '../forms/Field';
import { InputStyled, InputWrapper } from '../forms/InputStyles';
import { Base } from './Base';
import { useCreateAndNavigate } from './useCreateAndNavigate';
import { NewInstanceButtonProps } from './NewInstanceButtonProps';
export function NewFolderButton({
klass,
subtle,
icon,
IconComponent,
parent,
children,
label,
}: NewInstanceButtonProps): JSX.Element {
const resource = useResource(klass);
const [title] = useTitle(resource);
const [name, setName] = useState('');
const [dialogProps, show, hide] = useDialog();
const createResourceAndNavigate = useCreateAndNavigate(klass, parent);
const onDone = useCallback(
(e: FormEvent) => {
e.preventDefault();
createResourceAndNavigate('Folder', {
[properties.name]: name,
[properties.displayStyle]: classes.displayStyles.list,
[properties.isA]: [classes.folder],
});
},
[name],
);
return (
<>
<Base
onClick={show}
title={title}
icon={icon}
IconComponent={IconComponent}
subtle={subtle}
label={label}
>
{children}
</Base>
<Dialog {...dialogProps}>
<DialogTitle>
<h1>New Folder</h1>
</DialogTitle>
<DialogContent>
<form onSubmit={onDone}>
<Field required label='Name'>
<InputWrapper>
<InputStyled
placeholder='New Folder'
value={name}
autoFocus={true}
onChange={e => setName(e.target.value)}
/>
</InputWrapper>
</Field>
</form>
</DialogContent>
<DialogActions>
<Button onClick={hide} subtle>
Cancel
</Button>
<Button onClick={onDone} disabled={name.trim() === ''}>
Ok
</Button>
</DialogActions>
</Dialog>
</>
);
}