Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

overridable: enable components to be overriden #868

Merged
merged 3 commits into from
Jan 26, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -149,7 +149,7 @@ class CommunitiesCarousel extends Component {
/>
</Grid.Column>

<Grid.Column width="12" className="flex align-items-center">
<Grid.Column width="12">
<Transition.Group
as={Item.Group}
className="flex align-items-center justify-center"
Original file line number Diff line number Diff line change
@@ -8,8 +8,7 @@
import React from "react";
import ReactDOM from "react-dom";
import CommunitiesCarousel from "./CommunitiesCarousel";
import { OverridableContext } from "react-overridable";
import { overriddenComponents } from "./override";
import { OverridableContext, overrideStore } from "react-overridable";

const communitiesCarouselContainer = document.getElementById("communities-carousel");
const title = communitiesCarouselContainer.dataset.title;
@@ -18,6 +17,8 @@ const intervalDelay = parseInt(communitiesCarouselContainer.dataset.intervalDela
const animationSpeed = parseInt(communitiesCarouselContainer.dataset.animationSpeed);
const defaultLogo = communitiesCarouselContainer.dataset.defaultLogo;

const overriddenComponents = overrideStore.getAll();

ReactDOM.render(
<OverridableContext.Provider value={overriddenComponents}>
<CommunitiesCarousel

This file was deleted.

Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ import {
import { i18next } from "@translations/invenio_communities/i18next";
import React from "react";
import { GridResponsiveSidebarColumn } from "react-invenio-forms";
import { parametrize } from "react-overridable";
import { parametrize, overrideStore } from "react-overridable";
import { Count, ResultsList, SearchBar, Sort, withState } from "react-searchkit";
import { Button, Card, Container, Grid, Input, Segment } from "semantic-ui-react";
import { ComputerTabletCommunitiesItem } from "./communities_items/ComputerTabletCommunitiesItem";
@@ -26,6 +26,8 @@ import {
} from "@js/invenio_search_ui/components";
import PropTypes from "prop-types";

const appName = "InvenioCommunities.Search";

function ResultsGridItemTemplate({ result }) {
return (
<Card fluid href={`/communities/${result.slug}`}>
@@ -228,10 +230,13 @@ export const CommunitiesSearchLayout = (props) => {
open={sidebarVisible}
onHideClick={() => setSidebarVisible(false)}
// eslint-disable-next-line react/no-children-prop
children={<SearchAppFacets aggs={config.aggs} />}
children={<SearchAppFacets aggs={config.aggs} appName={appName} />}
/>
<Grid.Column mobile={16} tablet={16} computer={12}>
<SearchAppResultsPane layoutOptions={config.layoutOptions} />
<SearchAppResultsPane
layoutOptions={config.layoutOptions}
appName={appName}
/>
</Grid.Column>
</Grid.Row>
</Grid>
@@ -248,15 +253,22 @@ const ContribSearchAppFacetsWithConfig = parametrize(ContribSearchAppFacets, {
});

const defaultComponents = {
"BucketAggregation.element": RDMBucketAggregationElement,
"BucketAggregationValues.element": ContribBucketAggregationValuesElement,
"SearchApp.facets": ContribSearchAppFacetsWithConfig,
"ResultsList.item": ResultsItemTemplate,
"ResultsGrid.item": ResultsGridItemTemplate,
"SearchApp.layout": CommunitiesSearchLayout,
"SearchBar.element": CommunitiesSearchBarElement,
"SearchApp.results": CommunitiesResults,
[`${appName}.BucketAggregation.element`]: RDMBucketAggregationElement,
[`${appName}.BucketAggregationValues.element`]: ContribBucketAggregationValuesElement,
[`${appName}.SearchApp.facets`]: ContribSearchAppFacetsWithConfig,
[`${appName}.ResultsList.item`]: ResultsItemTemplate,
[`${appName}.ResultsGrid.item`]: ResultsGridItemTemplate,
[`${appName}.SearchApp.layout`]: CommunitiesSearchLayout,
[`${appName}.SearchBar.element`]: CommunitiesSearchBarElement,
[`${appName}.SearchApp.results`]: CommunitiesResults,
};

const overriddenComponents = overrideStore.getAll();

// Auto-initialize search app
createSearchAppInit(defaultComponents);
createSearchAppInit(
{ ...defaultComponents, ...overriddenComponents },
true,
"invenio-search-config",
true
);
Original file line number Diff line number Diff line change
@@ -124,7 +124,7 @@ CommunityRecordResultsGridItem.propTypes = {
result: PropTypes.object.isRequired,
};

export const CommunityRecordSearchAppLayout = ({ config }) => {
export const CommunityRecordSearchAppLayout = ({ config, appName }) => {
const [sidebarVisible, setSidebarVisible] = React.useState(false);

return (
@@ -174,10 +174,13 @@ export const CommunityRecordSearchAppLayout = ({ config }) => {
open={sidebarVisible}
onHideClick={() => setSidebarVisible(false)}
// eslint-disable-next-line react/no-children-prop
children={<SearchAppFacets aggs={config.aggs} />}
children={<SearchAppFacets aggs={config.aggs} appName={appName} />}
/>
<Grid.Column mobile={16} tablet={16} computer={12}>
<SearchAppResultsPane layoutOptions={config.layoutOptions} />
<SearchAppResultsPane
layoutOptions={config.layoutOptions}
appName={appName}
/>
</Grid.Column>
</Grid.Row>
</Grid>
@@ -187,6 +190,11 @@ export const CommunityRecordSearchAppLayout = ({ config }) => {

CommunityRecordSearchAppLayout.propTypes = {
config: PropTypes.object.isRequired,
appName: PropTypes.string,
};

CommunityRecordSearchAppLayout.defaultProps = {
appName: "",
};

export const CommunityRecordSingleSearchBarElement = withState(
@@ -436,7 +444,7 @@ export function SearchItemCreators({ creators }) {
return creators.map((creator, index) => (
<span
className="creatibutor-wrap"
key={creator.person_or_org.identifiers.identifier}
key={creator.person_or_org?.identifiers?.identifier}
>
{getLink(creator)}
{getIcon(creator)}
Original file line number Diff line number Diff line change
@@ -15,27 +15,45 @@ import {
CommunityRecordSearchBarElement,
CommunityToggleComponent,
} from "./components";
import { parametrize } from "react-overridable";
import { parametrize, overrideStore } from "react-overridable";
import {
ContribSearchAppFacets,
ContribBucketAggregationElement,
ContribBucketAggregationValuesElement,
} from "@js/invenio_search_ui/components";

const appName = "InvenioCommunities.DetailsSearch";

const ContribSearchAppFacetsWithConfig = parametrize(ContribSearchAppFacets, {
toogle: true,
});

createSearchAppInit({
"BucketAggregation.element": ContribBucketAggregationElement,
"BucketAggregationValues.element": ContribBucketAggregationValuesElement,
"ResultsGrid.item": CommunityRecordResultsGridItem,
"EmptyResults.element": CommunityEmptyResults,
"ResultsList.item": CommunityRecordResultsListItem,
"SearchApp.facets": ContribSearchAppFacetsWithConfig,
"SearchApp.layout": CommunityRecordSearchAppLayout,
"SearchBar.element": CommunityRecordSearchBarElement,
"Count.element": CommunityCountComponent,
"Error.element": CommunityErrorComponent,
"SearchFilters.Toggle.element": CommunityToggleComponent,
});
const CommunityRecordSearchAppLayoutWAppName = parametrize(
CommunityRecordSearchAppLayout,
{
appName: appName,
}
);

const defaultComponents = {
[`${appName}.BucketAggregation.element`]: ContribBucketAggregationElement,
[`${appName}.BucketAggregationValues.element`]: ContribBucketAggregationValuesElement,
[`${appName}.ResultsGrid.item`]: CommunityRecordResultsGridItem,
[`${appName}.EmptyResults.element`]: CommunityEmptyResults,
[`${appName}.ResultsList.item`]: CommunityRecordResultsListItem,
[`${appName}.SearchApp.facets`]: ContribSearchAppFacetsWithConfig,
[`${appName}.SearchApp.layout`]: CommunityRecordSearchAppLayoutWAppName,
[`${appName}.SearchBar.element`]: CommunityRecordSearchBarElement,
[`${appName}.Count.element`]: CommunityCountComponent,
[`${appName}.Error.element`]: CommunityErrorComponent,
[`${appName}.SearchFilters.Toggle.element`]: CommunityToggleComponent,
};

const overriddenComponents = overrideStore.getAll();

createSearchAppInit(
{ ...defaultComponents, ...overriddenComponents },
true,
"invenio-search-config",
true
);
Original file line number Diff line number Diff line change
@@ -60,7 +60,7 @@ export class SearchResultsBulkActions extends Component {
}));

return (
<Overridable id="SearchResultsBulkActionsManager.layout">
<Overridable id="InvenioCommunities.SearchResultsBulkActionsManager.layout">
<div className="flex">
<Checkbox
className="align-self-center mr-10"
Original file line number Diff line number Diff line change
@@ -55,7 +55,7 @@ class SearchResultsBulkActionsManager extends Component {
const { children } = this.props;
const { allSelected, selectedCount } = this.state;
return (
<Overridable id="SearchResultsBulkActionsManager.layout">
<Overridable id="InvenioCommunities.SearchResultsBulkActionsManager.layout">
<BulkActionsContext.Provider
value={{
bulkActionContext: this.selected,
Original file line number Diff line number Diff line change
@@ -19,8 +19,14 @@ import { SearchFilters } from "@js/invenio_search_ui/components/SearchFilters";

export class InvitationsSearchLayout extends Component {
render() {
const { config, roles, rolesCanInvite, community, communityGroupsEnabled } =
this.props;
const {
config,
roles,
rolesCanInvite,
community,
communityGroupsEnabled,
appName,
} = this.props;

const filtersClass = new Filters(roles);
const customFilters = filtersClass.getInvitationFilters();
@@ -50,7 +56,7 @@ export class InvitationsSearchLayout extends Component {
<FilterLabels ignoreFilters={["is_open"]} />
</div>

<SearchAppResultsPane layoutOptions={config.layoutOptions} />
<SearchAppResultsPane layoutOptions={config.layoutOptions} appName={appName} />
</>
);
}
@@ -62,4 +68,9 @@ InvitationsSearchLayout.propTypes = {
rolesCanInvite: PropTypes.object.isRequired,
community: PropTypes.object.isRequired,
communityGroupsEnabled: PropTypes.bool.isRequired,
appName: PropTypes.string,
};

InvitationsSearchLayout.defaultProps = {
appName: "",
};
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@
*/

import { createSearchAppInit } from "@js/invenio_search_ui";
import { parametrize } from "react-overridable";
import { parametrize, overrideStore } from "react-overridable";
import { DropdownSort } from "@js/invenio_search_ui/components";
import { InvitationsContextProvider as ContextProvider } from "../../api/invitations/InvitationsContextProvider";
import { InvitationResultItem } from "./InvitationResultItem";
@@ -30,6 +30,8 @@ const communitiesAllRoles = JSON.parse(dataAttr.communitiesAllRoles);
const communitiesRolesCanInvite = JSON.parse(dataAttr.communitiesRolesCanInvite);
const permissions = JSON.parse(dataAttr.permissions);

const appName = "InvenioCommunities.InvitationsSearch";

const communityGroupsEnabled = JSON.parse(dataAttr.communityGroupsEnabled);

const InvitationResultItemWithConfig = parametrize(InvitationResultItem, {
@@ -43,32 +45,35 @@ const InvitationsSearchLayoutWithConfig = parametrize(InvitationsSearchLayout, {
community: community,
permissions: permissions,
communityGroupsEnabled: communityGroupsEnabled,
appName: appName,
});

const InvitationsContextProvider = parametrize(ContextProvider, {
community: community,
});

const defaultComponents = {
"ResultsList.item": InvitationResultItemWithConfig,
"SearchApp.layout": InvitationsSearchLayoutWithConfig,
"SearchBar.element": InvitationsSearchBarElement,
"SearchApp.results": InvitationsResults,
"ResultsList.container": InvitationsResultsContainer,
"Sort.element": DropdownSort,
"RequestStatus.layout.submitted": SubmitStatus,
"RequestStatus.layout.deleted": DeleteStatus,
"RequestStatus.layout.accepted": AcceptStatus,
"RequestStatus.layout.declined": DeclineStatus,
"RequestStatus.layout.cancelled": CancelStatus,
"RequestStatus.layout.expired": ExpireStatus,
[`${appName}.ResultsList.item`]: InvitationResultItemWithConfig,
[`${appName}.SearchApp.layout`]: InvitationsSearchLayoutWithConfig,
[`${appName}.SearchBar.element`]: InvitationsSearchBarElement,
[`${appName}.SearchApp.results`]: InvitationsResults,
[`${appName}.ResultsList.container`]: InvitationsResultsContainer,
[`${appName}.Sort.element`]: DropdownSort,
[`${appName}.RequestStatus.layout.submitted`]: SubmitStatus,
[`${appName}.RequestStatus.layout.deleted`]: DeleteStatus,
[`${appName}.RequestStatus.layout.accepted`]: AcceptStatus,
[`${appName}.RequestStatus.layout.declined`]: DeclineStatus,
[`${appName}.RequestStatus.layout.cancelled`]: CancelStatus,
[`${appName}.RequestStatus.layout.expired`]: ExpireStatus,
};

const overriddenComponents = overrideStore.getAll();

// Auto-initialize search app
createSearchAppInit(
defaultComponents,
{ ...defaultComponents, ...overriddenComponents },
true,
"invenio-search-config",
false,
true,
InvitationsContextProvider
);
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ import PropTypes from "prop-types";

export class MembersSearchLayout extends Component {
render() {
const { config, roles } = this.props;
const { config, roles, appName } = this.props;
const filtersClass = new Filters(roles);
const customFilters = filtersClass.getMembersFilters();
return (
@@ -36,7 +36,7 @@ export class MembersSearchLayout extends Component {
<FilterLabels />
</div>

<SearchAppResultsPane layoutOptions={config.layoutOptions} />
<SearchAppResultsPane layoutOptions={config.layoutOptions} appName={appName} />
</>
);
}
@@ -45,4 +45,9 @@ export class MembersSearchLayout extends Component {
MembersSearchLayout.propTypes = {
config: PropTypes.object.isRequired,
roles: PropTypes.array.isRequired,
appName: PropTypes.string,
};

MembersSearchLayout.defaultProps = {
appName: "",
};
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@
*/

import { createSearchAppInit } from "@js/invenio_search_ui";
import { parametrize } from "react-overridable";
import { parametrize, overrideStore } from "react-overridable";
import { DropdownSort } from "@js/invenio_search_ui/components";
import { memberVisibilityTypes } from "../";
import { MembersSearchBarElement } from "../../components/MembersSearchBarElement";
@@ -24,6 +24,8 @@ const communitiesAllRoles = JSON.parse(dataAttr.communitiesAllRoles);
const community = JSON.parse(dataAttr.community);
const permissions = JSON.parse(dataAttr.permissions);

const appName = "InvenioCommunities.ManagerSearch";

const ManagerMembersResultItemWithConfig = parametrize(ManagerMembersResultItem, {
config: {
rolesCanUpdate: communitiesRolesCanUpdate,
@@ -50,23 +52,26 @@ const MembersSearchAppContext = parametrize(MembersSearchAppContextCmp, {

const MembersSearchLayoutWithConfig = parametrize(MembersSearchLayout, {
roles: communitiesAllRoles,
appName: appName,
});

const defaultComponents = {
"ResultsList.item": ManagerMembersResultItemWithConfig,
"ResultsGrid.item": MembersResultsGridItem,
"SearchApp.layout": MembersSearchLayoutWithConfig,
"SearchBar.element": MembersSearchBarElement,
"SearchApp.results": MembersResults,
"ResultsList.container": ManagerMembersResultContainerWithCommunity,
"Sort.element": DropdownSort,
[`${appName}.ResultsList.item`]: ManagerMembersResultItemWithConfig,
[`${appName}.ResultsGrid.item`]: MembersResultsGridItem,
[`${appName}.SearchApp.layout`]: MembersSearchLayoutWithConfig,
[`${appName}.SearchBar.element`]: MembersSearchBarElement,
[`${appName}.SearchApp.results`]: MembersResults,
[`${appName}.ResultsList.container`]: ManagerMembersResultContainerWithCommunity,
[`${appName}.Sort.element`]: DropdownSort,
};

const overriddenComponents = overrideStore.getAll();

// Auto-initialize search app
createSearchAppInit(
defaultComponents,
{ ...defaultComponents, ...overriddenComponents },
true,
"invenio-search-config",
false,
true,
MembersSearchAppContext
);
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@
*/

import { createSearchAppInit } from "@js/invenio_search_ui";
import { parametrize } from "react-overridable";
import { parametrize, overrideStore } from "react-overridable";
import { DropdownSort } from "@js/invenio_search_ui/components";
import { memberVisibilityTypes } from "../";
import { MembersSearchBarElement } from "../../components/MembersSearchBarElement";
@@ -24,6 +24,8 @@ const communitiesRolesCanUpdate = JSON.parse(dataAttr.communitiesRolesCanUpdate)
const permissions = JSON.parse(dataAttr.permissions);
const community = JSON.parse(dataAttr.community);

const appName = "InvenioCommunities.MemberSearch";

const ManagerMembersResultItemWithConfig = parametrize(ManagerMembersResultItem, {
config: {
rolesCanUpdate: communitiesRolesCanUpdate,
@@ -38,23 +40,26 @@ const MembersSearchAppContext = parametrize(MembersSearchAppContextCmp, {

const MembersSearchLayoutWithConfig = parametrize(MembersSearchLayout, {
roles: communitiesAllRoles,
appName: appName,
});

const defaultComponents = {
"ResultsList.item": ManagerMembersResultItemWithConfig,
"ResultsGrid.item": MembersResultsGridItem,
"SearchApp.layout": MembersSearchLayoutWithConfig,
"SearchBar.element": MembersSearchBarElement,
"SearchApp.results": MembersResults,
"ResultsList.container": MembersResultsContainer,
"Sort.element": DropdownSort,
[`${appName}.ResultsList.item`]: ManagerMembersResultItemWithConfig,
[`${appName}.ResultsGrid.item`]: MembersResultsGridItem,
[`${appName}.SearchApp.layout`]: MembersSearchLayoutWithConfig,
[`${appName}.SearchBar.element`]: MembersSearchBarElement,
[`${appName}.SearchApp.results`]: MembersResults,
[`${appName}.ResultsList.container`]: MembersResultsContainer,
[`${appName}.Sort.element`]: DropdownSort,
};

const overriddenComponents = overrideStore.getAll();

// Auto-initialize search app
createSearchAppInit(
defaultComponents,
{ ...defaultComponents, ...overriddenComponents },
true,
"invenio-search-config",
false,
true,
MembersSearchAppContext
);
Original file line number Diff line number Diff line change
@@ -27,16 +27,21 @@ const PublicViewSearchBar = () => {

export class PublicMembersSearchLayout extends Component {
render() {
const { config } = this.props;
const { config, appName } = this.props;
return (
<>
<PublicViewSearchBar />
<SearchAppResultsPane layoutOptions={config.layoutOptions} />
<SearchAppResultsPane layoutOptions={config.layoutOptions} appName={appName} />
</>
);
}
}

PublicMembersSearchLayout.propTypes = {
config: PropTypes.object.isRequired,
appName: PropTypes.string,
};

PublicMembersSearchLayout.defaultProps = {
appName: "",
};
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@

import { createSearchAppInit } from "@js/invenio_search_ui";
import { DropdownSort } from "@js/invenio_search_ui/components";
import { overrideStore, parametrize } from "react-overridable";

import { PublicMembersResultsItem } from "./PublicMembersResultItem";
import { MembersSearchBarElement } from "../../components/MembersSearchBarElement";
@@ -17,16 +18,29 @@ import { PublicMembersResultsContainer } from "./PublicMembersResultContainer";
import { PublicMembersSearchLayout } from "./PublicMembersSearchLayout";
import MembersEmptyResults from "../components/MembersEmptyResults";

const appName = "InvenioCommunities.PublicSearch";

const PublicMembersSearchLayoutWithConfig = parametrize(PublicMembersSearchLayout, {
appName: appName,
});

const defaultComponents = {
"ResultsList.item": PublicMembersResultsItem,
"ResultsGrid.item": MembersResultsGridItem,
"SearchApp.layout": PublicMembersSearchLayout,
"SearchBar.element": MembersSearchBarElement,
"SearchApp.results": MembersResults,
"ResultsList.container": PublicMembersResultsContainer,
"EmptyResults.element": MembersEmptyResults,
"Sort.element": DropdownSort,
[`${appName}.ResultsList.item`]: PublicMembersResultsItem,
[`${appName}.ResultsGrid.item`]: MembersResultsGridItem,
[`${appName}.SearchApp.layout`]: PublicMembersSearchLayoutWithConfig,
[`${appName}.SearchBar.element`]: MembersSearchBarElement,
[`${appName}.SearchApp.results`]: MembersResults,
[`${appName}.ResultsList.container`]: PublicMembersResultsContainer,
[`${appName}.EmptyResults.element`]: MembersEmptyResults,
[`${appName}.Sort.element`]: DropdownSort,
};

const overriddenComponents = overrideStore.getAll();

// Auto-initialize search app
createSearchAppInit(defaultComponents);
createSearchAppInit(
{ ...defaultComponents, ...overriddenComponents },
true,
"invenio-search-config",
true
);
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@

import React from "react";
import { createSearchAppInit } from "@js/invenio_search_ui";
import { parametrize } from "react-overridable";
import { parametrize, overrideStore } from "react-overridable";
import {
LabelTypeSubmission,
LabelTypeInvitation,
@@ -45,6 +45,8 @@ import {

const domContainer = document.getElementById("communities-request-search-root");

const appName = "InvenioCommunities.RequestSearch";

const community = JSON.parse(domContainer.dataset.community);

const RequestsResultsGridItemTemplateWithCommunity = parametrize(
@@ -75,6 +77,10 @@ const RequestCancelModalTriggerWithConfig = parametrize(RequestCancelModalTrigge
className: "ml-5",
});

const RequestsSearchLayoutWAppName = parametrize(RequestsSearchLayout, {
appName: appName,
});

const CommunitySubmission = () => (
<LabelTypeSubmission className="primary" size="small" />
);
@@ -96,30 +102,38 @@ const Cancelled = () => <LabelStatusCancel className="neutral" size="small" />;
const Expired = () => <LabelStatusExpire className="expired" size="small" />;

const defaultComponents = {
"BucketAggregation.element": ContribBucketAggregationElement,
"BucketAggregationValues.element": ContribBucketAggregationValuesElement,
"SearchApp.facets": ContribSearchAppFacets,
"ResultsList.item": RequestsResultsItemTemplateWithCommunity,
"ResultsGrid.item": RequestsResultsGridItemTemplateWithCommunity,
"SearchApp.layout": RequestsSearchLayout,
"SearchApp.results": RequestsResults,
"SearchBar.element": RecordSearchBarElement,
"EmptyResults.element": RequestsEmptyResultsWithState,
"RequestTypeLabel.layout.community-submission": CommunitySubmission,
"RequestTypeLabel.layout.community-invitation": CommunityInvitation,
"RequestStatusLabel.layout.submitted": Submitted,
"RequestStatusLabel.layout.deleted": Deleted,
"RequestStatusLabel.layout.accepted": Accepted,
"RequestStatusLabel.layout.declined": Declined,
"RequestStatusLabel.layout.cancelled": Cancelled,
"RequestStatusLabel.layout.expired": Expired,
"RequestActionModalTrigger.accept": RequestAcceptModalTriggerWithConfig,
"RequestActionModalTrigger.decline": RequestDeclineModalTriggerWithConfig,
"RequestActionModalTrigger.cancel": RequestCancelModalTriggerWithConfig,
"RequestActionButton.cancel": RequestCancelButton,
"RequestActionButton.decline": RequestDeclineButton,
"RequestActionButton.accept": RequestAcceptButton,
[`${appName}.BucketAggregation.element`]: ContribBucketAggregationElement,
[`${appName}.BucketAggregationValues.element`]: ContribBucketAggregationValuesElement,
[`${appName}.SearchApp.facets`]: ContribSearchAppFacets,
[`${appName}.ResultsList.item`]: RequestsResultsItemTemplateWithCommunity,
[`${appName}.ResultsGrid.item`]: RequestsResultsGridItemTemplateWithCommunity,
[`${appName}.SearchApp.layout`]: RequestsSearchLayoutWAppName,
[`${appName}.SearchApp.results`]: RequestsResults,
[`${appName}.SearchBar.element`]: RecordSearchBarElement,
[`${appName}.EmptyResults.element`]: RequestsEmptyResultsWithState,
[`${appName}.RequestTypeLabel.layout.community-submission`]: CommunitySubmission,
[`${appName}.RequestTypeLabel.layout.community-invitation`]: CommunityInvitation,
[`${appName}.RequestStatusLabel.layout.submitted`]: Submitted,
[`${appName}.RequestStatusLabel.layout.deleted`]: Deleted,
[`${appName}.RequestStatusLabel.layout.accepted`]: Accepted,
[`${appName}.RequestStatusLabel.layout.declined`]: Declined,
[`${appName}.RequestStatusLabel.layout.cancelled`]: Cancelled,
[`${appName}.RequestStatusLabel.layout.expired`]: Expired,
[`${appName}.RequestActionModalTrigger.accept`]: RequestAcceptModalTriggerWithConfig,
[`${appName}.RequestActionModalTrigger.decline`]:
RequestDeclineModalTriggerWithConfig,
[`${appName}.RequestActionModalTrigger.cancel`]: RequestCancelModalTriggerWithConfig,
[`${appName}.RequestActionButton.cancel`]: RequestCancelButton,
[`${appName}.RequestActionButton.decline`]: RequestDeclineButton,
[`${appName}.RequestActionButton.accept`]: RequestAcceptButton,
};

const overriddenComponents = overrideStore.getAll();

// Auto-initialize search app
createSearchAppInit(defaultComponents);
createSearchAppInit(
{ ...defaultComponents, ...overriddenComponents },
true,
"invenio-search-config",
true
);
Original file line number Diff line number Diff line change
@@ -253,7 +253,7 @@ export const RequestStatusFilter = withState(RequestStatusFilterComponent);

export const RequestsSearchLayout = (props) => {
const [sidebarVisible, setSidebarVisible] = React.useState(false);
const { config } = props;
const { config, appName } = props;
return (
<Container>
<Grid>
@@ -291,10 +291,13 @@ export const RequestsSearchLayout = (props) => {
open={sidebarVisible}
onHideClick={() => setSidebarVisible(false)}
// eslint-disable-next-line react/no-children-prop
children={<SearchAppFacets aggs={config.aggs} />}
children={<SearchAppFacets aggs={config.aggs} appName={appName} />}
/>
<Grid.Column mobile={16} tablet={16} computer={12}>
<SearchAppResultsPane layoutOptions={config.layoutOptions} />
<SearchAppResultsPane
layoutOptions={config.layoutOptions}
appName={appName}
/>
</Grid.Column>
</Grid.Row>
</Grid>
@@ -304,6 +307,11 @@ export const RequestsSearchLayout = (props) => {

RequestsSearchLayout.propTypes = {
config: PropTypes.object.isRequired,
appName: PropTypes.string,
};

RequestsSearchLayout.defaultProps = {
appName: undefined,
};

export const RequestsEmptyResults = ({
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@
data-communities-roles-can-invite='{{ roles_can_invite | tojson }}'
data-permissions='{{ permissions | tojson }}'
data-invenio-search-config='{{
search_app_communities_invitations_config(app_id="communities-invitations-search",
search_app_communities_invitations_config(app_id="InvenioCommunities.InvitationsSearch",
endpoint=community["links"]["invitations"]) | tojson }}'>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -10,26 +10,23 @@
{% extends "invenio_communities/details/members/base.html" %}

{% if permissions.can_members_manage %}
{% set bundle = webpack['invenio-communities-members-manager.js'] %}
{% set search_endpoint = community["links"]["members"] %}
{% set bundle = webpack['invenio-communities-members-manager.js'] %}
{% set app_id = "InvenioCommunities.ManagerSearch" %}
{% elif permissions.can_members_search %}
{% set bundle = webpack['invenio-communities-members.js'] %}
{% set search_endpoint = community["links"]["members"] %}
{% set bundle = webpack['invenio-communities-members.js'] %}
{% set app_id = "InvenioCommunities.MemberSearch" %}
{% elif permissions.can_members_search_public %}
{% set bundle = webpack['invenio-communities-members-public.js'] %}
{% set search_endpoint = community["links"]["public_members"] %}
{% set bundle = webpack['invenio-communities-members-public.js'] %}
{% set app_id = "InvenioCommunities.PublicSearch" %}
{% endif %}


{% block javascript %}
{{ super() }}
{% if permissions.can_members_manage %}
{{ webpack['invenio-communities-members-manager.js'] }}
{% elif permissions.can_members_search %}
{{ webpack['invenio-communities-members.js'] }}
{% elif permissions.can_members_search_public %}
{{ webpack['invenio-communities-members-public.js'] }}
{% endif %}
{{ bundle }}
{% endblock javascript %}

{% set active_members_menu_item = 'members' %}
@@ -38,7 +35,7 @@
{% block settings_body %}
<div class="thirteen wide computer sixteen wide tablet sixteen wide mobile column">
<div id="community-members-search-root"
data-invenio-search-config='{{ search_app_communities_members_config(app_id="community-members-search", endpoint=search_endpoint) | tojson }}'
data-invenio-search-config='{{ search_app_communities_members_config(app_id=app_id, endpoint=search_endpoint) | tojson }}'
data-community='{{ community | tojson }}'
data-communities-all-roles='{{ config.COMMUNITIES_ROLES | tojson }}'
data-communities-roles-can-update='{{ roles_can_update | tojson }}'
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@
id="communities-request-search-root"
class="rel-mt-2"
data-community='{{ community | tojson }}'
data-invenio-search-config='{{ search_app_communities_requests_config(app_id="communities-requests-search", endpoint=community.links.requests) | tojson }}'>
data-invenio-search-config='{{ search_app_communities_requests_config(app_id="InvenioCommunities.RequestSearch", endpoint=community.links.requests) | tojson }}'>
</div>
{%- endblock requests_body %}
{%- endblock page_body %}
Original file line number Diff line number Diff line change
@@ -23,6 +23,6 @@ <h3 class="ui header">{{_("Communities")}}</h3>
</div>
</div>
<div id="communities-search" class="rel-mt-3" data-invenio-search-config='{{
search_app_communities_config(app_id="communities-search") | tojson }}'>
search_app_communities_config(app_id="InvenioCommunities.Search") | tojson }}'>
</div>
{%- endblock page_body %}