ApiLogicServer 15.0.37__py3-none-any.whl → 15.0.38__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. api_logic_server_cli/api_logic_server.py +2 -2
  2. api_logic_server_cli/api_logic_server_info.yaml +3 -3
  3. api_logic_server_cli/genai/genai_svcs.py +4 -3
  4. api_logic_server_cli/prototypes/base/docs/training/react_map.prompt.md +13 -0
  5. api_logic_server_cli/prototypes/base/docs/training/react_tree.prompt.md +10 -0
  6. api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace +3 -3
  7. api_logic_server_cli/prototypes/nw/api/api_discovery/authentication_expose_api_models.py +53 -0
  8. api_logic_server_cli/prototypes/nw/api/api_discovery/auto_discovery.py +27 -0
  9. api_logic_server_cli/prototypes/nw/api/api_discovery/count_orders_by_month.html +76 -0
  10. api_logic_server_cli/prototypes/nw/api/api_discovery/count_orders_by_month.sql +1 -0
  11. api_logic_server_cli/prototypes/nw/api/api_discovery/dashboard_services.py +143 -0
  12. api_logic_server_cli/prototypes/nw/api/api_discovery/mcp_discovery.py +97 -0
  13. api_logic_server_cli/prototypes/nw/api/api_discovery/new_service.py +21 -0
  14. api_logic_server_cli/prototypes/nw/api/api_discovery/newer_service.py +21 -0
  15. api_logic_server_cli/prototypes/nw/api/api_discovery/number_of_sales_per_category.html +76 -0
  16. api_logic_server_cli/prototypes/nw/api/api_discovery/number_of_sales_per_category.sql +1 -0
  17. api_logic_server_cli/prototypes/nw/api/api_discovery/ontimize_api.py +495 -0
  18. api_logic_server_cli/prototypes/nw/api/api_discovery/sales_by_category.html +76 -0
  19. api_logic_server_cli/prototypes/nw/api/api_discovery/sales_by_category.sql +1 -0
  20. api_logic_server_cli/prototypes/nw/api/api_discovery/system.py +77 -0
  21. api_logic_server_cli/prototypes/nw/database/database_discovery/graphics_services.py +173 -0
  22. api_logic_server_cli/prototypes/nw/ui/admin/home.js +5 -0
  23. api_logic_server_cli/prototypes/nw/ui/reference_react_app/DEPARTMENT_TREE_VIEW.md +66 -0
  24. api_logic_server_cli/prototypes/nw/ui/reference_react_app/package.json +4 -0
  25. api_logic_server_cli/prototypes/nw/ui/reference_react_app/public/index.html +3 -0
  26. api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/App.js +8 -1
  27. api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/CustomLayout.js +20 -0
  28. api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Department.js +511 -24
  29. api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/DepartmentTree.js +147 -0
  30. api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Employee.js +230 -18
  31. api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/LandingPage.js +264 -0
  32. api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Supplier.js +359 -121
  33. api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/index.js +1 -0
  34. {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.38.dist-info}/METADATA +1 -1
  35. {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.38.dist-info}/RECORD +39 -19
  36. api_logic_server_cli/prototypes/base/docs/training/admin_app_unused.md +0 -156
  37. {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.38.dist-info}/WHEEL +0 -0
  38. {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.38.dist-info}/entry_points.txt +0 -0
  39. {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.38.dist-info}/licenses/LICENSE +0 -0
  40. {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.38.dist-info}/top_level.txt +0 -0
@@ -1,143 +1,381 @@
1
1
  // begin MANDATORY imports (always generated EXACTLY)
