Skip to content

Commit 3e3ef57

Browse files
authored
Merge pull request #36 from vidispine/25.3.0
25.3.0
2 parents 592492e + a208762 commit 3e3ef57

File tree

78 files changed

+2502
-288
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+2502
-288
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": "@vidispine/admin-tool",
3-
"version": "25.2.3",
3+
"version": "25.3.0",
44
"private": true,
55
"dependencies": {
66
"@devbookhq/splitter": "^1.3.2",

src/components/access/AccessControlMergedDisplay.jsx

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,24 @@ export function AccessControlMergedType({ access }) {
55
<>
66
<TextGrid title="Permission" value={access.permission} />
77
<TextGrid title="Type" value={access.type} />
8-
<TextGrid title="Priority" value={access.priority} />
9-
{access.username && <TextGrid title="User" variant="username" value={access.username} />}
10-
{access.group && <TextGrid title="Group" variant="group" value={access.group} />}
11-
{access.grantor && <TextGrid title="Grantor" variant="username" value={access.grantor} />}
12-
{access.extradata && <TextGrid title="Extra Data" value={access.extradata} />}
13-
{access.collection && (
14-
<TextGrid title="Collection" variant="collection" value={access.collection} />
15-
)}
16-
{access.library && <TextGrid title="Library" variant="collection" value={access.library} />}
17-
{access.superUser && (
18-
<TextGrid title="Super User" variant="boolean" value={access.superUser} />
19-
)}
20-
{access.matches && <TextGrid title="Matches" variant="boolean" value={access.matches} />}
21-
{access.id && <TextGrid title="ID" value={access.id} />}
22-
{access.effectivePermission && (
23-
<TextGrid title="Effective Permission" value={access.effectivePermission} />
24-
)}
8+
<TextGrid title="Priority" value={access.priority} hideNoValue />
9+
<TextGrid title="Rank" value={access.rank} />
10+
<TextGrid title="User" variant="username" value={access.username} hideNoValue />
11+
<TextGrid title="Group" variant="group" value={access.group} hideNoValue />
12+
<TextGrid title="Grantor" variant="username" value={access.grantor} hideNoValue />
13+
<TextGrid title="Extra Data" value={access.extradata} hideNoValue />
14+
<TextGrid title="Collection" variant="collection" value={access.collection} hideNoValue />
15+
<TextGrid title="Library" variant="library" value={access.library} hideNoValue />
16+
<TextGrid title="Super User" variant="boolean" value={access.superUser} hideNoValue />
17+
<TextGrid title="Matches" variant="boolean" value={access.matches} hideNoValue />
18+
<TextGrid title="ID" value={access.id} hideNoValue />
19+
<TextGrid title="Effective Permission" value={access.effectivePermission} hideNoValue />
20+
<TextGrid
21+
title="originalDisabledGrantor"
22+
value={access.originalDisabledGrantor}
23+
variant="list"
24+
hideNoValue
25+
/>
2526
</>
2627
);
2728
}
Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,56 @@
1+
import Card from '@material-ui/core/Card';
12
import CardContent from '@material-ui/core/CardContent';
23

3-
import SquareCard from '../ui/SquareCard';
4+
import FieldGroupPermissionTable from '../fieldgroup/FieldGroupPermissionTable';
5+
import MetadataFieldPermissionTable from '../metadatafield/MetadataFieldPermissionTable';
6+
import CardList from '../ui/CardList';
47

58
import { AccessControlMergedType } from './AccessControlMergedDisplay';
9+
import AccessControlMergedQueryTable from './AccessControlMergedQueryTable';
610

