Skip to content

Commit

Permalink
search: inject can_create permission
Browse files Browse the repository at this point in the history
- closes #977
  • Loading branch information
ntarocco authored and zzacharo committed Jul 24, 2023
1 parent ef86041 commit 1b3eb56
Show file tree
Hide file tree
Showing 11 changed files with 46 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,21 @@
import { createSearchAppInit } from "@js/invenio_search_ui";
import {
ContribBucketAggregationElement,
ContribSearchAppFacets,
ContribBucketAggregationValuesElement,
ContribSearchAppFacets,
} from "@js/invenio_search_ui/components";
import { CommunityItem } from "./";
import { parametrize, overrideStore } from "react-overridable";
import { overrideStore, parametrize } from "react-overridable";
import {
ResultsGridItemTemplate,
CommunitiesResults,
CommunitiesSearchLayout,
CommunitiesSearchBarElement,
CommunitiesSearchLayout,
CommunityItem,
ResultsGridItemTemplate,
} from "./";

const dataAttr = document.getElementById("communities-search").dataset;
const permissions = JSON.parse(dataAttr.permissions);

const appName = "InvenioCommunities.Search";

const ContribSearchAppFacetsWithConfig = parametrize(ContribSearchAppFacets, {
Expand All @@ -29,6 +32,7 @@ const ContribSearchAppFacetsWithConfig = parametrize(ContribSearchAppFacets, {

const CommunitiesSearchLayoutConfig = parametrize(CommunitiesSearchLayout, {
appName: appName,
permissions: permissions,
});

export const defaultComponents = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import React from "react";
import {
SearchAppFacets,
SearchAppResultsPane,
} from "@js/invenio_search_ui/components";
import { i18next } from "@translations/invenio_communities/i18next";
import PropTypes from "prop-types";
import React from "react";
import { GridResponsiveSidebarColumn } from "react-invenio-forms";
import { SearchBar } from "react-searchkit";
import { Button, Container, Grid } from "semantic-ui-react";
import PropTypes from "prop-types";

export const CommunitiesSearchLayout = ({ config, appName }) => {
export const CommunitiesSearchLayout = ({ config, appName, permissions }) => {
const [sidebarVisible, setSidebarVisible] = React.useState(false);
return (
<Container>
Expand Down Expand Up @@ -39,14 +39,16 @@ export const CommunitiesSearchLayout = ({ config, appName }) => {
<SearchBar placeholder={i18next.t("Search communities...")} />
</Grid.Column>
<Grid.Column mobile={16} tablet={6} computer={4} className="mt-10">
<Button
positive
icon="upload"
labelPosition="left"
href="/communities/new"
content={i18next.t("New community")}
floated="right"
/>
{permissions.can_create && (
<Button
positive
icon="upload"
labelPosition="left"
href="/communities/new"
content={i18next.t("New community")}
floated="right"
/>
)}
</Grid.Column>
</Grid.Row>
<Grid.Row>
Expand All @@ -71,5 +73,10 @@ export const CommunitiesSearchLayout = ({ config, appName }) => {

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

CommunitiesSearchLayout.defaultProps = {
appName: "",
};
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

{%- block page_body %}
{{ super() }}
<div class="ui text container rel-mt-2 rel-pt-1 rel-mb-2">
<div class="ui text container rel-m-2 rel-pt-1">
{{ community.metadata.page | safe }}
{% if community.ui.funding|length %}
<h3 class="ui header">{{ _("Awards") }}</h3>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

{%- block page_body %}
{{ super() }}
<div class="ui text container rel-mt-2 rel-mb-2">
<div class="ui text container rel-m-2">
<h2 class="ui header rel-mt-2">{{ _("Curation policy") }}</h2>
{{ community.metadata.curation_policy | safe }}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

{%- block page_body %}
{{ super() }}
<div class="ui container grid rel-mt-2">
<div class="ui container grid rel-m-2">
{%- block settings_menu %}
{%- set menu_items = {
'members': (_('Members'), url_for('invenio_communities.members', pid_value=community.slug), permissions.can_read),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
{%- block requests_body %}
<div
id="communities-request-search-root"
class="rel-mt-2"
class="rel-m-2"
data-community='{{ community | tojson }}'
data-invenio-search-config='{{ search_app_communities_requests_config(app_id="InvenioCommunities.RequestSearch", endpoint=community.links.requests) | tojson }}'>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

{%- block page_body %}
{{ super() }}
<div class="ui container grid communities-settings rel-mt-2">
<div class="ui container grid communities-settings rel-m-2">

{%- block settings_menu %}
{%- set menu_items = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ <h1 class="ui header">
<form action="{{ url_for('invenio_communities.communities_search') }}" class="ui form">
<div class="ui fluid action input">
<input type="text" name="q" class="form-control" placeholder="{{ _('Search communities') }}">
<button
type="submit"
class="ui icon search button"
<button
type="submit"
class="ui icon search button"
aria-label="{{ _('Search communities') }}"
>
<i class="search icon" aria-hidden="true"></i>
</button>
</div>
</form>
</div>
{% if can_create %}
{% if permissions.can_create %}
<div class="three wide mobile five wide tablet three wide computer stretched column">
<a href="{{ config.COMMUNITIES_ROUTES['new'] }}" class="ui icon left labeled positive button" role="button">
<i class="icon plus"></i>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
<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="InvenioCommunities.Search") | tojson }}'>
<div id="communities-search" class="rel-mt-3"
data-invenio-search-config='{{search_app_communities_config(app_id="InvenioCommunities.Search") | tojson }}'
data-permissions='{{ permissions | tojson }}'
>
</div>
{%- endblock page_body %}
4 changes: 2 additions & 2 deletions invenio_communities/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ def load_community_needs(identity):
community_roles = current_identities_cache.get(cache_key)
if community_roles is None:
# aka Member.get_memberships(identity)
group_ids = session.get("_unmanaged_groups", [])
roles_ids = session.get("unmanaged_roles_ids", [])

member_cls = current_communities.service.members.config.record_cls
managed_community_roles = member_cls.get_memberships(identity)
unmanaged_community_roles = member_cls.get_memberships_from_group_ids(
identity, group_ids
identity, roles_ids
)
community_roles = managed_community_roles + unmanaged_community_roles

Expand Down
4 changes: 3 additions & 1 deletion invenio_communities/views/communities.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,16 @@ def communities_frontpage():
can_create = current_communities.service.check_permission(g.identity, "create")
return render_template(
"invenio_communities/frontpage.html",
can_create=can_create,
permissions=dict(can_create=can_create),
)


def communities_search():
"""Communities search page."""
can_create = current_communities.service.check_permission(g.identity, "create")
return render_template(
"invenio_communities/search.html",
permissions=dict(can_create=can_create),
)


Expand Down

0 comments on commit 1b3eb56

Please sign in to comment.