Skip to content

Commit 924ed23

Browse files
committed
feat: patrimoines (#9)
* feat: patrimoine provider * feat: configuration * chore: base ui * feat: show all fields
1 parent 639a958 commit 924ed23

13 files changed

+178
-3
lines changed

src/dashboard.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { harenaDarkTheme, harenaLightTheme } from './harena-theme';
44
import { authProvider } from './providers/auth-provider';
55
import { dataProvider } from './providers';
66
import { DUMMY_UI } from './operations/dummies';
7+
import { PATRIMOINE_UI } from './operations/patrimoines';
78

89
const Dashboard = () => (
910
<Admin
@@ -17,6 +18,7 @@ const Dashboard = () => (
1718
dataProvider={dataProvider}
1819
>
1920
<Resource name="dummies" {...DUMMY_UI} />
21+
<Resource name="patrimoines" {...PATRIMOINE_UI} />
2022
</Admin>
2123
);
2224

src/layout/menu.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export const Menu = () => {
55
<RaMenu>
66
{/* <RaMenu.Item to="/" leftIcon={<ProfileIcon />} primaryText="Profile" /> */}
77
<RaMenu.ResourceItem name="dummies" />
8+
<RaMenu.ResourceItem name="patrimoines" />
89
</RaMenu>
910
);
1011
};

src/operations/patrimoines/index.tsx

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { PatrimoineList } from './patrimoine-list';
2+
import { PatrimoineShow } from './patrimoine-show';
3+
import { PatrimoineCreate } from './patrimoine-create';
4+
import { UI } from '../common/utils/types';
5+
import { PatrimoineEdit } from './patrimoine-edit';
6+
7+
export const PATRIMOINE_UI: UI = {
8+
list: PatrimoineList,
9+
show: PatrimoineShow,
10+
create: PatrimoineCreate,
11+
edit: PatrimoineEdit,
12+
recordRepresentation: 'nom',
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Create, DateInput, SimpleForm, TextInput } from 'react-admin';
2+
import { useParams } from 'react-router-dom';
3+
import { required } from '@/operations/common/input-validator';
4+
5+
export const PatrimoineCreate = () => {
6+
const { id } = useParams();
7+
8+
return (
9+
<Create id={id}>
10+
<SimpleForm>
11+
<TextInput fullWidth source="nom" label="Nom" validate={required()} />
12+
<DateInput fullWidth source="t" label="Date T" validate={required()} />
13+
<TextInput
14+
fullWidth
15+
source="possesseur.nom"
16+
label="Possesseur"
17+
validate={required()}
18+
/>
19+
</SimpleForm>
20+
</Create>
21+
);
22+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { DateInput, Edit, SimpleForm, TextInput } from 'react-admin';
2+
import { useParams } from 'react-router-dom';
3+
import { required } from '@/operations/common/input-validator';
4+
5+
export const PatrimoineEdit = () => {
6+
const { id } = useParams();
7+
8+
return (
9+
<Edit id={id}>
10+
<SimpleForm>
11+
<TextInput fullWidth source="nom" label="Nom" validate={required()} />
12+
<DateInput fullWidth source="t" label="Date T" validate={required()} />
13+
<TextInput
14+
fullWidth
15+
source="possesseur.nom"
16+
label="Possesseur"
17+
validate={required()}
18+
/>
19+
</SimpleForm>
20+
</Edit>
21+
);
22+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import {
2+
CreateButton,
3+
Datagrid,
4+
DateField,
5+
FunctionField,
6+
List,
7+
TextField,
8+
TopToolbar,
9+
} from 'react-admin';
10+
import { renderMoney } from '../common/utils/typo';
11+
12+
export const PatrimoineListActions = () => {
13+
return (
14+
<TopToolbar>
15+
<CreateButton />
16+
</TopToolbar>
17+
);
18+
};
19+
20+
export const PatrimoineList = () => {
21+
return (
22+
<List actions={<PatrimoineListActions />}>
23+
<Datagrid bulkActionButtons={false}>
24+
<TextField source="nom" label="Nom" />
25+
<DateField source="t" label="Date T" />
26+
<TextField source="possesseur.nom" label="Possesseur" />
27+
<FunctionField
28+
render={(patrimoine) => renderMoney(patrimoine.valeur_comptable)}
29+
label="Valeur Comptable"
30+
/>
31+
</Datagrid>
32+
</List>
33+
);
34+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import {
2+
DateField,
3+
EditButton,
4+
FunctionField,
5+
Show,
6+
SimpleShowLayout,
7+
TextField,
8+
TopToolbar,
9+
} from 'react-admin';
10+
import { useParams } from 'react-router-dom';
11+
import { renderMoney } from '../common/utils/typo';
12+
13+
const PatrimoineShowActions = () => {
14+
return (
15+
<TopToolbar>
16+
<EditButton />
17+
</TopToolbar>
18+
);
19+
};
20+
21+
export const PatrimoineShow = () => {
22+
const { id } = useParams();
23+
24+
return (
25+
<Show id={id} actions={<PatrimoineShowActions />}>
26+
<SimpleShowLayout>
27+
<TextField source="nom" label="Nom" />
28+
<DateField source="t" label="Date T" />
29+
<TextField source="possesseur.nom" label="Possesseur" />
30+
<FunctionField
31+
render={(patrimoine) => renderMoney(patrimoine.valeur_comptable)}
32+
label="Valeur Comptable"
33+
/>
34+
</SimpleShowLayout>
35+
</Show>
36+
);
37+
};

src/providers/api.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
import { PatrimoineApi } from '@harena-com/typescript-client';
2+
import { getConfiguration } from './utils';
23

3-
export const patrimoineApi = () => new PatrimoineApi();
4+
export const patrimoineApi = () => new PatrimoineApi(getConfiguration());

src/providers/data-provider.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import { DataProvider } from 'react-admin';
22
import { HarenaDataProvider } from './types';
33
import { dummyProvider } from './dummy-provider';
4+
import { patrimoineProvider } from './patrimoine-provider';
45

56
export const getProvider = (resource: string): HarenaDataProvider<any> => {
67
switch (resource) {
78
case 'dummies':
89
return dummyProvider;
10+
case 'patrimoines':
11+
return patrimoineProvider;
912
default:
1013
throw new Error('Unknown resource type');
1114
}

src/providers/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './data-provider';
2+
export * from './patrimoine-provider';

src/providers/patrimoine-provider.ts

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { Patrimoine } from '@harena-com/typescript-client';
2+
import { HarenaDataProvider } from './types';
3+
import { patrimoineApi } from './api';
4+
import { addIdField } from './utils';
5+
6+
export const patrimoineProvider: HarenaDataProvider<Patrimoine> = {
7+
getOne: async (nom) => {
8+
return patrimoineApi()
9+
.getPatrimoineByNom(nom)
10+
.then((response) => addIdField(response.data, 'nom'));
11+
},
12+
getList: async (page, pageSize) => {
13+
return patrimoineApi()
14+
.getPatrimoines(page, pageSize)
15+
.then((response) =>
16+
response.data.data!.map((patrimoine) => addIdField(patrimoine, 'nom'))
17+
);
18+
},
19+
saveOrUpdate: async (payload) => {
20+
return patrimoineApi()
21+
.crupdatePatrimoines({ data: [payload] })
22+
.then((response) => addIdField(response.data.data![0], 'nom'));
23+
},
24+
delete: () => {
25+
throw new Error('Not Implemented');
26+
},
27+
};

src/providers/types.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
export type ResourceIdentifier = { id: string };
21
export type MutationType = 'CREATE' | 'UPDATE';
32

4-
export type HarenaDataProvider<T extends ResourceIdentifier> = {
3+
export type HarenaDataProvider<T> = {
54
getOne: (id: string, meta: any) => Promise<T>;
65
saveOrUpdate: (
76
payload: T,

src/providers/utils.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Configuration } from '@harena-com/typescript-client';
2+
3+
export const addIdField = <T>(data: T, key: keyof T) => {
4+
return { ...data, id: data[key] };
5+
};
6+
7+
export const BASE_PATH = process.env.REACT_APP_HARENA_COM_API!;
8+
9+
export const getConfiguration = () => {
10+
const newConfig = new Configuration();
11+
newConfig.basePath = BASE_PATH;
12+
return newConfig;
13+
};

0 commit comments

Comments
 (0)