@giteeteam/apps-team-components 1.2.0-alpha.1 → 1.2.0-alpha.3

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 (33) hide show
  1. package/dist/components/fields/actors/BaseField.d.ts +1 -8
  2. package/dist/components/fields/actors/BaseField.js +1 -1
  3. package/dist/components/fields/data-quote/utils.d.ts +0 -2
  4. package/dist/components/fields/data-quote/utils.js +23 -27
  5. package/dist/components/fields/dropdown/BaseField.d.ts +0 -1
  6. package/dist/components/fields/status/Cell.js +1 -1
  7. package/dist/components/fields/status/Field.d.ts +1 -0
  8. package/dist/components/fields/status/SelectFlowHandler.d.ts +16 -0
  9. package/dist/components/fields/status/SelectFlowHandler.js +75 -0
  10. package/dist/components/fields/status/SelectTransition.d.ts +26 -0
  11. package/dist/components/fields/status/SelectTransition.js +17 -0
  12. package/dist/components/fields/status/Transition.d.ts +4 -0
  13. package/dist/components/fields/status/Transition.js +2 -2
  14. package/dist/components/fields/status/TransitionButton.d.ts +1 -3
  15. package/dist/components/fields/status/TransitionButton.js +3 -8
  16. package/dist/components/fields/status/TransitionPanel.d.ts +4 -0
  17. package/dist/components/fields/status/TransitionPanel.js +36 -17
  18. package/dist/components/fields/status/style/index.d.ts +12 -2
  19. package/dist/components/fields/status/style/index.js +158 -2
  20. package/dist/components/fields/user/ReadView.js +2 -2
  21. package/dist/icons/index.d.ts +3 -0
  22. package/dist/icons/index.js +12 -0
  23. package/dist/icons/svg/ArrowBack.svg +1 -0
  24. package/dist/icons/svg/Done.svg +1 -0
  25. package/dist/icons/svg/Search.svg +1 -0
  26. package/dist/lib/array.d.ts +1 -1
  27. package/dist/lib/array.js +1 -1
  28. package/dist/lib/hooks/useI18n.d.ts +3 -2
  29. package/dist/lib/workflow.d.ts +1 -1
  30. package/dist/lib/workflow.js +36 -70
  31. package/dist/locales/index.d.ts +24 -0
  32. package/dist/locales/index.js +24 -0
  33. package/package.json +1 -2
@@ -1,8 +1 @@
1
- import type { ObjectId, User as UserTyped } from '../../../lib/types/models';
2
- type UserOption = {
3
- label: string;
4
- value: ObjectId;
5
- key: string;
6
- };
7
- export declare const formatUserOption: (actorData: UserTyped) => UserOption;
8
- export {};
1
+ export declare const formatUserOption: (actorData: any) => any;
@@ -1,5 +1,5 @@
1
1
  import { userOptionAdapter } from '../../../lib/users';
2
- export const formatUserOption = (actorData) => {
2
+ export const formatUserOption = actorData => {
3
3
  const isUserData = !!(actorData === null || actorData === void 0 ? void 0 : actorData.username) && (actorData === null || actorData === void 0 ? void 0 : actorData.enabled);
4
4
  if (isUserData)
5
5
  return userOptionAdapter(actorData);
@@ -1,5 +1,3 @@
1
1
  import { Item } from '../../../lib/types/models';
2
2
  import { selectValue as selectValueProps } from '../dropdown/BaseField';
3
- export declare const DATA_QUOTE_OPTION_FORMAT_REG: RegExp;
4
- export declare const dataQuoteOptionFormat: (data: Item, display?: string) => selectValueProps;
5
3
  export declare const dataQuoteInit: (dates: Item[], value: string[], display?: string) => selectValueProps[];
@@ -1,30 +1,26 @@
1
- export const DATA_QUOTE_OPTION_FORMAT_REG = /{(\S+?)}/g;
2
- export const dataQuoteOptionFormat = (data, display) => {
3
- var _a, _b, _c;
4
- if (!data)
5
- return undefined;
6
- const dataCopy = {
7
- ...data,
8
- status: (_a = data.status) === null || _a === void 0 ? void 0 : _a.name,
9
- itemType: (_b = data.itemType) === null || _b === void 0 ? void 0 : _b.name,
10
- };
11
- return {
12
- label: display
13
- ? display.replace(DATA_QUOTE_OPTION_FORMAT_REG, function (itemKey) {
14
- const key = itemKey.slice(1, itemKey.length - 1);
15
- return dataCopy[key] || (data.values && data.values[key]) || '';
16
- })
17
- : data.name,
18
- value: data.objectId,
19
- name: data.name,
20
- key: data.key,
21
- itemType: data.itemType,
22
- icon: (_c = data === null || data === void 0 ? void 0 : data.itemType) === null || _c === void 0 ? void 0 : _c.icon,
23
- values: data.values,
24
- };
25
- };
26
1
  export const dataQuoteInit = (dates, value, display) => {
27
- const existedDataList = dates === null || dates === void 0 ? void 0 : dates.filter(data => value === null || value === void 0 ? void 0 : value.includes(data.objectId));
28
- const dataInit = existedDataList === null || existedDataList === void 0 ? void 0 : existedDataList.map(existedData => dataQuoteOptionFormat(existedData, display));
2
+ const regex = /({\S+?})/g;
3
+ const existedDatas = dates === null || dates === void 0 ? void 0 : dates.filter(data => value === null || value === void 0 ? void 0 : value.includes(data.objectId));
4
+ const dataInit = existedDatas === null || existedDatas === void 0 ? void 0 : existedDatas.map(existedData => {
5
+ var _a, _b, _c;
6
+ const dataCopy = {
7
+ ...existedData,
8
+ status: (_a = existedData.status) === null || _a === void 0 ? void 0 : _a.name,
9
+ itemType: (_b = existedData.itemType) === null || _b === void 0 ? void 0 : _b.name,
10
+ };
11
+ const values = existedData.values || {};
12
+ return {
13
+ label: display
14
+ ? display.replace(regex, function (itemKey) {
15
+ const key = itemKey.slice(1, itemKey.length - 1);
16
+ return dataCopy[key] || values[key] || '';
17
+ })
18
+ : existedData.name,
19
+ value: existedData.objectId,
20
+ itemType: existedData.itemType,
21
+ icon: (_c = existedData === null || existedData === void 0 ? void 0 : existedData.itemType) === null || _c === void 0 ? void 0 : _c.icon,
22
+ values: existedData.values,
23
+ };
24
+ });
29
25
  return dataInit;
30
26
  };
@@ -2,6 +2,5 @@
2
2
  export interface selectValue {
3
3
  label: React.ReactNode;
4
4
  value: string | number;
5
- [key: string]: any;
6
5
  }
7
6
  export declare const handleValue: (value: selectValue | string | number) => string | number;
@@ -12,7 +12,7 @@ const StatusCell = React.memo(props => {
12
12
  setShowData({ objectId, name, type });
13
13
  onChange === null || onChange === void 0 ? void 0 : onChange({ objectId, name, type });
14
14
  }, [onChange]);
15
- return (_jsx("div", { className: `${overlayClsName} field-cell-layout field-layout ${!readonly ? 'pointer' : ''}`, children: readonly ? (_jsx(ReadView, { value: showData, readonly: true })) : (_jsx(Transition, { itemId: itemId, ...showData, apply: "cell", workspace: workspaceId, itemType: itemTypeId, onTransitionSuccess: handleChange })) }));
15
+ return (_jsx("div", { className: `${overlayClsName} field-cell-layout field-layout ${!readonly ? 'pointer' : ''}`, children: readonly ? (_jsx(ReadView, { value: showData, readonly: true })) : (_jsx(Transition, { itemId: itemId, ...showData, ...(props.flowHandler || {}), apply: "cell", workspace: workspaceId, itemType: itemTypeId, onTransitionSuccess: handleChange })) }));
16
16
  });
17
17
  StatusCell.displayName = 'StatusCell';
18
18
  export default StatusCell;
