invenio-app-rdm 13.0.0b3.dev15__py2.py3-none-any.whl → 13.0.0b3.dev16__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (19) hide show
  1. invenio_app_rdm/__init__.py +1 -1
  2. invenio_app_rdm/administration/audit_logs/audit_logs.py +22 -18
  3. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/AuditLogActions.js +136 -0
  4. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewJson.js +35 -0
  5. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewRecentChanges.js +119 -0
  6. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/index.js +2 -0
  7. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/SearchResultItemLayout.js +34 -18
  8. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js +1 -1
  9. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js +5 -0
  10. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js +7 -1
  11. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package.json +2 -1
  12. invenio_app_rdm/theme/webpack.py +1 -0
  13. {invenio_app_rdm-13.0.0b3.dev15.dist-info → invenio_app_rdm-13.0.0b3.dev16.dist-info}/METADATA +5 -1
  14. {invenio_app_rdm-13.0.0b3.dev15.dist-info → invenio_app_rdm-13.0.0b3.dev16.dist-info}/RECORD +18 -16
  15. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewAction.js +0 -0
  16. {invenio_app_rdm-13.0.0b3.dev15.dist-info → invenio_app_rdm-13.0.0b3.dev16.dist-info}/WHEEL +0 -0
  17. {invenio_app_rdm-13.0.0b3.dev15.dist-info → invenio_app_rdm-13.0.0b3.dev16.dist-info}/entry_points.txt +0 -0
  18. {invenio_app_rdm-13.0.0b3.dev15.dist-info → invenio_app_rdm-13.0.0b3.dev16.dist-info}/licenses/LICENSE +0 -0
  19. {invenio_app_rdm-13.0.0b3.dev15.dist-info → invenio_app_rdm-13.0.0b3.dev16.dist-info}/top_level.txt +0 -0
@@ -17,6 +17,6 @@
17
17
  #
18
18
  # See PEP 0440 for details - https://www.python.org/dev/peps/pep-0440
19
19
 
20
- __version__ = "13.0.0b3.dev15"
20
+ __version__ = "13.0.0b3.dev16"
21
21
 
22
22
  __all__ = ("__version__",)
@@ -34,36 +34,40 @@ class AuditLogListView(AdminResourceListView):
34
34
  display_edit = False
35
35
 
36
36
  item_field_list = {
37
- "id": {
38
- "text": _("Log ID"),
39
- "order": 1,
40
- "width": 3,
41
- "width": 3,
42
- },
43
37
  "resource.type": {
44
38
  "text": _("Resource"),
45
- "order": 2,
39
+ "order": 1,
46
40
  "width": 2,
47
41
  },
48
- "resource.id": { # Link to resource in the `resource_type` admin panel
42
+ "resource.id": {
49
43
  "text": _("Resource ID"),
50
- "order": 3,
51
- "width": 2,
44
+ "order": 2,
52
45
  },
53
46
  "action": {
54
47
  "text": _("Action"),
55
- "order": 4,
56
- "width": 2,
48
+ "order": 3,
57
49
  },
58
- "user.id": { # Link to user in user admin panel
50
+ "user.id": {
59
51
  "text": _("User"),
60
- "order": 5,
61
- "width": 3,
52
+ "order": 4,
62
53
  },
63
54
  "created": {
64
- "text": _("Timestamp"),
65
- "order": 6,
66
- "width": 7,
55
+ "text": _("Created"),
56
+ "order": 5,
57
+ },
58
+ }
59
+
60
+ actions = {
61
+ "view_log": {
62
+ "text": _("View Log"),
63
+ "payload_schema": None,
64
+ "order": 1,
65
+ },
66
+ "view_changes": {
67
+ "text": _("View Changes"),
68
+ "payload_schema": None,
69
+ "order": 2,
70
+ "show_for": ["record.publish"],
67
71
  },
68
72
  }
69
73
 
@@ -0,0 +1,136 @@
1
+ /*
2
+ * // This file is part of Invenio-App-Rdm
3
+ * // Copyright (C) 2025 CERN.
4
+ * //
5
+ * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
+ * // under the terms of the MIT License; see LICENSE file for more details.
7
+ */
8
+
9
+ import React, { Component } from "react";
10
+ import PropTypes from "prop-types";
11
+ import { Button, Modal, Icon } from "semantic-ui-react";
12
+ import { ActionModal } from "@js/invenio_administration";
13
+ import _isEmpty from "lodash/isEmpty";
14
+ import { i18next } from "@translations/invenio_app_rdm/i18next";
15
+ import { ViewRecentChanges } from "./ViewRecentChanges";
16
+ import { ViewJson } from "./ViewJson";
17
+
18
+ export class AuditLogActions extends Component {
19
+ constructor(props) {
20
+ super(props);
21
+ this.state = {
22
+ modalOpen: false,
23
+ modalHeader: undefined,
24
+ modalBody: undefined,
25
+ modalProps: undefined,
26
+ };
27
+ }
28
+
29
+ onModalTriggerClick = (e, { payloadSchema, dataName, dataActionKey }) => {
30
+ const { resource } = this.props;
31
+
32
+ if (dataActionKey === "view_changes") {
33
+ this.setState({
34
+ modalOpen: true,
35
+ modalHeader: i18next.t("Recent changes"),
36
+ modalProps: {
37
+ size: "large",
38
+ },
39
+ modalBody: (
40
+ <ViewRecentChanges
41
+ actionCancelCallback={this.closeModal}
42
+ resource={resource}
43
+ />
44
+ ),
45
+ });
46
+ } else if (dataActionKey === "view_log") {
47
+ this.setState({
48
+ modalOpen: true,
49
+ modalHeader: i18next.t("Audit Log Details"),
50
+ modalProps: {
51
+ size: "large",
52
+ },
53
+ modalBody: <ViewJson jsonData={resource} onCloseHandler={this.closeModal} />,
54
+ });
55
+ }
56
+ };
57
+
58
+ closeModal = () => {
59
+ this.setState({
60
+ modalOpen: false,
61
+ modalHeader: undefined,
62
+ modalBody: undefined,
63
+ });
64
+ };
65
+
66
+ render() {
67
+ const { actions, Element, resource } = this.props;
68
+ const { action } = resource;
69
+ const { modalOpen, modalHeader, modalBody, modalProps } = this.state;
70
+ let icon;
71
+ return (
72
+ <>
73
+ {Object.entries(actions).map(([actionKey, actionConfig]) => {
74
+ if (actionKey === "view_log") {
75
+ icon = "eye";
76
+ return (
77
+ <Element
78
+ key={actionKey}
79
+ onClick={this.onModalTriggerClick}
80
+ payloadSchema={actionConfig.payload_schema}
81
+ dataName={actionConfig.text}
82
+ dataActionKey={actionKey}
83
+ icon={icon}
84
+ fluid
85
+ basic
86
+ labelPosition="left"
87
+ >
88
+ {icon && <Icon name={icon} />}
89
+ {actionConfig.text}...
90
+ </Element>
91
+ );
92
+ }
93
+ if (actionKey === "view_changes" && actionConfig.show_for.includes(action)) {
94
+ icon = "file code outline";
95
+ return (
96
+ <Element
97
+ key={actionKey}
98
+ onClick={this.onModalTriggerClick}
99
+ payloadSchema={actionConfig.payload_schema}
100
+ dataName={actionConfig.text}
101
+ dataActionKey={actionKey}
102
+ icon={icon}
103
+ fluid
104
+ basic
105
+ labelPosition="left"
106
+ >
107
+ {icon && <Icon name={icon} />}
108
+ {actionConfig.text}...
109
+ </Element>
110
+ );
111
+ }
112
+ return null;
113
+ })}
114
+ <ActionModal modalOpen={modalOpen} resource={resource} modalProps={modalProps}>
115
+ {modalHeader && <Modal.Header>{modalHeader}</Modal.Header>}
116
+ {!_isEmpty(modalBody) && modalBody}
117
+ </ActionModal>
118
+ </>
119
+ );
120
+ }
121
+ }
122
+
123
+ AuditLogActions.propTypes = {
124
+ resource: PropTypes.object.isRequired,
125
+ actions: PropTypes.shape({
126
+ text: PropTypes.string.isRequired,
127
+ payload_schema: PropTypes.object.isRequired,
128
+ order: PropTypes.number.isRequired,
129
+ }),
130
+ Element: PropTypes.node,
131
+ };
132
+
133
+ AuditLogActions.defaultProps = {
134
+ Element: Button,
135
+ actions: undefined,
136
+ };
@@ -0,0 +1,35 @@
1
+ /*
2
+ * // This file is part of Invenio-App-Rdm
3
+ * // Copyright (C) 2025 CERN.
4
+ * //
5
+ * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
+ * // under the terms of the MIT License; see LICENSE file for more details.
7
+ */
8
+
9
+ import React, { Component } from "react";
10
+ import { Button, Modal } from "semantic-ui-react";
11
+ import PropTypes from "prop-types";
12
+ import ReactJson from "react-json-view";
13
+
14
+ export class ViewJson extends Component {
15
+ render() {
16
+ const { jsonData, onCloseHandler } = this.props;
17
+ return (
18
+ <>
19
+ <Modal.Content>
20
+ <Modal.Description>
21
+ <ReactJson src={jsonData} name={null} />
22
+ </Modal.Description>
23
+ </Modal.Content>
24
+ <Modal.Actions>
25
+ <Button onClick={onCloseHandler}>Close</Button>
26
+ </Modal.Actions>
27
+ </>
28
+ );
29
+ }
30
+ }
31
+
32
+ ViewJson.propTypes = {
33
+ jsonData: PropTypes.object.isRequired,
34
+ onCloseHandler: PropTypes.object.isRequired,
35
+ };
@@ -0,0 +1,119 @@
1
+ /*
2
+ * // This file is part of Invenio-App-Rdm
3
+ * // Copyright (C) 2025 CERN.
4
+ * //
5
+ * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
+ * // under the terms of the MIT License; see LICENSE file for more details.
7
+ */
8
+ import React, { Component } from "react";
9
+ import PropTypes from "prop-types";
10
+ import { RecordModerationApi } from "../records/api";
11
+ import { withCancel, ErrorMessage } from "react-invenio-forms";
12
+ import { Modal, Button, Grid } from "semantic-ui-react";
13
+ import { i18next } from "@translations/invenio_app_rdm/i18next";
14
+ import { RevisionsDiffViewer } from "../components/RevisionsDiffViewer";
15
+
16
+ export class ViewRecentChanges extends Component {
17
+ constructor(props) {
18
+ super(props);
19
+
20
+ this.state = {
21
+ loading: true,
22
+ error: undefined,
23
+ diff: undefined,
24
+ };
25
+ }
26
+
27
+ async fetchPreviousRevision() {
28
+ const { resource } = this.props;
29
+ const {
30
+ resource: record,
31
+ metadata: { revision_id: targetRevision } = { revision_id: null },
32
+ } = resource;
33
+ this.setState({ loading: true });
34
+
35
+ try {
36
+ if (!targetRevision) {
37
+ this.setState({
38
+ error: i18next.t("No revision ID found."),
39
+ loading: false,
40
+ });
41
+ return;
42
+ }
43
+ this.cancellableAction = withCancel(
44
+ RecordModerationApi.getLastRevision(record, targetRevision, true)
45
+ );
46
+ const response = await this.cancellableAction.promise;
47
+ const revisions = await response.data;
48
+
49
+ this.setState({
50
+ diff: {
51
+ targetRevision: revisions[0],
52
+ srcRevision: revisions.length > 1 ? revisions[1] : revisions[0],
53
+ },
54
+ loading: false,
55
+ });
56
+ } catch (error) {
57
+ if (error === "UNMOUNTED") return;
58
+ this.setState({ error: error, loading: false });
59
+ console.error(error);
60
+ }
61
+ }
62
+
63
+ componentDidMount() {
64
+ this.fetchPreviousRevision();
65
+ }
66
+
67
+ componentWillUnmount() {
68
+ this.cancellableAction && this.cancellableAction.cancel();
69
+ }
70
+
71
+ handleModalClose = () => {
72
+ const { actionCancelCallback } = this.props;
73
+ actionCancelCallback();
74
+ };
75
+
76
+ render() {
77
+ const { error, loading, diff } = this.state;
78
+
79
+ return (
80
+ <>
81
+ <Modal.Content>
82
+ {error && (
83
+ <Modal.Content>
84
+ <ErrorMessage
85
+ header={i18next.t("Unable to fetch revisions.")}
86
+ content={error}
87
+ icon="exclamation"
88
+ className="text-align-left"
89
+ negative
90
+ />
91
+ </Modal.Content>
92
+ )}
93
+ </Modal.Content>
94
+ <Modal.Content scrolling>
95
+ <RevisionsDiffViewer diff={diff} />
96
+ </Modal.Content>
97
+ <Modal.Actions>
98
+ <Grid>
99
+ <Grid.Column floated="left" width={8} textAlign="left">
100
+ <Button
101
+ onClick={this.handleModalClose}
102
+ disabled={loading}
103
+ loading={loading}
104
+ aria-label={i18next.t("Cancel revision comparison")}
105
+ >
106
+ Close
107
+ </Button>
108
+ </Grid.Column>
109
+ </Grid>
110
+ </Modal.Actions>
111
+ </>
112
+ );
113
+ }
114
+ }
115
+
116
+ ViewRecentChanges.propTypes = {
117
+ resource: PropTypes.object.isRequired,
118
+ actionCancelCallback: PropTypes.func.isRequired,
119
+ };
@@ -9,6 +9,7 @@ import { createSearchAppInit } from "@js/invenio_search_ui";
9
9
  import { NotificationController } from "@js/invenio_administration";
10
10
  import { SearchResultItemLayout } from "./search";
11
11
  import { SearchFacets } from "@js/invenio_administration";
12
+ import { AuditLogActions } from "./AuditLogActions";
12
13
 
13
14
  const domContainer = document.getElementById("invenio-search-config");
14
15
 
@@ -18,6 +19,7 @@ const overridenComponents = {
18
19
  ...defaultComponents,
19
20
  "InvenioAdministration.SearchResultItem.layout": SearchResultItemLayout,
20
21
  "SearchApp.facets": SearchFacets,
22
+ "InvenioAdministration.ResourceActions": AuditLogActions,
21
23
  };
22
24
 
23
25
  createSearchAppInit(
@@ -8,26 +8,24 @@
8
8
 
9
9
  import PropTypes from "prop-types";
10
10
  import React, { Component } from "react";
11
- import { Item, Table } from "semantic-ui-react";
12
- import { Image } from "react-invenio-forms";
11
+ import { Button, Item, Table } from "semantic-ui-react";
12
+ import { Image, toRelativeTime } from "react-invenio-forms";
13
13
  import { withState } from "react-searchkit";
14
14
  import { i18next } from "@translations/invenio_app_rdm/i18next";
15
+ import { Actions } from "@js/invenio_administration";
16
+ import { AdminUIRoutes } from "@js/invenio_administration/src/routes";
15
17
 
16
18
  class SearchResultItemComponent extends Component {
17
- componentDidMount() {
18
- console.error("result", this.props.result);
19
- }
20
-
21
19
  refreshAfterAction = () => {
22
20
  const { updateQueryState, currentQueryState } = this.props;
23
21
  updateQueryState(currentQueryState);
24
22
  };
25
23
 
26
24
  render() {
27
- const { result } = this.props;
25
+ const { title, resourceName, result, actions, idKeyPath, listUIEndpoint } =
26
+ this.props;
28
27
 
29
28
  const {
30
- id,
31
29
  created,
32
30
  action,
33
31
  resource: { id: resourceId, type: resourceType },
@@ -36,14 +34,9 @@ class SearchResultItemComponent extends Component {
36
34
 
37
35
  return (
38
36
  <Table.Row>
39
- <Table.Cell data-label={i18next.t("Log ID")}>
40
- <a target="_blank" rel="noreferrer noopener" href={result.links.self}>
41
- {id}
42
- </a>
43
- </Table.Cell>
44
37
  <Table.Cell data-label={i18next.t("Resource")}>{resourceType}</Table.Cell>
45
38
  <Table.Cell data-label={i18next.t("Resource ID")}>
46
- <a href={`/administration/${resourceType}s?q=id:${resourceId}`}>
39
+ <a target="_blank" rel="noreferrer noopener" href={`/uploads/${resourceId}`}>
47
40
  {resourceId}
48
41
  </a>
49
42
  </Table.Cell>
@@ -51,12 +44,30 @@ class SearchResultItemComponent extends Component {
51
44
  <Table.Cell data-label={i18next.t("User")}>
52
45
  <Item className="flex" key={userId}>
53
46
  <Image src={`/api/users/${userId}/avatar.svg`} avatar loadFallbackFirst />
54
- <a href={`/administration/users?q=id:${userId}`}>
55
- {userEmail} ({userId})
56
- </a>
47
+ <a href={`/administration/users?q=id:${userId}`}>{userEmail}</a>
57
48
  </Item>
58
49
  </Table.Cell>
59
- <Table.Cell data-label={i18next.t("Date")}>{created}</Table.Cell>
50
+ <Table.Cell data-label={i18next.t("Created")}>
51
+ {toRelativeTime(created)}
52
+ </Table.Cell>
53
+
54
+ {/* Actions */}
55
+ <Table.Cell collapsing>
56
+ <Button.Group size="tiny" basic widths={5} compact className="margined">
57
+ <Actions
58
+ title={title}
59
+ resourceName={resourceName}
60
+ editUrl={AdminUIRoutes.editView(listUIEndpoint, result, idKeyPath)}
61
+ displayEdit={false}
62
+ displayDelete={false}
63
+ actions={actions}
64
+ resource={result}
65
+ idKeyPath={idKeyPath}
66
+ successCallback={this.refreshAfterAction}
67
+ listUIEndpoint={listUIEndpoint}
68
+ />
69
+ </Button.Group>
70
+ </Table.Cell>
60
71
  </Table.Row>
61
72
  );
62
73
  }
@@ -64,8 +75,13 @@ class SearchResultItemComponent extends Component {
64
75
 
65
76
  SearchResultItemComponent.propTypes = {
66
77
  result: PropTypes.object.isRequired,
78
+ idKeyPath: PropTypes.string.isRequired,
67
79
  updateQueryState: PropTypes.func.isRequired,
68
80
  currentQueryState: PropTypes.object.isRequired,
81
+ listUIEndpoint: PropTypes.string.isRequired,
82
+ title: PropTypes.string.isRequired,
83
+ resourceName: PropTypes.string.isRequired,
84
+ actions: PropTypes.object.isRequired,
69
85
  };
70
86
 
71
87
  export const SearchResultItemLayout = withState(SearchResultItemComponent);
@@ -74,7 +74,7 @@ export class RevisionsDiffViewer extends Component {
74
74
 
75
75
  RevisionsDiffViewer.propTypes = {
76
76
  diff: PropTypes.object,
77
- viewerProps: PropTypes.object.isRequired,
77
+ viewerProps: PropTypes.object,
78
78
  };
79
79
 
80
80
  RevisionsDiffViewer.defaultProps = {
@@ -26,8 +26,13 @@ const getRevisions = async (record) => {
26
26
  return await http.get(APIRoutes.compare(record));
27
27
  };
28
28
 
29
+ const getLastRevision = async (record, revisionId, includePrevious) => {
30
+ return await http.get(APIRoutes.lastRevision(record, revisionId, includePrevious));
31
+ };
32
+
29
33
  export const RecordModerationApi = {
30
34
  deleteRecord: deleteRecord,
31
35
  restoreRecord: restoreRecord,
32
36
  getRevisions: getRevisions,
37
+ getLastRevision: getLastRevision,
33
38
  };
@@ -6,6 +6,7 @@
6
6
  * under the terms of the MIT License; see LICENSE file for more details.
7
7
  */
8
8
 
9
+ import { last } from "lodash";
9
10
  import _get from "lodash/get";
10
11
 
11
12
  const APIRoutesGenerators = {
@@ -15,10 +16,15 @@ const APIRoutesGenerators = {
15
16
  compare: (record, idKeyPath = "id") => {
16
17
  return `/api/records/${_get(record, idKeyPath)}/revisions`;
17
18
  },
18
-
19
19
  restore: (record, idKeyPath = "id") => {
20
20
  return `/api/records/${_get(record, idKeyPath)}/restore`;
21
21
  },
22
+ lastRevision: (record, revisionId, includePrevious = false, idKeyPath = "id") => {
23
+ return `/api/records/${_get(
24
+ record,
25
+ idKeyPath
26
+ )}/revisions/${revisionId}?include_previous=${includePrevious}`;
27
+ },
22
28
  };
23
29
  export const APIRoutes = {
24
30
  ...APIRoutesGenerators,
@@ -40,7 +40,8 @@
40
40
  "devDependencies": {
41
41
  "i18next-conv": "^10.2.0",
42
42
  "i18next-scanner": "^3.0.0",
43
- "react-i18next": "^11.11.3"
43
+ "react-i18next": "^11.11.3",
44
+ "react-json-view": "^1.21.3"
44
45
  },
45
46
  "scripts": {
46
47
  "extract_messages": "i18next-scanner --config i18next-scanner.config.js '../../js/**/*.{js,jsx}'",
@@ -60,6 +60,7 @@ theme = WebpackThemeBundle(
60
60
  "react-searchkit": "^3.0.0",
61
61
  "yup": "^0.32.0",
62
62
  "json-diff-kit": "^1.0.30",
63
+ "react-json-view": "^1.21.3",
63
64
  },
64
65
  aliases={
65
66
  # Define Semantic-UI theme configuration needed by
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invenio-app-rdm
3
- Version: 13.0.0b3.dev15
3
+ Version: 13.0.0b3.dev16
4
4
  Summary: Invenio Research Data Management.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-app-rdm
6
6
  Author: CERN
@@ -98,6 +98,10 @@ https://inveniordm.docs.cern.ch
98
98
  Changes
99
99
  =======
100
100
 
101
+ Versino v13.0.0b3.dev16 (released 2025-05-23)
102
+
103
+ - administration: audit_logs: Add View Changes and View Log button and modals
104
+
101
105
  Version v13.0.0b3.dev15 (released 2025-05-23)
102
106
 
103
107
  - Revert "views: pass record object to record details"
@@ -1,4 +1,4 @@
1
- invenio_app_rdm/__init__.py,sha256=-4bZMGMbJLFF_c420PrGVnKhvjvGZJSM7LwoOQTqMlg,700
1
+ invenio_app_rdm/__init__.py,sha256=Q0vXNeDts4DzUCAVkBt7DTtlo26Ee6X1SNM8YIFnIfo,700
2
2
  invenio_app_rdm/cli.py,sha256=G6QqNU2W6n6ICtTMnpeKFXIsdorncDmVXwwwsGH5F2k,2746
3
3
  invenio_app_rdm/config.py,sha256=xfA5wbNl9L1U-LZXdMCHz509LlvyHinPXAa_YPxDxQM,50880
4
4
  invenio_app_rdm/ext.py,sha256=PkZhATGJDgYqBJQh41NdvBZWR83mgI3Eej6rj10UVJE,5278
@@ -6,7 +6,7 @@ invenio_app_rdm/tasks.py,sha256=FyrIQXVuPjms-dNEnLrVmmdwrX_IykJ87gcSNgOR6O0,1373
6
6
  invenio_app_rdm/views.py,sha256=SDr9NwZEWQcgT_3GFRYdDf6eUaK9DfnoafIkhUf9nSI,785
7
7
  invenio_app_rdm/administration/__init__.py,sha256=8r9LeoE9fNHZSVS5QsCfVhRU7MAiEOWJk9MA3Y--4F8,251
8
8
  invenio_app_rdm/administration/audit_logs/__init__.py,sha256=jsBXeKSY5YNn1juF9sFyHPYo_XYpwdP3Dye-de7cMK0,318
9
- invenio_app_rdm/administration/audit_logs/audit_logs.py,sha256=vgrGQ1lLE5uSuoJCx9kIMQPshjxJzZlCZ4v5cZEcKus,2156
9
+ invenio_app_rdm/administration/audit_logs/audit_logs.py,sha256=6tZvqPKt54Hc8gL3Lz5LLwwKHABU3fWWhU5t0DHhgPk,2166
10
10
  invenio_app_rdm/administration/domains/__init__.py,sha256=Qob5kqjRPxpuSE5yDV2tesN6tmaKp5JcxCxGA8Mrcak,487
11
11
  invenio_app_rdm/administration/domains/domains.py,sha256=vafLa-mqkg_tQLjx328E64P_4mksB5kjBlsfunvdatg,5599
12
12
  invenio_app_rdm/administration/records/__init__.py,sha256=WpNHBm_Mk9FF8GzvrXWjL79URMSgBhpqgxvrLXNooqg,434
@@ -105,17 +105,19 @@ invenio_app_rdm/requests_ui/views/requests.py,sha256=Ww3ewDciAvcrheOwtirS6Qewj21
105
105
  invenio_app_rdm/requests_ui/views/ui.py,sha256=DBysYQa__gOCg-pikO6HmoVLmRmMAVWeTBiYhPa7PmA,2359
106
106
  invenio_app_rdm/theme/__init__.py,sha256=QbkxNjjOmGKRlie96HfTXgnFeVQjOX0GdiZnHP7pIhs,277
107
107
  invenio_app_rdm/theme/views.py,sha256=Ucn6o7mF8qR7gtOeliKC73gIBhy5LgY65rvteC1Uiog,4312
108
- invenio_app_rdm/theme/webpack.py,sha256=5oi0YBD84y8246JYGtSNmNbRUH-bz_G8WrSRRDEyplw,5201
108
+ invenio_app_rdm/theme/webpack.py,sha256=aPWl26SIJApTCN9IESlUwbCXNaUC5yAoGJFSC-omOwk,5247
109
109
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/theme.js,sha256=EBda1oklPz8u6cDz5fHU8EeDjUqyNMzOL8Quik-lCks,4592
110
110
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js,sha256=oTCQkmr7j6FwVsOfM6hsKrPHfadW7m9IurrqYVDgxDw,3628
111
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewAction.js,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/index.js,sha256=7glSWacd986Zu6l_Ob7IXp4uNWA0f51FBfRv4HZxjYU,965
113
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/SearchResultItemLayout.js,sha256=wXwMfu8u02A3KT_xZbalntDGvLwVFc9AlorUTuiSqdQ,2268
111
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/AuditLogActions.js,sha256=ugQ-0b_6_O5rDeP7JUlNJ5SLGGlip_tP3OoTT4hRcak,3984
112
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewJson.js,sha256=UX4-c4gtXOih4T7GQ1c_9zvlAEa0ljTiz22GU8A05Ps,955
113
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewRecentChanges.js,sha256=RKqpLDHZR1UNJjPYBC-XhSr4YVv5B4_BbUxAWhEqZOg,3279
114
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/index.js,sha256=Ruks4rwRBgtKrFop72ZoGNr4-BXoqqv7I-qiflZWzKg,1078
115
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/SearchResultItemLayout.js,sha256=CvH3a5Ws57x_FqZjK6vIz1AO4s6WmI0T-BkHNd8kOo0,3077
114
116
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/index.js,sha256=q1WaQ-kNNMvNdnsONMw2c4GWobizoPWsmIdWL2fRCPc,283
115
117
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js,sha256=BNdMxfFYPhlrGKPg47oc4X8ILllfCngN61L1b7Yt_8Q,2483
116
118
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUser.js,sha256=1tnHc9PaCQvVS1PVsDWtfpWzVxJJ5_eltn9WJEYygiY,2366
117
119
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js,sha256=Z21KrMyAJ1rKF5IEzM088-pTvTga21LBnG4GPYvh5g4,6890
118
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js,sha256=-2khcBmWr3zztAjy3mRz4d9gu8b8IAZtWbcnwnD5eAk,1932
120
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js,sha256=Q-aAVC9jhOaOb7rL9SD48oGuI1fTmoskX8tKGRnpt9c,1921
119
121
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js,sha256=wwvYfTJ7pBEdoeqcEqmxFLaEwpJnnFW0oRQTyAdDSBw,3038
120
122
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaForm.js,sha256=Ltr03KlCogkg2NjqWc1GkxJlYPWB2LDLHL04w6eJiRU,5749
121
123
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/index.js,sha256=soELMxc1jf_rL62CJ9wtWGVG13yk1PRY7JqseqnKkqU,297
@@ -130,9 +132,9 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/recor
130
132
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RestoreConfirmation.js,sha256=8hPHqYpvXuzaeFeGbs_XVhK3O4Wd941JGU0l7ylaQhY,3160
131
133
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/TombstoneForm.js,sha256=ip9H3wYZJl0oxYXyUgJlzIxyeT8FGAmSoEoe59U5hVQ,7048
132
134
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/index.js,sha256=kWIIp7kzH3oe4xbByiUC3SpgEjAt4R3mWH8vneGWhiU,1460
133
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js,sha256=aVg7q92xn-wRx7Uff0EXBA04qYrvhYNu7IbbzfDT_LY,982
135
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js,sha256=NxrBwrejTwqBq0LMVAuQeyFLIlwDAVHGbJi009TiLEQ,1181
134
136
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/index.js,sha256=8D199izj4qOxNVS1XrS3JutmuBYIjHkvshUdv1aU92U,261
135
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js,sha256=scsibLhOtl8m6rI1w2IZEgW5eP_z8nRPkBSSFJXoOKQ,668
137
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js,sha256=4Jg17NQH_CMbI3ydjyFStMZ4W5VkXKNavkX5fmDBgwc,920
136
138
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/AdministrationSearchLayout.js,sha256=3pRQVkFOnyqRFWmbE3vXMB75Vnrvf-Y5pzZF79iT9q0,1854
137
139
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/RecordSearchLayout.js,sha256=F3Ht0kMf6-cSmbTSRo-PnJLneCqoqh7d0ea1A2Lj2i8,2544
138
140
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/SearchResultItemLayout.js,sha256=CsbdG5fVx2hw1SenJ5wHVd468-n5qp2yhB5x3ceGCuE,5611
@@ -282,7 +284,7 @@ invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/item.v
282
284
  invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next-scanner.config.js,sha256=FeZ5h48vChch-KettQYhwpwRUladl2HXQJ_6m9kEMXQ,1860
283
285
  invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next.js,sha256=t-NhnwBb106Zxx66Hz7BBV7nxtC_Tj6_0HOncxUkzww,1070
284
286
  invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package-lock.json,sha256=5A9oCU6BbPW4FH4uFR8fxMHzwEo3HnjWFohHs6J13Cw,58457
285
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package.json,sha256=ITuri6tLK_zJr8eBrwVvQEBCnzzLnHSYrGYpsWUICco,945
287
+ invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package.json,sha256=5wzqrQr6HXsh_gsuMLHbXByWILvldYej2aP5CijBizw,979
286
288
  invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/translations.pot,sha256=S5c69QZYivrze2u_gPbz7jxr1CuilDfnsXvkQ6fRaDw,18625
287
289
  invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/index.js,sha256=9nLEfmBCv9z6skLd1nnOE8XEWugRbk_QHfimnFJBvzA,2898
288
290
  invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/messages.po,sha256=t0ijS-AHKe8xZL6FVmqcvlw6sSqyatfeI1ezE18MIzU,6654
@@ -475,7 +477,7 @@ invenio_app_rdm/users_ui/views/__init__.py,sha256=SMdY2NJj9GICfr3Xuok7qdNYVtA2bJ
475
477
  invenio_app_rdm/users_ui/views/dashboard.py,sha256=iUn2PrODAwb8ugmMosJKAjPhUzjCiWiAWoXQr9RUFuc,1793
476
478
  invenio_app_rdm/users_ui/views/ui.py,sha256=W_eXM8dLVIrNHQB2UEh37C9BYoHauft6RyvcDNFHovA,1742
477
479
  invenio_app_rdm/utils/files.py,sha256=CruDyO2gDVadSlWEJD-WHpWHeOQ0juh-Ei9jz3D9yjc,3923
478
- invenio_app_rdm-13.0.0b3.dev15.dist-info/licenses/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
480
+ invenio_app_rdm-13.0.0b3.dev16.dist-info/licenses/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
479
481
  tests/__init__.py,sha256=yKVf0yYRuxmXvyAtLjmfpHGVCsEkZOhs_FojAAM_w-8,244
480
482
  tests/conftest.py,sha256=FQ_aSBxGo0gNfV64RJ117GcmgjVbZKwpxF9_3VNdNJY,7931
481
483
  tests/test_tasks.py,sha256=YAf2mryFK6Vfzk2053XLBA2e92vbNCTWqJ6ThWhGOuQ,6645
@@ -509,8 +511,8 @@ tests/ui/test_filters.py,sha256=Q90wsJffjMVir7wNX8taGf2KZleLtPbXZXHLTkBpzLA,284
509
511
  tests/ui/test_signposting_ui.py,sha256=KCSjQlMD2VKlwQCyZYDwYjtVNL35x3u-ZC4ceD5y21w,3847
510
512
  tests/ui/test_static.py,sha256=vO3OQAOhrQESJifnQfM1pw7JYz3J874O8BAb7Cc_PPA,868
511
513
  tests/ui/test_stats_ui.py,sha256=LHa_0hjvpYvliSk_jknWy-90CO82jVElUfK5Ua_ZmfA,3554
512
- invenio_app_rdm-13.0.0b3.dev15.dist-info/METADATA,sha256=hik85SKwQd8p1ztdBPJMREQnVEdMSnsBBp6RB0bNmzQ,14090
513
- invenio_app_rdm-13.0.0b3.dev15.dist-info/WHEEL,sha256=egKm5cKfE6OqlHwodY8Jjp4yqZDBXgsj09UsV5ojd_U,109
514
- invenio_app_rdm-13.0.0b3.dev15.dist-info/entry_points.txt,sha256=rfzEeOEdtGy99NlpWzeW-32CoO5XrEpBvlZwLD2Th88,2158
515
- invenio_app_rdm-13.0.0b3.dev15.dist-info/top_level.txt,sha256=NqTqrntInEAci7EXcNBvouXFMqwyjVQhEI0b7izYRBY,22
516
- invenio_app_rdm-13.0.0b3.dev15.dist-info/RECORD,,
514
+ invenio_app_rdm-13.0.0b3.dev16.dist-info/METADATA,sha256=GPwRcGyrnNnAk7WI6gYPFpXqf-JAehp4aYogAtzKmsY,14216
515
+ invenio_app_rdm-13.0.0b3.dev16.dist-info/WHEEL,sha256=egKm5cKfE6OqlHwodY8Jjp4yqZDBXgsj09UsV5ojd_U,109
516
+ invenio_app_rdm-13.0.0b3.dev16.dist-info/entry_points.txt,sha256=rfzEeOEdtGy99NlpWzeW-32CoO5XrEpBvlZwLD2Th88,2158
517
+ invenio_app_rdm-13.0.0b3.dev16.dist-info/top_level.txt,sha256=NqTqrntInEAci7EXcNBvouXFMqwyjVQhEI0b7izYRBY,22
518
+ invenio_app_rdm-13.0.0b3.dev16.dist-info/RECORD,,