Skip to content

Commit 089ce3d

Browse files
committed
feat: added overridable blocks to community search header
1 parent c743291 commit 089ce3d

3 files changed

Lines changed: 67 additions & 46 deletions

File tree

invenio_rdm_records/assets/semantic-ui/js/invenio_rdm_records/src/deposit/components/CommunityHeader/CommunityHeader.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class CommunityHeaderComponent extends Component {
3535
record,
3636
showCommunityHeader,
3737
apiConfigs,
38+
overriddenComponents,
3839
} = this.props;
3940
const { modalOpen } = this.state;
4041

@@ -88,6 +89,7 @@ class CommunityHeaderComponent extends Component {
8889
displaySelected
8990
record={record}
9091
apiConfigs={apiConfigs}
92+
overriddenComponents={overriddenComponents}
9193
trigger={
9294
<Overridable id="InvenioRdmRecords.CommunityHeader.CommunitySelectionButton.Container">
9395
<Button
@@ -145,11 +147,13 @@ CommunityHeaderComponent.propTypes = {
145147
record: PropTypes.object.isRequired,
146148
userCanManageRecord: PropTypes.bool.isRequired,
147149
apiConfigs: PropTypes.object,
150+
overriddenComponents: PropTypes.object,
148151
};
149152

150153
CommunityHeaderComponent.defaultProps = {
151154
community: undefined,
152155
apiConfigs: undefined,
156+
overriddenComponents: undefined,
153157
};
154158

155159
const mapStateToProps = (state) => ({

invenio_rdm_records/assets/semantic-ui/js/invenio_rdm_records/src/deposit/components/CommunitySelectionModal/CommunitySelectionModal.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export class CommunitySelectionModalComponent extends Component {
7070
handleClose,
7171
record,
7272
isInitialSubmission,
73+
overriddenComponents,
7374
} = this.props;
7475

7576
return (
@@ -98,6 +99,7 @@ export class CommunitySelectionModalComponent extends Component {
9899
apiConfigs={apiConfigs}
99100
record={record}
100101
isInitialSubmission={isInitialSubmission}
102+
overriddenComponents={overriddenComponents}
101103
/>
102104

103105
{extraContentComponents && (
@@ -127,6 +129,7 @@ CommunitySelectionModalComponent.propTypes = {
127129
handleClose: PropTypes.func.isRequired,
128130
record: PropTypes.object,
129131
isInitialSubmission: PropTypes.bool,
132+
overriddenComponents: PropTypes.object,
130133
};
131134

132135
CommunitySelectionModalComponent.defaultProps = {
@@ -140,6 +143,7 @@ CommunitySelectionModalComponent.defaultProps = {
140143
apiConfigs: undefined,
141144
isInitialSubmission: true,
142145
record: null,
146+
overriddenComponents: undefined,
143147
};
144148

145149
const mapStateToProps = (state) => ({

invenio_rdm_records/assets/semantic-ui/js/invenio_rdm_records/src/deposit/components/CommunitySelectionModal/CommunitySelectionSearch.js

Lines changed: 59 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import { i18next } from "@translations/invenio_rdm_records/i18next";
99
import React, { Component } from "react";
10-
import { OverridableContext, parametrize } from "react-overridable";
10+
import Overridable, { OverridableContext, parametrize } from "react-overridable";
1111
import {
1212
EmptyResults,
1313
Error,
@@ -52,6 +52,7 @@ export class CommunitySelectionSearch extends Component {
5252
pagination,
5353
myCommunitiesEnabled,
5454
autofocus,
55+
overriddenComponents: extraOverriddenComponents,
5556
} = this.props;
5657

5758
const searchApi = new InvenioSearchApi(selectedSearchApi);
@@ -60,6 +61,7 @@ export class CommunitySelectionSearch extends Component {
6061
record,
6162
isInitialSubmission,
6263
}),
64+
...extraOverriddenComponents,
6365
};
6466

6567
return (
@@ -74,51 +76,60 @@ export class CommunitySelectionSearch extends Component {
7476
>
7577
<>
7678
<Modal.Content as={Grid} className="m-0 pb-0 centered">
77-
{myCommunitiesEnabled && (
78-
<Grid.Column
79-
mobile={16}
80-
tablet={8}
81-
computer={8}
82-
textAlign="left"
83-
floated="left"
84-
className="pt-0 pl-0"
85-
>
86-
<Menu role="tablist" className="theme-primary-menu" compact>
87-
<Menu.Item
88-
as="button"
89-
role="tab"
90-
id="all-communities-tab"
91-
aria-selected={selectedAppId === allCommunities.appId}
92-
aria-controls={allCommunities.appId}
93-
name="All"
94-
active={selectedAppId === allCommunities.appId}
95-
onClick={() =>
96-
this.setState({
97-
selectedConfig: allCommunities,
98-
})
99-
}
100-
>
101-
{i18next.t("All")}
102-
</Menu.Item>
103-
<Menu.Item
104-
as="button"
105-
role="tab"
106-
id="my-communities-tab"
107-
aria-selected={selectedAppId === myCommunities.appId}
108-
aria-controls={myCommunities.appId}
109-
name="My communities"
110-
active={selectedAppId === myCommunities.appId}
111-
onClick={() =>
112-
this.setState({
113-
selectedConfig: myCommunities,
114-
})
115-
}
116-
>
117-
{i18next.t("My communities")}
118-
</Menu.Item>
119-
</Menu>
120-
</Grid.Column>
121-
)}
79+
<Overridable
80+
id="InvenioRdmRecords.CommunityHeader.CommunitySelectionSearch.TabMenu.Container"
81+
allCommunities={allCommunities}
82+
myCommunities={myCommunities}
83+
selectedAppId={selectedAppId}
84+
onSelectConfig={(config) => this.setState({ selectedConfig: config })}
85+
myCommunitiesEnabled={myCommunitiesEnabled}
86+
>
87+
{myCommunitiesEnabled && (
88+
<Grid.Column
89+
mobile={16}
90+
tablet={8}
91+
computer={8}
92+
textAlign="left"
93+
floated="left"
94+
className="pt-0 pl-0"
95+
>
96+
<Menu role="tablist" className="theme-primary-menu" compact>
97+
<Menu.Item
98+
as="button"
99+
role="tab"
100+
id="all-communities-tab"
101+
aria-selected={selectedAppId === allCommunities.appId}
102+
aria-controls={allCommunities.appId}
103+
name="All"
104+
active={selectedAppId === allCommunities.appId}
105+
onClick={() =>
106+
this.setState({
107+
selectedConfig: allCommunities,
108+
})
109+
}
110+
>
111+
{i18next.t("All")}
112+
</Menu.Item>
113+
<Menu.Item
114+
as="button"
115+
role="tab"
116+
id="my-communities-tab"
117+
aria-selected={selectedAppId === myCommunities.appId}
118+
aria-controls={myCommunities.appId}
119+
name="My communities"
120+
active={selectedAppId === myCommunities.appId}
121+
onClick={() =>
122+
this.setState({
123+
selectedConfig: myCommunities,
124+
})
125+
}
126+
>
127+
{i18next.t("My communities")}
128+
</Menu.Item>
129+
</Menu>
130+
</Grid.Column>
131+
)}
132+
</Overridable>
122133
<Grid.Column
123134
mobile={16}
124135
tablet={8}
@@ -184,6 +195,7 @@ CommunitySelectionSearch.propTypes = {
184195
pagination: PropTypes.bool,
185196
myCommunitiesEnabled: PropTypes.bool,
186197
autofocus: PropTypes.bool,
198+
overriddenComponents: PropTypes.object,
187199
};
188200

189201
CommunitySelectionSearch.defaultProps = {
@@ -193,6 +205,7 @@ CommunitySelectionSearch.defaultProps = {
193205
autofocus: true,
194206
CommunityListItem: CommunityListItem,
195207
record: null,
208+
overriddenComponents: undefined,
196209
apiConfigs: {
197210
allCommunities: {
198211
initialQueryState: { size: 5, page: 1, sortBy: "bestmatch" },

0 commit comments

Comments
 (0)