@@ -23,4 +23,5 @@ export type StatusProps = FieldProps & {
23
23
  searchComponent?: boolean;
24
24
  onChange?: (value?: any) => void;
25
25
  children?: React.ReactNode;
26
+ flowHandler?: Record<string, any>;
26
27
  };
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ interface SelectFlowHandlerProps {
3
+ itemId: string;
4
+ onBack: () => void;
5
+ task: Record<string, any>;
6
+ users: Array<Record<string, any>>;
7
+ loading: boolean;
8
+ loadingUser: boolean;
9
+ fetchUsers: (itemId: string, status: string, keyword?: string) => Promise<void>;
10
+ handleTransition: (updateTask: string, screenId: string, script: string, flowHandler?: Array<{
11
+ label: string;
12
+ value: string;
13
+ }>) => void;
14
+ }
15
+ declare const _default: React.NamedExoticComponent<SelectFlowHandlerProps>;
16
+ export default _default;
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
+ import React, { memo, useCallback, useEffect } from 'react';
3
+ import { ClassNames, css } from '@emotion/react';
4
+ import { Button, Input, message, Spin } from 'antd';
5
+ import { cloneDeep, debounce } from 'lodash-es';
6
+ import { ArrowBackIcon, DoneIcon, SearchIcon } from '../../../icons';
7
+ import { WorkFlowStatusColor } from '../../../lib/global';
8
+ import { i18n } from '../../../lib/i18n';
9
+ import BaseOverflowTooltip from '../../common/overflow-tooltip/BaseOverflowTooltip';
10
+ import { FlowHandlerHeader, FlowHandlerSearchWrapper, FlowHandlerSelectContent, FlowHandlerSelectItem, FlowHandlerSelectMessage, FlowHandlerSubmitWrapper, FlowHandlerWrapper, flowStateStyle, iconStyle, overflowStyle, overflowStyleText, stateBoxStyle, tooltipStyle, } from './style';
11
+ const SelectFlowHandler = ({ itemId, task, onBack, users, loading, loadingUser, fetchUsers, handleTransition, }) => {
12
+ var _a, _b, _c;
13
+ const [selectedUsers, setSelectedUsers] = React.useState([]);
14
+ const [selectedUserIds, setSelectedUserIds] = React.useState([]);
15
+ useEffect(() => {
16
+ fetchUsers(itemId, task === null || task === void 0 ? void 0 : task.targetId);
17
+ }, [itemId, task === null || task === void 0 ? void 0 : task.targetId, fetchUsers]);
18
+ const onSearch = debounce(useCallback((value) => {
19
+ fetchUsers(itemId, task === null || task === void 0 ? void 0 : task.targetId, value);
20
+ }, [fetchUsers, task === null || task === void 0 ? void 0 : task.targetId, itemId]), 300);
21
+ const selectUser = useCallback(userData => {
22
+ const userId = selectedUserIds.find(id => id === userData.objectId);
23
+ let newIds = [], newUsers = [];
24
+ if (!userId) {
25
+ newIds = selectedUserIds.concat(userData.objectId);
26
+ newUsers = selectedUsers.concat(userData);
27
+ }
28
+ else {
29
+ newIds = selectedUserIds.filter(id => id !== userData.objectId);
30
+ newUsers = selectedUsers.filter(user => user.objectId !== userData.objectId);
31
+ }
32
+ setSelectedUsers(newUsers);
33
+ setSelectedUserIds(newIds);
34
+ }, [selectedUserIds, selectedUsers]);
35
+ const selectAll = useCallback(() => {
36
+ setSelectedUsers(cloneDeep(users));
37
+ setSelectedUserIds(cloneDeep(users.map(user => user.objectId)));
38
+ }, [users]);
39
+ const clearSelect = useCallback(() => {
40
+ setSelectedUsers([]);
41
+ setSelectedUserIds([]);
42
+ }, []);
43
+ const onSubmit = useCallback(() => {
44
+ var _a, _b, _c;
45
+ if (!selectedUserIds.length) {
46
+ message.error(i18n.t('pages.workflow.flowHandler.message'));
47
+ return;
48
+ }
49
+ const submitUsers = selectedUsers.map(user => ({
50
+ deleted: user.deleted,
51
+ enabled: user.enabled,
52
+ nickname: user.nickname,
53
+ username: user.username,
54
+ label: user.nickname ? `${user.nickname}(${user.username})` : user.username,
55
+ value: user.objectId,
56
+ }));
57
+ handleTransition(task.name, (_b = (_a = task.parameters) === null || _a === void 0 ? void 0 : _a.screen) === null || _b === void 0 ? void 0 : _b.key, (_c = task.parameters) === null || _c === void 0 ? void 0 : _c.scriptValidator, submitUsers);
58
+ }, [
59
+ handleTransition,
60
+ selectedUserIds.length,
61
+ selectedUsers,
62
+ task.name,
63
+ (_b = (_a = task.parameters) === null || _a === void 0 ? void 0 : _a.screen) === null || _b === void 0 ? void 0 : _b.key,
64
+ (_c = task.parameters) === null || _c === void 0 ? void 0 : _c.scriptValidator,
65
+ ]);
66
+ const OverflowText = () => {
67
+ var _a, _b;
68
+ return (_jsxs("div", { css: css(overflowStyle), children: [_jsx(BaseOverflowTooltip, { css: css(tooltipStyle, overflowStyleText), title: task.name, children: task.name }), _jsx("span", { css: css(iconStyle), children: " \u2192 " }), _jsx("div", { css: css(stateBoxStyle), children: _jsx(BaseOverflowTooltip, { css: css(flowStateStyle, overflowStyleText), style: {
69
+ backgroundColor: (_a = WorkFlowStatusColor[task.target.type]) === null || _a === void 0 ? void 0 : _a.bgColor,
70
+ color: (_b = WorkFlowStatusColor[task.target.type]) === null || _b === void 0 ? void 0 : _b.color,
71
+ }, title: task.target.name, children: task.target.name }) })] }));
72
+ };
73
+ return (_jsx(ClassNames, { children: ({ cx, css }) => (_jsxs("div", { className: cx(css(FlowHandlerWrapper)), children: [_jsxs("header", { className: cx(css(FlowHandlerHeader)), children: [_jsx("span", { className: "back-wrapper", onClick: () => onBack === null || onBack === void 0 ? void 0 : onBack(), children: _jsx(ArrowBackIcon, { className: "icon-back" }) }), _jsx("span", { children: i18n.t('pages.workflow.flowHandler.title') })] }), task && _jsx(OverflowText, {}), _jsxs("div", { className: cx(css(FlowHandlerSearchWrapper)), children: [_jsx(SearchIcon, { className: "icon-search" }), _jsx(Input, { className: "search-input", placeholder: i18n.t('pages.workflow.flowHandler.search'), onChange: e => onSearch === null || onSearch === void 0 ? void 0 : onSearch(e.target.value), allowClear: true })] }), _jsxs("div", { className: cx(css(FlowHandlerSelectMessage)), children: [_jsx("span", { onClick: selectAll, children: i18n.t('pages.workflow.flowHandler.selectAll') }), _jsx("span", { children: i18n.t('pages.workflow.flowHandler.count', { count: selectedUserIds.length }) }), _jsx("span", { onClick: clearSelect, children: i18n.t('pages.workflow.flowHandler.clear') })] }), _jsx("div", { className: cx(css(FlowHandlerSelectContent)), children: _jsx(Spin, { spinning: loadingUser, className: "loading", children: users.map(user => (_jsxs("div", { className: cx(css(FlowHandlerSelectItem), { active: selectedUserIds.includes(user.objectId) }), onClick: () => selectUser(user), children: [user.username, " ", user.nickname ? `(${user.nickname})` : '', _jsx("span", { children: selectedUserIds.includes(user.objectId) && _jsx(DoneIcon, { className: "icon-done" }) })] }, user.objectId))) }) }), _jsx("div", { className: cx(css(FlowHandlerSubmitWrapper)), children: _jsx(Button, { type: "primary", onClick: onSubmit, loading: loading, children: i18n.t('pages.workflow.flowHandler.submit') }) })] })) }));
74
+ };
75
+ export default memo(SelectFlowHandler);
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { ItemResultProps } from '../../../lib/types/item';
3
+ import { ApprovalData, CheckInData, WorkflowDataProps } from '../../../lib/types/workflow';
4
+ interface SelectTransitionProps {
5
+ fetching: boolean;
6
+ flowing: boolean;
7
+ tasks: Record<string, any>[];
8
+ itemId: string;
9
+ itemData: ItemResultProps;
10
+ currentUser: Record<string, any>;
11
+ workspace: string;
12
+ setPopoverVisible: (flag: boolean) => void;
13
+ name: string;
14
+ objectId: string;
15
+ workflowData: WorkflowDataProps;
16
+ roleIds: string[];
17
+ groupIds: string[];
18
+ workspaceRoleIds: string[];
19
+ approval: ApprovalData;
20
+ checkIn: CheckInData;
21
+ handleTransition: (updateTask: string, screenId: string, script: string) => void;
22
+ readonly: boolean;
23
+ flowHandlerActive?: boolean;
24
+ }
25
+ declare const _default: React.NamedExoticComponent<SelectTransitionProps>;
26
+ export default _default;
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { ClassNames } from '@emotion/react';
4
+ import { Spin } from 'antd';
5
+ import { i18n } from '../../../lib/i18n';
6
+ import { flowNextStyle, noPermissionStyle, spinStyle } from './style';
7
+ import TransitionButton from './TransitionButton';
8
+ import View from './View';
9
+ const SelectTransition = ({ fetching, flowing, tasks, itemId, itemData, currentUser, workspace, setPopoverVisible, name, objectId, workflowData, roleIds, groupIds, workspaceRoleIds, approval, checkIn, handleTransition, readonly, flowHandlerActive, }) => {
10
+ return (_jsx(ClassNames, { children: ({ cx, css }) => (_jsxs(_Fragment, { children: [fetching ? (_jsx(Spin, { css: css(spinStyle) })) : tasks.length ? (_jsx("div", { className: cx(css(flowNextStyle), `flow-next-global`), children: _jsx("div", { children: tasks.map(task => {
11
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
12
+ return (_jsx(TransitionButton, { itemId: itemId, loading: flowing, text: task.name, item: itemData, workspace: workspace, userId: currentUser.id, groupIds: groupIds, roleIds: roleIds, workspaceRoleIds: workspaceRoleIds, currentTaskId: task.id, authUsers: (_b = (_a = task.parameters) === null || _a === void 0 ? void 0 : _a.permissionType) === null || _b === void 0 ? void 0 : _b.users, authRoles: (_d = (_c = task.parameters) === null || _c === void 0 ? void 0 : _c.permissionType) === null || _d === void 0 ? void 0 : _d.roles, authGroups: (_f = (_e = task.parameters) === null || _e === void 0 ? void 0 : _e.permissionType) === null || _f === void 0 ? void 0 : _f.groups, authUserFields: (_h = (_g = task.parameters) === null || _g === void 0 ? void 0 : _g.permissionType) === null || _h === void 0 ? void 0 : _h.customFields, authWorkSpaceRoles: (_k = (_j = task.parameters) === null || _j === void 0 ? void 0 : _j.permissionType) === null || _k === void 0 ? void 0 : _k.workspaceRoles, creatorAuth: (_m = (_l = task.parameters) === null || _l === void 0 ? void 0 : _l.permissionType) === null || _m === void 0 ? void 0 : _m.creatorAuth, scriptValidator: (_o = task.parameters) === null || _o === void 0 ? void 0 : _o.scriptValidator, conditions: (_p = task.parameters) === null || _p === void 0 ? void 0 : _p.fieldType, screenId: (_r = (_q = task.parameters) === null || _q === void 0 ? void 0 : _q.screen) === null || _r === void 0 ? void 0 : _r.key, target: task.target, approval: approval, checkIn: checkIn, handleTransition: handleTransition, hiddenPopover: () => setPopoverVisible(false), readonly: readonly, flowHandlerActive: flowHandlerActive }, task.id));
13
+ }) }) })) : (_jsx("span", { onClick: () => {
14
+ setPopoverVisible(false);
15
+ }, css: css(noPermissionStyle), children: i18n.t('pages.fields.view.noWorkflowOrAuth') })), _jsx(View, { workflowData: workflowData, hiddenPopover: () => setPopoverVisible(false), name: name, objectId: objectId })] })) }));
16
+ };
17
+ export default memo(SelectTransition);
@@ -11,6 +11,10 @@ interface TransitionComponentProps {
11
11
  apply?: string;
12
12
  readonly?: boolean;
13
13
  onTransitionSuccess?: (status: Status) => void;
14
+ flowHandlerActive?: boolean;
15
+ flowUsers: Array<Record<string, any>>;
16
+ loadingFlowUsers: boolean;
17
+ fetchFlowUsers: (itemId: string, status: string, keyword?: string) => Promise<void>;
14
18
  }
