allow to modifify playlist permissions

This commit is contained in:
grimhilt 2023-08-14 01:17:56 +02:00
parent 381da95d91
commit 4d6414d143
2 changed files with 44 additions and 21 deletions

View File

@ -1,6 +1,6 @@
import { Button, TextInput, Group, Stack } from '@mantine/core';
import { useForm, isNotEmpty } from '@mantine/form';
import { useState } from 'react';
import { useEffect, useState } from 'react';
import setNotification from '../errors/error-notification';
import RoleSelector from './role-selector';
@ -11,8 +11,17 @@ const PlaylistViewEditor = ({ item, handler, buttonText, APICall }) => {
};
const [isLoading, setIsLoading] = useState(false);
const [rolesView, setRolesView] = useState([]);
const [rolesEdit, setRolesEdit] = useState([]);
console.log(item);
const [rolesView, setRolesView] = useState(item?.view.map((role) => role.id.toString()) ?? []);
const [rolesEdit, setRolesEdit] = useState(item?.edit.map((role) => role.id.toString()) ?? []);
useEffect(() => {
if (item) {
setRolesView(item?.view.map((role) => role.id.toString()) ?? []);
setRolesEdit(item?.edit.map((role) => role.id.toString()) ?? []);
}
return () => {};
}, [item]);
const form = useForm({
initialValues: {
@ -50,8 +59,18 @@ const PlaylistViewEditor = ({ item, handler, buttonText, APICall }) => {
<form onSubmit={handleSubmit}>
<TextInput label="Name" placeholder="Name" withAsterisk {...form.getInputProps('name')} mb="sm" />
<Stack>
<RoleSelector label="View Permission" value={rolesView} setValue={setRolesView} />
<RoleSelector label="Edit Permission" value={rolesEdit} setValue={setRolesEdit} />
<RoleSelector
defaultRoles={item?.view}
label="View Permission"
value={rolesView}
setValue={setRolesView}
/>
<RoleSelector
defaultRoles={item?.edit}
label="Edit Permission"
value={rolesEdit}
setValue={setRolesEdit}
/>
</Stack>
<Group position="right" mt="md">
<Button variant="light" color="red" onClick={handleClose}>

View File

@ -3,22 +3,28 @@ import { useEffect, useState } from 'react';
import setNotification from '../errors/error-notification';
import API from '../../services/api';
const RoleSelector = ({ label, value, setValue }) => {
const RoleSelector = ({ defaultRoles, label, value, setValue }) => {
const [data, setData] = useState([]);
const [search, setSearch] = useState();
useEffect(() => {
API.roles
.search(search)
.then((res) => {
if (res.status === 200) {
for (let i = 0; i < res.data.length; i++) {
const role = res.data[i];
const addRoles = (roles) => {
if (!roles) return;
for (let i = 0; i < roles.length; i++) {
const role = roles[i];
if (!data.find((r) => r.id === role.id)) {
role.label = role.name;
role.value = role.id.toString();
setData((prev) => [...prev, role]);
}
}
};
useEffect(() => {
API.roles
.search(search)
.then((res) => {
if (res.status === 200) {
addRoles(res.data);
} else {
setNotification(true, res);
}
@ -26,15 +32,13 @@ const RoleSelector = ({ label, value, setValue }) => {
.catch((err) => {
setNotification(true, err);
});
// eslint-disable-next-line
}, [search]);
// useEffect(() => {
// setData([
// { value: 'React', label: 'React' },
// { value: 'Angular', label: 'Angular' },
// { value: 'Svelte', label: 'Svelte' },
// ]);
// }, []);
useEffect(() => {
addRoles(defaultRoles);
// eslint-disable-next-line
}, [defaultRoles]);
// creatable
// getCreateLabel={(query) => `+ Create ${query}`}