2
- import React from 'react';
3
- import { List, FunctionField, Datagrid, TextField, EmailField, DateField, NumberField } from 'react-admin';
4
- import { ReferenceField, ReferenceManyField } from 'react-admin';
5
- import { TabbedShowLayout, Tab, SimpleShowLayout, TextInput, NumberInput, DateTimeInput } from 'react-admin';
6
- import { ReferenceInput, SelectInput, SimpleForm, Show, Edit, Create } from 'react-admin';
7
- import { Filter, Pagination, BooleanField, BooleanInput, Labeled } from 'react-admin';
8
- import { EditButton, DeleteButton, CreateButton, ShowButton } from 'react-admin';
9
- import { Grid, Typography, Box, Divider, Button } from '@mui/material';
10
- import { useRecordContext, useRedirect, Link, required } from 'react-admin';
11
- import AddIcon from '@mui/icons-material/Add';
2
+ import React, { useState, useRef, useEffect } from 'react';
3
+ import { List, Datagrid, TextField } from 'react-admin';
4
+ import { SimpleShowLayout, TextInput, SimpleForm, Show, Edit, Create } from 'react-admin';
5
+ import { Filter, Pagination, Labeled } from 'react-admin';
6
+ import { EditButton, DeleteButton, ShowButton } from 'react-admin';
7
+ import { Grid, Typography, Box, Divider, Button, ToggleButton, ToggleButtonGroup, Paper, Card, CardContent } from '@mui/material';
8
+ import { useListContext } from 'react-admin';
9
+ import { Link, useNavigate } from 'react-router-dom';
10
+ import ViewListIcon from '@mui/icons-material/ViewList';
11
+ import MapIcon from '@mui/icons-material/Map';
12
+ import LocationOnIcon from '@mui/icons-material/LocationOn';
13
+ import BusinessIcon from '@mui/icons-material/Business';
14
+ import { MapContainer, TileLayer, Marker, Popup, useMap } from 'react-leaflet';
15
+ import L from 'leaflet';
12
16
  // end mandatory imports
13
17
 
18
+ // Fix for default markers in react-leaflet
19
+ delete L.Icon.Default.prototype._getIconUrl;
20
+ L.Icon.Default.mergeOptions({
21
+ iconRetinaUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png',
22
+ iconUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png',
23
+ shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png',
24
+ });
25
+
26
+ // Custom red marker icon for suppliers
27
+ const supplierIcon = new L.Icon({
28
+ iconUrl: 'https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-red.png',
29
+ shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png',
30
+ iconSize: [25, 41],
31
+ iconAnchor: [12, 41],
32
+ popupAnchor: [1, -34],
33
+ shadowSize: [41, 41]
34
+ });
35
+
14
36
  const SupplierFilter = (props) => (
15
37
  <Filter {...props}>
16
38
  <TextInput label="Search by Company Name" source="CompanyName" alwaysOn />
17
39
  </Filter>
18
40
  );
19
41
 
