tachybase_todo/packages/plugins/workflow/src/client/WorkflowProvider.tsx
Junyi 4fbad75ea9
Feat(plugin-workflow) manual instruction (#1339)
* feat(plugin-workflow): add prompt node

* feat(plugin-workflow): useValueGetter for all instructions and triggers

* feat(plugin-workflow): add workflow block initializer

* refactor(plugin-workflow): change prompt node type to manual

* feat(plugin-workflow): add ModeConfig component for mode

* feat(plugin-workflow): add todo drawer

* feat(plugin-workflow): add block value provider

* feat(plugin-workflow): improve todo block and drawer

* fix(plugin-workflow): fix instruction name in test cases

* fix(plugin-workflow): fix test cases

* refactor(plugin-workflow): change param type of collection field initializer

* feat(plugin-workflow): add filter types for getters

* fix(plugin-workflow): fix assignees variable

* fix(plugin-workflow): filter todo by exist workflow

* fix(plugin-workflow): fix duplicated save action in manual config

* fix(plugin-workflow): fix transaction

* feat(plugin-workflow): destroy workflow will be cascaded

* fix(plugin-workflow): fix merge

* fix(plugin-workflow): fix locale

* fix(plugin-workflow): allow open ui view when executed

* fix(plugin-workflow): change todo table filter

* feat(plugin-workflow): use formula for calculation

* fix(plugin-workflow): fix variable template regexp

* fix(plugin-workflow): fix sub-options logic with types

* refactor(plugin-workflow): drop useless component

* fix(plugin-workflow): fix manual node action button

* feat(plugin-workflow): add new variable input component

* refactor(plugin-workflow): change all variable to new component

* fix(plugin-workflow): fix type

* fix(plugin-workflow): fix functions init

* fix(plugin-workflow): change jsonb to json for stable order

* fix(plugin-workflow): fix duplicated field name when initialize

* fix(plugin-workflow): fix manual result in manual block

* test(plugin-workflow): log field initializer props

* fix(plugin-workflow): fix nullable arguments

* test(plugin-workflow): test initializer fields schema

* fix: observer

* fix(plugin-workflow): adjust hints

* fix(plugin-workflow): fix locale and cursor in variable input

* refactor(plugin-workflow): change status keys

* fix(plugin-workflow): fix parallel instruction

* fix(plugin-workflow): fix calculation migration

* fix(plugin-workflow): move tasks native filter to server

* fix(plugin-workflow): fix manual options for variable

* fix(plugin-workflow): fix conflict

* fix(plugin-workflow): fix some bugs

* fix(plugin-workflow): fix todo list filter and locale

* fix(plugin-workflow): fix update action of workflow

* refactor(plugin-workflow): add legacy condition calculation as basic engine

* fix(plugin-workflow): fix type

* fix(plugin-workflow): fix condition basic calculation

* fix(plugin-workflow): fix type

* fix(plugin-workflow): fix migration

* fix(plugin-workflow): fix evaluators and scope

* fix(plugin-workflow): remove disabled type select in schema config

* fix(plugin-workflow): fix manual form schema designer

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2023-02-20 11:52:06 +08:00

90 lines
2.8 KiB
TypeScript

import React, { useContext } from 'react';
import { Card } from 'antd';
import { PluginManagerContext, RouteSwitchContext, SchemaComponent, SchemaComponentOptions, SettingsCenterProvider } from '@nocobase/client';
import { WorkflowPage } from './WorkflowPage';
import { ExecutionPage } from './ExecutionPage';
import { triggers } from './triggers';
import { instructions } from './nodes';
import { lang } from './locale';
import { workflowSchema } from './schemas/workflows';
import { WorkflowLink } from './WorkflowLink';
import { ExecutionResourceProvider } from './ExecutionResourceProvider';
import { ExecutionLink } from './ExecutionLink';
import OpenDrawer from './components/OpenDrawer';
import { WorkflowTodo } from './nodes/manual/WorkflowTodo';
import { WorkflowTodoBlockInitializer } from './nodes/manual/WorkflowTodoBlockInitializer';
export const WorkflowContext = React.createContext({});
export function useWorkflowContext() {
return useContext(WorkflowContext);
}
function WorkflowPane() {
return (
<Card bordered={false}>
<SchemaComponent
schema={workflowSchema}
components={{
WorkflowLink,
ExecutionResourceProvider,
ExecutionLink,
OpenDrawer
}}
/>
</Card>
);
};
export const WorkflowProvider = (props) => {
const ctx = useContext(PluginManagerContext);
const { routes, components, ...others } = useContext(RouteSwitchContext);
routes[1].routes.unshift(
{
type: 'route',
path: '/admin/settings/workflow/workflows/:id',
component: 'WorkflowPage',
},
{
type: 'route',
path: '/admin/settings/workflow/executions/:id',
component: 'ExecutionPage',
},
);
return (
<SettingsCenterProvider
settings={{
workflow: {
icon: 'PartitionOutlined',
// title: `{{t("Workflow", { ns: "${NAMESPACE}" })}}`,
title: lang('Workflow'),
tabs: {
workflows: {
isBookmark: true,
title: lang('Workflow'),
component: WorkflowPane,
},
},
},
}}
>
<PluginManagerContext.Provider
value={{
components: {
...ctx?.components,
// WorkflowShortcut,
},
}}
>
<RouteSwitchContext.Provider value={{ components: { ...components, WorkflowPage, ExecutionPage }, ...others, routes }}>
<SchemaComponentOptions components={{ WorkflowTodo, WorkflowTodoBlockInitializer }}>
<WorkflowContext.Provider value={{ triggers, instructions }}>
{props.children}
</WorkflowContext.Provider>
</SchemaComponentOptions>
</RouteSwitchContext.Provider>
</PluginManagerContext.Provider>
</SettingsCenterProvider>
);
};