Skip to content

Commit 85efe85

Browse files
authored
Feature/minor adds (#46)
* add tags to multiple records works
1 parent 393f717 commit 85efe85

File tree

16 files changed

+228
-24
lines changed

16 files changed

+228
-24
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "your-rapport",
3-
"version": "0.24.0",
3+
"version": "0.25.0",
44
"description": "A chrome extension for saving screenshots and making them searchable.",
55
"license": "Commercial",
66
"scripts": {

src/components/CopyToClipboardIcon.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const CopyToClipboardIcon = (props) => {
1616

1717
return (
1818
<>
19-
<ContentCopyIcon onClick={handleClick} />
19+
<ContentCopyIcon onClick={handleClick} color={props.color}/>
2020
</>
2121
);
2222
};

src/components/dialogs/DiscoveryPluginDialog.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ const DiscoveryPluginDialog: React.FC<DiscoveryPluginDialogProps> = ({
191191
aria-haspopup="true"
192192
onClick={() => setOpen(true)}
193193
size="large"
194+
color={'primary'}
194195
>
195196
<AppsIcon style={{ zIndex: 1000 }} />
196197
</IconButton>
@@ -210,7 +211,7 @@ const DiscoveryPluginDialog: React.FC<DiscoveryPluginDialogProps> = ({
210211
<DialogContentText />
211212
<form>
212213
<div>
213-
<Typography variant="h5">
214+
<Typography variant="h5" color={'primary'}>
214215
{selectorValue}
215216
<Tooltip title={'Copy the selected selector value into your clip board'}>
216217
<CopyToClipboardIcon

src/components/dialogs/NoteDialog.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import EditIcon from '@mui/icons-material/Edit';
88
import { TextareaAutosize } from '@mui/material';
99
import { showLoader } from '../../utilities/loaders';
1010
import { getUtcNow } from '../../utilities/transformers';
11-
import { db } from '../../models/db/dexieDb';
1211
import { Rapport } from '../../models/schemas/Rapport';
1312

1413
export default function NotesDialog(props) {
@@ -48,7 +47,7 @@ export default function NotesDialog(props) {
4847

4948
return (
5049
<Fragment>
51-
<EditIcon onClick={() => setOpen(true)} />
50+
<EditIcon color={'primary'} onClick={() => setOpen(true)} />
5251
<Dialog
5352
open={open}
5453
onClose={handleClose}
@@ -76,10 +75,10 @@ export default function NotesDialog(props) {
7675
/>
7776
</DialogContent>
7877
<DialogActions>
79-
<Button onClick={handleClose} color="cancel" variant={'contained'}>
78+
<Button onClick={handleClose} color="error" variant={'contained'}>
8079
Cancel
8180
</Button>
82-
<Button onClick={handleSave} color="secondary" variant={'contained'}>
81+
<Button onClick={handleSave} color="primary" variant={'contained'}>
8382
Save
8483
</Button>
8584
</DialogActions>

src/components/dialogs/TagFormDialog.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export default function TagFormDialog(props) {
6969
return (
7070
<Fragment>
7171
<IconButton
72-
color="white"
72+
color="primary"
7373
id={'Add'}
7474
aria-controls="applications-menu"
7575
aria-haspopup="true"

src/components/dialogs/automations/BulkAutomationAddDialog.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ export default function BulkAutomationAddDialog(props) {
135135
<Button onClick={handleClose} color="cancel" variant={'contained'}>
136136
Cancel
137137
</Button>
138-
<Button onClick={handleSave} color="secondary" variant={'contained'}>
138+
<Button onClick={handleSave} color="primary" variant={'contained'}>
139139
Save
140140
</Button>
141141
</DialogActions>

src/components/dialogs/automations/ScheduledAutomationDialog.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ export default function ScheduleAutomationDialog({
232232
<Button onClick={onClose} color="cancel" variant={'contained'}>
233233
Cancel
234234
</Button>
235-
<Button onClick={handleSave} color="secondary" variant={'contained'}>
235+
<Button onClick={handleSave} color="primary" variant={'contained'}>
236236
Save
237237
</Button>
238238
</DialogActions>
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
import React, { useState, Fragment, useEffect } from 'react';
2+
import Button from '@mui/material/Button';
3+
import Dialog from '@mui/material/Dialog';
4+
import DialogActions from '@mui/material/DialogActions';
5+
import DialogContent from '@mui/material/DialogContent';
6+
import DialogTitle from '@mui/material/DialogTitle';
7+
import FormGroup from '@mui/material/FormGroup';
8+
9+
import { Autocomplete } from '@mui/material';
10+
import Chip from '@mui/material/Chip';
11+
import { Tag } from '../../../models/schemas/Tag';
12+
import { debug } from '../../../services/logger_services';
13+
import { db } from '../../../models/db/dexieDb';
14+
import {
15+
hideLoader,
16+
processNotification,
17+
showLoader,
18+
} from '../../../utilities/loaders';
19+
import { StyledTextField } from '../../inputs/StyledTextField';
20+
import { Configuration } from '../../../models/schemas/Configuration';
21+
import { getUtcNow } from '../../../utilities/transformers';
22+
import { Rapport } from '../../../models/schemas/Rapport';
23+
24+
25+
export default function AddTagsMultiplFormDialog(props) {
26+
const { refreshRows, rapports } = props;
27+
const [open, setOpen] = React.useState(false);
28+
29+
const [tags, setTags] = useState([]);
30+
const [userAddedTags, setUserAddedTags] = useState([]);
31+
32+
useEffect(() => {
33+
setOpen(props.isOpen);
34+
}, [props.isOpen]);
35+
36+
const handleClose = () => {
37+
setOpen(false);
38+
props.setIsOpen(false);
39+
};
40+
41+
useEffect(() => {
42+
async function fetchData() {
43+
setTags(await db.tag.toArray());
44+
}
45+
fetchData();
46+
setOpen(props.isOpen);
47+
}, [props.isOpen]);
48+
49+
50+
const handleSave = async () => {
51+
try {
52+
showLoader();
53+
const userTags = [...new Set(userAddedTags)].map((t) => new Tag(t));
54+
await db.tag.bulkPut(userTags);
55+
for(const rapport of rapports){
56+
const tagNames = rapport.tags.map(rt => rt.name).concat(userTags.map(ut => ut.name))
57+
rapport.tags = [...new Set(tagNames)].map((t) => new Tag(t));
58+
await Rapport.put(rapport);
59+
};
60+
61+
const configuration = await Configuration.getConfiguration();
62+
configuration.updatedOn = getUtcNow();
63+
await Configuration.setConfiguration(configuration);
64+
refreshRows();
65+
processNotification({
66+
title: 'Tag(s) Added',
67+
message: `Tag(s) have been added.`,
68+
type: 'success',
69+
});
70+
} catch (e) {
71+
debug(e.toString());
72+
processNotification({
73+
title: 'Tag(s) Add Error',
74+
message: e.toString(),
75+
type: 'danger',
76+
});
77+
} finally {
78+
setOpen(false);
79+
props.setIsOpen(false);
80+
hideLoader();
81+
}
82+
};
83+
84+
return (
85+
<Fragment>
86+
<Dialog
87+
open={open}
88+
onClose={handleClose}
89+
aria-labelledby="form-dialog-title"
90+
>
91+
<DialogTitle id="form-dialog-title">Add Tag(s)</DialogTitle>
92+
<DialogContent>
93+
<form noValidate>
94+
<FormGroup>
95+
<Autocomplete
96+
sx={{ pt: 1 }}
97+
multiple
98+
id="tags"
99+
name="tags"
100+
defaultValue={[]}
101+
options={tags?.map((tag) => tag.name.toLowerCase())}
102+
freeSolo
103+
renderTags={(value, getTagProps) =>
104+
value.map((option, index) => {
105+
const { key, ...tagProps } = getTagProps({ index });
106+
return (
107+
<Chip
108+
variant="outlined"
109+
label={option}
110+
key={key}
111+
{...tagProps}
112+
/>
113+
);
114+
})
115+
}
116+
renderInput={(params) => (
117+
<StyledTextField
118+
{...params}
119+
label="Assign Tags.."
120+
helperText={
121+
'PRESS ENTER to add a tag. Multiple tags can set.'
122+
}
123+
/>
124+
)}
125+
onChange={(event, newValue) => {
126+
setUserAddedTags(newValue);
127+
}}
128+
/>
129+
</FormGroup>
130+
</form>
131+
</DialogContent>
132+
<DialogActions>
133+
<Button onClick={handleClose} variant={'contained'} color={'cancel'}>
134+
Cancel
135+
</Button>
136+
<Button onClick={handleSave} color="primary" variant={'contained'}>
137+
Save
138+
</Button>
139+
</DialogActions>
140+
</Dialog>
141+
</Fragment>
142+
);
143+
}

src/components/inputs/StyledTextField.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ import { styled } from '@mui/material/styles';
22
import TextField from '@mui/material/TextField';
33

44
export const StyledTextField = styled(TextField)(({ theme }) => ({
5-
'& .MuiInputLabel-root': { color: '#ffe88b', margin: theme.spacing(1) },
5+
'& .MuiInputLabel-root': { color: '#fff', margin: theme.spacing(1) },
66
'& .MuiOutlinedInput-root': {
7-
'& > fieldset': { borderColor: '#ffe88b' },
7+
'& > fieldset': { borderColor: '#fff' },
88
width: 300,
99
cursor: 'pointer',
1010
},
1111
}));
1212

1313
export const StyledTextFieldNoWidth = styled(TextField)(({ theme }) => ({
14-
'& .MuiInputLabel-root': { color: '#ffe88b', margin: theme.spacing(1) },
14+
'& .MuiInputLabel-root': { color: '#fff', margin: theme.spacing(1) },
1515
'& .MuiOutlinedInput-root': {
16-
'& > fieldset': { borderColor: '#ffe88b' },
16+
'& > fieldset': { borderColor: '#fff' },
1717
cursor: 'pointer',
1818
},
1919
}));

src/components/tables/SearchDataTable.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,7 @@ export default function SearchDataTable(props) {
632632
setSelectedRows={setSelectedRows}
633633
rows={rows}
634634
onRowsDelete={rowsDelete}
635+
refreshRows={refreshRows}
635636
/>
636637
),
637638
};

0 commit comments

Comments
 (0)