15
19
  declare const _default: React.NamedExoticComponent<TransitionComponentProps>;
16
20
  export default _default;
@@ -11,7 +11,7 @@ import BaseOverflowTooltip from '../../common/overflow-tooltip/BaseOverflowToolt
11
11
  import { caretDownStyle, flowStateButtonStyle, flowStateInWorkflowStyle, flowStateStyle, noStateStyle, stateBtnStyle, statePopoverStyle, workflowContentStyle, } from './style';
12
12
  import TransitionPanel from './TransitionPanel';
13
13
  const Transition = props => {
14
- const { itemId, itemType, workspace, objectId, onTransitionSuccess, name, type, readonly, apply } = props;
14
+ const { itemId, itemType, workspace, objectId, onTransitionSuccess, name, type, readonly, apply, flowUsers, loadingFlowUsers, fetchFlowUsers, } = props;
15
15
  const [popoverVisible, setPopoverVisible] = useState(false);
16
16
  const [flowing, setFlowing] = useState(false);
17
17
  const isProcessing = useRef(false);
@@ -35,7 +35,7 @@ const Transition = props => {
35
35
  return;
36
36
  }
37
37
  setPopoverVisible(visible);
38
- }, getPopupContainer: () => document.body, trigger: "click", placement: "bottomLeft", content: _jsx(TransitionPanel, { itemId: itemId, itemType: itemType, workspace: workspace, objectId: showData.objectId, onTransitionSuccess: transitionSuccess, name: name, readonly: readonly, setPopoverVisible: setPopoverVisible, isProcessing: isProcessing, flowing: flowing, setFlowing: setFlowing }), children: _jsxs(Button, { type: "link", className: cx('status-btn', css(flowStateStyle), css(flowStateInWorkflowStyle), css(flowStateButtonStyle), css(stateBtnStyle), {
38
+ }, getPopupContainer: () => document.body, trigger: "click", placement: "bottomLeft", content: _jsx(TransitionPanel, { itemId: itemId, itemType: itemType, workspace: workspace, objectId: showData.objectId, onTransitionSuccess: transitionSuccess, name: name, readonly: readonly, setPopoverVisible: setPopoverVisible, isProcessing: isProcessing, flowing: flowing, setFlowing: setFlowing, flowHandlerActive: props.flowHandlerActive, flowUsers: flowUsers, loadingFlowUsers: loadingFlowUsers, fetchFlowUsers: fetchFlowUsers }), children: _jsxs(Button, { type: "link", className: cx('status-btn', css(flowStateStyle), css(flowStateInWorkflowStyle), css(flowStateButtonStyle), css(stateBtnStyle), {
39
39
  [css(noStateStyle)]: !showData.name,
40
40
  }), style: {
41
41
  backgroundColor: (_a = WorkFlowStatusColor[showData.type]) === null || _a === void 0 ? void 0 : _a.bgColor,
@@ -29,9 +29,7 @@ interface FlowButtonProps {
29
29
  };
30
30
  hiddenPopover?: () => void;
31
31
  readonly?: boolean;
32
- conditionKey: string;
33
- fieldTypeConditionKey: string;
34
- userConditionKey: string;
32
+ flowHandlerActive?: boolean;
35
33
  }
36
34
  declare const _default: React.NamedExoticComponent<FlowButtonProps>;
37
35
  export default _default;
@@ -15,7 +15,7 @@ const CheckInStatus = {
15
15
  closed: 'closed',
16
16
  pending: 'pending',
17
17
  };
18
- const FlowButton = ({ loading, screenId, text, item, userId, roleIds, groupIds, workspaceRoleIds, authRoles, authUsers, authGroups, creatorAuth, authUserFields, authWorkSpaceRoles, scriptValidator, approval, checkIn, conditions = [], handleTransition, target, readonly, conditionKey, fieldTypeConditionKey, userConditionKey, }) => {
18
+ const FlowButton = ({ loading, screenId, text, item, userId, roleIds, groupIds, workspaceRoleIds, authRoles, authUsers, authGroups, creatorAuth, authUserFields, authWorkSpaceRoles, scriptValidator, approval, checkIn, conditions = [], handleTransition, target, readonly, flowHandlerActive, }) => {
19
19
  const [isCheck, setIsCheck] = useState(true);
20
20
  const [tip, setTip] = useState('');
21
21
  const checkApproval = useCallback(() => {
@@ -62,7 +62,6 @@ const FlowButton = ({ loading, screenId, text, item, userId, roleIds, groupIds,
62
62
  return;
63
63
  }
64
64
  const transition = {
65
- conditionKey,
66
65
  parameters: {
67
66
  fieldType: conditions,
68
67
  permissionType: {
@@ -72,12 +71,10 @@ const FlowButton = ({ loading, screenId, text, item, userId, roleIds, groupIds,
72
71
  workspaceRoles: authWorkSpaceRoles,
73
72
  customFields: authUserFields,
74
73
  creatorAuth,
75
- conditionKey: userConditionKey,
76
74
  },
77
- fieldTypeConditionKey,
78
75
  },
79
76
  };
80
- const checkResult = checkTransition(item, transition, { userId, roleIds, groupIds, workspaceRoleIds });
77
+ const checkResult = checkTransition(item, transition, { userId, roleIds, groupIds, workspaceRoleIds }, flowHandlerActive);
81
78
  if (!checkResult.result) {
82
79
  setTip(checkResult.message);
83
80
  setIsCheck(false);
@@ -97,9 +94,7 @@ const FlowButton = ({ loading, screenId, text, item, userId, roleIds, groupIds,
97
94
  roleIds,
98
95
  groupIds,
99
96
  workspaceRoleIds,
100
- conditionKey,
101
- fieldTypeConditionKey,
102
- userConditionKey,
97
+ flowHandlerActive,
103
98
  ]);
104
99
  useEffect(() => {
105
100
  checkAuth();
@@ -13,6 +13,10 @@ interface TransitionPanelProps {
13
13
  isProcessing: React.MutableRefObject<boolean>;
14
14
  flowing: boolean;
15
15
  setFlowing: (flowing: boolean) => void;
16
+ flowHandlerActive?: boolean;
17
+ flowUsers: Array<Record<string, any>>;
18
+ loadingFlowUsers: boolean;
19
+ fetchFlowUsers: (itemId: string, status: string, keyword?: string) => Promise<void>;
16
20
  }
17
21
  declare const _default: React.NamedExoticComponent<TransitionPanelProps>;
18
22
  export default _default;
@@ -1,8 +1,8 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
1
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
2
  import { memo, useCallback, useEffect, useRef, useState } from 'react';
3
3
  import { ClassNames } from '@emotion/react';
4
4
  import { proximaSdk, useListener } from '@giteeteam/proxima-sdk-js';
5
- import { message, Spin } from 'antd';
5
+ import { message } from 'antd';
6
6
  import debug from 'debug';
7
7
  import { cloneDeep } from 'lodash-es';
8
8
  import useCurrentUser from '../../../lib/hooks/useCurrentUser';
@@ -10,10 +10,14 @@ import useWorkflowConfig from '../../../lib/hooks/useWorkflowConfig';
10
10
  import { i18n } from '../../../lib/i18n';
11
11
  import { getScriptUser, useWorkflowPermission } from '../../../lib/workflow';
12
12
  import { useItem } from '../../item/hooks';
13
- import { flowNextStyle, noPermissionStyle, spinStyle } from './style';
14
- import TransitionButton from './TransitionButton';
15
- import View from './View';
13
+ import SelectFlowHandler from './SelectFlowHandler';
14
+ import SelectTransition from './SelectTransition';
16
15
  const logger = debug('TransitionPanel');
16
+ var TransitionStepType;
17
+ (function (TransitionStepType) {
18
+ TransitionStepType["SelectTransition"] = "SelectTransition";
19
+ TransitionStepType["SelectFlowHandler"] = "SelectFlowHandler";
20
+ })(TransitionStepType || (TransitionStepType = {}));
17
21
  const PROPERTY_ACTION_SORT_KEY = 'opsbar-sequence';
18
22
  const DEFAULT_APPROVAL_DATA = {
19
23
  requireApproval: false,
@@ -22,7 +26,7 @@ const DEFAULT_APPROVAL_DATA = {
22
26
  startApproval: false,
23
27
  };
24
28
  const DEFAULT_CHECK_IN_DATA = { requireCheckIn: false, checkInStatus: '', transition: null };
25
- const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSuccess, name, readonly, setPopoverVisible, isProcessing, flowing, setFlowing, }) => {
29
+ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSuccess, name, readonly, setPopoverVisible, isProcessing, flowing, setFlowing, flowHandlerActive, flowUsers, loadingFlowUsers, fetchFlowUsers, }) => {
26
30
  var _a;
27
31
  const [updateTransitionText, setUpdateTransitionText] = useState('');
28
32
  const { itemData, mutate: itemMutate } = useItem(itemId, true);
@@ -31,6 +35,9 @@ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSu
31
35
  const [fetching, setFetching] = useState(true);
32
36
  const [approval, setApproval] = useState(cloneDeep(DEFAULT_APPROVAL_DATA));
33
37
  const [checkIn, setCheckIn] = useState(cloneDeep(DEFAULT_CHECK_IN_DATA));
38
+ const [transitionStep, setTransitionStep] = useState(TransitionStepType.SelectTransition);
39
+ const [flowTask, setFlowTask] = useState({});
40
+ const [currentFlowHandler, setCurrentFlowHandler] = useState(undefined);
34
41
  const newItem = useRef(itemId);
35
42
  useEffect(() => {
36
43
  setStatusId(objectId);
@@ -111,6 +118,7 @@ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSu
111
118
  proximaSdk.execute('updateCheckInInfo', status.objectId);
112
119
  }, [itemId, itemMutate, onTransitionSuccess]);
113
120
  const submitHandle = useCallback(async (transitionText, itemDetail = null) => {
121
+ console.info('currentFlowHandler', currentFlowHandler);
114
122
  const params = {
115
123
  workflowId: workflowData.objectId,
116
124
  currentState: statusId,
@@ -120,6 +128,7 @@ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSu
120
128
  reporter: itemDetail === null || itemDetail === void 0 ? void 0 : itemDetail.reporter,
121
129
  securityLevel: itemDetail === null || itemDetail === void 0 ? void 0 : itemDetail.securityLevel,
122
130
  values: itemDetail === null || itemDetail === void 0 ? void 0 : itemDetail.values,
131
+ flowHandler: (itemDetail === null || itemDetail === void 0 ? void 0 : itemDetail.flowHandler) || currentFlowHandler,
123
132
  };
124
133
  try {
125
134
  setFlowing(true);
@@ -158,11 +167,23 @@ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSu
158
167
  setFlowing(false);
159
168
  setPopoverVisible(false);
160
169
  }
161
- }, [itemId, workflowData.objectId, statusId, onTransitionSuccess, runTransition, getItemStatus]);
170
+ }, [itemId, workflowData.objectId, statusId, onTransitionSuccess, runTransition, getItemStatus, currentFlowHandler]);
162
171
  const submitTransition = useCallback(async (itemDetail) => {
163
172
  await submitHandle(updateTransitionText, itemDetail);
164
173
  }, [submitHandle, updateTransitionText]);
165
- const handleTransition = useCallback(async (transitionText, screenId, scriptValidator) => {
174
+ const handleTransition = useCallback(async (transitionText, screenId, scriptValidator, flowHandler) => {
175
+ if (flowHandlerActive) {
176
+ if (transitionStep === TransitionStepType.SelectTransition) {
177
+ setCurrentFlowHandler(undefined);
178
+ setFlowTask(tasks.find(task => task.name === transitionText));
179
+ setTransitionStep(TransitionStepType.SelectFlowHandler);
180
+ return;
181
+ }
182
+ else {
183
+ console.info('flowHandler', flowHandler);
184
+ setCurrentFlowHandler(flowHandler);
185
+ }
186
+ }
166
187
  setFlowing(true);
167
188
  try {
168
189
  const params = {
@@ -185,7 +206,7 @@ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSu
185
206
  setFlowing(false);
186
207
  }
187
208
  if (!screenId) {
188
- submitHandle(transitionText);
209
+ submitHandle(transitionText, { flowHandler });
189
210
  }
190
211
  else {
191
212
  isProcessing.current = true;
@@ -198,7 +219,10 @@ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSu
198
219
  setUpdateTransitionText(transitionText);
199
220
  }
200
221
  }, [
222
+ flowHandlerActive,
223
+ transitionStep,
201
224
  setFlowing,
225
+ tasks,
202
226
  itemId,
203
227
  itemType,
204
228
  workspace,
@@ -207,9 +231,9 @@ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSu
207
231
  itemData,
208
232
  workspaceRoleIds,
209
233
  groupIds,
210
- isProcessing,
211
- submitHandle,
212
234
  checkTransitionScript,
235
+ submitHandle,
236
+ isProcessing,
213
237
  ]);
214
238
  useListener('itemTransitionSuccess', async ({ itemId: editItemId, transition: editTransition, itemData }) => {
215
239
  if (editItemId === itemId && editTransition === updateTransitionText && isProcessing.current) {
@@ -231,12 +255,7 @@ const TransitionPanel = ({ itemId, itemType, workspace, objectId, onTransitionSu
231
255
  refreshFlag.current++;
232
256
  refresh();
233
257
  });
234
- return (_jsx(ClassNames, { children: ({ cx, css }) => (_jsxs(_Fragment, { children: [fetching ? (_jsx(Spin, { css: css(spinStyle) })) : tasks.length ? (_jsx("div", { className: cx(css(flowNextStyle), `flow-next-global`), children: _jsx("div", { children: tasks.map(task => {
235
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
236
- return (_jsx(TransitionButton, { itemId: itemId, loading: flowing, text: task.name, item: itemData, workspace: workspace, userId: currentUser.id, groupIds: groupIds, roleIds: roleIds, workspaceRoleIds: workspaceRoleIds, currentTaskId: task.id, authUsers: (_b = (_a = task.parameters) === null || _a === void 0 ? void 0 : _a.permissionType) === null || _b === void 0 ? void 0 : _b.users, authRoles: (_d = (_c = task.parameters) === null || _c === void 0 ? void 0 : _c.permissionType) === null || _d === void 0 ? void 0 : _d.roles, authGroups: (_f = (_e = task.parameters) === null || _e === void 0 ? void 0 : _e.permissionType) === null || _f === void 0 ? void 0 : _f.groups, authUserFields: (_h = (_g = task.parameters) === null || _g === void 0 ? void 0 : _g.permissionType) === null || _h === void 0 ? void 0 : _h.customFields, authWorkSpaceRoles: (_k = (_j = task.parameters) === null || _j === void 0 ? void 0 : _j.permissionType) === null || _k === void 0 ? void 0 : _k.workspaceRoles, creatorAuth: (_m = (_l = task.parameters) === null || _l === void 0 ? void 0 : _l.permissionType) === null || _m === void 0 ? void 0 : _m.creatorAuth, scriptValidator: (_o = task.parameters) === null || _o === void 0 ? void 0 : _o.scriptValidator, conditions: (_p = task.parameters) === null || _p === void 0 ? void 0 : _p.fieldType, screenId: (_r = (_q = task.parameters) === null || _q === void 0 ? void 0 : _q.screen) === null || _r === void 0 ? void 0 : _r.key, target: task.target, approval: approval, checkIn: checkIn, handleTransition: handleTransition, hiddenPopover: () => setPopoverVisible(false), readonly: readonly, conditionKey: (_s = task.parameters) === null || _s === void 0 ? void 0 : _s.conditionKey, fieldTypeConditionKey: (_t = task.parameters) === null || _t === void 0 ? void 0 : _t.fieldTypeConditionKey, userConditionKey: (_v = (_u = task.parameters) === null || _u === void 0 ? void 0 : _u.permissionType) === null || _v === void 0 ? void 0 : _v.conditionKey }, task.id));
237
- }) }) })) : (_jsx("span", { onClick: () => {
238
- setPopoverVisible(false);
239
- }, css: css(noPermissionStyle), children: i18n.t('pages.fields.view.noWorkflowOrAuth') })), _jsx(View, { workflowData: workflowData, hiddenPopover: () => setPopoverVisible(false), name: name, objectId: objectId })] })) }));
258
+ return (_jsx(ClassNames, { children: () => transitionStep === TransitionStepType.SelectFlowHandler ? (_jsx(SelectFlowHandler, { itemId: itemId, task: flowTask, onBack: () => setTransitionStep(TransitionStepType.SelectTransition), users: flowUsers, loading: flowing, loadingUser: loadingFlowUsers, fetchUsers: fetchFlowUsers, handleTransition: handleTransition })) : (_jsx(SelectTransition, { fetching: fetching, flowing: flowing, tasks: tasks, itemId: itemId, itemData: itemData, currentUser: currentUser, workspace: workspace, setPopoverVisible: setPopoverVisible, name: name, objectId: objectId, workflowData: workflowData, roleIds: roleIds, groupIds: groupIds, workspaceRoleIds: workspaceRoleIds, approval: approval, checkIn: checkIn, handleTransition: handleTransition, readonly: readonly, flowHandlerActive: flowHandlerActive })) }));
240
259
  };
241
260
  function getWorkflowConfig(workflow, statusId) {
242
261
  var _a, _b, _c, _d, _e;
@@ -10,11 +10,21 @@ export declare const noStateStyle = "\n color: #909aaa;\n background: #F1F2F4;
10
10
  export declare const caretDownStyle = "\n padding-left: 2px;\n margin-left: 0;\n line-height: 10px;\n";
11
11
  export declare const statusViewGlobalStyle = "\n.field-layout.status-view {\n position: relative;\n padding: 10px;\n margin: -12px;\n margin-top: 10px;\n font-size: 12px;\n cursor: pointer;\n border-top: 1px solid #ddd;\n}\n\n.field-layout.status-view .status-view-watch {\n width: 12px;\n height: 12px;\n margin-right: 5px;\n font-size: 12px;\n vertical-align: middle;\n}\n";
12
12
  export declare const tipLineStyle = "\n margin-bottom: 0;\n";
13
- export declare const tooltipStyle = "\n width: 80px;\n";
13
+ export declare const tooltipStyle = "\n width: 98px;\n";
14
14
  export declare const iconStyle = "\n padding: 0 6px;\n color: #848C9F;\n";
15
- export declare const stateBoxStyle = "\n display: flex;\n width: 80px;\n\n span {\n padding-right: 8px;\n }\n";
15
+ export declare const stateBoxStyle = "\n display: flex;\n width: 98px;\n\n span {\n padding-right: 8px;\n }\n";
16
16
  export declare const flowBtnStyle = "\n display: flex;\n padding: 5px 10px;\n margin: 0;\n\n &:hover {\n background-color: var(--select-item-selected-bg, #e6f3ff);\n }\n";
17
17
  export declare const notAllowedStyle = "\n cursor: not-allowed;\n opacity: 0.3;\n";
18
18
  export declare const pointerStyle = "\n cursor: pointer;\n";
19
19
  export declare const spinStyle = "\n width: 150px;\n height: 50px;\n";
20
20
  export declare const noPermissionStyle = "\n display: block;\n width: 120px;\n padding: 20px 10px 10px;\n font-size: 12px;\n color: #2e405e;\n";
21
+ export declare const overflowStyle = "\n display: flex;\n margin-top: 4px;\n";
22
+ export declare const overflowStyleText = "\n flex: 1;\n";
23
+ export declare const FlowHandlerWrapper = "\n width: 216px;\n";
24
+ export declare const FlowHandlerHeader = "\n position: relative;\n font-size: 14px;\n text-align: center;\n line-height: 22px;\n .back-wrapper {\n position: absolute;\n left: 0;\n top: 0;\n cursor: pointer;\n }\n .icon-back {\n font-size: 16px !important;\n width: 16px !important;\n }\n";
25
+ export declare const FlowHandlerSearchWrapper = "\n margin: 0 -12px;\n margin-top: 6px;\n padding: 5px 10px;\n border-top: 1px solid #f1f2f4;\n border-bottom: 1px solid #f1f2f4;\n\n .icon-search {\n position: relative;\n top: 2px;\n color: #b5bac5;\n font-size: 16px !important;\n width: 16px !important;\n }\n .search-input {\n padding-left: 6px;\n border: none;\n width: 196px;\n outline: none;\n fill: none;\n box-shadow: none !important;\n }\n";
26
+ export declare const FlowHandlerSelectWrapper = "\n margin: 0 -12px;\n padding: 9px 10px;\n .icon-arrow-down {\n position: relative;\n top: 2px; \n color: #b5bac5;\n font-size: 16px !important;\n width: 16px !important;\n }\n .select-input {\n border: none;\n display: inline-block;\n width: 196px;\n outline: none;\n fill: none;\n box-shadow: none;\n &:focus {\n box-shadow: none;\n }\n }\n .select-input::placeholder {\n color: #b5bac5;\n }\n }\n";
27
+ export declare const FlowHandlerSelectMessage = "\n margin: 0 -12px;\n padding: 6px 12px;\n display: flex;\n font-size: 12px;\n color: #091940;\n border-bottom: 1px solid #f1f2f4;\n\n span:nth-child(1) {\n position: relative;\n color: #0C62FF;\n cursor: pointer;\n &:hover {\n color: #091940;\n }\n\n &:after {\n content: '';\n position: absolute;\n height: 14px;\n top: 2px;\n right: -10px;\n border-right: 1px solid #f1f2f4;\n }\n }\n span:nth-child(2) {\n padding-left: 18px;\n flex: 1;\n \n }\n span:nth-child(3) {\n color: #0c62ff;\n cursor: pointer;\n &:hover {\n color: #091940;\n }\n }\n";
28
+ export declare const FlowHandlerSelectContent = "\n min-height: 200px;\n max-height: 200px;\n overflow-y: auto;\n margin: 0 -12px;\n .loading {\n height: 200px !important;\n }\n";
29
+ export declare const FlowHandlerSelectItem = "\n position: relative;\n margin: 0 4px;\n padding: 5px 12px;\n font-size: 14px;\n color: #091940;\n cursor: pointer;\n border-radius: 4px;\n\n .icon-done {\n position: absolute;\n top: 10px;\n right: 14px;\n width: 12px;\n height: 12px;\n color: #0C62FF;\n scale: 1.2;\n }\n\n &:hover {\n background-color: #f1f2f4;\n }\n\n &.active {\n background-color: #E6F3FF;\n font-weight: 600;\n }\n";
30
+ export declare const FlowHandlerSubmitWrapper = "\n border-top: 1px solid #f1f2f4;\n padding: 6px 0;\n margin-bottom: -12px;\n text-align: right;\n";
@@ -111,7 +111,7 @@ export const tipLineStyle = `
111
111
  margin-bottom: 0;
112
112
  `;
113
113
  export const tooltipStyle = `
114
- width: 80px;
114
+ width: 98px;
115
115
  `;
116
116
  export const iconStyle = `
117
117
  padding: 0 6px;
@@ -119,7 +119,7 @@ export const iconStyle = `
119
119
  `;
120
120
  export const stateBoxStyle = `
121
121
  display: flex;
122
- width: 80px;
122
+ width: 98px;
123
123
 
124
124
  span {
125
125
  padding-right: 8px;
@@ -152,3 +152,159 @@ export const noPermissionStyle = `
152
152
  font-size: 12px;
153
153
  color: #2e405e;
154
154
  `;
155
+ export const overflowStyle = `
156
+ display: flex;
157
+ margin-top: 4px;
158
+ `;
159
+ export const overflowStyleText = `
160
+ flex: 1;
161
+ `;
162
+ export const FlowHandlerWrapper = `
163
+ width: 216px;
164
+ `;
165
+ export const FlowHandlerHeader = `
166
+ position: relative;
167
+ font-size: 14px;
168
+ text-align: center;
169
+ line-height: 22px;
170
+ .back-wrapper {
171
+ position: absolute;
172
+ left: 0;
173
+ top: 0;
174
+ cursor: pointer;
175
+ }
176
+ .icon-back {
177
+ font-size: 16px !important;
178
+ width: 16px !important;
179
+ }
180
+ `;
181
+ export const FlowHandlerSearchWrapper = `
182
+ margin: 0 -12px;
183
+ margin-top: 6px;
184
+ padding: 5px 10px;
185
+ border-top: 1px solid #f1f2f4;
186
+ border-bottom: 1px solid #f1f2f4;
187
+
188
+ .icon-search {
189
+ position: relative;
190
+ top: 2px;
191
+ color: #b5bac5;
192
+ font-size: 16px !important;
193
+ width: 16px !important;
194
+ }
195
+ .search-input {
196
+ padding-left: 6px;
197
+ border: none;
198
+ width: 196px;
199
+ outline: none;
200
+ fill: none;
201
+ box-shadow: none !important;
202
+ }
203
+ `;
204
+ export const FlowHandlerSelectWrapper = `
205
+ margin: 0 -12px;
206
+ padding: 9px 10px;
207
+ .icon-arrow-down {
208
+ position: relative;
209
+ top: 2px;
210
+ color: #b5bac5;
211
+ font-size: 16px !important;
212
+ width: 16px !important;
213
+ }
214
+ .select-input {
215
+ border: none;
216
+ display: inline-block;
217
+ width: 196px;
218
+ outline: none;
219
+ fill: none;
220
+ box-shadow: none;
221
+ &:focus {
222
+ box-shadow: none;
223
+ }
224
+ }
225
+ .select-input::placeholder {
226
+ color: #b5bac5;
227
+ }
228
+ }
229
+ `;
230
+ export const FlowHandlerSelectMessage = `
231
+ margin: 0 -12px;
232
+ padding: 6px 12px;
233
+ display: flex;
234
+ font-size: 12px;
235
+ color: #091940;
236
+ border-bottom: 1px solid #f1f2f4;
237
+
238
+ span:nth-child(1) {
239
+ position: relative;
240
+ color: #0C62FF;
241
+ cursor: pointer;
242
+ &:hover {
243
+ color: #091940;
244
+ }
245
+
246
+ &:after {
247
+ content: '';
248
+ position: absolute;
249
+ height: 14px;
250
+ top: 2px;
251
+ right: -10px;
252
+ border-right: 1px solid #f1f2f4;
253
+ }
254
+ }
255
+ span:nth-child(2) {
256
+ padding-left: 18px;
257
+ flex: 1;
258
+
259
+ }
260
+ span:nth-child(3) {
261
+ color: #0c62ff;
262
+ cursor: pointer;
263
+ &:hover {
264
+ color: #091940;
265
+ }
266
+ }
267
+ `;
268
+ export const FlowHandlerSelectContent = `
269
+ min-height: 200px;
270
+ max-height: 200px;
271
+ overflow-y: auto;
272
+ margin: 0 -12px;
273
+ .loading {
274
+ height: 200px !important;
275
+ }
276
+ `;
277
+ export const FlowHandlerSelectItem = `
278
+ position: relative;
279
+ margin: 0 4px;
280
+ padding: 5px 12px;
281
+ font-size: 14px;
282
+ color: #091940;
283
+ cursor: pointer;
284
+ border-radius: 4px;
285
+
286
+ .icon-done {
287
+ position: absolute;
288
+ top: 10px;
289
+ right: 14px;
290
+ width: 12px;
291
+ height: 12px;
292
+ color: #0C62FF;
293
+ scale: 1.2;
294
+ }
295
+
296
+ &:hover {
297
+ background-color: #f1f2f4;
298
+ }
299
+
300
+ &.active {
301
+ background-color: #E6F3FF;
302
+ font-weight: 600;
303
+ }
304
+ `;
305
+ export const FlowHandlerSubmitWrapper = `
306
+ border-top: 1px solid #f1f2f4;
307
+ padding: 6px 0;
308
+ margin-bottom: -12px;
309
+ text-align: right;
310
+ `;
@@ -14,7 +14,7 @@ const UserReadView = memo(({ value, readonly }) => {
14
14
  })) || EMPTY_ARRAY);
15
15
  }, [value]);
16
16
  const tooltipValues = useMemo(() => {
17
- return value === null || value === void 0 ? void 0 : value.map(val => {
17
+ return value === null || value === void 0 ? void 0 : value.map((val) => {
18
18
  const item = userDataFormat(val);
19
19
  return generateUserDisplayName(item);
20
20
  });
@@ -22,7 +22,7 @@ const UserReadView = memo(({ value, readonly }) => {
22
22
  if (!displayValues.length) {
23
23
  return _jsx(EmptyField, { readonly: readonly, isUser: true });
24
24
  }
25
- return (_jsx(BaseOverflowTooltip, { title: tooltipValues.join(','), maxline: 1, children: displayValues }));
25
+ return _jsx(BaseOverflowTooltip, { title: tooltipValues.join(','), maxline: 1, children: displayValues });
26
26
  });
27
27
  UserReadView.displayName = 'UserReadView';
28
28
  export default UserReadView;
@@ -6,3 +6,6 @@ export interface IconProps {
6
6
  export declare const HollowCircleIcon: React.FC<IconProps>;
7
7
  export declare const WorkflowIcon: React.FC<IconProps>;
8
8
  export declare const DottedCircleIcon: React.FC<IconProps>;
9
+ export declare const ArrowBackIcon: React.FC<IconProps>;
10
+ export declare const SearchIcon: React.FC<IconProps>;
11
+ export declare const DoneIcon: React.FC<IconProps>;
@@ -1,7 +1,10 @@
1
1
  import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
2
  import AntdIcon from '@ant-design/icons';
3
+ import ArrowBack from './svg/ArrowBack.svg';
4
+ import Done from './svg/Done.svg';
3
5
  import DottedCircle from './svg/DottedCircle.svg';
4
6
  import HollowCircle from './svg/HollowCircle.svg';
7
+ import Search from './svg/Search.svg';
5
8
  import Workflow from './svg/Workflow.svg';
6
9
  export const HollowCircleIcon = props => {
7
10
  return _jsx(AntdIcon, { ...props, component: HollowCircle });
@@ -12,3 +15,12 @@ export const WorkflowIcon = props => {
12
15
  export const DottedCircleIcon = props => {
13
16
  return _jsx(AntdIcon, { ...props, style: { fontSize: 10, width: 10, marginLeft: 2 }, component: DottedCircle });
14
17
  };
18
+ export const ArrowBackIcon = props => {
19
+ return _jsx(AntdIcon, { ...props, style: { fontSize: 10, width: 10, marginLeft: 2 }, component: ArrowBack });
20
+ };
21
+ export const SearchIcon = props => {
22
+ return _jsx(AntdIcon, { ...props, style: { fontSize: 10, width: 10, marginLeft: 2 }, component: Search });
23
+ };
24
+ export const DoneIcon = props => {
25
+ return _jsx(AntdIcon, { ...props, style: { fontSize: 10, width: 10, marginLeft: 2 }, component: Done });
26
+ };
@@ -0,0 +1 @@
1
+ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1720087015972" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13078" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M521.856 137.984l2.24 2.24a38.4 38.4 0 0 1 0 54.272l-275.2 275.2h624.64a41.6 41.6 0 1 1 0 83.2H247.488l276.608 276.672a38.4 38.4 0 0 1 4.48 48.96l-4.48 5.312-2.24 2.304-5.312 4.416a38.4 38.4 0 0 1-43.712 0l-5.312-4.48-343.872-343.936a38.272 38.272 0 0 1-11.136-23.872v-12.48a38.272 38.272 0 0 1 11.136-23.872l343.872-343.936a38.4 38.4 0 0 1 54.336 0z" p-id="13079"></path></svg>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1720427435830" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13078" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M380.352 842.176l-305.664-305.28a38.4 38.4 0 0 1-0.064-54.272l2.048-2.048a38.464 38.464 0 0 1 54.272 0l275.328 274.88 482.816-575.36a38.4 38.4 0 0 1 54.144-4.736l2.432 2.112a38.4 38.4 0 0 1 4.736 54.08l-510.08 607.936a38.336 38.336 0 0 1-29.376 13.696h-6.72a38.336 38.336 0 0 1-23.872-11.008z" p-id="13079"></path></svg>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1720090255506" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13220" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M457.6 112a345.6 345.6 0 0 1 270.08 561.28l173.056 173.184a38.4 38.4 0 0 1-48.96 58.752l-5.312-4.48-173.184-173.056a345.6 345.6 0 1 1-215.68-615.68z m0 76.8a268.8 268.8 0 1 0 186.944 461.952 18.112 18.112 0 0 1 2.816-3.392l3.392-2.816A268.8 268.8 0 0 0 457.6 188.8z" p-id="13221"></path></svg>
@@ -6,5 +6,5 @@ export declare const arrayDiff: (origin: Array<any>, target: Array<any>) => IDif
6
6
  export declare const serializationArrayByKey: (list: any[], keyPath: string) => Record<string, any> | null;
7
7
  export declare const createHash: () => number;
8
8
  export declare function parseArray(str: string): string[];
9
- export declare const getArrayValue: <T = any>(value: T) => T[];
9
+ export declare const getArrayValue: (value: any) => any[];
10
10
  export {};
package/dist/lib/array.js CHANGED
@@ -41,4 +41,4 @@ export function parseArray(str) {
41
41
  }
42
42
  return [];
43
43
  }
44
- export const getArrayValue = (value) => { var _a; return (_a = ((isArray(value) ? value : [value]))) === null || _a === void 0 ? void 0 : _a.filter(Boolean); };
44
+ export const getArrayValue = (value) => { var _a; return (_a = (isArray(value) ? value : [value])) === null || _a === void 0 ? void 0 : _a.filter(Boolean); };
@@ -1,3 +1,4 @@
1
- import { i18n } from '../i18n';
2
- declare const useI18n: () => Pick<typeof i18n, 't'>;
1
+ declare const useI18n: () => {
2
+ t: (key: string, opts?: Record<string, any>) => string;
3
+ };
3
4
  export default useI18n;
@@ -106,6 +106,6 @@ interface CheckUserPermissionParams {
106
106
  }
107
107
  export declare function checkUserPermission({ transition, userId, roleIds, groupIds, item, workspaceRoleIds, }: CheckUserPermissionParams): ResultType;
108
108
  export declare function checkItemCondition(transition: TransitionProps, item: ItemResultProps): ResultType;
109
- export declare function checkTransition(item: ItemResultProps, transition: TransitionProps, permissions: WorkflowPermissionType): ResultType;
109
+ export declare function checkTransition(item: ItemResultProps, transition: TransitionProps, permissions: WorkflowPermissionType, flowHandlerActive?: boolean): ResultType;
110
110
  export declare const useWorkflowPermission: (workspaceId: ObjectId) => [ObjectId[], ObjectId[], ObjectId[]];
111
111
  export {};
@@ -118,7 +118,7 @@ function listToCompare(list1, list2, compareString) {
118
118
  export function checkUserPermission({ transition, userId, roleIds, groupIds, item, workspaceRoleIds, }) {
119
119
  var _a, _b, _c;
120
120
  const values = (item === null || item === void 0 ? void 0 : item.values) || {};
121
- const { users: authUsers, roles: authRoles, groups: authGroups, customFields: authUserFields, workspaceRoles: authWorkspaceRoles, creatorAuth, conditionKey, } = ((_a = transition.parameters) === null || _a === void 0 ? void 0 : _a.permissionType) || {};
121
+ const { users: authUsers, roles: authRoles, groups: authGroups, customFields: authUserFields, workspaceRoles: authWorkspaceRoles, creatorAuth, } = ((_a = transition.parameters) === null || _a === void 0 ? void 0 : _a.permissionType) || {};
122
122
  const hasUsers = (authUsers === null || authUsers === void 0 ? void 0 : authUsers.length) > 0;
123
123
  const hasRoles = (authRoles === null || authRoles === void 0 ? void 0 : authRoles.length) > 0;
124
124
  const hasGroups = (authGroups === null || authGroups === void 0 ? void 0 : authGroups.length) > 0;
@@ -128,16 +128,12 @@ export function checkUserPermission({ transition, userId, roleIds, groupIds, ite
128
128
  if (!hasUsers && !hasRoles && !hasGroups && !hasUserFields && !hasWorkspaceRoles && !creatorAuth) {
129
129
  return { result: true };
130
130
  }
131
- const defaultConditionKey = conditionKey || 'any';
132
- const isAny = defaultConditionKey === 'any';
133
131
  if (creatorAuth) {
134
132
  if (![(_b = item.createdBy) === null || _b === void 0 ? void 0 : _b.objectId, (_c = item.createdBy) === null || _c === void 0 ? void 0 : _c.id].includes(userId)) {
135
133
  tipText.push(i18n.t('pages.workflow.default.userType.creatorAuth'));
136
134
  }
137
135
  else {
138
- if (isAny) {
139
- return { result: true };
140
- }
136
+ return { result: true };
141
137
  }
142
138
  }
143
139
  if (hasUsers) {
@@ -147,9 +143,7 @@ export function checkUserPermission({ transition, userId, roleIds, groupIds, ite
147
143
  tipText.push(`${i18n.t('libs.workflow.user')}:${tipUsers}`);
148
144
  }
149
145
  else {
150
- if (isAny) {
151
- return { result: true };
152
- }
146
+ return { result: true };
153
147
  }
154
148
  }
155
149
  if (hasRoles) {
@@ -159,9 +153,7 @@ export function checkUserPermission({ transition, userId, roleIds, groupIds, ite
159
153
  tipText.push(`${i18n.t('libs.workflow.role')}:${tipRoles}`);
160
154
  }
161
155
  else {
162
- if (isAny) {
163
- return { result: true };
164
- }
156
+ return { result: true };
165
157
  }
166
158
  }
167
159
  if (hasGroups) {
@@ -171,9 +163,7 @@ export function checkUserPermission({ transition, userId, roleIds, groupIds, ite
171
163
  tipText.push(`${i18n.t('libs.workflow.group')}:${tipGroup}`);
172
164
  }
173
165
  else {
174
- if (isAny) {
175
- return { result: true };
176
- }
166
+ return { result: true };
177
167
  }
178
168
  }
179
169
  if (hasUserFields) {
@@ -204,9 +194,7 @@ export function checkUserPermission({ transition, userId, roleIds, groupIds, ite
204
194
  tipText.push(`${i18n.t('libs.workflow.userFields')}:${tipRoles}`);
205
195
  }
206
196
  else {
207
- if (isAny) {
208
- return { result: true };
209
- }
197
+ return { result: true };
210
198
  }
211
199
  }
212
200
  if (hasWorkspaceRoles) {
@@ -218,9 +206,7 @@ export function checkUserPermission({ transition, userId, roleIds, groupIds, ite
218
206
  tipText.push(`${i18n.t('libs.workflow.workspaceRoles')}:${tipWorkspaceRoles}`);
219
207
  }
220
208
  else {
221
- if (isAny) {
222
- return { result: true };
223
- }
209
+ return { result: true };
224
210
  }
225
211
  }
226
212
  if (tipText.length) {
@@ -229,10 +215,8 @@ export function checkUserPermission({ transition, userId, roleIds, groupIds, ite
229
215
  return { result: true };
230
216
  }
231
217
  export function checkItemCondition(transition, item) {
232
- var _a, _b, _c;
233
- const defaultConditionKey = ((_a = transition === null || transition === void 0 ? void 0 : transition.parameters) === null || _a === void 0 ? void 0 : _a.fieldTypeConditionKey) || 'all';
234
- const conditions = ((_b = transition.parameters) === null || _b === void 0 ? void 0 : _b.fieldType) || [];
235
- const isAny = defaultConditionKey === 'any';
218
+ var _a, _b;
219
+ const conditions = ((_a = transition.parameters) === null || _a === void 0 ? void 0 : _a.fieldType) || [];
236
220
  for (const i in conditions) {
237
221
  const { comparedValue, numberCompare, stringCompare, dropDownCompare, field, pickerType } = conditions[i];
238
222
  let fieldValue;
@@ -247,12 +231,12 @@ export function checkItemCondition(transition, item) {
247
231
  fieldValue = item[field.key].objectId;
248
232
  }
249
233
  else {
250
- fieldValue = (_c = item.values) === null || _c === void 0 ? void 0 : _c[field.key];
234
+ fieldValue = (_b = item.values) === null || _b === void 0 ? void 0 : _b[field.key];
251
235
  }
252
236
  let sourceValue = null, targetValue = null;
253
237
  switch (field.componentType) {
254
238
  case CustomFieldComponentTypes.Number:
255
- case CustomFieldComponentTypes.Date: {
239
+ case CustomFieldComponentTypes.Date:
256
240
  targetValue = comparedValue;
257
241
  if (field.componentType === CustomFieldComponentTypes.Date && NumberConditions.equalTo.key === numberCompare) {
258
242
  targetValue = getFormat(targetValue || null, getDateType(pickerType));
@@ -267,13 +251,6 @@ export function checkItemCondition(transition, item) {
267
251
  }),
268
252
  };
269
253
  }
270
- else {
271
- if (isAny) {
272
- return {
273
- result: true,
274
- };
275
- }
276
- }
277
254
  }
278
255
  else if (!numberToCompare(fieldValue, Number(targetValue), numberCompare)) {
279
256
  if (isEmptyCondition(numberCompare)) {
@@ -298,14 +275,7 @@ export function checkItemCondition(transition, item) {
298
275
  }),
299
276
  };
300
277
  }
301
- else {
302
- if (isAny) {
303
- return {
304
- result: true,
305
- };
306
- }
307
- }
308
- }
278
+ break;
309
279
  case CustomFieldComponentTypes.Text:
310
280
  case CustomFieldComponentTypes.LongText:
311
281
  targetValue = comparedValue;
@@ -329,13 +299,7 @@ export function checkItemCondition(transition, item) {
329
299
  message,
330
300
  };
331
301
  }
332
- else {
333
- if (isAny) {
334
- return {
335
- result: true,
336
- };
337
- }
338
- }
302
+ break;
339
303
  case CustomFieldComponentTypes.User:
340
304
  case CustomFieldComponentTypes.Dropdown:
341
305
  case CustomFieldComponentTypes.File:
@@ -373,39 +337,41 @@ export function checkItemCondition(transition, item) {
373
337
  }),
374
338
  };
375
339
  }
376
- else {
377
- if (isAny) {
378
- return {
379
- result: true,
380
- };
381
- }
382
- }
340
+ break;
341
+ default:
342
+ break;
383
343
  }
384
344
  }
385
345
  return { result: true };
386
346
  }
387
- export function checkTransition(item, transition, permissions) {
347
+ export function checkTransition(item, transition, permissions, flowHandlerActive) {
348
+ var _a, _b;
388
349
  if (!item || !transition)
389
350
  return { result: false };
390
- const defaultConditionKey = (transition === null || transition === void 0 ? void 0 : transition.conditionKey) || 'all';
391
- const isAll = defaultConditionKey === 'all';
351
+ if (flowHandlerActive && ((_b = (_a = item === null || item === void 0 ? void 0 : item.values) === null || _a === void 0 ? void 0 : _a.flowHandler) === null || _b === void 0 ? void 0 : _b.length)) {
352
+ const flowHandler = item.values.flowHandler;
353
+ const flowUser = flowHandler.find(user => user.value === permissions.userId);
354
+ if (flowUser) {
355
+ return { result: true };
356
+ }
357
+ else {
358
+ const tipUsers = flowHandler.map(user => user.label).join('、');
359
+ return {
360
+ result: false,
361
+ message: i18n.t('libs.default.tipText', { text: `${i18n.t('libs.workflow.flowHandler')}:${tipUsers}` }),
362
+ };
363
+ }
364
+ }
392
365
  const roleCheck = checkUserPermission({
393
366
  transition,
394
367
  item,
395
368
  ...permissions,
396
369
  });
370
+ if (!roleCheck.result)
371
+ return roleCheck;
397
372
  const conditionCheck = checkItemCondition(transition, item);
398
- if (isAll) {
399
- if (!roleCheck.result)
400
- return roleCheck;
401
- if (!conditionCheck.result)
402
- return conditionCheck;
403
- }
404
- else {
405
- if (roleCheck.result || conditionCheck.result) {
406
- return { result: true };
407
- }
408
- }
373
+ if (!conditionCheck.result)
374
+ return conditionCheck;
409
375
  return { result: true };
410
376
  }
411
377
  export const useWorkflowPermission = (workspaceId) => {
@@ -29,6 +29,13 @@ export declare const en: {
29
29
  'pages.workflow.condition.notEqualTo': string;
30
30
  'pages.workflow.condition.containedIn': string;
31
31
  'pages.workflow.condition.notContainedIn': string;
32
+ 'pages.workflow.flowHandler.title': string;
33
+ 'pages.workflow.flowHandler.search': string;
34
+ 'pages.workflow.flowHandler.selectAll': string;
35
+ 'pages.workflow.flowHandler.clear': string;
36
+ 'pages.workflow.flowHandler.count': string;
37
+ 'pages.workflow.flowHandler.submit': string;
38
+ 'pages.workflow.flowHandler.message': string;
32
39
  'global.stateless': string;
33
40
  'global.haveDelete': string;
34
41
  'global.columns.forbiddenActive': string;
@@ -39,6 +46,7 @@ export declare const en: {
39
46
  'libs.workflow.group': string;
40
47
  'libs.workflow.userFields': string;
41
48
  'libs.workflow.workspaceRoles': string;
49
+ 'libs.workflow.flowHandler': string;
42
50
  'libs.default.tipText': string;
43
51
  'libs.default.flowTextTip.0': string;
44
52
  'libs.default.flowTextTip.1': string;
@@ -76,6 +84,13 @@ export declare const zh: {
76
84
  'pages.workflow.condition.notEqualTo': string;
77
85
  'pages.workflow.condition.containedIn': string;
78
86
  'pages.workflow.condition.notContainedIn': string;
87
+ 'pages.workflow.flowHandler.title': string;
88
+ 'pages.workflow.flowHandler.search': string;
89
+ 'pages.workflow.flowHandler.selectAll': string;
90
+ 'pages.workflow.flowHandler.clear': string;
91
+ 'pages.workflow.flowHandler.count': string;
92
+ 'pages.workflow.flowHandler.submit': string;
93
+ 'pages.workflow.flowHandler.message': string;
79
94
  'global.stateless': string;
80
95
  'global.haveDelete': string;
81
96
  'global.columns.forbiddenActive': string;
@@ -86,6 +101,7 @@ export declare const zh: {
86
101
  'libs.workflow.group': string;
87
102
  'libs.workflow.userFields': string;
88
103
  'libs.workflow.workspaceRoles': string;
104
+ 'libs.workflow.flowHandler': string;
89
105
  'libs.default.tipText': string;
90
106
  'libs.default.flowTextTip.0': string;
91
107
  'libs.default.flowTextTip.1': string;
@@ -123,6 +139,13 @@ export declare const ru: {
123
139
  'pages.workflow.condition.notEqualTo': string;
124
140
  'pages.workflow.condition.containedIn': string;
125
141
  'pages.workflow.condition.notContainedIn': string;
142
+ 'pages.workflow.flowHandler.title': string;
143
+ 'pages.workflow.flowHandler.search': string;
144
+ 'pages.workflow.flowHandler.selectAll': string;
145
+ 'pages.workflow.flowHandler.clear': string;
146
+ 'pages.workflow.flowHandler.count': string;
147
+ 'pages.workflow.flowHandler.submit': string;
148
+ 'pages.workflow.flowHandler.message': string;
126
149
  'global.stateless': string;
127
150
  'global.haveDelete': string;
128
151
  'global.columns.forbiddenActive': string;
@@ -133,6 +156,7 @@ export declare const ru: {
133
156
  'libs.workflow.group': string;
134
157
  'libs.workflow.userFields': string;
135
158
  'libs.workflow.workspaceRoles': string;
159
+ 'libs.workflow.flowHandler': string;
136
160
  'libs.default.tipText': string;
137
161
  'libs.default.flowTextTip.0': string;
138
162
  'libs.default.flowTextTip.1': string;
@@ -29,6 +29,13 @@ export const en = {
29
29
  'pages.workflow.condition.notEqualTo': 'not equal to',
30
30
  'pages.workflow.condition.containedIn': 'is contained',
31
31
  'pages.workflow.condition.notContainedIn': "isn't contained",
32
+ 'pages.workflow.flowHandler.title': 'Next Flow Handler',
33
+ 'pages.workflow.flowHandler.search': 'Please enter keywords for search',
34
+ 'pages.workflow.flowHandler.selectAll': 'Select All',
35
+ 'pages.workflow.flowHandler.clear': 'Clear Selected',
36
+ 'pages.workflow.flowHandler.count': 'Selected {{count}} users',
37
+ 'pages.workflow.flowHandler.submit': 'Confirm And Transition',
38
+ 'pages.workflow.flowHandler.message': 'Please select at least one handler',
32
39
  'global.stateless': 'Stateless',
33
40
  'global.haveDelete': 'deleted',
34
41
  'global.columns.forbiddenActive': 'disabled',
@@ -39,6 +46,7 @@ export const en = {
39
46
  'libs.workflow.group': 'User group',
40
47
  'libs.workflow.userFields': 'User fields',
41
48
  'libs.workflow.workspaceRoles': 'Workspace roles',
49
+ 'libs.workflow.flowHandler': 'Flow handler',
42
50
  'libs.default.tipText': 'This process allows only {{text}}, please contact support',
43
51
  'libs.default.flowTextTip.0': 'The issue field [{{field}}] should be [{{condition}}] specified field [{{target}}]',
44
52
  'libs.default.flowTextTip.1': 'The issue field [{{field}}] should be [{{condition}}]',
@@ -76,6 +84,13 @@ export const zh = {
76
84
  'pages.workflow.condition.notEqualTo': '不等于',
77
85
  'pages.workflow.condition.containedIn': '包含',
78
86
  'pages.workflow.condition.notContainedIn': '不包含',
87
+ 'pages.workflow.flowHandler.title': '下一流程处理人',
88
+ 'pages.workflow.flowHandler.search': '请输入关键字搜索',
89
+ 'pages.workflow.flowHandler.selectAll': '全选',
90
+ 'pages.workflow.flowHandler.clear': '清空已选',
91
+ 'pages.workflow.flowHandler.count': '已选{{count}}项',
92
+ 'pages.workflow.flowHandler.submit': '确认并流转',
93
+ 'pages.workflow.flowHandler.message': '请至少选择一个处理人',
79
94
  'global.stateless': '无状态',
80
95
  'global.haveDelete': '已删除',
81
96
  'global.columns.forbiddenActive': '已禁用',
@@ -86,6 +101,7 @@ export const zh = {
86
101
  'libs.workflow.group': '用户组',
87
102
  'libs.workflow.userFields': '用户字段',
88
103
  'libs.workflow.workspaceRoles': '空间角色',
104
+ 'libs.workflow.flowHandler': '流程处理人',
89
105
  'libs.default.tipText': '此流程只有{{text}}可以进行操作,请联系相关人员处理',
90
106
  'libs.default.flowTextTip.0': '当前事项字段[{{field}}]应该[{{condition}}]指定条件值[{{target}}]',
91
107
  'libs.default.flowTextTip.1': '当前事项字段[{{field}}]应该[{{condition}}]',
@@ -123,6 +139,13 @@ export const ru = {
123
139
  'pages.workflow.condition.notEqualTo': 'не равняется',
124
140
  'pages.workflow.condition.containedIn': 'содержится',
125
141
  'pages.workflow.condition.notContainedIn': 'не содержится',
142
+ 'pages.workflow.flowHandler.title': 'Следующий процессор',
143
+ 'pages.workflow.flowHandler.search': 'Введите ключевое слово для поиска',
144
+ 'pages.workflow.flowHandler.selectAll': 'Полная выборка',
145
+ 'pages.workflow.flowHandler.clear': 'Очистить выбрано',
146
+ 'pages.workflow.flowHandler.count': 'Выбранный элемент {{{count}}',
147
+ 'pages.workflow.flowHandler.submit': 'Подтверждение и обращение',
148
+ 'pages.workflow.flowHandler.message': 'Пожалуйста, выберите хотя бы одного человека.',
126
149
  'global.stateless': 'Stateless',
127
150
  'global.haveDelete': 'deleted',
128
151
  'global.columns.forbiddenActive': 'disabled',
@@ -133,6 +156,7 @@ export const ru = {
133
156
  'libs.workflow.group': 'Группа пользователей',
134
157
  'libs.workflow.userFields': 'Поле пользователя',
135
158
  'libs.workflow.workspaceRoles': 'Роль рабочего пространства',
159
+ 'libs.workflow.flowHandler': 'Оператор процессов',
136
160
  'libs.default.tipText': 'В этом процессе можно использовать только "{{text}}". Пожалуйста, свяжитесь с администратором.',
137
161
  'libs.default.flowTextTip.0': `Поле задачи "{{field}}" должно при условии "{{condition}}" указывать значение условия "{{target}}"`,
138
162
  'libs.default.flowTextTip.1': `Поле задачи "{{field}}" должно при условии "{{condition}}"`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giteeteam/apps-team-components",
3
- "version": "1.2.0-alpha.1",
3
+ "version": "1.2.0-alpha.3",
4
4
  "description": "Gitee team components",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -64,7 +64,6 @@
64
64
  "@emotion/cache": "^11.11.0",
65
65
  "@emotion/react": "^11.11.1",
66
66
  "debug": "^4.3.4",
67
- "fs-extra": "^11.2.0",
68
67
  "lodash-es": "^4.17.21"
69
68
  }
70
69
  }