mirror of
https://github.com/status-im/spiff-arena.git
synced 2025-02-23 06:58:10 +00:00
Merge branch 'main' into deploy-app-dev
This commit is contained in:
commit
346e3ca959
@ -75,6 +75,10 @@ PATH_SEGMENTS_FOR_PERMISSION_ALL = [
|
|||||||
"path": "/process-instances",
|
"path": "/process-instances",
|
||||||
"relevant_permissions": ["create", "read", "delete"],
|
"relevant_permissions": ["create", "read", "delete"],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "/process-instances/for-me",
|
||||||
|
"relevant_permissions": ["read"],
|
||||||
|
},
|
||||||
{"path": "/process-data", "relevant_permissions": ["read"]},
|
{"path": "/process-data", "relevant_permissions": ["read"]},
|
||||||
{"path": "/process-data-file-download", "relevant_permissions": ["read"]},
|
{"path": "/process-data-file-download", "relevant_permissions": ["read"]},
|
||||||
{"path": "/process-instance-suspend", "relevant_permissions": ["create"]},
|
{"path": "/process-instance-suspend", "relevant_permissions": ["create"]},
|
||||||
|
@ -129,6 +129,7 @@ class TestAuthorizationService(BaseTest):
|
|||||||
"/process-instances/some-process-group:some-process-model:*",
|
"/process-instances/some-process-group:some-process-model:*",
|
||||||
"delete",
|
"delete",
|
||||||
),
|
),
|
||||||
|
("/process-instances/for-me/some-process-group:some-process-model:*", "read"),
|
||||||
("/process-instances/some-process-group:some-process-model:*", "read"),
|
("/process-instances/some-process-group:some-process-model:*", "read"),
|
||||||
("/process-model-natural-language/some-process-group:some-process-model:*", "create"),
|
("/process-model-natural-language/some-process-group:some-process-model:*", "create"),
|
||||||
("/process-model-publish/some-process-group:some-process-model:*", "create"),
|
("/process-model-publish/some-process-group:some-process-model:*", "create"),
|
||||||
@ -213,6 +214,7 @@ class TestAuthorizationService(BaseTest):
|
|||||||
"/process-instances/some-process-group:some-process-model/*",
|
"/process-instances/some-process-group:some-process-model/*",
|
||||||
"delete",
|
"delete",
|
||||||
),
|
),
|
||||||
|
("/process-instances/for-me/some-process-group:some-process-model/*", "read"),
|
||||||
("/process-instances/some-process-group:some-process-model/*", "read"),
|
("/process-instances/some-process-group:some-process-model/*", "read"),
|
||||||
("/process-model-natural-language/some-process-group:some-process-model/*", "create"),
|
("/process-model-natural-language/some-process-group:some-process-model/*", "create"),
|
||||||
("/process-model-publish/some-process-group:some-process-model/*", "create"),
|
("/process-model-publish/some-process-group:some-process-model/*", "create"),
|
||||||
|
@ -16,6 +16,7 @@ import UserService from './services/UserService';
|
|||||||
import ErrorDisplay from './components/ErrorDisplay';
|
import ErrorDisplay from './components/ErrorDisplay';
|
||||||
import APIErrorProvider from './contexts/APIErrorContext';
|
import APIErrorProvider from './contexts/APIErrorContext';
|
||||||
import ScrollToTop from './components/ScrollToTop';
|
import ScrollToTop from './components/ScrollToTop';
|
||||||
|
import EditorRoutes from './routes/EditorRoutes';
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
if (!UserService.isLoggedIn()) {
|
if (!UserService.isLoggedIn()) {
|
||||||
@ -41,6 +42,7 @@ export default function App() {
|
|||||||
<Route path="/about" element={<About />} />
|
<Route path="/about" element={<About />} />
|
||||||
<Route path="/tasks/*" element={<HomePageRoutes />} />
|
<Route path="/tasks/*" element={<HomePageRoutes />} />
|
||||||
<Route path="/admin/*" element={<AdminRoutes />} />
|
<Route path="/admin/*" element={<AdminRoutes />} />
|
||||||
|
<Route path="/editor/*" element={<EditorRoutes />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</ErrorBoundary>
|
</ErrorBoundary>
|
||||||
</Content>
|
</Content>
|
||||||
|
@ -179,7 +179,6 @@ export default function MessageInstanceList({ processInstanceId }: OwnProps) {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{breadcrumbElement}
|
{breadcrumbElement}
|
||||||
<h1>Messages</h1>
|
|
||||||
{correlationsDisplayModal()}
|
{correlationsDisplayModal()}
|
||||||
<PaginationForTable
|
<PaginationForTable
|
||||||
page={page}
|
page={page}
|
||||||
|
@ -1778,18 +1778,13 @@ export default function ProcessInstanceListTable({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<div className="process-instance-list-table">
|
||||||
{reportColumnForm()}
|
{reportColumnForm()}
|
||||||
{advancedOptionsModal()}
|
{advancedOptionsModal()}
|
||||||
{processInstanceReportSaveTag()}
|
{processInstanceReportSaveTag()}
|
||||||
<Grid fullWidth condensed>
|
<Grid fullWidth condensed>
|
||||||
{tableTitleLine()}
|
{tableTitleLine()}
|
||||||
<Column
|
<Column sm={{ span: 4 }} md={{ span: 8 }} lg={{ span: 16 }}>
|
||||||
sm={{ span: 4 }}
|
|
||||||
md={{ span: 8 }}
|
|
||||||
lg={{ span: 16 }}
|
|
||||||
style={{ maxWidth: 'fit-content' }}
|
|
||||||
>
|
|
||||||
<Filters
|
<Filters
|
||||||
filterOptions={filterOptions}
|
filterOptions={filterOptions}
|
||||||
showFilterOptions={showFilterOptions}
|
showFilterOptions={showFilterOptions}
|
||||||
@ -1798,15 +1793,10 @@ export default function ProcessInstanceListTable({
|
|||||||
filtersEnabled={filtersEnabled}
|
filtersEnabled={filtersEnabled}
|
||||||
/>
|
/>
|
||||||
</Column>
|
</Column>
|
||||||
<Column
|
<Column sm={{ span: 4 }} md={{ span: 8 }} lg={{ span: 16 }}>
|
||||||
sm={{ span: 4 }}
|
|
||||||
md={{ span: 8 }}
|
|
||||||
lg={{ span: 16 }}
|
|
||||||
style={{ maxWidth: 'fit-content', margin: 'auto' }}
|
|
||||||
>
|
|
||||||
{resultsTable}
|
{resultsTable}
|
||||||
</Column>
|
</Column>
|
||||||
</Grid>
|
</Grid>
|
||||||
</>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -430,11 +430,11 @@ export default function ReactDiagramEditor({
|
|||||||
// a Modeler and not an Editor which is what it will be when we are
|
// a Modeler and not an Editor which is what it will be when we are
|
||||||
// actively editing a decision table
|
// actively editing a decision table
|
||||||
if ((modeler as any).constructor.name === 'Modeler') {
|
if ((modeler as any).constructor.name === 'Modeler') {
|
||||||
canvas.zoom(FitViewport);
|
canvas.zoom(FitViewport, 'auto');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((modeler as any).constructor.name === 'Viewer') {
|
if ((modeler as any).constructor.name === 'Viewer') {
|
||||||
canvas.zoom(FitViewport);
|
canvas.zoom(FitViewport, 'auto');
|
||||||
}
|
}
|
||||||
|
|
||||||
// highlighting a field
|
// highlighting a field
|
||||||
@ -497,7 +497,7 @@ export default function ReactDiagramEditor({
|
|||||||
ref.element.set(ref.property, elem);
|
ref.element.set(ref.property, elem);
|
||||||
});
|
});
|
||||||
diagramModelerToUse.importDefinitions(result.rootElement);
|
diagramModelerToUse.importDefinitions(result.rootElement);
|
||||||
diagramModelerToUse.get('canvas').zoom(FitViewport);
|
diagramModelerToUse.get('canvas').zoom(FitViewport, 'auto');
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
diagramModelerToUse.importXML(diagramXMLToDisplay);
|
diagramModelerToUse.importXML(diagramXMLToDisplay);
|
||||||
|
@ -199,7 +199,7 @@ dt {
|
|||||||
|
|
||||||
.diagram-editor-canvas {
|
.diagram-editor-canvas {
|
||||||
border:1px solid #000000;
|
border:1px solid #000000;
|
||||||
height:70vh;
|
height:78vh;
|
||||||
width:90vw;
|
width:90vw;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
@ -298,7 +298,6 @@ dt {
|
|||||||
.markdown table {
|
.markdown table {
|
||||||
color: #333;
|
color: #333;
|
||||||
background: white;
|
background: white;
|
||||||
border: 1px solid grey;
|
|
||||||
font-size: 12pt;
|
font-size: 12pt;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
@ -396,6 +395,13 @@ td.actions-cell {
|
|||||||
width: 1em;
|
width: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.process-instance-list-table {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
width: fit-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.process-instance-table-header {
|
.process-instance-table-header {
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,25 @@
|
|||||||
// tweaks the markdown styles.
|
// tweaks the markdown styles.
|
||||||
|
|
||||||
main {
|
main {
|
||||||
max-width: 1440px;
|
}
|
||||||
margin: auto;
|
|
||||||
|
.fixed-width-container {
|
||||||
|
padding-left: 0px;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1400px) {
|
||||||
|
.fixed-width-container {
|
||||||
|
max-width: 1280px;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1056px) {
|
||||||
|
.fixed-width-container {
|
||||||
|
padding-left: 180px;
|
||||||
|
padding-right: 2rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p, li, h1, h2, h3, h4, h5, h6, blockquote {
|
p, li, h1, h2, h3, h4, h5, h6, blockquote {
|
||||||
@ -35,6 +52,17 @@ div.show-page, div.markdown, div.markdown-collapsed, div.markdown-collapsable {
|
|||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
max-width: 1000px;
|
max-width: 1000px;
|
||||||
padding: 15px 0 15px 0;
|
padding: 15px 0 15px 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cds--data-table-content {
|
||||||
|
width: fit-content;
|
||||||
|
min-width: 100%;
|
||||||
|
overflow-x: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wmde-markdown table {
|
||||||
|
width: fit-content;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wmde-markdown ol {
|
.wmde-markdown ol {
|
||||||
|
@ -6,7 +6,6 @@ import ProcessGroupShow from './ProcessGroupShow';
|
|||||||
import ProcessGroupNew from './ProcessGroupNew';
|
import ProcessGroupNew from './ProcessGroupNew';
|
||||||
import ProcessGroupEdit from './ProcessGroupEdit';
|
import ProcessGroupEdit from './ProcessGroupEdit';
|
||||||
import ProcessModelShow from './ProcessModelShow';
|
import ProcessModelShow from './ProcessModelShow';
|
||||||
import ProcessModelEditDiagram from './ProcessModelEditDiagram';
|
|
||||||
import ProcessInstanceList from './ProcessInstanceList';
|
import ProcessInstanceList from './ProcessInstanceList';
|
||||||
import ProcessModelNew from './ProcessModelNew';
|
import ProcessModelNew from './ProcessModelNew';
|
||||||
import ProcessModelEdit from './ProcessModelEdit';
|
import ProcessModelEdit from './ProcessModelEdit';
|
||||||
@ -30,6 +29,7 @@ export default function AdminRoutes() {
|
|||||||
|
|
||||||
if (UserService.hasRole(['admin'])) {
|
if (UserService.hasRole(['admin'])) {
|
||||||
return (
|
return (
|
||||||
|
<div className="fixed-width-container">
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/" element={<ProcessGroupList />} />
|
<Route path="/" element={<ProcessGroupList />} />
|
||||||
<Route path="process-groups" element={<ProcessGroupList />} />
|
<Route path="process-groups" element={<ProcessGroupList />} />
|
||||||
@ -55,14 +55,6 @@ export default function AdminRoutes() {
|
|||||||
path="process-models/:process_model_id"
|
path="process-models/:process_model_id"
|
||||||
element={<ProcessModelShow />}
|
element={<ProcessModelShow />}
|
||||||
/>
|
/>
|
||||||
<Route
|
|
||||||
path="process-models/:process_model_id/files"
|
|
||||||
element={<ProcessModelEditDiagram />}
|
|
||||||
/>
|
|
||||||
<Route
|
|
||||||
path="process-models/:process_model_id/files/:file_name"
|
|
||||||
element={<ProcessModelEditDiagram />}
|
|
||||||
/>
|
|
||||||
<Route
|
<Route
|
||||||
path="process-models/:process_model_id/edit"
|
path="process-models/:process_model_id/edit"
|
||||||
element={<ProcessModelEdit />}
|
element={<ProcessModelEdit />}
|
||||||
@ -134,6 +126,7 @@ export default function AdminRoutes() {
|
|||||||
/>
|
/>
|
||||||
<Route path="messages" element={<MessageListPage />} />
|
<Route path="messages" element={<MessageListPage />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
|
33
spiffworkflow-frontend/src/routes/EditorRoutes.tsx
Normal file
33
spiffworkflow-frontend/src/routes/EditorRoutes.tsx
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { Routes, Route, useLocation } from 'react-router-dom';
|
||||||
|
|
||||||
|
import React, { useEffect } from 'react';
|
||||||
|
import ProcessModelEditDiagram from './ProcessModelEditDiagram';
|
||||||
|
import UserService from '../services/UserService';
|
||||||
|
|
||||||
|
export default function EditorRoutes() {
|
||||||
|
const location = useLocation();
|
||||||
|
|
||||||
|
useEffect(() => {}, [location]);
|
||||||
|
|
||||||
|
if (UserService.hasRole(['admin'])) {
|
||||||
|
return (
|
||||||
|
<div className="full-width-container">
|
||||||
|
<Routes>
|
||||||
|
<Route
|
||||||
|
path="process-models/:process_model_id/files"
|
||||||
|
element={<ProcessModelEditDiagram />}
|
||||||
|
/>
|
||||||
|
<Route
|
||||||
|
path="process-models/:process_model_id/files/:file_name"
|
||||||
|
element={<ProcessModelEditDiagram />}
|
||||||
|
/>
|
||||||
|
</Routes>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<main>
|
||||||
|
<h1>404</h1>
|
||||||
|
</main>
|
||||||
|
);
|
||||||
|
}
|
@ -47,7 +47,7 @@ export default function HomePageRoutes() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<div className="fixed-width-container">
|
||||||
{renderTabs()}
|
{renderTabs()}
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/" element={<InProgressInstances />} />
|
<Route path="/" element={<InProgressInstances />} />
|
||||||
@ -57,6 +57,6 @@ export default function HomePageRoutes() {
|
|||||||
<Route path="completed-instances" element={<CompletedInstances />} />
|
<Route path="completed-instances" element={<CompletedInstances />} />
|
||||||
<Route path="create-new-instance" element={<CreateNewInstance />} />
|
<Route path="create-new-instance" element={<CreateNewInstance />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
import MessageInstanceList from '../components/MessageInstanceList';
|
import MessageInstanceList from '../components/MessageInstanceList';
|
||||||
|
|
||||||
export default function MessageListPage() {
|
export default function MessageListPage() {
|
||||||
return <MessageInstanceList />;
|
return (
|
||||||
|
<>
|
||||||
|
<h1>Messages</h1>
|
||||||
|
<MessageInstanceList />
|
||||||
|
</>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,7 @@ export default function ProcessModelEditDiagram() {
|
|||||||
'file_type'
|
'file_type'
|
||||||
)}`;
|
)}`;
|
||||||
navigate(
|
navigate(
|
||||||
`/admin/process-models/${modifiedProcessModelId}/files/${fileNameWithExtension}`
|
`/editor/process-models/${modifiedProcessModelId}/files/${fileNameWithExtension}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -909,7 +909,7 @@ export default function ProcessModelEditDiagram() {
|
|||||||
processReference: ProcessReference
|
processReference: ProcessReference
|
||||||
) => {
|
) => {
|
||||||
const path = generatePath(
|
const path = generatePath(
|
||||||
'/admin/process-models/:process_model_path/files/:file_name',
|
'/editor/process-models/:process_model_path/files/:file_name',
|
||||||
{
|
{
|
||||||
process_model_path: modifyProcessIdentifierForPathParam(
|
process_model_path: modifyProcessIdentifierForPathParam(
|
||||||
processReference.process_model_id
|
processReference.process_model_id
|
||||||
@ -962,7 +962,7 @@ export default function ProcessModelEditDiagram() {
|
|||||||
const file = findFileNameForReferenceId(processId, 'dmn');
|
const file = findFileNameForReferenceId(processId, 'dmn');
|
||||||
if (file) {
|
if (file) {
|
||||||
const path = generatePath(
|
const path = generatePath(
|
||||||
'/admin/process-models/:process_model_id/files/:file_name',
|
'/editor/process-models/:process_model_id/files/:file_name',
|
||||||
{
|
{
|
||||||
process_model_id: params.process_model_id,
|
process_model_id: params.process_model_id,
|
||||||
file_name: file.name,
|
file_name: file.name,
|
||||||
|
@ -193,7 +193,7 @@ export default function ProcessModelShow() {
|
|||||||
const profileModelFileEditUrl = (processModelFile: ProcessFile) => {
|
const profileModelFileEditUrl = (processModelFile: ProcessFile) => {
|
||||||
if (processModel) {
|
if (processModel) {
|
||||||
if (processModelFile.name.match(/\.(dmn|bpmn)$/)) {
|
if (processModelFile.name.match(/\.(dmn|bpmn)$/)) {
|
||||||
return `/admin/process-models/${modifiedProcessModelId}/files/${processModelFile.name}`;
|
return `/editor/process-models/${modifiedProcessModelId}/files/${processModelFile.name}`;
|
||||||
}
|
}
|
||||||
if (processModelFile.name.match(/\.(json|md)$/)) {
|
if (processModelFile.name.match(/\.(json|md)$/)) {
|
||||||
return `/admin/process-models/${modifiedProcessModelId}/form/${processModelFile.name}`;
|
return `/admin/process-models/${modifiedProcessModelId}/form/${processModelFile.name}`;
|
||||||
@ -530,13 +530,13 @@ export default function ProcessModelShow() {
|
|||||||
onChange={(a: any) => {
|
onChange={(a: any) => {
|
||||||
if (a.selectedItem.text === 'New BPMN File') {
|
if (a.selectedItem.text === 'New BPMN File') {
|
||||||
navigate(
|
navigate(
|
||||||
`/admin/process-models/${modifiedProcessModelId}/files?file_type=bpmn`
|
`/editor/process-models/${modifiedProcessModelId}/files?file_type=bpmn`
|
||||||
);
|
);
|
||||||
} else if (a.selectedItem.text === 'Upload File') {
|
} else if (a.selectedItem.text === 'Upload File') {
|
||||||
setShowFileUploadModal(true);
|
setShowFileUploadModal(true);
|
||||||
} else if (a.selectedItem.text === 'New DMN File') {
|
} else if (a.selectedItem.text === 'New DMN File') {
|
||||||
navigate(
|
navigate(
|
||||||
`/admin/process-models/${modifiedProcessModelId}/files?file_type=dmn`
|
`/editor/process-models/${modifiedProcessModelId}/files?file_type=dmn`
|
||||||
);
|
);
|
||||||
} else if (a.selectedItem.text === 'New JSON File') {
|
} else if (a.selectedItem.text === 'New JSON File') {
|
||||||
navigate(
|
navigate(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user