711
export default function AccessControlMergedList({ accessControlMergedDocument = {} }) {
8-
const { access: accessList = [] } = accessControlMergedDocument;
12+
const {
13+
access: accessList,
14+
field: metadataFieldPermissionList,
15+
fieldGroup: metadataFieldGroupPermissionList,
16+
query: queryList,
17+
} = accessControlMergedDocument;
918
return (
10-
<>
11-
{accessList.map((access, index) => (
12-
<SquareCard
13-
key={index} // eslint-disable-line react/no-array-index-key
14-
>
19+
<CardList>
20+
{Array.isArray(accessList)
21+
? accessList.map((access) => (
22+
<Card key={JSON.stringify(access)}>
23+
<CardContent>
24+
<AccessControlMergedType access={access} />
25+
</CardContent>
26+
</Card>
27+
))
28+
: null}
29+
{Array.isArray(metadataFieldPermissionList) ? (
30+
<Card>
1531
<CardContent>
16-
<AccessControlMergedType access={access} />
32+
<MetadataFieldPermissionTable
33+
metadataFieldPermissionList={metadataFieldPermissionList}
34+
/>
1735
</CardContent>
18-
</SquareCard>
19-
))}
20-
</>
36+
</Card>
37+
) : null}
38+
{Array.isArray(metadataFieldGroupPermissionList) ? (
39+
<Card>
40+
<CardContent>
41+
<FieldGroupPermissionTable
42+
metadataFieldGroupPermissionList={metadataFieldGroupPermissionList}
43+
/>
44+
</CardContent>
45+
</Card>
46+
) : null}
47+
{Array.isArray(queryList) ? (
48+
<Card>
49+
<CardContent>
50+
<AccessControlMergedQueryTable queryList={queryList} />
51+
</CardContent>
52+
</Card>
53+
) : null}
54+
</CardList>
2155
);
2256
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import TableCell from '@material-ui/core/TableCell';
2+
import TableRow from '@material-ui/core/TableRow';
3+
4+
export default function AccessControlMergedQueryRow({ query }) {
5+
return (
6+
<TableRow hover>
7+
<TableCell>{query?.username}</TableCell>
8+
<TableCell>{query?.permission}</TableCell>
9+
<TableCell>{query?.type}</TableCell>
10+
<TableCell>{query?.extradata}</TableCell>
11+
<TableCell>{query?.item}</TableCell>
12+
<TableCell />
13+
</TableRow>
14+
);
15+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import Table from '@material-ui/core/Table';
2+
import TableBody from '@material-ui/core/TableBody';
3+
import TableCell from '@material-ui/core/TableCell';
4+
import TableHead from '@material-ui/core/TableHead';
5+
import TableRow from '@material-ui/core/TableRow';
6+
7+
import AccessControlMergedQueryRow from './AccessControlMergedQueryRow';
8+
9+
export default function AccessControlMergedQueryTable({ queryList = [] }) {
10+
return (
11+
<Table>
12+
<TableHead>
13+
<TableRow>
14+
<TableCell>Username</TableCell>
15+
<TableCell>Permission</TableCell>
16+
<TableCell>Type</TableCell>
17+
<TableCell>Extra Data</TableCell>
18+
<TableCell>Item</TableCell>
19+
</TableRow>
20+
</TableHead>
21+
<TableBody>
22+
{queryList.map((query) => (
23+
<AccessControlMergedQueryRow key={query.username} query={query} />
24+
))}
25+
</TableBody>
26+
</Table>
27+
);
28+
}

src/components/collection/CollectionEntityAddForm.jsx

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import FormControl from '@material-ui/core/FormControl';
22
import FormControlLabel from '@material-ui/core/FormControlLabel';
3-
import Grid from '@material-ui/core/Grid';
43
import InputLabel from '@material-ui/core/InputLabel';
54
import MenuItem from '@material-ui/core/MenuItem';
65
import Typography from '@material-ui/core/Typography';
@@ -12,19 +11,7 @@ import BoolCheckbox from '../ui/BoolCheckbox';
1211
import Field from '../ui/Field';
1312
import FieldTypeArray from '../ui/FieldTypeArray';
1413
import FormSection from '../ui/FormSection';
15-
16-
function KeyValueType() {
17-
return (
18-
<Grid container spacing={8}>
19-
<Grid item sm={6}>
20-
<Field name="key" label="key" component={TextField} fullWidth />
21-
</Grid>
22-
<Grid item sm={6}>
23-
<Field name="value" label="value" component={TextField} fullWidth />
24-
</Grid>
25-
</Grid>
26-
);
27-
}
14+
import { KeyValuePairType } from '../ui/FormType';
2815

2916
const queryParams = () => (
3017
<>
@@ -36,6 +23,15 @@ const queryParams = () => (
3623
<MenuItem value="library">Library</MenuItem>
3724
</Field>
3825
</FormControl>
26+
<Field name="reference" label="Reference" component={TextField} fullWidth />
27+
<FormControl fullWidth>
28+
<InputLabel htmlFor="mode">Mode</InputLabel>
29+
<Field name="mode" component={Select}>
30+
<MenuItem value="REPLACE">Replace</MenuItem>
31+
<MenuItem value="ADD">Add</MenuItem>
32+
</Field>
33+
</FormControl>
34+
<Field name="before" label="Before" component={TextField} fullWidth />
3935
<FormControlLabel
4036
control={<Field name="addItems" component={BoolCheckbox} />}
4137
label="Add Items"
@@ -46,7 +42,7 @@ const queryParams = () => (
4642
arrayHeader
4743
withHeader={false}
4844
dense
49-
component={KeyValueType}
45+
component={KeyValuePairType}
5046
/>
5147
</>
5248
);

src/components/collection/CollectionEntityRemove.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ function CollectionEntityRemove({
4242
};
4343
return (
4444
<Dialog open={open} onClose={onClose} fullWidth maxWidth={false}>
45-
<DialogTitle>Remove Entity From Collection</DialogTitle>
45+
<DialogTitle>
46+
{`Remove Entity${entityId ? ` ${entityId}` : ''} From Collection${collectionId ? ` ${collectionId}` : ''}`}
47+
</DialogTitle>
4648
<DialogContent>
4749
<CollectionEntityRemoveForm
4850
onSubmit={formActions.onRemoveEntity}

src/components/collection/CollectionEntityRemoveForm.jsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,32 @@ const queryParams = () => (
1717
<MenuItem value="collection">Collection</MenuItem>
1818
<MenuItem value="library">Library</MenuItem>
1919
</Field>
20+
<Field name="reference" label="Reference" component={TextField} fullWidth />
2021
</FormControl>
2122
);
2223

23-
function CollectionEntityRemoveForm({ error, handleSubmit }) {
24+
function CollectionEntityRemoveForm({ error, collectionId, entityId, handleSubmit }) {
2425
return (
2526
<form onSubmit={handleSubmit}>
2627
{error && <Typography color="error">{error}</Typography>}
27-
<Field name="collectionId" label="Collection ID" component={TextField} fullWidth />
28-
<Field name="entityId" label="Entity ID" component={TextField} fullWidth />
28+
{!collectionId && (
29+
<Field
30+
name="collectionId"
31+
label="Collection ID"
32+
component={TextField}
33+
validate={[required]}
34+
fullWidth
35+
/>
36+
)}
37+
{!entityId && (
38+
<Field
39+
name="entityId"
40+
label="Entity ID"
41+
component={TextField}
42+
validate={[required]}
43+
fullWidth
44+
/>
45+
)}
2946
<FormSection name="queryParams" component={queryParams} />
3047
</form>
3148
);
Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,36 @@
1+
import { useState } from 'react';
2+
3+
import Card from '@material-ui/core/Card';
14
import CardContent from '@material-ui/core/CardContent';
25

3-
import SquareCard from '../../ui/SquareCard';
6+
import FilterTextField from '../../ui/FilterTextField';
47

58
import PropertiesTable from './PropertiesTable';
69

7-
export default function PropertiesCard({ ...props }) {
10+
export default function PropertiesCard({ configurationPropertyListDocument, ...props }) {
11+
const options = configurationPropertyListDocument?.property || [];
12+
const [filter, setFilter] = useState(options);
13+
const filterConfigurationPropertyListDocument = {
14+
...configurationPropertyListDocument,
15+
property: filter,
16+
};
817
return (
9-
<SquareCard>
18+
<Card>
1019
<CardContent>
11-
<PropertiesTable {...props} />
20+
<FilterTextField
21+
variant="outlined"
22+
fullWidth
23+
options={options}
24+
onChange={setFilter}
25+
optionsKey="key"
26+
minScore={0.5}
27+
/>
28+
29+
<PropertiesTable
30+
configurationPropertyListDocument={filterConfigurationPropertyListDocument}
31+
{...props}
32+
/>
1233
</CardContent>
13-
</SquareCard>
34+
</Card>
1435
);
1536
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import Dialog from '@material-ui/core/Dialog';
2+
import DialogContent from '@material-ui/core/DialogContent';
3+
import DialogTitle from '@material-ui/core/DialogTitle';
4+
import { compose } from 'redux';
5+
6+
import * as formActions from '../../formactions/fieldgroup';
7+
import withUI from '../../hoc/withUI';
8+
import WizardForm from '../ui/WizardForm';
9+
10+
import FieldGroupAccessControlForm from './FieldGroupAccessControlForm';
11+
12+
function FieldGroupAccessControlDialog({
13+
groupName,
14+
open,
15+
onClose,
16+
onSuccess,
17+
onFail,
18+
openSnackBar,
19+
}) {
20+
const onSubmitSuccess = (response, dispatch, props) => {
21+
const { data: metadataFieldAccessControlDocument } = response;
22+
const { id: accessId } = metadataFieldAccessControlDocument;
23+
const messageContent = `Metadata Field Group Access Control ${accessId} Created`;
24+
openSnackBar({ messageContent });
25+
if (onSuccess) onSuccess(response, dispatch, props);
26+
onClose();
27+
};
28+
const onSubmitFail = (error) => {
29+
const messageContent = 'Error Creating Metadata Field Group Access Control';
30+
openSnackBar({ messageContent, messageColor: 'secondary' });
31+
if (onFail) onFail(error);
32+
};
33+
return (
34+
<Dialog open={open} onClose={onClose} fullWidth maxWidth={false}>
35+
<DialogTitle>New Metadata Field Access Control</DialogTitle>
36+
<DialogContent>
37+
<WizardForm
38+
groupName={groupName}
39+
FormComponent={FieldGroupAccessControlForm}
40+
documentName="metadataFieldAccessControlDocument"
41+
onSubmit={formActions.onCreateMetadataFieldAccess}
42+
onSubmitSuccess={onSubmitSuccess}
43+
onSubmitFail={onSubmitFail}
44+
onCancel={onClose}
45+
/>
46+
</DialogContent>
47+
</Dialog>
48+
);
49+
}
50+
51+
export default compose(withUI)(FieldGroupAccessControlDialog);

0 commit comments

Comments
 (0)