diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/community/communities-carousel/index.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/community/communities-carousel/index.js index ca5fe4f78..426c93fe7 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/community/communities-carousel/index.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/community/communities-carousel/index.js @@ -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 diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/community/communities-carousel/override.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/community/communities-carousel/override.js deleted file mode 100644 index a1abf5bb4..000000000 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/community/communities-carousel/override.js +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of CDS RDM -// Copyright (C) 2022 CERN. -// -// CDS RDM is free software; you can redistribute it and/or modify it -// under the terms of the MIT License; see LICENSE file for more details. - -export const overriddenComponents = {}; diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/community/search.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/community/search.js index 39a3cc4de..1bdeb7ae4 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/community/search.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/community/search.js @@ -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 +); diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/details_search/components.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/details_search/components.js index 11bcb4ea5..bc75d96d7 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/details_search/components.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/details_search/components.js @@ -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( diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/details_search/index.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/details_search/index.js index f80fe4396..db54f2287 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/details_search/index.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/details_search/index.js @@ -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 +); diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/components/bulk_actions/SearchResultsBulkActions.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/components/bulk_actions/SearchResultsBulkActions.js index 1f794e014..deaf45647 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/components/bulk_actions/SearchResultsBulkActions.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/components/bulk_actions/SearchResultsBulkActions.js @@ -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" diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/components/bulk_actions/SearchResultsBulkActionsManager.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/components/bulk_actions/SearchResultsBulkActionsManager.js index 8b74c3ba5..fa9c0ee03 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/components/bulk_actions/SearchResultsBulkActionsManager.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/components/bulk_actions/SearchResultsBulkActionsManager.js @@ -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, diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/invitations/InvitationsSearchLayout.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/invitations/InvitationsSearchLayout.js index f7e14b8b1..32680fc35 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/invitations/InvitationsSearchLayout.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/invitations/InvitationsSearchLayout.js @@ -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: "", }; diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/invitations/index.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/invitations/index.js index fb55a3ad5..fd62e856d 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/invitations/index.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/invitations/index.js @@ -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,6 +45,7 @@ const InvitationsSearchLayoutWithConfig = parametrize(InvitationsSearchLayout, { community: community, permissions: permissions, communityGroupsEnabled: communityGroupsEnabled, + appName: appName, }); const InvitationsContextProvider = parametrize(ContextProvider, { @@ -50,25 +53,27 @@ const InvitationsContextProvider = parametrize(ContextProvider, { }); 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 ); diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/components/MembersSearchLayout.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/components/MembersSearchLayout.js index 682604cbb..6cba28175 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/components/MembersSearchLayout.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/components/MembersSearchLayout.js @@ -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: "", }; diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/manager_view/index.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/manager_view/index.js index f671dd6c0..1690ab862 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/manager_view/index.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/manager_view/index.js @@ -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 ); diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/member_view/index.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/member_view/index.js index f6e8bd5aa..4a7f15066 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/member_view/index.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/member_view/index.js @@ -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 ); diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/public_view/PublicMembersSearchLayout.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/public_view/PublicMembersSearchLayout.js index f421cd5a7..938a4613e 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/public_view/PublicMembersSearchLayout.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/public_view/PublicMembersSearchLayout.js @@ -27,11 +27,11 @@ 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} /> </> ); } @@ -39,4 +39,9 @@ export class PublicMembersSearchLayout extends Component { PublicMembersSearchLayout.propTypes = { config: PropTypes.object.isRequired, + appName: PropTypes.string, +}; + +PublicMembersSearchLayout.defaultProps = { + appName: "", }; diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/public_view/index.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/public_view/index.js index 5e92cd332..be750d46a 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/public_view/index.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/members/members/public_view/index.js @@ -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 +); diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/requests/index.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/requests/index.js index 12e3eb080..e2f942311 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/requests/index.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/requests/index.js @@ -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 +); diff --git a/invenio_communities/assets/semantic-ui/js/invenio_communities/requests/requests.js b/invenio_communities/assets/semantic-ui/js/invenio_communities/requests/requests.js index d2599d53b..95fcc91c9 100644 --- a/invenio_communities/assets/semantic-ui/js/invenio_communities/requests/requests.js +++ b/invenio_communities/assets/semantic-ui/js/invenio_communities/requests/requests.js @@ -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 = ({ diff --git a/invenio_communities/templates/semantic-ui/invenio_communities/details/members/invitations.html b/invenio_communities/templates/semantic-ui/invenio_communities/details/members/invitations.html index 23a56e3d1..8b598c6a3 100644 --- a/invenio_communities/templates/semantic-ui/invenio_communities/details/members/invitations.html +++ b/invenio_communities/templates/semantic-ui/invenio_communities/details/members/invitations.html @@ -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> diff --git a/invenio_communities/templates/semantic-ui/invenio_communities/details/members/members.html b/invenio_communities/templates/semantic-ui/invenio_communities/details/members/members.html index dfd2f55cb..67edb69bd 100644 --- a/invenio_communities/templates/semantic-ui/invenio_communities/details/members/members.html +++ b/invenio_communities/templates/semantic-ui/invenio_communities/details/members/members.html @@ -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 }}' diff --git a/invenio_communities/templates/semantic-ui/invenio_communities/details/requests/index.html b/invenio_communities/templates/semantic-ui/invenio_communities/details/requests/index.html index 0479883c9..fbdb8096b 100644 --- a/invenio_communities/templates/semantic-ui/invenio_communities/details/requests/index.html +++ b/invenio_communities/templates/semantic-ui/invenio_communities/details/requests/index.html @@ -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 %} diff --git a/invenio_communities/templates/semantic-ui/invenio_communities/search.html b/invenio_communities/templates/semantic-ui/invenio_communities/search.html index 2414a6a31..2f8425979 100644 --- a/invenio_communities/templates/semantic-ui/invenio_communities/search.html +++ b/invenio_communities/templates/semantic-ui/invenio_communities/search.html @@ -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 %}