1
Fork 0
mirror of https://github.com/pds-nest/nest.git synced 2025-02-16 20:53:57 +00:00
pds-2021-g2-nest/nest_frontend/routes/PageShare.js

77 lines
2.4 KiB
JavaScript
Raw Normal View History

import React, { useCallback, useContext } from "react"
2021-05-23 16:32:28 +02:00
import classNames from "classnames"
import BoxHeader from "../components/base/BoxHeader"
import ContextLanguage from "../contexts/ContextLanguage"
import Style from "./PageShare.module.css"
import BoxUserList from "../components/interactive/BoxUserList"
import useBackendViewset from "../hooks/useBackendViewset"
import { useParams } from "react-router"
2021-05-23 16:32:28 +02:00
export default function PageShare({ className, ...props }) {
const { strings } = useContext(ContextLanguage)
const { id } = useParams()
const {resources: users} = useBackendViewset(
"/api/v1/users/",
"email",
{
list: true,
create: false,
retrieve: false,
edit: false,
destroy: false,
command: false,
action: false,
}
)
const {resources: authorizations, createResource: createAuthorization, destroyResource: destroyAuthorization} = useBackendViewset(
`/api/v1/repositories/${id}/authorizations/`,
"email",
{
list: true,
create: true,
retrieve: false,
edit: false,
destroy: true,
command: false,
action: false,
}
)
const shareWith = useCallback(
user => {
console.info("Authorizing ", user, " ...")
createAuthorization({rid: id, email: user.email})
},
[createAuthorization, id]
)
const unshareWith = useCallback(
user => {
console.info("Deauthorizing ", user, " ...")
destroyAuthorization(user.email)
},
[destroyAuthorization, id]
)
2021-05-23 16:32:28 +02:00
return (
<div className={classNames(Style.PageShare, className)} {...props}>
<BoxHeader className={Style.Header}>
{strings.repoShare}
</BoxHeader>
<BoxUserList
className={Style.UserList}
users={users.filter(user => !authorizations.map(a => a.email).includes(user.email))}
shareWithUser={shareWith}
header={strings.availableUsers}
/>
<BoxUserList
className={Style.SharingWith}
users={users.filter(user => authorizations.map(a => a.email).includes(user.email))}
unshareWithUser={unshareWith}
header={strings.sharingWith}
/>
2021-05-23 16:32:28 +02:00
</div>
)
}