feat: Read-only users (#1955)
* Introduce isViewer field * Update policies * Make users read-only feature * Remove not demoting current user validation * Update tests * Catch the unhandled promise rejection * Hide unnecessary ui elements for read-only user * Update app/scenes/Settings/People.js Co-authored-by: Tom Moor <tom.moor@gmail.com> * Remove redundant logic for admin only policies * Use can logic * Update snapshot * Remove lint error * Update snapshot * Minor fix * Update app/menus/UserMenu.js Co-authored-by: Tom Moor <tom.moor@gmail.com> * Update server/api/users.js Co-authored-by: Tom Moor <tom.moor@gmail.com> * Update app/components/DocumentListItem.js Co-authored-by: Tom Moor <tom.moor@gmail.com> * Update app/stores/UsersStore.js Co-authored-by: Tom Moor <tom.moor@gmail.com> * Use useCurrentTeam hook in functional component * Update translation * Update ternary * Remove punctuation * Move the functions to User model * Update share policy and shareMenu * Rename makeAdmin to promote * Create updateCounts function and Rank enum * Update tests * Remove enum * Use async await, remove enum and create computed accessor * Remove unused variable * Fix lint issues * Hide templates * Create shared/types and use rank type from it * Delete shared/utils/rank type file Co-authored-by: Tom Moor <tom.moor@gmail.com>
This commit is contained in:
@@ -15,8 +15,10 @@ import { Waypoint } from "react-waypoint";
|
||||
import styled from "styled-components";
|
||||
import breakpoint from "styled-components-breakpoint";
|
||||
|
||||
import AuthStore from "stores/AuthStore";
|
||||
import { DEFAULT_PAGINATION_LIMIT } from "stores/BaseStore";
|
||||
import DocumentsStore from "stores/DocumentsStore";
|
||||
import PoliciesStore from "stores/PoliciesStore";
|
||||
import UsersStore from "stores/UsersStore";
|
||||
|
||||
import Button from "components/Button";
|
||||
@@ -44,7 +46,9 @@ type Props = {
|
||||
match: Match,
|
||||
location: LocationWithState,
|
||||
documents: DocumentsStore,
|
||||
auth: AuthStore,
|
||||
users: UsersStore,
|
||||
policies: PoliciesStore,
|
||||
notFound: ?boolean,
|
||||
t: TFunction,
|
||||
};
|
||||
@@ -255,11 +259,12 @@ class Search extends React.Component<Props> {
|
||||
};
|
||||
|
||||
render() {
|
||||
const { documents, notFound, location, t } = this.props;
|
||||
const { documents, notFound, location, t, auth, policies } = this.props;
|
||||
const results = documents.searchResults(this.query);
|
||||
const showEmpty = !this.isLoading && this.query && results.length === 0;
|
||||
const showShortcutTip =
|
||||
!this.pinToTop && location.state && location.state.fromMenu;
|
||||
const can = policies.abilities(auth.team?.id ? auth.team.id : "");
|
||||
|
||||
return (
|
||||
<Container auto>
|
||||
@@ -323,11 +328,11 @@ class Search extends React.Component<Props> {
|
||||
<HelpText>
|
||||
<Trans>
|
||||
No documents found for your search filters. <br />
|
||||
Create a new document?
|
||||
</Trans>
|
||||
{can.createDocument && <Trans>Create a new document?</Trans>}
|
||||
</HelpText>
|
||||
<Wrapper>
|
||||
{this.collectionId ? (
|
||||
{this.collectionId && can.createDocument ? (
|
||||
<Button
|
||||
onClick={this.handleNewDoc}
|
||||
icon={<PlusIcon />}
|
||||
@@ -435,5 +440,5 @@ const Filters = styled(Flex)`
|
||||
`;
|
||||
|
||||
export default withTranslation()<Search>(
|
||||
withRouter(inject("documents")(Search))
|
||||
withRouter(inject("documents", "auth", "policies")(Search))
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user