20
- // Supplier List
21
- export const SupplierList = (props) => {
42
+ // Professional World Map using Leaflet.js with real geography
43
+ const SupplierMapView = () => {
44
+ const { data: suppliers = [] } = useListContext();
45
+ const navigate = useNavigate();
46
+
47
+ // Country coordinates for mapping
48
+ const countryCoordinates = {
49
+ 'USA': [39.8283, -98.5795],
50
+ 'Canada': [56.1304, -106.3468],
51
+ 'Mexico': [23.6345, -102.5528],
52
+ 'UK': [55.3781, -3.4360],
53
+ 'Germany': [51.1657, 10.4515],
54
+ 'France': [46.2276, 2.2137],
55
+ 'Italy': [41.8719, 12.5674],
56
+ 'Spain': [40.4637, -3.7492],
57
+ 'Netherlands': [52.1326, 5.2913],
58
+ 'Norway': [60.4720, 8.4689],
59
+ 'Sweden': [60.1282, 18.6435],
60
+ 'Denmark': [56.2639, 9.5018],
61
+ 'Finland': [61.9241, 25.7482],
62
+ 'Australia': [-25.2744, 133.7751],
63
+ 'Japan': [36.2048, 138.2529],
64
+ 'Brazil': [-14.2350, -51.9253],
65
+ 'Singapore': [1.3521, 103.8198],
66
+ 'Argentina': [-38.4161, -63.6167],
67
+ 'China': [35.8617, 104.1954],
68
+ 'India': [20.5937, 78.9629],
69
+ 'Unknown': [0, 0]
70
+ };
71
+
72
+ // Get coordinates for a supplier based on country
73
+ const getSupplierCoordinates = (supplier) => {
74
+ const baseCoords = countryCoordinates[supplier.Country] || countryCoordinates['Unknown'];
75
+ // Add small random offset to avoid overlapping markers
76
+ const latOffset = (Math.random() - 0.5) * 2; // ±1 degree
77
+ const lngOffset = (Math.random() - 0.5) * 2; // ±1 degree
78
+ return [baseCoords[0] + latOffset, baseCoords[1] + lngOffset];
79
+ };
80
+
81
+ const handleSupplierClick = (supplier) => {
82
+ navigate(`/Supplier/${supplier.Id}/show`);
83
+ };
84
+
22
85
  return (
23
- <List
24
- filters={<SupplierFilter />}
25
- {...props}
26
- sort={{ field: 'CompanyName', order: 'ASC' }}
27
- pagination={<Pagination rowsPerPageOptions={[5, 10, 25]} showFirstLastButtons />}>
28
- <Datagrid rowClick="show">
29
- <TextField source="CompanyName" label="Company Name" />
30
- <TextField source="ContactName" label="Contact Name" />
31
- <TextField source="ContactTitle" label="Contact Title" />
32
- <TextField source="City" label="City" />
33
- <TextField source="Country" label="Country" />
34
- <EditButton />
35
- <DeleteButton />
36
- </Datagrid>
37
- </List>
86
+ <div style={{ width: '100%', height: '700px', position: 'relative' }}>
87
+ <MapContainer
88
+ center={[20, 0]}
89
+ zoom={2}
90
+ style={{ height: '100%', width: '100%' }}
91
+ scrollWheelZoom={true}
92
+ >
93
+ <TileLayer
94
+ attribution='&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
95
+ url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
96
+ />
97
+
98
+ {suppliers.map((supplier) => {
99
+ const coordinates = getSupplierCoordinates(supplier);
100
+ return (
101
+ <Marker
102
+ key={supplier.Id}
103
+ position={coordinates}
104
+ icon={supplierIcon}
105
+ eventHandlers={{
106
+ click: () => handleSupplierClick(supplier)
107
+ }}
108
+ >
109
+ <Popup>
110
+ <div style={{ textAlign: 'center' }}>
111
+ <strong>{supplier.CompanyName}</strong><br/>
112
+ {supplier.City}, {supplier.Country}<br/>
113
+ <small>Contact: {supplier.ContactName}</small><br/>
114
+ <button
115
+ onClick={() => handleSupplierClick(supplier)}
116
+ style={{
117
+ marginTop: '8px',
118
+ padding: '4px 8px',
119
+ backgroundColor: '#4f46e5',
120
+ color: 'white',
121
+ border: 'none',
122
+ borderRadius: '4px',
123
+ cursor: 'pointer'
124
+ }}
125
+ >
126
+ View Details
127
+ </button>
128
+ </div>
129
+ </Popup>
130
+ </Marker>
131
+ );
132
+ })}
133
+ </MapContainer>
134
+
135
+ {/* Map Info Panel */}
136
+ <div style={{
137
+ position: 'absolute',
138
+ top: '15px',
139
+ left: '15px',
140
+ backgroundColor: 'rgba(255, 255, 255, 0.95)',
141
+ padding: '16px',
142
+ borderRadius: '8px',
143
+ border: '1px solid #d1d5db',
144
+ boxShadow: '0 4px 12px rgba(0,0,0,0.3)',
145
+ zIndex: 1000,
146
+ minWidth: '250px'
147
+ }}>
148
+ <div style={{ marginBottom: '12px', fontWeight: 'bold', fontSize: '15px', color: '#1f2937' }}>
149
+ 🌍 Global Supplier Map
150
+ </div>
151
+ <div style={{ display: 'flex', alignItems: 'center', gap: '10px', marginBottom: '10px' }}>
152
+ <div style={{
153
+ width: '20px',
154
+ height: '30px',
155
+ background: 'url("https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-red.png") no-repeat center',
156
+ backgroundSize: 'contain'
157
+ }}></div>
158
+ <span style={{ fontSize: '14px', color: '#374151' }}>Suppliers ({suppliers.length} total)</span>
159
+ </div>
160
+ <div style={{ fontSize: '12px', color: '#6b7280', lineHeight: '1.4' }}>
161
+ • Click red markers to view supplier details<br/>
162
+ • Drag map to explore different regions<br/>
163
+ • Use mouse wheel or zoom controls to zoom<br/>
164
+ • Real world geography with accurate positioning
165
+ </div>
166
+ </div>
167
+ </div>
38
168
  );
39
169
  };
40
170
 
41
- // Supplier Show
42
- export const SupplierShow = (props) => {
171
+ export const SupplierList = (props) => {
172
+ const [view, setView] = useState('list');
173
+
174
+ const handleViewChange = (event, newView) => {
175
+ if (newView !== null) {
176
+ setView(newView);
177
+ }
178
+ };
179
+
43
180
  return (
44
- <Show {...props}>
45
- <SimpleShowLayout>
46
- <Typography variant="h5" component="h2" sx={{ mb: 2, fontWeight: 'bold' }}>
47
- Supplier Information
181
+ <div>
182
+ {/* View Toggle */}
183
+ <Box sx={{ mb: 2, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
184
+ <Typography variant="h4" component="h1">
185
+ Suppliers
48
186
  </Typography>
49
- <Grid container spacing={3} sx={{ mb: 2 }}>
50
- <Grid item xs={12} sm={6} md={4}>
51
- <Labeled label="Company Name">
52
- <TextField source="CompanyName" />
53
- </Labeled>
54
- </Grid>
55
- <Grid item xs={12} sm={6} md={4}>
56
- <Labeled label="Contact Name">
57
- <TextField source="ContactName" />
58
- </Labeled>
59
- </Grid>
60
- <Grid item xs={12} sm={6} md={4}>
61
- <Labeled label="Contact Title">
62
- <TextField source="ContactTitle" />
63
- </Labeled>
64
- </Grid>
65
- </Grid>
66
- <Divider sx={{ my: 2 }} />
67
- </SimpleShowLayout>
68
- </Show>
187
+ <ToggleButtonGroup
188
+ value={view}
189
+ exclusive
190
+ onChange={handleViewChange}
191
+ aria-label="view mode"
192
+ size="small"
193
+ >
194
+ <ToggleButton value="list" aria-label="list view">
195
+ <ViewListIcon sx={{ mr: 1 }} />
196
+ List
197
+ </ToggleButton>
198
+ <ToggleButton value="map" aria-label="map view">
199
+ <MapIcon sx={{ mr: 1 }} />
200
+ Map
201
+ </ToggleButton>
202
+ </ToggleButtonGroup>
203
+ </Box>
204
+
205
+ {view === 'list' ? (
206
+ <List {...props} filters={<SupplierFilter />} pagination={<Pagination />}>
207
+ <Datagrid>
208
+ <TextField source="Id" />
209
+ <TextField source="CompanyName" />
210
+ <TextField source="ContactName" />
211
+ <TextField source="ContactTitle" />
212
+ <TextField source="Address" />
213
+ <TextField source="City" />
214
+ <TextField source="Region" />
215
+ <TextField source="PostalCode" />
216
+ <TextField source="Country" />
217
+ <TextField source="Phone" />
218
+ <TextField source="Fax" />
219
+ <TextField source="HomePage" />
220
+ <ShowButton />
221
+ <EditButton />
222
+ </Datagrid>
223
+ </List>
224
+ ) : (
225
+ <List {...props} filters={<SupplierFilter />} pagination={false}>
226
+ <SupplierMapView />
227
+ </List>
228
+ )}
229
+ </div>
69
230
  );
70
231
  };
71
232
 
72
- // Supplier Create
73
- export const SupplierCreate = (props) => {
74
- return (
75
- <Create {...props}>
76
- <SimpleForm>
77
- <Typography variant="h5" component="h2" sx={{ mb: 2, fontWeight: 'bold' }}>
78
- Create New Supplier
79
- </Typography>
80
- <Grid container spacing={3} sx={{ mb: 2 }}>
81
- <Grid item xs={12} sm={6} md={4}>
82
- <TextInput source="CompanyName" label="Company Name" fullWidth />
83
- </Grid>
84
- <Grid item xs={12} sm={6} md={4}>
85
- <TextInput source="ContactName" label="Contact Name" fullWidth />
86
- </Grid>
87
- <Grid item xs={12} sm={6} md={4}>
88
- <TextInput source="ContactTitle" label="Contact Title" fullWidth />
89
- </Grid>
90
- <Grid item xs={12} sm={6} md={4}>
91
- <TextInput source="Address" label="Address" fullWidth />
92
- </Grid>
93
- <Grid item xs={12} sm={6} md={4}>
94
- <TextInput source="City" label="City" fullWidth />
95
- </Grid>
96
- <Grid item xs={12} sm={6} md={4}>
97
- <TextInput source="Country" label="Country" fullWidth />
98
- </Grid>
233
+ export const SupplierShow = (props) => (
234
+ <Show {...props}>
235
+ <SimpleShowLayout>
236
+ <Grid container spacing={2}>
237
+ <Grid item xs={12} md={6}>
238
+ <Paper sx={{ p: 2, mb: 2 }}>
239
+ <Typography variant="h6" gutterBottom>
240
+ <BusinessIcon sx={{ mr: 1, verticalAlign: 'middle' }} />
241
+ Company Information
242
+ </Typography>
243
+ <Divider sx={{ mb: 2 }} />
244
+ <Grid container spacing={2}>
245
+ <Grid item xs={12}>
246
+ <Labeled>
247
+ <TextField source="CompanyName" />
248
+ </Labeled>
249
+ </Grid>
250
+ <Grid item xs={12} sm={6}>
251
+ <Labeled>
252
+ <TextField source="ContactName" />
253
+ </Labeled>
254
+ </Grid>
255
+ <Grid item xs={12} sm={6}>
256
+ <Labeled>
257
+ <TextField source="ContactTitle" />
258
+ </Labeled>
259
+ </Grid>
260
+ </Grid>
261
+ </Paper>
99
262
  </Grid>
100
- </SimpleForm>
101
- </Create>
102
- );
103
- };
263
+
264
+ <Grid item xs={12} md={6}>
265
+ <Paper sx={{ p: 2, mb: 2 }}>
266
+ <Typography variant="h6" gutterBottom>
267
+ <LocationOnIcon sx={{ mr: 1, verticalAlign: 'middle' }} />
268
+ Address Information
269
+ </Typography>
270
+ <Divider sx={{ mb: 2 }} />
271
+ <Grid container spacing={2}>
272
+ <Grid item xs={12}>
273
+ <Labeled>
274
+ <TextField source="Address" />
275
+ </Labeled>
276
+ </Grid>
277
+ <Grid item xs={12} sm={6}>
278
+ <Labeled>
279
+ <TextField source="City" />
280
+ </Labeled>
281
+ </Grid>
282
+ <Grid item xs={12} sm={6}>
283
+ <Labeled>
284
+ <TextField source="Region" />
285
+ </Labeled>
286
+ </Grid>
287
+ <Grid item xs={12} sm={6}>
288
+ <Labeled>
289
+ <TextField source="PostalCode" />
290
+ </Labeled>
291
+ </Grid>
292
+ <Grid item xs={12} sm={6}>
293
+ <Labeled>
294
+ <TextField source="Country" />
295
+ </Labeled>
296
+ </Grid>
297
+ </Grid>
298
+ </Paper>
299
+ </Grid>
300
+
301
+ <Grid item xs={12}>
302
+ <Paper sx={{ p: 2 }}>
303
+ <Typography variant="h6" gutterBottom>
304
+ Contact Information
305
+ </Typography>
306
+ <Divider sx={{ mb: 2 }} />
307
+ <Grid container spacing={2}>
308
+ <Grid item xs={12} sm={4}>
309
+ <Labeled>
310
+ <TextField source="Phone" />
311
+ </Labeled>
312
+ </Grid>
313
+ <Grid item xs={12} sm={4}>
314
+ <Labeled>
315
+ <TextField source="Fax" />
316
+ </Labeled>
317
+ </Grid>
318
+ <Grid item xs={12} sm={4}>
319
+ <Labeled>
320
+ <TextField source="HomePage" />
321
+ </Labeled>
322
+ </Grid>
323
+ </Grid>
324
+ </Paper>
325
+ </Grid>
326
+ </Grid>
327
+ </SimpleShowLayout>
328
+ </Show>
329
+ );
104
330
 
105
- // Supplier Edit
106
- export const SupplierEdit = (props) => {
107
- return (
108
- <Edit {...props} redirect={false}>
109
- <SimpleForm>
110
- <Typography variant="h5" component="h2" sx={{ mb: 2, fontWeight: 'bold' }}>
111
- Edit Supplier
112
- </Typography>
113
- <Grid container spacing={3} sx={{ mb: 2 }}>
114
- <Grid item xs={12} sm={6} md={4}>
115
- <TextInput source="CompanyName" label="Company Name" fullWidth />
116
- </Grid>
117
- <Grid item xs={12} sm={6} md={4}>
118
- <TextInput source="ContactName" label="Contact Name" fullWidth />
119
- </Grid>
120
- <Grid item xs={12} sm={6} md={4}>
121
- <TextInput source="ContactTitle" label="Contact Title" fullWidth />
122
- </Grid>
123
- <Grid item xs={12} sm={6} md={4}>
124
- <TextInput source="Address" label="Address" fullWidth />
125
- </Grid>
126
- <Grid item xs={12} sm={6} md={4}>
127
- <TextInput source="City" label="City" fullWidth />
128
- </Grid>
129
- <Grid item xs={12} sm={6} md={4}>
130
- <TextInput source="Country" label="Country" fullWidth />
131
- </Grid>
331
+ export const SupplierEdit = (props) => (
332
+ <Edit {...props}>
333
+ <SimpleForm>
334
+ <Grid container spacing={2}>
335
+ <Grid item xs={12} md={6}>
336
+ <TextInput source="CompanyName" fullWidth />
337
+ <TextInput source="ContactName" fullWidth />
338
+ <TextInput source="ContactTitle" fullWidth />
132
339
  </Grid>
133
- </SimpleForm>
134
- </Edit>
135
- );
136
- };
340
+ <Grid item xs={12} md={6}>
341
+ <TextInput source="Address" fullWidth />
342
+ <TextInput source="City" fullWidth />
343
+ <TextInput source="Region" fullWidth />
344
+ <TextInput source="PostalCode" fullWidth />
345
+ <TextInput source="Country" fullWidth />
346
+ </Grid>
347
+ <Grid item xs={12}>
348
+ <TextInput source="Phone" fullWidth />
349
+ <TextInput source="Fax" fullWidth />
350
+ <TextInput source="HomePage" fullWidth />
351
+ </Grid>
352
+ </Grid>
353
+ </SimpleForm>
354
+ </Edit>
355
+ );
137
356
 
138
- export default {
139
- list: SupplierList,
140
- show: SupplierShow,
141
- create: SupplierCreate,
142
- edit: SupplierEdit,
143
- };
357
+ export const SupplierCreate = (props) => (
358
+ <Create {...props}>
359
+ <SimpleForm>
360
+ <Grid container spacing={2}>
361
+ <Grid item xs={12} md={6}>
362
+ <TextInput source="CompanyName" fullWidth />
363
+ <TextInput source="ContactName" fullWidth />
364
+ <TextInput source="ContactTitle" fullWidth />
365
+ </Grid>
366
+ <Grid item xs={12} md={6}>
367
+ <TextInput source="Address" fullWidth />
368
+ <TextInput source="City" fullWidth />
369
+ <TextInput source="Region" fullWidth />
370
+ <TextInput source="PostalCode" fullWidth />
371
+ <TextInput source="Country" fullWidth />
372
+ </Grid>
373
+ <Grid item xs={12}>
374
+ <TextInput source="Phone" fullWidth />
375
+ <TextInput source="Fax" fullWidth />
376
+ <TextInput source="HomePage" fullWidth />
377
+ </Grid>
378
+ </Grid>
379
+ </SimpleForm>
380
+ </Create>
381
+ );
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import ReactDOM from 'react-dom/client';
3
3
  import './index.css';
4
+ import 'leaflet/dist/leaflet.css';
4
5
  import App from './App';
5
6
  import reportWebVitals from './reportWebVitals';
6
7
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ApiLogicServer
3
- Version: 15.0.37
3
+ Version: 15.0.38
4
4
  Author-email: Val Huber <apilogicserver@gmail.com>
5
5
  License: BSD-3-Clause
6
6
  Project-URL: Homepage, https://www.genai-logic.com