Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
Commit ca8ae63b authored by Philippe Coicadan's avatar Philippe Coicadan
Browse files

simplify assoc app user create , eliminate context ClassSelect

parent 66cef15e
No related branches found
No related tags found
No related merge requests found
import * as React from "react"; import * as React from "react";
import {FunctionField, WrapperField, Edit, Toolbar, SaveButton, DeleteWithConfirmButton, ReferenceInput, SelectInput, Link, useCreatePath, useNotify, useRedirect, required, FileInput, FileField, TextInput, List, Datagrid, TextField, TopToolbar, Create, SimpleForm, CreateButton, EditButton, ListButton, useRecordContext} from 'react-admin'; import {AutocompleteInput, FunctionField, WrapperField, Edit, Toolbar, SaveButton, DeleteWithConfirmButton, ReferenceInput, SelectInput, Link, useCreatePath, useNotify, useRedirect, required, FileInput, FileField, TextInput, List, Datagrid, TextField, TopToolbar, Create, SimpleForm, CreateButton, EditButton, ListButton, useRecordContext} from 'react-admin';
import DomainIcon from '@mui/icons-material/Domain' import DomainIcon from '@mui/icons-material/Domain'
import IconLink from '@mui/icons-material/Link' import IconLink from '@mui/icons-material/Link'
import PeopleIcon from '@mui/icons-material/People' import PeopleIcon from '@mui/icons-material/People'
...@@ -8,21 +8,10 @@ import { useTranslate } from "react-admin"; ...@@ -8,21 +8,10 @@ import { useTranslate } from "react-admin";
import {useNavigate } from 'react-router-dom'; import {useNavigate } from 'react-router-dom';
import Button from '@mui/material/Button'; import Button from '@mui/material/Button';
import {useParams} from "react-router-dom"; import {useParams} from "react-router-dom";
import { useEffect, useState, useContext } from "react";
import {useFormContext} from 'react-hook-form';
import { ClassSelectContext, ClassSelectProvider } from "../../utils/contexts";
import { IconButton, Grid } from '@mui/material';
import SearchIcon from '@mui/icons-material/Search';
import CheckIcon from '@mui/icons-material/Check';
import {Box, Drawer} from '@mui/material';
import {roleChoices, RenderRole} from '../../utils/users' import {roleChoices, RenderRole} from '../../utils/users'
import { idFromURL , backEndURL} from "../../utils/utils"; import { idFromURL , backEndURL} from "../../utils/utils";
const ALActions = ( { selection }) => { const ALActions = ( { selection }) => {
const translate = useTranslate(); const translate = useTranslate();
return ( return (
...@@ -249,132 +238,33 @@ export const AppList = (() => { ...@@ -249,132 +238,33 @@ export const AppList = (() => {
}) })
const DisplayAssocFlag = ( {display} ) => {
if (display) {
return <CheckIcon/>
} else {
return <p></p>
}
}
const AppAssocEditField = ( {source , label, resource }) => {
const {setResource, setSource, setOpen, select , setSaveEnable} = useContext(ClassSelectContext);
const {setValue} = useFormContext();
const [displayAssocFlag, setDisplayAssocFlag] = useState (false);
const handleClick = () => {
setResource(resource);
setSource(source);
setOpen(true);
};
const displayValue = ( value) => {
if (value == null || value === '') {
setDisplayAssocFlag(false);
return '';
} else {
setDisplayAssocFlag(true);
return value;
}
}
useEffect ( () => {
if (select.hasOwnProperty(source)) {
setValue(`${source}`, select[source]["id"]);
setSaveEnable(true);
}
}, [select]) ;
return (
<Grid container spacing={2}>
<Grid item xs={12} sm={8}>
<TextInput label={label} source={`${source}`} format={displayValue} disabled={true} validate={required()}/>
</Grid>
<Grid item xs={12} sm={2}>
<DisplayAssocFlag display={displayAssocFlag} />
</Grid>
<Grid item xs={12} sm={2}>
<IconButton type="button" variant="outlined" onClick={handleClick} sx={ {paddingTop: 2}}>
<SearchIcon/>
</IconButton>
</Grid>
</Grid>
);
}
const SelectActions = () => (
<TopToolbar></TopToolbar>
);
const UserSelect = () => {
const {resource, source, open, setOpen, setSourceSelect } = useContext(ClassSelectContext);
export const AppUserCreate = () => {
const translate = useTranslate();
const filterToQuery = searchText => ({ _s: `%${searchText}%` });
return ( return (
<Drawer
open={open}
anchor='right'
onClose= { () => setOpen(false)}
>
<List disableSyncWithLocation resource={resource} actions={<SelectActions />} exporter={false} sort={{ field: 'name', order:"DESC"}} queryOptions={{ meta:{ }}}>
<Datagrid
bulkActionButtons={false}
rowClick= {(id, resource, record) => {
setSourceSelect(source, { id: record.id, display: record.id});
setOpen(false);
}
} <Create mutationOptions={{ meta: {} }}>
>
<TextField source ="id" label="arolios.identifier"/>
</Datagrid> <SimpleForm>
</List> <ReferenceInput source='app' reference='apps' sort={{ field: 'name', order: 'ASC' }} perPage={100} queryOptions={{ meta: { getmany_context: 'appassocs' } }}>
</Drawer>) <SelectInput label={translate('resources.apps.name', 1)} optionText="name" optionValue="name" validate={required()} />
} </ReferenceInput>
export const AppUserCreate = () => {
const translate = useTranslate();
return (
<Box display="flex">
<ClassSelectProvider>
<Create mutationOptions={{ meta:{ }} }>
<SimpleForm> <ReferenceInput reference="users" source="user" sort={{ field: 'identifier', order: "ASC" }} queryOptions={{ meta: { getmany_context: 'appassocs' } }}>
<AutocompleteInput label={translate('resources.users.name', 1)} optionText="identifier" optionValue="identifier" filterToQuery={filterToQuery} validate={required()} />
</ReferenceInput>
<ReferenceInput source='app' reference='apps' sort={{field: 'name', order: 'ASC'}} perPage={100} queryOptions={{ meta:{ getmany_context: 'appassocs'}} }>
<SelectInput label={translate('resources.apps.name',1)} optionText="name" optionValue="name" validate={required()}/>
</ReferenceInput>
<AppAssocEditField source="user" label={translate('resources.users.name',1)} resource="users"/>
<SelectInput label="arolios.user_role" source="role" validate={required()} choices={roleChoices()}/>
<SelectInput label="arolios.user_role" source="role" validate={required()} choices={roleChoices()} />
</SimpleForm>
</Create>
<UserSelect />
</SimpleForm>
</ClassSelectProvider> </Create>
</Box>) )
} }
export const AppDomainCreate = (() => { export const AppDomainCreate = (() => {
......
import {TextField, List, Datagrid, import { List, Datagrid,
ShowButton, EditButton, Loading, Show, Edit, SimpleShowLayout, SimpleForm, ShowButton, EditButton, Loading, Show, Edit, SimpleShowLayout, SimpleForm,
Create, TopToolbar, ExportButton, CreateButton, SaveButton, Toolbar, DeleteWithConfirmButton, SearchInput, useTranslate, EmptyClasses} from 'react-admin'; Create, TopToolbar, ExportButton, CreateButton, SaveButton, Toolbar, DeleteWithConfirmButton, SearchInput, useTranslate, EmptyClasses} from 'react-admin';
import { useContext} from "react"; import { useContext} from "react";
import { AssociationMemberEndContext, ClassifierContext } from "../../utils/contexts"; import { AssociationMemberEndContext, ClassifierContext } from "../../utils/contexts";
import { useProperties } from "../../utils/properties"; import { useProperties } from "../../utils/properties";
import { InsertShowField , InsertListField, InsertEditField, concatenateIdFields} from "../../utils/fields" ; import { InsertShowField , InsertListField, InsertEditField} from "../../utils/fields" ;
import { useResourceContext, useResourceDefinition, useRecordContext, useCreatePath, usePermissions} from "react-admin"; import { useResourceContext, useResourceDefinition, useRecordContext, useCreatePath, usePermissions} from "react-admin";
import { idFromURL, extractResourceFromPathName} from "../../utils/utils"; import { idFromURL, extractResourceFromPathName} from "../../utils/utils";
import {useParams, useLocation} from "react-router-dom"; import {useParams, useLocation} from "react-router-dom";
......
...@@ -197,7 +197,19 @@ const CustomDataProvider = { ...@@ -197,7 +197,19 @@ const CustomDataProvider = {
const instid =ids[0] ; const instid =ids[0] ;
if (resource === 'apps' || resource === 'domains') { if (resource === 'apps' || resource === 'domains') {
return Promise.resolve ( { data: [ { id: instid }]}); return Promise.resolve ( { data: [ { id: instid }]});
} else { // no case implemented } else if (resource === 'users') {
const ids = params.ids;
const instid = ids[0];
// variant of getOne
const url = `${apiUrl}/${resource}/${instid}`;
return httpClient(url).then(({ json }) => ({
data: [ { id: json['identifier'], ...json} ],
total: 1
}));
} else { // no case implemented
let url = `${apiUrl}/`; let url = `${apiUrl}/`;
if (prefix) { if (prefix) {
......
...@@ -11,7 +11,7 @@ import CheckIcon from '@mui/icons-material/Check'; ...@@ -11,7 +11,7 @@ import CheckIcon from '@mui/icons-material/Check';
import IconLink from '@mui/icons-material/Link' import IconLink from '@mui/icons-material/Link'
import * as MUI from '@mui/material'; import * as MUI from '@mui/material';
import { useContext } from "react"; import { useContext } from "react";
import { AssociationMemberEndContext, ClassSelectContext, ClassifierContext } from "../contexts"; import { AssociationMemberEndContext, ClassifierContext } from "../contexts";
import { useCreatePath} from "react-admin"; import { useCreatePath} from "react-admin";
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment