refactor: @hera/plugin-core, departments-plugin (#979)
Reviewed-on: daoyoucloud/tachybase#979 Co-authored-by: bai.zixv <bai.zixv@foxmail.com> Co-committed-by: bai.zixv <bai.zixv@foxmail.com>
This commit is contained in:
parent
84608f9a3e
commit
236c308d23
@ -1,5 +1,5 @@
|
|||||||
import { SchemaSettingOptions, SchemaSettingsItemType, SchemaSettingsItemTypeWithoutName } from './types';
|
|
||||||
import { defaultSettingItems } from './SchemaSettingsDefaults';
|
import { defaultSettingItems } from './SchemaSettingsDefaults';
|
||||||
|
import { SchemaSettingOptions, SchemaSettingsItemType, SchemaSettingsItemTypeWithoutName } from './types';
|
||||||
|
|
||||||
export class SchemaSettings<T = {}> {
|
export class SchemaSettings<T = {}> {
|
||||||
options: SchemaSettingOptions<T>;
|
options: SchemaSettingOptions<T>;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { FC, ReactNode, createContext, useContext, useMemo } from 'react';
|
import React, { createContext, FC, ReactNode, useContext, useMemo } from 'react';
|
||||||
|
|
||||||
import { ACLCollectionProvider } from '../../acl/ACLProvider';
|
import { ACLCollectionProvider } from '../../acl/ACLProvider';
|
||||||
import { UseRequestOptions, UseRequestService } from '../../api-client';
|
import { UseRequestOptions, UseRequestService } from '../../api-client';
|
||||||
@ -6,9 +6,9 @@ import { withDynamicSchemaProps } from '../../application/hoc';
|
|||||||
import { Designable, useDesignable } from '../../schema-component';
|
import { Designable, useDesignable } from '../../schema-component';
|
||||||
import { AssociationProvider, CollectionManagerProvider, CollectionOptions, CollectionProvider } from '../collection';
|
import { AssociationProvider, CollectionManagerProvider, CollectionOptions, CollectionProvider } from '../collection';
|
||||||
import { CollectionRecord } from '../collection-record';
|
import { CollectionRecord } from '../collection-record';
|
||||||
|
import { ConfigSettingProvider } from './context/ConfigSetting.provider';
|
||||||
import { BlockRequestProvider } from './DataBlockRequestProvider';
|
import { BlockRequestProvider } from './DataBlockRequestProvider';
|
||||||
import { DataBlockResourceProvider } from './DataBlockResourceProvider';
|
import { DataBlockResourceProvider } from './DataBlockResourceProvider';
|
||||||
import { ConfigSettingProvider } from './context/ConfigSetting.provider';
|
|
||||||
|
|
||||||
export interface AllDataBlockProps {
|
export interface AllDataBlockProps {
|
||||||
collection: string | CollectionOptions;
|
collection: string | CollectionOptions;
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
import { Schema, useFieldSchema } from '@tachybase/schema';
|
import { Schema, useFieldSchema } from '@tachybase/schema';
|
||||||
import { flatten, getValuesByPath } from '@tachybase/utils/client';
|
import { flatten, getValuesByPath } from '@tachybase/utils/client';
|
||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { useCallback, useEffect, useState } from 'react';
|
|
||||||
import { FilterTarget, findFilterTargets } from '../block-provider/hooks';
|
import { FilterTarget, findFilterTargets } from '../block-provider/hooks';
|
||||||
import {
|
import {
|
||||||
Collection_deprecated,
|
Collection_deprecated,
|
||||||
|
@ -1,21 +1,22 @@
|
|||||||
|
import { useContextConfigSetting } from '@tachybase/client';
|
||||||
import { ArrayCollapse, FormLayout } from '@tachybase/components';
|
import { ArrayCollapse, FormLayout } from '@tachybase/components';
|
||||||
import { Field } from '@tachybase/schema';
|
import { Field, ISchema, useField, useFieldSchema } from '@tachybase/schema';
|
||||||
import { ISchema, useField, useFieldSchema } from '@tachybase/schema';
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import { useApp, useSchemaToolbar } from '../../../../application';
|
import { useApp, useSchemaToolbar } from '../../../../application';
|
||||||
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
|
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
|
||||||
import { useFormBlockContext } from '../../../../block-provider';
|
import { useFormBlockContext } from '../../../../block-provider';
|
||||||
import { useCollectionManager_deprecated, useCollection_deprecated } from '../../../../collection-manager';
|
import { useCollection_deprecated, useCollectionManager_deprecated } from '../../../../collection-manager';
|
||||||
import { useFieldComponentName } from '../../../../common/useFieldComponentName';
|
import { useFieldComponentName } from '../../../../common/useFieldComponentName';
|
||||||
import { useDesignable, useValidateSchema } from '../../../../schema-component';
|
import { useDesignable, useValidateSchema } from '../../../../schema-component';
|
||||||
import { useIsFormReadPretty } from '../../../../schema-component/antd/form-item/FormItem.Settings';
|
import { useIsFormReadPretty } from '../../../../schema-component/antd/form-item/FormItem.Settings';
|
||||||
import { getTempFieldState } from '../../../../schema-component/antd/form-v2/utils';
|
import { getTempFieldState } from '../../../../schema-component/antd/form-v2/utils';
|
||||||
import { isPatternDisabled } from '../../../../schema-settings';
|
import { isPatternDisabled } from '../../../../schema-settings';
|
||||||
|
import { useIsAllowToSetDefaultValue } from '../../../../schema-settings/hooks/useIsAllowToSetDefaultValue';
|
||||||
import { ActionType } from '../../../../schema-settings/LinkageRules/type';
|
import { ActionType } from '../../../../schema-settings/LinkageRules/type';
|
||||||
import { SchemaSettingsDefaultValue } from '../../../../schema-settings/SchemaSettingsDefaultValue';
|
import { SchemaSettingsDefaultValue } from '../../../../schema-settings/SchemaSettingsDefaultValue';
|
||||||
import { useIsAllowToSetDefaultValue } from '../../../../schema-settings/hooks/useIsAllowToSetDefaultValue';
|
|
||||||
import { useContextConfigSetting } from '@tachybase/client';
|
|
||||||
|
|
||||||
export const fieldSettingsFormItem = new SchemaSettings({
|
export const fieldSettingsFormItem = new SchemaSettings({
|
||||||
name: 'fieldSettings:FormItem',
|
name: 'fieldSettings:FormItem',
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import { ArrayItems } from '@tachybase/components';
|
|
||||||
import { ISchema } from '@tachybase/schema';
|
|
||||||
import { useField, useFieldSchema } from '@tachybase/schema';
|
|
||||||
import _ from 'lodash';
|
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
|
import { ArrayItems } from '@tachybase/components';
|
||||||
|
import { ISchema, useField, useFieldSchema } from '@tachybase/schema';
|
||||||
|
|
||||||
|
import _ from 'lodash';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
|
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
|
||||||
import { useFormBlockContext } from '../../../../block-provider';
|
import { useFormBlockContext } from '../../../../block-provider';
|
||||||
import { useCollection_deprecated, useSortFields } from '../../../../collection-manager';
|
import { useCollection_deprecated, useSortFields } from '../../../../collection-manager';
|
||||||
@ -16,9 +17,9 @@ import {
|
|||||||
screenSizeTitleMaps,
|
screenSizeTitleMaps,
|
||||||
} from '../../../../schema-component/antd/grid-card/options';
|
} from '../../../../schema-component/antd/grid-card/options';
|
||||||
import { SchemaSettingsTemplate } from '../../../../schema-settings';
|
import { SchemaSettingsTemplate } from '../../../../schema-settings';
|
||||||
import { columnCountMarks } from './utils';
|
|
||||||
import { SchemaSettingsDataScope } from '../../../../schema-settings/SchemaSettingsDataScope';
|
import { SchemaSettingsDataScope } from '../../../../schema-settings/SchemaSettingsDataScope';
|
||||||
import { setDataLoadingModeSettingsItem } from '../details-multi/setDataLoadingModeSettingsItem';
|
import { setDataLoadingModeSettingsItem } from '../details-multi/setDataLoadingModeSettingsItem';
|
||||||
|
import { columnCountMarks } from './utils';
|
||||||
|
|
||||||
export const gridCardBlockSettings = new SchemaSettings({
|
export const gridCardBlockSettings = new SchemaSettings({
|
||||||
name: 'blockSettings:gridCard',
|
name: 'blockSettings:gridCard',
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
import { Field, useField, useFieldSchema } from '@tachybase/schema';
|
import { Field, useField, useFieldSchema } from '@tachybase/schema';
|
||||||
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
|
|
||||||
import { useColumnSchema } from '../../../../schema-component/antd/table-v2/Table.Column.Decorator';
|
|
||||||
import { useDesignable } from '../../../../schema-component';
|
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
|
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
|
||||||
|
import { useDesignable } from '../../../../schema-component';
|
||||||
|
import { useColumnSchema } from '../../../../schema-component/antd/table-v2/Table.Column.Decorator';
|
||||||
|
|
||||||
export const checkboxComponentFieldSettings = new SchemaSettings({
|
export const checkboxComponentFieldSettings = new SchemaSettings({
|
||||||
name: 'fieldSettings:component:Checkbox',
|
name: 'fieldSettings:component:Checkbox',
|
||||||
items: [
|
items: [
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { observer, RecursionField, useField, useFieldSchema } from '@tachybase/schema';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { observer, RecursionField, useField, useFieldSchema } from '@tachybase/schema';
|
||||||
|
|
||||||
import { useActionContext } from '.';
|
import { useActionContext } from '.';
|
||||||
import { ActionDrawer } from './Action.Drawer';
|
import { ActionDrawer } from './Action.Drawer';
|
||||||
import { ActionSheet } from './Action.Sheet';
|
|
||||||
import { ActionModal } from './Action.Modal';
|
import { ActionModal } from './Action.Modal';
|
||||||
import { ActionPage } from './Action.Page';
|
import { ActionPage } from './Action.Page';
|
||||||
|
import { ActionSheet } from './Action.Sheet';
|
||||||
import { ComposedActionDrawer } from './types';
|
import { ComposedActionDrawer } from './types';
|
||||||
|
|
||||||
export const ActionContainer: ComposedActionDrawer = observer(
|
export const ActionContainer: ComposedActionDrawer = observer(
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { Schema } from '@tachybase/schema';
|
|
||||||
import { DrawerProps, ModalProps } from 'antd';
|
|
||||||
import React, { createContext } from 'react';
|
import React, { createContext } from 'react';
|
||||||
|
import { Schema } from '@tachybase/schema';
|
||||||
|
|
||||||
|
import { DrawerProps, ModalProps } from 'antd';
|
||||||
|
|
||||||
import { useActionContext } from './hooks';
|
import { useActionContext } from './hooks';
|
||||||
|
|
||||||
export const ActionContext = createContext<ActionContextProps>({});
|
export const ActionContext = createContext<ActionContextProps>({});
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
|
|
||||||
import { CloseCircleFilled } from '@ant-design/icons';
|
import { CloseCircleFilled } from '@ant-design/icons';
|
||||||
import { Tag, TreeSelect } from 'antd';
|
import { Tag, TreeSelect } from 'antd';
|
||||||
import type { DefaultOptionType, TreeSelectProps } from 'rc-tree-select/es/TreeSelect';
|
import type { DefaultOptionType, TreeSelectProps } from 'rc-tree-select/es/TreeSelect';
|
||||||
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
CollectionFieldOptions_deprecated,
|
CollectionFieldOptions_deprecated,
|
||||||
parseCollectionName,
|
parseCollectionName,
|
||||||
|
@ -1,15 +1,25 @@
|
|||||||
import { LoadingOutlined, PlusOutlined } from '@ant-design/icons';
|
|
||||||
import { onFieldInputValueChange } from '@tachybase/schema';
|
|
||||||
import { RecursionField, connect, mapProps, observer, useField, useFieldSchema, useForm } from '@tachybase/schema';
|
|
||||||
import { uid } from '@tachybase/schema';
|
|
||||||
import { Space, message } from 'antd';
|
|
||||||
import { isFunction } from 'mathjs';
|
|
||||||
import React, { useEffect, useMemo, useState } from 'react';
|
import React, { useEffect, useMemo, useState } from 'react';
|
||||||
|
import {
|
||||||
|
connect,
|
||||||
|
mapProps,
|
||||||
|
observer,
|
||||||
|
onFieldInputValueChange,
|
||||||
|
RecursionField,
|
||||||
|
uid,
|
||||||
|
useField,
|
||||||
|
useFieldSchema,
|
||||||
|
useForm,
|
||||||
|
} from '@tachybase/schema';
|
||||||
|
|
||||||
|
import { LoadingOutlined, PlusOutlined } from '@ant-design/icons';
|
||||||
|
import { message, Space } from 'antd';
|
||||||
|
import { isFunction } from 'mathjs';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import { RecordProvider, useAPIClient, useApp, useCollectionRecordData } from '../../../';
|
import { RecordProvider, useAPIClient, useApp, useCollectionRecordData } from '../../../';
|
||||||
import { isVariable } from '../../../variables/utils/isVariable';
|
import { isVariable } from '../../../variables/utils/isVariable';
|
||||||
import { getInnermostKeyAndValue } from '../../common/utils/uitls';
|
import { getInnermostKeyAndValue } from '../../common/utils/uitls';
|
||||||
import { RemoteSelectProps, RemoteSelect } from '../remote-select';
|
import { RemoteSelect, RemoteSelectProps } from '../remote-select';
|
||||||
import useServiceOptions, { useAssociationFieldContext } from './hooks';
|
import useServiceOptions, { useAssociationFieldContext } from './hooks';
|
||||||
|
|
||||||
export type AssociationSelectProps<P = any> = RemoteSelectProps<P> & {
|
export type AssociationSelectProps<P = any> = RemoteSelectProps<P> & {
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { connect, isValid, mapProps, mapReadPretty, useField } from '@tachybase/schema';
|
||||||
|
|
||||||
import { CheckOutlined, CloseOutlined } from '@ant-design/icons';
|
import { CheckOutlined, CloseOutlined } from '@ant-design/icons';
|
||||||
import { connect, mapProps, mapReadPretty, useField } from '@tachybase/schema';
|
|
||||||
import { isValid } from '@tachybase/schema';
|
|
||||||
import { Checkbox as AntdCheckbox, Radio, Tag } from 'antd';
|
import { Checkbox as AntdCheckbox, Radio, Tag } from 'antd';
|
||||||
import type { CheckboxGroupProps, CheckboxProps } from 'antd/es/checkbox';
|
import type { CheckboxGroupProps, CheckboxProps } from 'antd/es/checkbox';
|
||||||
import uniq from 'lodash/uniq';
|
import uniq from 'lodash/uniq';
|
||||||
import React from 'react';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import { useCollectionField } from '../../../data-source/collection-field/CollectionFieldProvider';
|
import { useCollectionField } from '../../../data-source/collection-field/CollectionFieldProvider';
|
||||||
import { EllipsisWithTooltip } from '../input/EllipsisWithTooltip';
|
import { EllipsisWithTooltip } from '../input/EllipsisWithTooltip';
|
||||||
import { useTranslation } from 'react-i18next';
|
|
||||||
|
|
||||||
type ComposedCheckbox = React.ForwardRefExoticComponent<
|
type ComposedCheckbox = React.ForwardRefExoticComponent<
|
||||||
Pick<Partial<any>, string | number | symbol> & React.RefAttributes<unknown>
|
Pick<Partial<any>, string | number | symbol> & React.RefAttributes<unknown>
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { FormLayout } from '@tachybase/components';
|
|
||||||
import { createForm } from '@tachybase/schema';
|
|
||||||
import { FormContext, useField, useFieldSchema } from '@tachybase/schema';
|
|
||||||
import React, { createContext, useContext, useEffect, useMemo } from 'react';
|
import React, { createContext, useContext, useEffect, useMemo } from 'react';
|
||||||
import { BlockProvider, useBlockRequestContext, useParsedFilter } from '../../../block-provider';
|
import { FormLayout } from '@tachybase/components';
|
||||||
import useStyles from './GridCard.Decorator.style';
|
import { createForm, FormContext, useField, useFieldSchema } from '@tachybase/schema';
|
||||||
import { useGridCardBlockParams } from '../../../modules/blocks/data-blocks/grid-card/hooks/useGridCardBlockParams';
|
|
||||||
import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps';
|
import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps';
|
||||||
|
import { BlockProvider, useBlockRequestContext, useParsedFilter } from '../../../block-provider';
|
||||||
|
import { useGridCardBlockParams } from '../../../modules/blocks/data-blocks/grid-card/hooks/useGridCardBlockParams';
|
||||||
|
import useStyles from './GridCard.Decorator.style';
|
||||||
|
|
||||||
export const GridCardBlockContext = createContext<any>({});
|
export const GridCardBlockContext = createContext<any>({});
|
||||||
GridCardBlockContext.displayName = 'GridCardBlockContext';
|
GridCardBlockContext.displayName = 'GridCardBlockContext';
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
import React, { ReactNode, useEffect, useRef, useState } from 'react';
|
||||||
import { getScrollParent, merge } from '@tachybase/utils/client';
|
import { getScrollParent, merge } from '@tachybase/utils/client';
|
||||||
|
|
||||||
import { useLockFn, useThrottleFn } from 'ahooks';
|
import { useLockFn, useThrottleFn } from 'ahooks';
|
||||||
import { Spin } from 'antd';
|
import { Spin } from 'antd';
|
||||||
import React, { ReactNode, useEffect, useRef, useState } from 'react';
|
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import useStyles from './style';
|
import useStyles from './style';
|
||||||
|
|
||||||
function isWindow(element: any | Window): element is Window {
|
function isWindow(element: any | Window): element is Window {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { createForm } from '@tachybase/schema';
|
|
||||||
import { Schema } from '@tachybase/schema';
|
|
||||||
// import { Spin } from 'antd';
|
// import { Spin } from 'antd';
|
||||||
import React, { PropsWithChildren, useMemo } from 'react';
|
import React, { PropsWithChildren, useMemo } from 'react';
|
||||||
|
import { createForm, Schema } from '@tachybase/schema';
|
||||||
|
|
||||||
import { useRequest } from '../../api-client';
|
import { useRequest } from '../../api-client';
|
||||||
import { useSchemaComponentContext } from '../hooks';
|
import { useSchemaComponentContext } from '../hooks';
|
||||||
import { FormProvider } from './FormProvider';
|
import { FormProvider } from './FormProvider';
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { useField, useFieldSchema } from '@tachybase/schema';
|
|
||||||
import { Select } from 'antd';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { useField, useFieldSchema } from '@tachybase/schema';
|
||||||
|
|
||||||
|
import { Select } from 'antd';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import { SchemaInitializerItem, SchemaInitializerSelect } from '../application';
|
import { SchemaInitializerItem, SchemaInitializerSelect } from '../application';
|
||||||
import { useDesignable } from '../schema-component';
|
import { useDesignable } from '../schema-component';
|
||||||
import { SchemaSettingsSelectItem } from '../schema-settings';
|
import { SchemaSettingsSelectItem } from '../schema-settings';
|
||||||
|
@ -39,21 +39,21 @@ import { filterCollapseItemFieldSettings } from '../modules/blocks/filter-blocks
|
|||||||
import { filterFormBlockSettings } from '../modules/blocks/filter-blocks/form/filterFormBlockSettings';
|
import { filterFormBlockSettings } from '../modules/blocks/filter-blocks/form/filterFormBlockSettings';
|
||||||
import { filterFormItemFieldSettings } from '../modules/blocks/filter-blocks/form/filterFormItemFieldSettings';
|
import { filterFormItemFieldSettings } from '../modules/blocks/filter-blocks/form/filterFormItemFieldSettings';
|
||||||
import { markdownBlockSettings } from '../modules/blocks/other-blocks/markdown/markdownBlockSettings';
|
import { markdownBlockSettings } from '../modules/blocks/other-blocks/markdown/markdownBlockSettings';
|
||||||
import { cascadeSelectComponentFieldSettings } from '../modules/fields/component/CascadeSelect/cascadeSelectComponentFieldSettings';
|
|
||||||
import { cascaderComponentFieldSettings } from '../modules/fields/component/Cascader/cascaderComponentFieldSettings';
|
import { cascaderComponentFieldSettings } from '../modules/fields/component/Cascader/cascaderComponentFieldSettings';
|
||||||
|
import { cascadeSelectComponentFieldSettings } from '../modules/fields/component/CascadeSelect/cascadeSelectComponentFieldSettings';
|
||||||
|
import { checkboxComponentFieldSettings } from '../modules/fields/component/Checkbox/checkboxComponentFieldSettings';
|
||||||
import { datePickerComponentFieldSettings } from '../modules/fields/component/DatePicker/datePickerComponentFieldSettings';
|
import { datePickerComponentFieldSettings } from '../modules/fields/component/DatePicker/datePickerComponentFieldSettings';
|
||||||
|
import { drawerSubTableComponentFieldSettings } from '../modules/fields/component/DrawerSubTable/drawerSubTableComponentFieldSettings';
|
||||||
import { fileManagerComponentFieldSettings } from '../modules/fields/component/FileManager/fileManagerComponentFieldSettings';
|
import { fileManagerComponentFieldSettings } from '../modules/fields/component/FileManager/fileManagerComponentFieldSettings';
|
||||||
import { uploadAttachmentComponentFieldSettings } from '../modules/fields/component/FileManager/uploadAttachmentComponentFieldSettings';
|
import { uploadAttachmentComponentFieldSettings } from '../modules/fields/component/FileManager/uploadAttachmentComponentFieldSettings';
|
||||||
|
import { inputNumberComponentFieldSettings } from '../modules/fields/component/InputNumber/inputNumberComponentFieldSettings';
|
||||||
import { subformComponentFieldSettings } from '../modules/fields/component/Nester/subformComponentFieldSettings';
|
import { subformComponentFieldSettings } from '../modules/fields/component/Nester/subformComponentFieldSettings';
|
||||||
import { recordPickerComponentFieldSettings } from '../modules/fields/component/Picker/recordPickerComponentFieldSettings';
|
import { recordPickerComponentFieldSettings } from '../modules/fields/component/Picker/recordPickerComponentFieldSettings';
|
||||||
import { subformPopoverComponentFieldSettings } from '../modules/fields/component/PopoverNester/subformPopoverComponentFieldSettings';
|
import { subformPopoverComponentFieldSettings } from '../modules/fields/component/PopoverNester/subformPopoverComponentFieldSettings';
|
||||||
import { drawerSubTableComponentFieldSettings } from '../modules/fields/component/DrawerSubTable/drawerSubTableComponentFieldSettings';
|
|
||||||
import { selectComponentFieldSettings } from '../modules/fields/component/Select/selectComponentFieldSettings';
|
import { selectComponentFieldSettings } from '../modules/fields/component/Select/selectComponentFieldSettings';
|
||||||
import { subTablePopoverComponentFieldSettings } from '../modules/fields/component/SubTable/subTablePopoverComponentFieldSettings';
|
import { subTablePopoverComponentFieldSettings } from '../modules/fields/component/SubTable/subTablePopoverComponentFieldSettings';
|
||||||
import { tagComponentFieldSettings } from '../modules/fields/component/Tag/tagComponentFieldSettings';
|
import { tagComponentFieldSettings } from '../modules/fields/component/Tag/tagComponentFieldSettings';
|
||||||
import { unixTimestampComponentFieldSettings } from '../modules/fields/component/UnixTimestamp/unixTimestampComponentFieldSettings';
|
import { unixTimestampComponentFieldSettings } from '../modules/fields/component/UnixTimestamp/unixTimestampComponentFieldSettings';
|
||||||
import { inputNumberComponentFieldSettings } from '../modules/fields/component/InputNumber/inputNumberComponentFieldSettings';
|
|
||||||
import { checkboxComponentFieldSettings } from '../modules/fields/component/Checkbox/checkboxComponentFieldSettings';
|
|
||||||
|
|
||||||
export class SchemaSettingsPlugin extends Plugin {
|
export class SchemaSettingsPlugin extends Plugin {
|
||||||
async load() {
|
async load() {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import lodash from 'lodash';
|
import lodash from 'lodash';
|
||||||
|
|
||||||
import { dayjs } from './dayjs';
|
import { dayjs } from './dayjs';
|
||||||
|
|
||||||
export * from './collections-graph';
|
export * from './collections-graph';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
||||||
import { ISchema } from '@tachybase/schema';
|
import { ISchema } from '@tachybase/schema';
|
||||||
|
|
||||||
import { CalendarOutline } from 'antd-mobile-icons';
|
import { CalendarOutline } from 'antd-mobile-icons';
|
||||||
|
|
||||||
export const ApprovalBlockInitializer = () => {
|
export const ApprovalBlockInitializer = () => {
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
|
import React, { useMemo } from 'react';
|
||||||
import { createStyles, useCurrentUserContext } from '@tachybase/client';
|
import { createStyles, useCurrentUserContext } from '@tachybase/client';
|
||||||
import { EXECUTION_STATUS } from '@tachybase/plugin-workflow/client';
|
import { EXECUTION_STATUS } from '@tachybase/plugin-workflow/client';
|
||||||
|
import { dayjs } from '@tachybase/utils/client';
|
||||||
|
|
||||||
|
import { Space, Steps, Tag } from 'antd-mobile';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React, { useMemo } from 'react';
|
|
||||||
import { APPROVAL_ACTION_STATUS, APPROVAL_STATUS, ApprovalStatusEnums, approvalStatusOptions } from '../constants';
|
import { APPROVAL_ACTION_STATUS, APPROVAL_STATUS, ApprovalStatusEnums, approvalStatusOptions } from '../constants';
|
||||||
import { lang, usePluginTranslation, useTranslation } from '../locale';
|
|
||||||
import { useContextApprovalExecution } from '../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../context/ApprovalExecution';
|
||||||
import { ContextWithActionEnabled } from '../context/WithActionEnabled';
|
import { ContextWithActionEnabled } from '../context/WithActionEnabled';
|
||||||
import { Space, Steps, Tag } from 'antd-mobile';
|
import { lang, usePluginTranslation, useTranslation } from '../locale';
|
||||||
import { dayjs } from '@tachybase/utils/client';
|
|
||||||
|
|
||||||
export const ApprovalProcess = (props) => {
|
export const ApprovalProcess = (props) => {
|
||||||
const { t } = usePluginTranslation();
|
const { t } = usePluginTranslation();
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
import { observer } from '@tachybase/schema';
|
import { observer } from '@tachybase/schema';
|
||||||
import { dayjs } from '@tachybase/utils/client';
|
import { dayjs } from '@tachybase/utils/client';
|
||||||
|
|
||||||
import { AutoCenter, Button, DatePicker, Grid, Popup, Space, Toast } from 'antd-mobile';
|
import { AutoCenter, Button, DatePicker, Grid, Popup, Space, Toast } from 'antd-mobile';
|
||||||
import { DownOutline } from 'antd-mobile-icons';
|
import { DownOutline } from 'antd-mobile-icons';
|
||||||
import React, { useState } from 'react';
|
|
||||||
|
|
||||||
export const ApprovalReachDataType = observer((props) => {
|
export const ApprovalReachDataType = observer((props) => {
|
||||||
const { changeFilter, filter } = props as any;
|
const { changeFilter, filter } = props as any;
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
import { useAPIClient } from '@tachybase/client';
|
import { useAPIClient } from '@tachybase/client';
|
||||||
import { observer, useFieldSchema } from '@tachybase/schema';
|
import { observer, useFieldSchema } from '@tachybase/schema';
|
||||||
|
|
||||||
import { Picker, Space } from 'antd-mobile';
|
import { Picker, Space } from 'antd-mobile';
|
||||||
import { DownOutline } from 'antd-mobile-icons';
|
import { DownOutline } from 'antd-mobile-icons';
|
||||||
import React, { useEffect, useState } from 'react';
|
|
||||||
import { useTranslation } from '../locale';
|
import { useTranslation } from '../locale';
|
||||||
|
|
||||||
export const ApprovalTemplateType = observer((props) => {
|
export const ApprovalTemplateType = observer((props) => {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { JOB_STATUS } from '@tachybase/plugin-workflow/client';
|
import { JOB_STATUS } from '@tachybase/plugin-workflow/client';
|
||||||
import { NAMESPACE, lang, tval } from './locale';
|
|
||||||
|
import { lang, NAMESPACE, tval } from './locale';
|
||||||
|
|
||||||
/**显示状态 */
|
/**显示状态 */
|
||||||
export const APPROVAL_STATUS = {
|
export const APPROVAL_STATUS = {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { createContext, useContext } from 'react';
|
import { createContext, useContext } from 'react';
|
||||||
|
|
||||||
import { ApprovalExecution } from '../todos/interface/interface';
|
import { ApprovalExecution } from '../todos/interface/interface';
|
||||||
|
|
||||||
export const ContextApprovalExecution = createContext<Partial<ApprovalExecution>>({});
|
export const ContextApprovalExecution = createContext<Partial<ApprovalExecution>>({});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, { Fragment, useContext, useMemo, useRef } from 'react';
|
||||||
import {
|
import {
|
||||||
BlockRequestContext_deprecated,
|
BlockRequestContext_deprecated,
|
||||||
CollectionProvider_deprecated,
|
CollectionProvider_deprecated,
|
||||||
@ -11,8 +11,8 @@ import {
|
|||||||
useAssociationNames,
|
useAssociationNames,
|
||||||
useDesignable,
|
useDesignable,
|
||||||
} from '@tachybase/client';
|
} from '@tachybase/client';
|
||||||
import { RecursionField, createForm, useField, useFieldSchema } from '@tachybase/schema';
|
import { createForm, RecursionField, useField, useFieldSchema } from '@tachybase/schema';
|
||||||
import { Fragment, useContext, useMemo, useRef } from 'react';
|
|
||||||
import { useContextApprovalExecution } from './ApprovalExecution';
|
import { useContextApprovalExecution } from './ApprovalExecution';
|
||||||
|
|
||||||
export const FormBlockProvider = (props) => {
|
export const FormBlockProvider = (props) => {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { SchemaComponentContext, useSchemaComponentContext } from '@tachybase/client';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { SchemaComponentContext, useSchemaComponentContext } from '@tachybase/client';
|
||||||
|
|
||||||
export function SchemaComponentContextProvider({ designable, children }) {
|
export function SchemaComponentContextProvider({ designable, children }) {
|
||||||
const schemaComponentContext = useSchemaComponentContext();
|
const schemaComponentContext = useSchemaComponentContext();
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
import { Plugin } from '@tachybase/client';
|
import { Plugin } from '@tachybase/client';
|
||||||
|
|
||||||
import { ApprovalBlockInitializer } from './ApprovalBlockInitializer';
|
import { ApprovalBlockInitializer } from './ApprovalBlockInitializer';
|
||||||
import { ApprovalSettings } from './ApprovalSettings';
|
import { ApprovalSettings } from './ApprovalSettings';
|
||||||
import { TodosBlock } from './todos/TodosBlock';
|
|
||||||
import { InitiationsBlock } from './initiations/InitiationsBlock';
|
|
||||||
import { LauncherActionConfigInitializer } from './initiations/config/LauncherActionConfig';
|
|
||||||
import { ViewActionTodosContent } from './todos/component/ViewActionTodosContent';
|
|
||||||
import { ViewActionUserInitiationsContent } from './initiations/component/ViewActionUserInitiationsContent';
|
|
||||||
import { ApprovalProcess } from './component/ApprovalProcess.view';
|
import { ApprovalProcess } from './component/ApprovalProcess.view';
|
||||||
import { ViewActionInitiationsContent } from './initiations/component/ViewActionInitiationsContent';
|
import { ViewActionInitiationsContent } from './initiations/component/ViewActionInitiationsContent';
|
||||||
|
import { ViewActionUserInitiationsContent } from './initiations/component/ViewActionUserInitiationsContent';
|
||||||
|
import { LauncherActionConfigInitializer } from './initiations/config/LauncherActionConfig';
|
||||||
|
import { InitiationsBlock } from './initiations/InitiationsBlock';
|
||||||
|
import { ViewActionTodosContent } from './todos/component/ViewActionTodosContent';
|
||||||
|
import { TodosBlock } from './todos/TodosBlock';
|
||||||
|
|
||||||
class PluginApproval extends Plugin {
|
class PluginApproval extends Plugin {
|
||||||
async load() {
|
async load() {
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
import { useAPIClient, useCurrentUserContext } from '@tachybase/client';
|
|
||||||
import { Badge, Empty, List, Space, Tag } from 'antd-mobile';
|
|
||||||
import React, { useContext, useEffect, useState } from 'react';
|
import React, { useContext, useEffect, useState } from 'react';
|
||||||
import { useDeepCompareEffect } from 'ahooks';
|
import { useAPIClient, useCurrentUserContext } from '@tachybase/client';
|
||||||
import { ApprovalPriorityType, ApprovalStatusEnums } from '../../constants';
|
|
||||||
import { useNavigate } from 'react-router-dom';
|
|
||||||
import { useTranslation } from '../../locale';
|
|
||||||
import { observer } from '@tachybase/schema';
|
import { observer } from '@tachybase/schema';
|
||||||
|
|
||||||
|
import { useDeepCompareEffect } from 'ahooks';
|
||||||
|
import { Badge, Empty, List, Space, Tag } from 'antd-mobile';
|
||||||
|
import { useNavigate } from 'react-router-dom';
|
||||||
|
|
||||||
|
import { ApprovalPriorityType, ApprovalStatusEnums } from '../../constants';
|
||||||
|
import { useTranslation } from '../../locale';
|
||||||
import { InitiationsBlockContext } from '../InitiationsBlock';
|
import { InitiationsBlockContext } from '../InitiationsBlock';
|
||||||
|
|
||||||
export const ApprovalItem = observer((props) => {
|
export const ApprovalItem = observer((props) => {
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import { observer, useFieldSchema } from '@tachybase/schema';
|
||||||
|
|
||||||
import { Picker, Space } from 'antd-mobile';
|
import { Picker, Space } from 'antd-mobile';
|
||||||
import { DownOutline } from 'antd-mobile-icons';
|
import { DownOutline } from 'antd-mobile-icons';
|
||||||
import React, { useState } from 'react';
|
|
||||||
import { useTranslation } from '../../locale';
|
import { useTranslation } from '../../locale';
|
||||||
import { observer, useFieldSchema } from '@tachybase/schema';
|
|
||||||
|
|
||||||
export const ApprovalStatus = observer((props) => {
|
export const ApprovalStatus = observer((props) => {
|
||||||
const { changeFilter, filter } = props as any;
|
const { changeFilter, filter } = props as any;
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import { BlockItem } from '@tachybase/client';
|
|
||||||
import { Space } from 'antd-mobile';
|
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
|
import { BlockItem } from '@tachybase/client';
|
||||||
import { observer } from '@tachybase/schema';
|
import { observer } from '@tachybase/schema';
|
||||||
import { ApprovalTemplateType } from '../../component/ApprovalTemplateType';
|
|
||||||
import { ApprovalStatus } from './ApprovalStatus';
|
import { Space } from 'antd-mobile';
|
||||||
import { ApprovalItem } from './ApprovalItem';
|
|
||||||
import { ApprovalReachDataType } from '../../component/ApprovalReachDataType';
|
import { ApprovalReachDataType } from '../../component/ApprovalReachDataType';
|
||||||
|
import { ApprovalTemplateType } from '../../component/ApprovalTemplateType';
|
||||||
|
import { ApprovalItem } from './ApprovalItem';
|
||||||
|
import { ApprovalStatus } from './ApprovalStatus';
|
||||||
|
|
||||||
import '../../style/style.css';
|
import '../../style/style.css';
|
||||||
|
|
||||||
export const UserInitiationsItem = observer((props) => {
|
export const UserInitiationsItem = observer((props) => {
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { SchemaInitializer } from '@tachybase/client';
|
import { SchemaInitializer } from '@tachybase/client';
|
||||||
import { LauncherActionConfigComponent } from './LauncherActionConfigComponent';
|
|
||||||
import { NAMESPACE } from '../../locale';
|
|
||||||
import { APPROVAL_ACTION_STATUS, APPROVAL_STATUS } from '../../constants';
|
import { APPROVAL_ACTION_STATUS, APPROVAL_STATUS } from '../../constants';
|
||||||
|
import { NAMESPACE } from '../../locale';
|
||||||
|
import { LauncherActionConfigComponent } from './LauncherActionConfigComponent';
|
||||||
|
|
||||||
// 区块-配置操作
|
// 区块-配置操作
|
||||||
export const LauncherActionConfigInitializer = new SchemaInitializer({
|
export const LauncherActionConfigInitializer = new SchemaInitializer({
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { ActionInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { ActionInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
||||||
|
|
||||||
// 区块-配置操作
|
// 区块-配置操作
|
||||||
export const LauncherActionConfigComponent = () => {
|
export const LauncherActionConfigComponent = () => {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { useAPIClient, useActionContext } from '@tachybase/client';
|
import { useActionContext, useAPIClient } from '@tachybase/client';
|
||||||
import { useField } from '@tachybase/schema';
|
import { useField } from '@tachybase/schema';
|
||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export function useDestroyAction() {
|
export function useDestroyAction() {
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
import { useForm } from '@tachybase/schema';
|
import { useForm } from '@tachybase/schema';
|
||||||
import { useEffect } from 'react';
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
|
||||||
import { ApprovalStatusEnums } from '../../constants';
|
import { ApprovalStatusEnums } from '../../constants';
|
||||||
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export function useFormBlockProps() {
|
export function useFormBlockProps() {
|
||||||
const { approval, id } = useContextApprovalExecution();
|
const { approval, id } = useContextApprovalExecution();
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import { useAPIClient, useActionContext } from '@tachybase/client';
|
import { useActionContext, useAPIClient } from '@tachybase/client';
|
||||||
import { useField, useForm } from '@tachybase/schema';
|
import { useField, useForm } from '@tachybase/schema';
|
||||||
|
|
||||||
|
import { Toast } from 'antd-mobile';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
import { useContextApprovalStatus } from '../provider/ApplyActionStatus';
|
import { useContextApprovalStatus } from '../provider/ApplyActionStatus';
|
||||||
import { Toast } from 'antd-mobile';
|
|
||||||
|
|
||||||
export function useUpdateSubmit() {
|
export function useUpdateSubmit() {
|
||||||
const from = useForm();
|
const from = useForm();
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import { useAPIClient, useActionContext } from '@tachybase/client';
|
import { useActionContext, useAPIClient } from '@tachybase/client';
|
||||||
import { useField } from '@tachybase/schema';
|
import { useField } from '@tachybase/schema';
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
|
||||||
import { Toast } from 'antd-mobile';
|
import { Toast } from 'antd-mobile';
|
||||||
|
|
||||||
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
// 撤回
|
// 撤回
|
||||||
export function useWithdrawAction() {
|
export function useWithdrawAction() {
|
||||||
const field = useField();
|
const field = useField();
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
|
||||||
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
||||||
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export function ActionBarProvider(props) {
|
export function ActionBarProvider(props) {
|
||||||
const { data } = useCurrentUserContext();
|
const { data } = useCurrentUserContext();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import React, { useContext } from 'react';
|
import React, { createContext, useContext } from 'react';
|
||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
import { createContext } from 'react';
|
|
||||||
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
|
|
||||||
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { tval as nTval, i18n } from '@tachybase/client';
|
import { i18n, tval as nTval } from '@tachybase/client';
|
||||||
|
|
||||||
export const NAMESPACE = '@hera/plugin-approval-mobile';
|
export const NAMESPACE = '@hera/plugin-approval-mobile';
|
||||||
|
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
import { BlockItem, ExtendCollectionsProvider } from '@tachybase/client';
|
|
||||||
import { SearchBar, Space, Tabs } from 'antd-mobile';
|
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { TabApplicantType } from './component/TabApplicantType';
|
import { BlockItem, ExtendCollectionsProvider } from '@tachybase/client';
|
||||||
import { TabApprovalType } from './component/TabApprovalType';
|
|
||||||
import { TabApprovalItem } from './component/TabApprovalItem';
|
|
||||||
import { observer } from '@tachybase/schema';
|
import { observer } from '@tachybase/schema';
|
||||||
|
|
||||||
|
import { SearchBar, Space, Tabs } from 'antd-mobile';
|
||||||
|
|
||||||
|
import { TabApplicantType } from './component/TabApplicantType';
|
||||||
|
import { TabApprovalItem } from './component/TabApprovalItem';
|
||||||
|
import { TabApprovalType } from './component/TabApprovalType';
|
||||||
|
|
||||||
import '../style/style.css';
|
import '../style/style.css';
|
||||||
|
|
||||||
|
import { CollectionApprovals } from '../collection/Approvals.collection';
|
||||||
|
import { CollectionApprovalTodos } from '../collection/ApprovalTodos';
|
||||||
|
import { CollectionFlowNodes } from '../collection/FlowNodes.collection';
|
||||||
|
import { CollectionWorkflows } from '../collection/Workflows.collection';
|
||||||
import { ApprovalReachDataType } from '../component/ApprovalReachDataType';
|
import { ApprovalReachDataType } from '../component/ApprovalReachDataType';
|
||||||
import { ApprovalTemplateType } from '../component/ApprovalTemplateType';
|
import { ApprovalTemplateType } from '../component/ApprovalTemplateType';
|
||||||
import { PendingStatus, ProcessedStatus } from '../constants';
|
import { PendingStatus, ProcessedStatus } from '../constants';
|
||||||
import { CollectionWorkflows } from '../collection/Workflows.collection';
|
|
||||||
import { CollectionFlowNodes } from '../collection/FlowNodes.collection';
|
|
||||||
import { CollectionApprovals } from '../collection/Approvals.collection';
|
|
||||||
import { CollectionApprovalTodos } from '../collection/ApprovalTodos';
|
|
||||||
|
|
||||||
export const TodosBlock = observer((props) => {
|
export const TodosBlock = observer((props) => {
|
||||||
const [filter, setFilter] = useState({
|
const [filter, setFilter] = useState({
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
import { useAPIClient } from '@tachybase/client';
|
import { useAPIClient } from '@tachybase/client';
|
||||||
import { observer, useFieldSchema } from '@tachybase/schema';
|
import { observer, useFieldSchema } from '@tachybase/schema';
|
||||||
|
|
||||||
import { Picker, Space } from 'antd-mobile';
|
import { Picker, Space } from 'antd-mobile';
|
||||||
import { DownOutline } from 'antd-mobile-icons';
|
import { DownOutline } from 'antd-mobile-icons';
|
||||||
import React, { useEffect, useState } from 'react';
|
|
||||||
import { useTranslation } from '../../locale';
|
import { useTranslation } from '../../locale';
|
||||||
|
|
||||||
export const TabApplicantType = observer((props) => {
|
export const TabApplicantType = observer((props) => {
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
import { observer } from '@tachybase/schema';
|
import { observer } from '@tachybase/schema';
|
||||||
|
|
||||||
import { Picker, Space } from 'antd-mobile';
|
import { Picker, Space } from 'antd-mobile';
|
||||||
import { DownOutline } from 'antd-mobile-icons';
|
import { DownOutline } from 'antd-mobile-icons';
|
||||||
import React, { useState } from 'react';
|
|
||||||
import { ProcessedStatus, approvalStatusOptions } from '../../constants';
|
import { approvalStatusOptions, ProcessedStatus } from '../../constants';
|
||||||
import { useTranslation } from '../../locale';
|
import { useTranslation } from '../../locale';
|
||||||
|
|
||||||
export const TabApprovalType = observer((props) => {
|
export const TabApprovalType = observer((props) => {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { useFormBlockContext } from '@tachybase/client';
|
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
|
import { useFormBlockContext } from '@tachybase/client';
|
||||||
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export function useApprovalDetailBlockProps() {
|
export function useApprovalDetailBlockProps() {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { useAPIClient, useActionContext } from '@tachybase/client';
|
import { useActionContext, useAPIClient } from '@tachybase/client';
|
||||||
import { useField } from '@tachybase/schema';
|
import { useField } from '@tachybase/schema';
|
||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export function useDestroyAction() {
|
export function useDestroyAction() {
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { useForm } from '@tachybase/schema';
|
import { useForm } from '@tachybase/schema';
|
||||||
import { useEffect } from 'react';
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
|
||||||
import { ApprovalStatusEnumDict } from '../../constants';
|
import { ApprovalStatusEnumDict } from '../../constants';
|
||||||
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export function useFormBlockProps() {
|
export function useFormBlockProps() {
|
||||||
const { approval, id, workflow } = useContextApprovalExecution();
|
const { approval, id, workflow } = useContextApprovalExecution();
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import { useAPIClient, useActionContext } from '@tachybase/client';
|
import { useActionContext, useAPIClient } from '@tachybase/client';
|
||||||
import { useField, useForm } from '@tachybase/schema';
|
import { useField, useForm } from '@tachybase/schema';
|
||||||
|
|
||||||
|
import { Toast } from 'antd-mobile';
|
||||||
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
import { useContextApprovalAction } from '../provider/ApprovalAction';
|
import { useContextApprovalAction } from '../provider/ApprovalAction';
|
||||||
import { Toast } from 'antd-mobile';
|
|
||||||
|
|
||||||
export function useSubmit() {
|
export function useSubmit() {
|
||||||
const field = useField();
|
const field = useField();
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { ActionBarProvider as ClientActionBarProvider, useCompile } from '@tachybase/client';
|
import { ActionBarProvider as ClientActionBarProvider, useCompile } from '@tachybase/client';
|
||||||
import { str2moment } from '@tachybase/utils/client';
|
import { str2moment } from '@tachybase/utils/client';
|
||||||
|
|
||||||
import { Space, Tag } from 'antd';
|
import { Space, Tag } from 'antd';
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
|
||||||
import { approvalStatusOptions } from '../../constants';
|
import { approvalStatusOptions } from '../../constants';
|
||||||
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export function ActionBarProvider(props) {
|
export function ActionBarProvider(props) {
|
||||||
const { status } = useContextApprovalExecution();
|
const { status } = useContextApprovalExecution();
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React, { useContext } from 'react';
|
import React, { createContext, useContext } from 'react';
|
||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { createContext } from 'react';
|
|
||||||
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import React, { useContext } from 'react';
|
import React, { createContext, useContext } from 'react';
|
||||||
import { createContext } from 'react';
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export interface ApprovalAction {
|
export interface ApprovalAction {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import React, { Fragment, useContext, useMemo, useRef } from 'react';
|
||||||
import {
|
import {
|
||||||
BlockRequestContext_deprecated,
|
BlockRequestContext_deprecated,
|
||||||
FormActiveFieldsProvider,
|
FormActiveFieldsProvider,
|
||||||
@ -8,9 +9,10 @@ import {
|
|||||||
useCurrentUserContext,
|
useCurrentUserContext,
|
||||||
useDesignable,
|
useDesignable,
|
||||||
} from '@tachybase/client';
|
} from '@tachybase/client';
|
||||||
import { RecursionField, createForm, useField, useFieldSchema } from '@tachybase/schema';
|
import { createForm, RecursionField, useField, useFieldSchema } from '@tachybase/schema';
|
||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React, { Fragment, useContext, useMemo, useRef } from 'react';
|
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
export function ApprovalFormBlockDecorator(props) {
|
export function ApprovalFormBlockDecorator(props) {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
|
|
||||||
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
import { APPROVAL_ACTION_STATUS } from '../../constants';
|
||||||
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
import { useContextApprovalExecution } from '../../context/ApprovalExecution';
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { Plugin } from '@tachybase/client';
|
import { Plugin } from '@tachybase/client';
|
||||||
|
|
||||||
import PluginApproval from './approval';
|
import PluginApproval from './approval';
|
||||||
|
|
||||||
export class PluginApprovalMobileClient extends Plugin {
|
export class PluginApprovalMobileClient extends Plugin {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, { Fragment, useContext, useMemo, useRef } from 'react';
|
||||||
import {
|
import {
|
||||||
BlockRequestContext_deprecated,
|
BlockRequestContext_deprecated,
|
||||||
CollectionProvider_deprecated,
|
CollectionProvider_deprecated,
|
||||||
@ -11,8 +11,8 @@ import {
|
|||||||
useAssociationNames,
|
useAssociationNames,
|
||||||
useDesignable,
|
useDesignable,
|
||||||
} from '@tachybase/client';
|
} from '@tachybase/client';
|
||||||
import { RecursionField, createForm, useField, useFieldSchema } from '@tachybase/schema';
|
import { createForm, RecursionField, useField, useFieldSchema } from '@tachybase/schema';
|
||||||
import { Fragment, useContext, useMemo, useRef } from 'react';
|
|
||||||
import { useContextApprovalExecution } from '../usage/approval-block/common/ApprovalExecution.provider';
|
import { useContextApprovalExecution } from '../usage/approval-block/common/ApprovalExecution.provider';
|
||||||
|
|
||||||
export const FormBlockProvider = (props) => {
|
export const FormBlockProvider = (props) => {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { useActionContext } from '@tachybase/client';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { useActionContext } from '@tachybase/client';
|
||||||
|
|
||||||
import { ConfigButtonView } from '../../trigger/ConfigButton.view';
|
import { ConfigButtonView } from '../../trigger/ConfigButton.view';
|
||||||
import { ContextApproverConfig } from '../Pd.ContextApproverConfig';
|
import { ContextApproverConfig } from '../Pd.ContextApproverConfig';
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { Plugin } from '@tachybase/client';
|
import { Plugin } from '@tachybase/client';
|
||||||
import PluginWorkflow from '@tachybase/plugin-workflow/client';
|
import PluginWorkflow from '@tachybase/plugin-workflow/client';
|
||||||
import { ApprovalInstruction } from './node.ApprovalInstruction';
|
|
||||||
import { ApproverActionConfigInitializer } from './approver-interface/Iz.ApproverActionConfig';
|
import { ApproverActionConfigInitializer } from './approver-interface/Iz.ApproverActionConfig';
|
||||||
import { ApproverAddBlockInitializer } from './approver-interface/Iz.ApproverAddBlock';
|
import { ApproverAddBlockInitializer } from './approver-interface/Iz.ApproverAddBlock';
|
||||||
|
import { ApprovalInstruction } from './node.ApprovalInstruction';
|
||||||
|
|
||||||
export class KitApprovalInstruction extends Plugin {
|
export class KitApprovalInstruction extends Plugin {
|
||||||
async load() {
|
async load() {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { Plugin } from '@tachybase/client';
|
import { Plugin } from '@tachybase/client';
|
||||||
|
|
||||||
import { KitApprovalInstruction } from './instruction/plugin';
|
import { KitApprovalInstruction } from './instruction/plugin';
|
||||||
import { KitApprovalTrigger } from './trigger/plugin';
|
import { KitApprovalTrigger } from './trigger/plugin';
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { ActionContextProvider } from '@tachybase/client';
|
|
||||||
import { Button } from 'antd';
|
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
|
import { ActionContextProvider } from '@tachybase/client';
|
||||||
|
|
||||||
|
import { Button } from 'antd';
|
||||||
|
|
||||||
import { useTranslation } from '../../locale';
|
import { useTranslation } from '../../locale';
|
||||||
|
|
||||||
// 发起人操作界面->进入配置按钮
|
// 发起人操作界面->进入配置按钮
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { ActionInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { ActionInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
||||||
|
|
||||||
// 区块-配置操作
|
// 区块-配置操作
|
||||||
export const LauncherActionConfigComponent = () => {
|
export const LauncherActionConfigComponent = () => {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { SchemaInitializer } from '@tachybase/client';
|
import { SchemaInitializer } from '@tachybase/client';
|
||||||
import { NAMESPACE } from '../../../locale';
|
|
||||||
import { APPROVAL_STATUS } from '../../../constants';
|
import { APPROVAL_STATUS } from '../../../constants';
|
||||||
|
import { NAMESPACE } from '../../../locale';
|
||||||
import { LauncherActionConfigComponent } from './LauncherActionConfig.component';
|
import { LauncherActionConfigComponent } from './LauncherActionConfig.component';
|
||||||
|
|
||||||
// 区块-配置操作
|
// 区块-配置操作
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { SchemaInitializer, gridRowColWrap } from '@tachybase/client';
|
import { gridRowColWrap, SchemaInitializer } from '@tachybase/client';
|
||||||
|
|
||||||
import { NAMESPACE } from '../../../locale';
|
import { NAMESPACE } from '../../../locale';
|
||||||
import { LauncherAddBlockButtonComponent } from './LauncherBlockButton.component';
|
import { LauncherAddBlockButtonComponent } from './LauncherBlockButton.component';
|
||||||
|
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {
|
import {
|
||||||
SchemaInitializerItem,
|
|
||||||
createFormBlockSchema,
|
createFormBlockSchema,
|
||||||
|
SchemaInitializerItem,
|
||||||
useCollection_deprecated,
|
useCollection_deprecated,
|
||||||
useRecordCollectionDataSourceItems,
|
useRecordCollectionDataSourceItems,
|
||||||
useSchemaInitializer,
|
useSchemaInitializer,
|
||||||
useSchemaInitializerItem,
|
useSchemaInitializerItem,
|
||||||
useSchemaTemplateManager,
|
useSchemaTemplateManager,
|
||||||
} from '@tachybase/client';
|
} from '@tachybase/client';
|
||||||
|
|
||||||
|
import { APPROVAL_STATUS, flatSchemaArray } from '../../../constants';
|
||||||
import { NAMESPACE } from '../../../locale';
|
import { NAMESPACE } from '../../../locale';
|
||||||
import { flatSchemaArray } from '../../../constants';
|
|
||||||
import { APPROVAL_STATUS } from '../../../constants';
|
|
||||||
|
|
||||||
// 创建区块-Initializer的component
|
// 创建区块-Initializer的component
|
||||||
export const LauncherAddBlockButtonComponent = () => {
|
export const LauncherAddBlockButtonComponent = () => {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import React, { useContext } from 'react';
|
||||||
import {
|
import {
|
||||||
SchemaComponent,
|
SchemaComponent,
|
||||||
SchemaComponentContext,
|
SchemaComponentContext,
|
||||||
@ -8,8 +9,8 @@ import {
|
|||||||
} from '@tachybase/client';
|
} from '@tachybase/client';
|
||||||
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
import { uid } from '@tachybase/utils/client';
|
import { uid } from '@tachybase/utils/client';
|
||||||
|
|
||||||
import { Spin } from 'antd';
|
import { Spin } from 'antd';
|
||||||
import React, { useContext } from 'react';
|
|
||||||
|
|
||||||
// 发起人操作界面-创建区块
|
// 发起人操作界面-创建区块
|
||||||
export const SchemaAddBlock = ({ value, onChange }) => {
|
export const SchemaAddBlock = ({ value, onChange }) => {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { Plugin } from '@tachybase/client';
|
import { Plugin } from '@tachybase/client';
|
||||||
import PluginWorkflow from '@tachybase/plugin-workflow/client';
|
import PluginWorkflow from '@tachybase/plugin-workflow/client';
|
||||||
|
|
||||||
import { ApprovalTrigger } from './Approval.trigger';
|
import { ApprovalTrigger } from './Approval.trigger';
|
||||||
import { LauncherActionConfigInitializer } from './launcher-interface/LauncherActionConfig.initializer';
|
import { LauncherActionConfigInitializer } from './launcher-interface/LauncherActionConfig.initializer';
|
||||||
import { LauncherAddBlockButtonIntializer } from './launcher-interface/LauncherAddBlockButton.initializer';
|
import { LauncherAddBlockButtonIntializer } from './launcher-interface/LauncherAddBlockButton.initializer';
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
import { Plugin } from '@tachybase/client';
|
|
||||||
import { TableOutlined } from '@ant-design/icons';
|
|
||||||
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
|
||||||
import { uid } from '@tachybase/utils/client';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { Plugin, SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
||||||
|
import { uid } from '@tachybase/utils/client';
|
||||||
|
|
||||||
|
import { TableOutlined } from '@ant-design/icons';
|
||||||
|
|
||||||
import { NAMESPACE } from '../../locale';
|
import { NAMESPACE } from '../../locale';
|
||||||
import { ApprovalBlockLaunch } from './launch/VC.ApprovalBlockLaunch';
|
|
||||||
import { ApprovalBlockProvider } from './ApprovalBlock.provider';
|
import { ApprovalBlockProvider } from './ApprovalBlock.provider';
|
||||||
|
import { ApprovalBlockLaunch } from './launch/VC.ApprovalBlockLaunch';
|
||||||
import { ApprovalBlockTodos } from './todos/VC.ApprovalBlockTodos';
|
import { ApprovalBlockTodos } from './todos/VC.ApprovalBlockTodos';
|
||||||
|
|
||||||
export class SCApprovalBlock extends Plugin {
|
export class SCApprovalBlock extends Plugin {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { FlowContext } from '@tachybase/plugin-workflow/client';
|
|
||||||
import React, { useContext } from 'react';
|
import React, { useContext } from 'react';
|
||||||
|
import { FlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
|
|
||||||
export function useFlowContext() {
|
export function useFlowContext() {
|
||||||
return useContext(FlowContext);
|
return useContext(FlowContext);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { SchemaComponentContext, useSchemaComponentContext } from '@tachybase/client';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { SchemaComponentContext, useSchemaComponentContext } from '@tachybase/client';
|
||||||
|
|
||||||
export function SchemaComponentContextProvider({ designable, children }) {
|
export function SchemaComponentContextProvider({ designable, children }) {
|
||||||
const schemaComponentContext = useSchemaComponentContext();
|
const schemaComponentContext = useSchemaComponentContext();
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { useContextApprovalExecution } from '../common/ApprovalExecution.provider';
|
|
||||||
import { useApproval } from '../../approval-common/ApprovalData.provider';
|
|
||||||
import { APPROVAL_STATUS } from '../../../constants';
|
import { APPROVAL_STATUS } from '../../../constants';
|
||||||
|
import { useApproval } from '../../approval-common/ApprovalData.provider';
|
||||||
|
import { useContextApprovalExecution } from '../common/ApprovalExecution.provider';
|
||||||
|
|
||||||
export function ActionBarProvider(props) {
|
export function ActionBarProvider(props) {
|
||||||
const { data } = useCurrentUserContext();
|
const { data } = useCurrentUserContext();
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import React, { useContext } from 'react';
|
import React, { createContext, useContext } from 'react';
|
||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
import { createContext } from 'react';
|
|
||||||
import { useApproval } from '../../approval-common/ApprovalData.provider';
|
|
||||||
import { APPROVAL_STATUS } from '../../../constants';
|
import { APPROVAL_STATUS } from '../../../constants';
|
||||||
|
import { useApproval } from '../../approval-common/ApprovalData.provider';
|
||||||
|
|
||||||
const ContextApprovalStatus = createContext(APPROVAL_STATUS.SUBMITTED);
|
const ContextApprovalStatus = createContext(APPROVAL_STATUS.SUBMITTED);
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
|
|
||||||
import { APPROVAL_STATUS } from '../../../constants';
|
import { APPROVAL_STATUS } from '../../../constants';
|
||||||
import { useApproval } from '../../approval-common/ApprovalData.provider';
|
import { useApproval } from '../../approval-common/ApprovalData.provider';
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, { useContext } from 'react';
|
||||||
import {
|
import {
|
||||||
RemoteSchemaComponent,
|
RemoteSchemaComponent,
|
||||||
SchemaComponent,
|
SchemaComponent,
|
||||||
@ -9,22 +9,23 @@ import {
|
|||||||
} from '@tachybase/client';
|
} from '@tachybase/client';
|
||||||
import { DetailsBlockProvider, FlowContext } from '@tachybase/plugin-workflow/client';
|
import { DetailsBlockProvider, FlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
import { useForm } from '@tachybase/schema';
|
import { useForm } from '@tachybase/schema';
|
||||||
|
|
||||||
import { Result, Spin } from 'antd';
|
import { Result, Spin } from 'antd';
|
||||||
import { useContext } from 'react';
|
|
||||||
import { NAMESPACE } from '../../../locale';
|
|
||||||
import { FormBlockProvider } from '../../../common/Pd.FormBlock';
|
import { FormBlockProvider } from '../../../common/Pd.FormBlock';
|
||||||
import { ContextApprovalExecution } from '../common/ApprovalExecution.provider';
|
import { NAMESPACE } from '../../../locale';
|
||||||
import { ApprovalContext } from '../../approval-common/ApprovalData.provider';
|
import { ApprovalContext } from '../../approval-common/ApprovalData.provider';
|
||||||
import { ContextWithActionEnabled } from '../../approval-common/WithActionEnabled.provider';
|
import { ContextWithActionEnabled } from '../../approval-common/WithActionEnabled.provider';
|
||||||
|
import { ContextApprovalExecution } from '../common/ApprovalExecution.provider';
|
||||||
|
import { FlowContextProvider } from '../common/FlowContext.provider';
|
||||||
|
import { SchemaComponentContextProvider } from '../common/SchemaComponent.provider';
|
||||||
|
import { useDestroyAction } from './hooks/useDestroyAction';
|
||||||
import { useFormBlockProps } from './hooks/useFormBlockProps';
|
import { useFormBlockProps } from './hooks/useFormBlockProps';
|
||||||
import { useSubmit } from './hooks/useSubmit';
|
import { useSubmit } from './hooks/useSubmit';
|
||||||
import { useWithdrawAction } from './hooks/useWithdrawAction';
|
import { useWithdrawAction } from './hooks/useWithdrawAction';
|
||||||
import { useDestroyAction } from './hooks/useDestroyAction';
|
|
||||||
import { ActionBarProvider } from './Pd.ActionBar';
|
import { ActionBarProvider } from './Pd.ActionBar';
|
||||||
import { WithdrawActionProvider } from './Pd.WithdrawAction';
|
|
||||||
import { SchemaComponentContextProvider } from '../common/SchemaComponent.provider';
|
|
||||||
import { ApplyActionStatusProvider } from './Pd.ApplyActionStatus';
|
import { ApplyActionStatusProvider } from './Pd.ApplyActionStatus';
|
||||||
import { FlowContextProvider } from '../common/FlowContext.provider';
|
import { WithdrawActionProvider } from './Pd.WithdrawAction';
|
||||||
|
|
||||||
export const ViewActionLaunchContent = () => {
|
export const ViewActionLaunchContent = () => {
|
||||||
const { id } = useRecord();
|
const { id } = useRecord();
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import { useAPIClient, useActionContext } from '@tachybase/client';
|
import { useActionContext, useAPIClient } from '@tachybase/client';
|
||||||
import { useField } from '@tachybase/schema';
|
import { useField } from '@tachybase/schema';
|
||||||
import { useApproval } from '../../../approval-common/ApprovalData.provider';
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
|
import { useApproval } from '../../../approval-common/ApprovalData.provider';
|
||||||
|
|
||||||
export function useDestroyAction() {
|
export function useDestroyAction() {
|
||||||
const field = useField();
|
const field = useField();
|
||||||
const { setVisible, setSubmitted } = useActionContext() as any;
|
const { setVisible, setSubmitted } = useActionContext() as any;
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
import { useCurrentUserContext } from '@tachybase/client';
|
import { useCurrentUserContext } from '@tachybase/client';
|
||||||
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
import { useForm } from '@tachybase/schema';
|
import { useForm } from '@tachybase/schema';
|
||||||
import { useEffect } from 'react';
|
|
||||||
import { useContextApprovalExecution } from '../../common/ApprovalExecution.provider';
|
|
||||||
import { useApproval } from '../../../approval-common/ApprovalData.provider';
|
|
||||||
import { ApprovalStatusEnumDict } from '../../../../constants';
|
import { ApprovalStatusEnumDict } from '../../../../constants';
|
||||||
|
import { useApproval } from '../../../approval-common/ApprovalData.provider';
|
||||||
|
import { useContextApprovalExecution } from '../../common/ApprovalExecution.provider';
|
||||||
|
|
||||||
export function useFormBlockProps() {
|
export function useFormBlockProps() {
|
||||||
const approval = useApproval() as any;
|
const approval = useApproval() as any;
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { useAPIClient, useActionContext } from '@tachybase/client';
|
import { useActionContext, useAPIClient } from '@tachybase/client';
|
||||||
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
import { useFlowContext } from '@tachybase/plugin-workflow/client';
|
||||||
import { useField, useForm } from '@tachybase/schema';
|
import { useField, useForm } from '@tachybase/schema';
|
||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
import { useApproval } from '../../../approval-common/ApprovalData.provider';
|
import { useApproval } from '../../../approval-common/ApprovalData.provider';
|
||||||
import { useContextApprovalStatus } from '../Pd.ApplyActionStatus';
|
import { useContextApprovalStatus } from '../Pd.ApplyActionStatus';
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { useAPIClient, useActionContext } from '@tachybase/client';
|
import { useActionContext, useAPIClient } from '@tachybase/client';
|
||||||
import { useField } from '@tachybase/schema';
|
import { useField } from '@tachybase/schema';
|
||||||
|
|
||||||
import { useApproval } from '../../../approval-common/ApprovalData.provider';
|
import { useApproval } from '../../../approval-common/ApprovalData.provider';
|
||||||
|
|
||||||
// 撤回
|
// 撤回
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { createContext, useContext } from 'react';
|
import { createContext, useContext } from 'react';
|
||||||
|
|
||||||
export interface Approval {
|
export interface Approval {
|
||||||
id: number;
|
id: number;
|
||||||
collectionName: string;
|
collectionName: string;
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import React, { useContext } from 'react';
|
||||||
import {
|
import {
|
||||||
RemoteSchemaComponent,
|
RemoteSchemaComponent,
|
||||||
SchemaComponent,
|
SchemaComponent,
|
||||||
@ -7,9 +8,10 @@ import {
|
|||||||
useRequest,
|
useRequest,
|
||||||
} from '@tachybase/client';
|
} from '@tachybase/client';
|
||||||
import { DetailsBlockProvider, ExecutionContextProvider } from '@tachybase/plugin-workflow/client';
|
import { DetailsBlockProvider, ExecutionContextProvider } from '@tachybase/plugin-workflow/client';
|
||||||
|
|
||||||
import { Result, Spin } from 'antd';
|
import { Result, Spin } from 'antd';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React, { useContext } from 'react';
|
|
||||||
import { FormBlockProvider } from '../../../common/Pd.FormBlock';
|
import { FormBlockProvider } from '../../../common/Pd.FormBlock';
|
||||||
import { NAMESPACE, useTranslation } from '../../../locale';
|
import { NAMESPACE, useTranslation } from '../../../locale';
|
||||||
import { ApprovalContext } from '../../approval-common/ApprovalData.provider';
|
import { ApprovalContext } from '../../approval-common/ApprovalData.provider';
|
||||||
@ -17,12 +19,12 @@ import { ContextWithActionEnabled } from '../../approval-common/WithActionEnable
|
|||||||
import { ContextApprovalExecution } from '../common/ApprovalExecution.provider';
|
import { ContextApprovalExecution } from '../common/ApprovalExecution.provider';
|
||||||
import { SchemaComponentContextProvider } from '../common/SchemaComponent.provider';
|
import { SchemaComponentContextProvider } from '../common/SchemaComponent.provider';
|
||||||
import { ApprovalFormBlockDecorator } from './Dt.ApprovalFormBlock';
|
import { ApprovalFormBlockDecorator } from './Dt.ApprovalFormBlock';
|
||||||
import { ActionBarProvider } from './Pd.ActionBarProvider';
|
|
||||||
import { ApprovalActionProvider } from './Pd.ApprovalAction';
|
|
||||||
import { ContextApprovalExecutions } from './Pd.ApprovalExecutions';
|
|
||||||
import { useApprovalDetailBlockProps } from './hooks/useApprovalDetailBlockProps';
|
import { useApprovalDetailBlockProps } from './hooks/useApprovalDetailBlockProps';
|
||||||
import { useApprovalFormBlockProps } from './hooks/useApprovalFormBlockProps';
|
import { useApprovalFormBlockProps } from './hooks/useApprovalFormBlockProps';
|
||||||
import { useSubmit } from './hooks/useSubmit';
|
import { useSubmit } from './hooks/useSubmit';
|
||||||
|
import { ActionBarProvider } from './Pd.ActionBarProvider';
|
||||||
|
import { ApprovalActionProvider } from './Pd.ApprovalAction';
|
||||||
|
import { ContextApprovalExecutions } from './Pd.ApprovalExecutions';
|
||||||
|
|
||||||
// 审批-待办-查看: 内容
|
// 审批-待办-查看: 内容
|
||||||
export const ViewActionTodosContent = () => {
|
export const ViewActionTodosContent = () => {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { useRecord } from '@tachybase/client';
|
|
||||||
import React, { createContext, useContext } from 'react';
|
import React, { createContext, useContext } from 'react';
|
||||||
|
import { useRecord } from '@tachybase/client';
|
||||||
|
|
||||||
import { Approval } from '../approval-block/todos/Pd.ApprovalExecutions';
|
import { Approval } from '../approval-block/todos/Pd.ApprovalExecutions';
|
||||||
|
|
||||||
export const ApprovalContext = createContext<Partial<Approval>>({});
|
export const ApprovalContext = createContext<Partial<Approval>>({});
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
|
import React, { useMemo } from 'react';
|
||||||
import { createStyles, useCurrentUserContext } from '@tachybase/client';
|
import { createStyles, useCurrentUserContext } from '@tachybase/client';
|
||||||
import { EXECUTION_STATUS } from '@tachybase/plugin-workflow/client';
|
import { EXECUTION_STATUS } from '@tachybase/plugin-workflow/client';
|
||||||
|
|
||||||
import { Space, Table } from 'antd';
|
import { Space, Table } from 'antd';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React, { useMemo } from 'react';
|
|
||||||
import { APPROVAL_ACTION_STATUS, APPROVAL_STATUS } from '../../constants';
|
import { APPROVAL_ACTION_STATUS, APPROVAL_STATUS } from '../../constants';
|
||||||
import { lang, usePluginTranslation } from '../../locale';
|
import { lang, usePluginTranslation } from '../../locale';
|
||||||
import { useApproval } from './ApprovalData.provider';
|
import { useApproval } from './ApprovalData.provider';
|
||||||
import { ContextWithActionEnabled } from './WithActionEnabled.provider';
|
|
||||||
import { getAntdTableColumns } from './process-columns/columns';
|
import { getAntdTableColumns } from './process-columns/columns';
|
||||||
|
import { ContextWithActionEnabled } from './WithActionEnabled.provider';
|
||||||
|
|
||||||
// 审批(发起/待办)区块-查看-审批处理
|
// 审批(发起/待办)区块-查看-审批处理
|
||||||
export const ApprovalProcess = (props) => {
|
export const ApprovalProcess = (props) => {
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { DatePicker, InputReadPretty, RecordProvider, useCurrentUserContext } from '@tachybase/client';
|
|
||||||
import React, { useContext } from 'react';
|
import React, { useContext } from 'react';
|
||||||
import { ContextWithActionEnabled } from '../WithActionEnabled.provider';
|
import { DatePicker, InputReadPretty, RecordProvider, useCurrentUserContext } from '@tachybase/client';
|
||||||
|
|
||||||
import { ViewActionLaunch } from '../../approval-block/launch/VC.ViewActionLaunch';
|
import { ViewActionLaunch } from '../../approval-block/launch/VC.ViewActionLaunch';
|
||||||
import { ViewActionTodos } from '../../approval-block/todos/VC.ViewActionTodos';
|
import { ViewActionTodos } from '../../approval-block/todos/VC.ViewActionTodos';
|
||||||
|
import { ContextWithActionEnabled } from '../WithActionEnabled.provider';
|
||||||
|
|
||||||
// Component开头的是,不知道起什么名字合适的
|
// Component开头的是,不知道起什么名字合适的
|
||||||
export function renderColumnDetail(e, props, exist) {
|
export function renderColumnDetail(e, props, exist) {
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
|
import React, { useMemo } from 'react';
|
||||||
import {
|
import {
|
||||||
CollectionProvider_deprecated,
|
CollectionProvider_deprecated,
|
||||||
ExtendCollectionsProvider,
|
ExtendCollectionsProvider,
|
||||||
List,
|
|
||||||
joinCollectionName,
|
joinCollectionName,
|
||||||
|
List,
|
||||||
useCollection_deprecated,
|
useCollection_deprecated,
|
||||||
useRecord,
|
useRecord,
|
||||||
} from '@tachybase/client';
|
} from '@tachybase/client';
|
||||||
import React, { useMemo } from 'react';
|
|
||||||
import { CollectionApprovals } from '../approval-common/Approvals.collection';
|
|
||||||
import { CollectionApprovalTodos } from '../../common/Cn.ApprovalTodos';
|
import { CollectionApprovalTodos } from '../../common/Cn.ApprovalTodos';
|
||||||
|
import { CollectionApprovals } from '../approval-common/Approvals.collection';
|
||||||
import { CollectionFlowNodes } from '../approval-common/FlowNodes.collection';
|
import { CollectionFlowNodes } from '../approval-common/FlowNodes.collection';
|
||||||
import { CollectionWorkflows } from '../approval-common/Workflows.collection';
|
import { CollectionWorkflows } from '../approval-common/Workflows.collection';
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { AuditOutlined } from '@ant-design/icons';
|
import React from 'react';
|
||||||
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '@tachybase/client';
|
||||||
import { uid } from '@tachybase/utils/client';
|
import { uid } from '@tachybase/utils/client';
|
||||||
import React from 'react';
|
|
||||||
|
import { AuditOutlined } from '@ant-design/icons';
|
||||||
|
|
||||||
// 初始化器,创建区块-相关审批
|
// 初始化器,创建区块-相关审批
|
||||||
export function RecordApprovalsInitializer() {
|
export function RecordApprovalsInitializer() {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { SchemaComponent } from '@tachybase/client';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { SchemaComponent } from '@tachybase/client';
|
||||||
|
|
||||||
import { ApprovalRecordStatusColumn } from '../approval-common/approval-columns/column.status';
|
import { ApprovalRecordStatusColumn } from '../approval-common/approval-columns/column.status';
|
||||||
import { UserColumn } from '../approval-common/approval-columns/column.user';
|
import { UserColumn } from '../approval-common/approval-columns/column.user';
|
||||||
import { WorkflowColumn } from '../approval-common/approval-columns/column.workflow';
|
import { WorkflowColumn } from '../approval-common/approval-columns/column.workflow';
|
||||||
|
@ -1,14 +1,19 @@
|
|||||||
import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
|
import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
|
||||||
import { Spin, Tag } from 'antd';
|
|
||||||
import { LoadingOutlined } from '@ant-design/icons';
|
import { LoadingOutlined } from '@ant-design/icons';
|
||||||
import { Document, Page, pdfjs } from 'react-pdf';
|
import { Spin, Tag } from 'antd';
|
||||||
import { saveAs } from 'file-saver';
|
import { saveAs } from 'file-saver';
|
||||||
|
import { Document, Page, pdfjs } from 'react-pdf';
|
||||||
|
|
||||||
import 'react-pdf/dist/Page/AnnotationLayer.css';
|
import 'react-pdf/dist/Page/AnnotationLayer.css';
|
||||||
import 'react-pdf/dist/Page/TextLayer.css';
|
import 'react-pdf/dist/Page/TextLayer.css';
|
||||||
import { uid } from '@tachybase/schema';
|
|
||||||
import { css, useRequest } from '@tachybase/client';
|
import { css, useRequest } from '@tachybase/client';
|
||||||
|
import { uid } from '@tachybase/schema';
|
||||||
|
|
||||||
|
import { TransformComponent, TransformWrapper } from 'react-zoom-pan-pinch';
|
||||||
|
|
||||||
import { useTranslation } from '../locale';
|
import { useTranslation } from '../locale';
|
||||||
import { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch';
|
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
cMapUrl: '/cmaps/',
|
cMapUrl: '/cmaps/',
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
// 1. 拆解 refined 文件, 根据归类原则
|
||||||
|
// 2. 反编译文件
|
||||||
|
// 3. 根据功能进行归类, 根据就近原则
|
||||||
|
|
||||||
|
## 1. 拆解 refined 文件, 根据归类原则
|
||||||
|
// 完成
|
||||||
|
## 2. 反编译文件
|
||||||
|
// 正在进行中
|
||||||
|
// 备份代码, 可查看标签 backup-dev-20240527-departments
|
||||||
|
## 3. 根据功能进行归类, 根据就近原则
|
@ -0,0 +1,91 @@
|
|||||||
|
// 数据表-部门
|
||||||
|
export const collectionDepartments = {
|
||||||
|
name: 'departments',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
interface: 'id',
|
||||||
|
type: 'bigInt',
|
||||||
|
name: 'id',
|
||||||
|
primaryKey: true,
|
||||||
|
autoIncrement: true,
|
||||||
|
uiSchema: {
|
||||||
|
type: 'id',
|
||||||
|
title: '{{t("ID")}}',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'input',
|
||||||
|
type: 'string',
|
||||||
|
name: 'title',
|
||||||
|
uiSchema: {
|
||||||
|
type: 'string',
|
||||||
|
title: '{{t("Department name")}}',
|
||||||
|
'x-component': 'Input',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'm2o',
|
||||||
|
type: 'belongsTo',
|
||||||
|
name: 'parent',
|
||||||
|
collectionName: 'departments',
|
||||||
|
foreignKey: 'parentId',
|
||||||
|
target: 'departments',
|
||||||
|
targetKey: 'id',
|
||||||
|
treeParent: true,
|
||||||
|
uiSchema: {
|
||||||
|
title: '{{t("Superior department")}}',
|
||||||
|
'x-component': 'DepartmentSelect',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'm2m',
|
||||||
|
type: 'belongsToMany',
|
||||||
|
name: 'roles',
|
||||||
|
target: 'roles',
|
||||||
|
collectionName: 'departments',
|
||||||
|
through: 'departmentsRoles',
|
||||||
|
foreignKey: 'departmentId',
|
||||||
|
otherKey: 'roleName',
|
||||||
|
targetKey: 'name',
|
||||||
|
sourceKey: 'id',
|
||||||
|
uiSchema: {
|
||||||
|
title: '{{t("Roles")}}',
|
||||||
|
'x-component': 'AssociationField',
|
||||||
|
'x-component-props': {
|
||||||
|
multiple: true,
|
||||||
|
fieldNames: {
|
||||||
|
label: 'title',
|
||||||
|
value: 'name',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'm2m',
|
||||||
|
type: 'belongsToMany',
|
||||||
|
name: 'owners',
|
||||||
|
collectionName: 'departments',
|
||||||
|
target: 'users',
|
||||||
|
through: 'departmentsUsers',
|
||||||
|
foreignKey: 'departmentId',
|
||||||
|
otherKey: 'userId',
|
||||||
|
targetKey: 'id',
|
||||||
|
sourceKey: 'id',
|
||||||
|
scope: {
|
||||||
|
isOwner: true,
|
||||||
|
},
|
||||||
|
uiSchema: {
|
||||||
|
title: '{{t("Owners")}}',
|
||||||
|
'x-component': 'AssociationField',
|
||||||
|
'x-component-props': {
|
||||||
|
multiple: true,
|
||||||
|
fieldNames: {
|
||||||
|
label: 'nickname',
|
||||||
|
value: 'id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
@ -0,0 +1,132 @@
|
|||||||
|
// 数据表-用户
|
||||||
|
export const collectionUsers = {
|
||||||
|
name: 'users',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
interface: 'id',
|
||||||
|
type: 'bigInt',
|
||||||
|
name: 'id',
|
||||||
|
primaryKey: true,
|
||||||
|
autoIncrement: true,
|
||||||
|
allowNull: false,
|
||||||
|
uiSchema: {
|
||||||
|
type: 'number',
|
||||||
|
title: '{{t("ID")}}',
|
||||||
|
'x-component': 'InputNumber',
|
||||||
|
'x-read-pretty': true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'input',
|
||||||
|
type: 'string',
|
||||||
|
name: 'nickname',
|
||||||
|
uiSchema: {
|
||||||
|
type: 'string',
|
||||||
|
title: '{{t("Nickname")}}',
|
||||||
|
'x-component': 'Input',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'input',
|
||||||
|
type: 'string',
|
||||||
|
name: 'username',
|
||||||
|
unique: true,
|
||||||
|
uiSchema: {
|
||||||
|
type: 'string',
|
||||||
|
title: '{{t("Username")}}',
|
||||||
|
'x-component': 'Input',
|
||||||
|
'x-validator': {
|
||||||
|
username: true,
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'email',
|
||||||
|
type: 'string',
|
||||||
|
name: 'email',
|
||||||
|
unique: true,
|
||||||
|
uiSchema: {
|
||||||
|
type: 'string',
|
||||||
|
title: '{{t("Email")}}',
|
||||||
|
'x-component': 'Input',
|
||||||
|
'x-validator': 'email',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'phone',
|
||||||
|
type: 'string',
|
||||||
|
name: 'phone',
|
||||||
|
unique: true,
|
||||||
|
uiSchema: {
|
||||||
|
type: 'string',
|
||||||
|
title: '{{t("Phone")}}',
|
||||||
|
'x-component': 'Input',
|
||||||
|
'x-validator': 'phone',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'm2m',
|
||||||
|
type: 'belongsToMany',
|
||||||
|
name: 'roles',
|
||||||
|
target: 'roles',
|
||||||
|
foreignKey: 'userId',
|
||||||
|
otherKey: 'roleName',
|
||||||
|
onDelete: 'CASCADE',
|
||||||
|
sourceKey: 'id',
|
||||||
|
targetKey: 'name',
|
||||||
|
through: 'rolesUsers',
|
||||||
|
uiSchema: {
|
||||||
|
type: 'array',
|
||||||
|
title: '{{t("Roles")}}',
|
||||||
|
'x-component': 'AssociationField',
|
||||||
|
'x-component-props': {
|
||||||
|
multiple: true,
|
||||||
|
fieldNames: {
|
||||||
|
label: 'title',
|
||||||
|
value: 'name',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'm2m',
|
||||||
|
type: 'belongsToMany',
|
||||||
|
name: 'departments',
|
||||||
|
target: 'departments',
|
||||||
|
foreignKey: 'userId',
|
||||||
|
otherKey: 'departmentId',
|
||||||
|
onDelete: 'CASCADE',
|
||||||
|
sourceKey: 'id',
|
||||||
|
targetKey: 'id',
|
||||||
|
through: 'departmentsUsers',
|
||||||
|
uiSchema: {
|
||||||
|
type: 'array',
|
||||||
|
title: '{{t("Departments")}}',
|
||||||
|
'x-component': 'DepartmentField',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
interface: 'm2m',
|
||||||
|
type: 'belongsToMany',
|
||||||
|
name: 'mainDepartment',
|
||||||
|
target: 'departments',
|
||||||
|
foreignKey: 'userId',
|
||||||
|
otherKey: 'departmentId',
|
||||||
|
onDelete: 'CASCADE',
|
||||||
|
sourceKey: 'id',
|
||||||
|
targetKey: 'id',
|
||||||
|
through: 'departmentsUsers',
|
||||||
|
throughScope: {
|
||||||
|
isMain: true,
|
||||||
|
},
|
||||||
|
uiSchema: {
|
||||||
|
type: 'array',
|
||||||
|
title: '{{t("Main department")}}',
|
||||||
|
'x-component': 'DepartmentField',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
@ -0,0 +1,59 @@
|
|||||||
|
import { SchemaComponent, useAPIClient, useResourceActionContext } from '@tachybase/client';
|
||||||
|
import { useContext, useRef } from 'react';
|
||||||
|
import { contextK } from '../context/contextK';
|
||||||
|
import { k } from '../others/k';
|
||||||
|
import { schemaAddMembers } from '../schema/addMembers.schema';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export const AddMembersNnt = () => {
|
||||||
|
const { department, useAddMembersAction, handleSelect } = useAction();
|
||||||
|
return (
|
||||||
|
<SchemaComponent
|
||||||
|
scope={{
|
||||||
|
useAddMembersAction,
|
||||||
|
department,
|
||||||
|
handleSelect,
|
||||||
|
}}
|
||||||
|
schema={schemaAddMembers}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
function useAction() {
|
||||||
|
const { department } = useContext(contextK);
|
||||||
|
const { refresh } = useResourceActionContext();
|
||||||
|
const ref = useRef([]);
|
||||||
|
const api = useAPIClient();
|
||||||
|
const useAddMembersAction = () => ({
|
||||||
|
run() {
|
||||||
|
return k(this, null, function* () {
|
||||||
|
const x = ref.current;
|
||||||
|
|
||||||
|
x != null &&
|
||||||
|
x.length &&
|
||||||
|
(yield api.resource('departments.members', department.id).add({ values: x }), (ref.current = []), refresh());
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const useAddMembersAction2 = () => ({
|
||||||
|
async run() {
|
||||||
|
const x = ref.current;
|
||||||
|
if (x?.length > 0) {
|
||||||
|
await api.resource('departments.members', department.id).add({ values: x });
|
||||||
|
ref.current = [];
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const handleSelect = (val) => {
|
||||||
|
ref.current = val;
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
department,
|
||||||
|
useAddMembersAction,
|
||||||
|
handleSelect,
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
import { CollectionProvider_deprecated, ResourceActionContext } from '@tachybase/client';
|
||||||
|
import React from 'react';
|
||||||
|
import { collectionDepartments } from '../collections/departments.collection';
|
||||||
|
import { useContextK } from '../context/contextK';
|
||||||
|
|
||||||
|
export const CeComponent = ({ children }) => {
|
||||||
|
const context = useContextK();
|
||||||
|
const { departmentsResource } = context;
|
||||||
|
const { service } = departmentsResource || {};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ResourceActionContext.Provider value={{ ...service }}>
|
||||||
|
<CollectionProvider_deprecated collection={collectionDepartments}>{children}</CollectionProvider_deprecated>
|
||||||
|
</ResourceActionContext.Provider>
|
||||||
|
);
|
||||||
|
};
|
@ -0,0 +1,21 @@
|
|||||||
|
import { CollectionProvider_deprecated, ResourceActionContext } from '@tachybase/client';
|
||||||
|
import React, { useContext } from 'react';
|
||||||
|
// import { jsx } from 'react/jsx-runtime';
|
||||||
|
import { collectionUsers } from '../collections/users.collection';
|
||||||
|
import { contextK } from '../context/contextK';
|
||||||
|
|
||||||
|
export const BeComponent = ({ children }) => {
|
||||||
|
const { usersResource } = useContext(contextK);
|
||||||
|
const { service } = usersResource || {};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ResourceActionContext.Provider value={{ ...service }}>
|
||||||
|
<CollectionProvider_deprecated collection={collectionUsers}>{children}</CollectionProvider_deprecated>
|
||||||
|
</ResourceActionContext.Provider>
|
||||||
|
);
|
||||||
|
|
||||||
|
// return jsx(ResourceActionContext.Provider, {
|
||||||
|
// value: { ...o },
|
||||||
|
// children: jsx(CollectionProvider_deprecated, { collection: collectionUsers, children: e.children }),
|
||||||
|
// });
|
||||||
|
};
|
@ -0,0 +1,124 @@
|
|||||||
|
import { UserOutlined } from '@ant-design/icons';
|
||||||
|
import { ActionContextProvider, RecordProvider, SchemaComponent, SchemaComponentOptions } from '@tachybase/client';
|
||||||
|
import { Button, Divider, Row, theme } from 'antd';
|
||||||
|
import React, { useContext, useState } from 'react';
|
||||||
|
import { useTranslation } from '../../../locale';
|
||||||
|
import { contextK } from '../context/contextK';
|
||||||
|
import { ContextNProvider } from '../context/contextN';
|
||||||
|
import { useCreateDepartment } from '../hooks/useCreateDepartment';
|
||||||
|
import { useHooksG } from '../hooks/useHooksG';
|
||||||
|
import { useUpdateDepartmentLe } from '../hooks/useUpdateDepartmentLe';
|
||||||
|
import { ComponentSe } from './ComponentSe';
|
||||||
|
import { ComponentX } from './ComponentX';
|
||||||
|
import { ComponentXxe } from './ComponentXxe';
|
||||||
|
import { DepartmentOwnersField } from './DepartmentOwnersField';
|
||||||
|
|
||||||
|
interface drawerState {
|
||||||
|
node?: object;
|
||||||
|
schema?: object;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ComponentEEE = () => {
|
||||||
|
const { t: tval } = useTranslation();
|
||||||
|
|
||||||
|
const [visible, setVisible] = useState(false);
|
||||||
|
const [drawer, setDrawer] = useState<drawerState>({});
|
||||||
|
|
||||||
|
const { department, setDepartment } = useContext(contextK);
|
||||||
|
const { token } = theme.useToken();
|
||||||
|
const m = useHooksG({
|
||||||
|
label: ({ node }) => <ComponentX.Item node={node} setVisible={setVisible} setDrawer={setDrawer} />,
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SchemaComponentOptions
|
||||||
|
scope={{
|
||||||
|
useCreateDepartment,
|
||||||
|
useUpdateDepartment: useUpdateDepartmentLe,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<ContextNProvider value={m}>
|
||||||
|
<Row>
|
||||||
|
<ComponentSe />
|
||||||
|
<Button
|
||||||
|
type="text"
|
||||||
|
icon={<UserOutlined />}
|
||||||
|
style={{
|
||||||
|
textAlign: 'left',
|
||||||
|
marginBottom: '5px',
|
||||||
|
background: department ? '' : token.colorBgTextHover,
|
||||||
|
}}
|
||||||
|
onClick={() => {
|
||||||
|
setDepartment(null);
|
||||||
|
}}
|
||||||
|
block={true}
|
||||||
|
>
|
||||||
|
{tval('All users')}
|
||||||
|
</Button>
|
||||||
|
<ComponentXxe />
|
||||||
|
</Row>
|
||||||
|
<Divider style={{ margin: '12px 0' }} />
|
||||||
|
<ComponentX />
|
||||||
|
<ActionContextProvider
|
||||||
|
value={{
|
||||||
|
visible: visible,
|
||||||
|
setVisible: setVisible,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<RecordProvider record={drawer.node || {}}>
|
||||||
|
<SchemaComponent
|
||||||
|
scope={{
|
||||||
|
t: tval,
|
||||||
|
}}
|
||||||
|
components={{
|
||||||
|
DepartmentOwnersField,
|
||||||
|
}}
|
||||||
|
schema={drawer.schema || {}}
|
||||||
|
/>
|
||||||
|
</RecordProvider>
|
||||||
|
</ActionContextProvider>
|
||||||
|
</ContextNProvider>
|
||||||
|
</SchemaComponentOptions>
|
||||||
|
);
|
||||||
|
|
||||||
|
// return jsx(SchemaComponentOptions, {
|
||||||
|
// scope: {
|
||||||
|
// useCreateDepartment: useCreateDepartment,
|
||||||
|
// useUpdateDepartment: useUpdateDepartmentLe,
|
||||||
|
// },
|
||||||
|
// children: jsxs(contextN.Provider, {
|
||||||
|
// value: m,
|
||||||
|
// children: [
|
||||||
|
// jsxs(Row, {
|
||||||
|
// children: [
|
||||||
|
// jsx(ComponentSe, {}),
|
||||||
|
// jsx(Button, {
|
||||||
|
// type: 'text',
|
||||||
|
// icon: jsx(UserOutlined, {}),
|
||||||
|
// style: { textAlign: 'left', marginBottom: '5px', background: c ? '' : x.colorBgTextHover },
|
||||||
|
// onClick: () => {
|
||||||
|
// i(null);
|
||||||
|
// },
|
||||||
|
// block: true,
|
||||||
|
// children: e('All users'),
|
||||||
|
// }),
|
||||||
|
// jsx(ComponentXxe, {}),
|
||||||
|
// ],
|
||||||
|
// }),
|
||||||
|
// jsx(Divider, { style: { margin: '12px 0' } }),
|
||||||
|
// jsx(ComponentX, {}),
|
||||||
|
// jsx(ActionContextProvider, {
|
||||||
|
// value: { visible: t, setVisible: o },
|
||||||
|
// children: jsx(RecordProvider, {
|
||||||
|
// record: a.node || {},
|
||||||
|
// children: jsx(SchemaComponent, {
|
||||||
|
// scope: { t: e },
|
||||||
|
// components: { DepartmentOwnersField: DepartmentOwnersField },
|
||||||
|
// schema: a.schema || {},
|
||||||
|
// }),
|
||||||
|
// }),
|
||||||
|
// }),
|
||||||
|
// ],
|
||||||
|
// }),
|
||||||
|
// });
|
||||||
|
};
|
@ -0,0 +1,95 @@
|
|||||||
|
import { SchemaComponent, useResourceActionContext } from '@tachybase/client';
|
||||||
|
import { useContext, useEffect, useMemo, Fragment } from 'react';
|
||||||
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
||||||
|
import { useTranslation } from '../../../locale';
|
||||||
|
import { contextK } from '../context/contextK';
|
||||||
|
import { useFilterActionPropsZ } from '../scopes/useFilterActionPropsZ';
|
||||||
|
import { DepartmentFieldYe } from './DepartmentFieldYe';
|
||||||
|
import { IsOwnerFieldQe } from './IsOwnerFieldQe';
|
||||||
|
import { UserDepartmentsFieldOot } from './UserDepartmentsFieldOot';
|
||||||
|
import { AddMembersNnt } from './AddMembersNnt';
|
||||||
|
import { useShowTotal } from '../hooks/useShowTotal';
|
||||||
|
import { useMembersDataSource } from '../hooks/useMembersDataSource';
|
||||||
|
import { useBulkRemoveMembersAction } from '../hooks/useBulkRemoveMembersAction';
|
||||||
|
import { useRemoveMemberAction } from '../hooks/useRemoveMemberAction';
|
||||||
|
import { getSchemaHe } from '../schema/getSchemaHe';
|
||||||
|
import { schemaZe } from '../schema/schemaZe';
|
||||||
|
import { schemaWe } from '../schema/schemaWe';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export const ComponentIit = () => {
|
||||||
|
const { t: tval } = useTranslation();
|
||||||
|
const { department, user } = useContext(contextK);
|
||||||
|
const { data, setState } = useResourceActionContext();
|
||||||
|
|
||||||
|
const MemberActions = () => (department ? <SchemaComponent schema={schemaZe} /> : null);
|
||||||
|
const RowRemoveAction = () =>
|
||||||
|
department ? (
|
||||||
|
<SchemaComponent
|
||||||
|
scope={{
|
||||||
|
useRemoveMemberAction: useRemoveMemberAction,
|
||||||
|
}}
|
||||||
|
schema={schemaWe}
|
||||||
|
/>
|
||||||
|
) : null;
|
||||||
|
|
||||||
|
const schema = useMemo(() => getSchemaHe(department, user), [department, user]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setState?.({
|
||||||
|
selectedRowKeys: [],
|
||||||
|
});
|
||||||
|
}, [data, setState]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<h2>{user ? tval('Search results') : tval(department?.title ?? 'All users')}</h2>
|
||||||
|
<SchemaComponent
|
||||||
|
scope={{
|
||||||
|
useBulkRemoveMembersAction: useBulkRemoveMembersAction,
|
||||||
|
useMembersDataSource: useMembersDataSource,
|
||||||
|
t: tval,
|
||||||
|
useShowTotal: useShowTotal,
|
||||||
|
useFilterActionProps: useFilterActionPropsZ,
|
||||||
|
}}
|
||||||
|
components={{
|
||||||
|
MemberActions: MemberActions,
|
||||||
|
AddMembers: AddMembersNnt,
|
||||||
|
RowRemoveAction: RowRemoveAction,
|
||||||
|
DepartmentField: DepartmentFieldYe,
|
||||||
|
IsOwnerField: IsOwnerFieldQe,
|
||||||
|
UserDepartmentsField: UserDepartmentsFieldOot,
|
||||||
|
}}
|
||||||
|
schema={schema}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
// return jsxs(Fragment, {
|
||||||
|
// children: [
|
||||||
|
// o
|
||||||
|
// ? jsx('h2', { children: e('Search results') })
|
||||||
|
// : jsx('h2', {
|
||||||
|
// children: e((t == null ? void 0 : t.title) || 'All users'),
|
||||||
|
// }),
|
||||||
|
// jsx(SchemaComponent, {
|
||||||
|
// scope: {
|
||||||
|
// useBulkRemoveMembersAction: useBulkRemoveMembersAction,
|
||||||
|
// useMembersDataSource: useMembersDataSource,
|
||||||
|
// t: e,
|
||||||
|
// useShowTotal: useShowTotal,
|
||||||
|
// useFilterActionProps: useFilterActionPropsZ,
|
||||||
|
// },
|
||||||
|
// components: {
|
||||||
|
// MemberActions: c,
|
||||||
|
// AddMembers: AddMembersNnt,
|
||||||
|
// RowRemoveAction: i,
|
||||||
|
// DepartmentField: DepartmentFieldYe,
|
||||||
|
// IsOwnerField: IsOwnerFieldQe,
|
||||||
|
// UserDepartmentsField: UserDepartmentsFieldOot,
|
||||||
|
// },
|
||||||
|
// schema: x,
|
||||||
|
// }),
|
||||||
|
// ],
|
||||||
|
// });
|
||||||
|
};
|
@ -0,0 +1,112 @@
|
|||||||
|
import { useField } from '@tachybase/schema';
|
||||||
|
import { TreeSelect } from 'antd';
|
||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
// import { jsx } from 'react/jsx-runtime';
|
||||||
|
import { k } from '../others/k';
|
||||||
|
import { getDepartmentStr } from '../utils/getDepartmentStr';
|
||||||
|
|
||||||
|
interface tempField {
|
||||||
|
value?: any;
|
||||||
|
setValue: Function;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IState {
|
||||||
|
label?: object;
|
||||||
|
value?: object;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 编辑部门-上级部门选择器
|
||||||
|
export const ComponentLle = (props) => {
|
||||||
|
const field = useField<tempField>();
|
||||||
|
const [value, setValue] = useState<IState>({ label: null, value: null });
|
||||||
|
const {
|
||||||
|
treeData: treeData,
|
||||||
|
initData: initData,
|
||||||
|
getByKeyword: getByKeyword,
|
||||||
|
loadData: loadData,
|
||||||
|
loadedKeys: loadedKeys,
|
||||||
|
setLoadedKeys: setLoadedKeys,
|
||||||
|
originData: originData,
|
||||||
|
} = props;
|
||||||
|
const onSearch = (h) =>
|
||||||
|
k(this, null, function* () {
|
||||||
|
if (!h) {
|
||||||
|
initData(originData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
yield getByKeyword(h);
|
||||||
|
});
|
||||||
|
// const b = useCallback((h) => {
|
||||||
|
// const F = h.title,
|
||||||
|
// C = h.parent;
|
||||||
|
// return C ? b(C) + ' / ' + F : F;
|
||||||
|
// }, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
initData(originData);
|
||||||
|
}, [originData, initData]);
|
||||||
|
useEffect(() => {
|
||||||
|
if (!field.value) {
|
||||||
|
setValue({ label: null, value: null });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setValue({
|
||||||
|
label: getDepartmentStr(field.value) || field.value.label,
|
||||||
|
value: field.value.id,
|
||||||
|
});
|
||||||
|
}, [field.value, getDepartmentStr]);
|
||||||
|
|
||||||
|
// return null;
|
||||||
|
return (
|
||||||
|
<TreeSelect
|
||||||
|
value={value}
|
||||||
|
onSelect={(h, currValue) => {
|
||||||
|
field.setValue(currValue);
|
||||||
|
}}
|
||||||
|
onChange={(h) => {
|
||||||
|
h || field.setValue(null);
|
||||||
|
}}
|
||||||
|
treeData={treeData}
|
||||||
|
treeLoadedKeys={loadedKeys}
|
||||||
|
onTreeLoad={(keys) => setLoadedKeys(keys)}
|
||||||
|
loadData={(value) => loadData({ key: value.id, children: value.children })}
|
||||||
|
fieldNames={{ value: 'id' }}
|
||||||
|
showSearch={true}
|
||||||
|
allowClear={true}
|
||||||
|
treeNodeFilterProp={'title'}
|
||||||
|
onSearch={onSearch}
|
||||||
|
labelInValue={true}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
// return (
|
||||||
|
// useEffect(() => {
|
||||||
|
// c(d);
|
||||||
|
// }, [d, c]),
|
||||||
|
// useEffect(() => {
|
||||||
|
// if (!t.value) {
|
||||||
|
// a({ label: null, value: null });
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// a({ label: b(t.value) || t.value.label, value: t.value.id });
|
||||||
|
// }, [t.value, b]),
|
||||||
|
// jsx(TreeSelect, {
|
||||||
|
// value: o,
|
||||||
|
// onSelect: (h, F) => {
|
||||||
|
// t.setValue(F);
|
||||||
|
// },
|
||||||
|
// onChange: (h) => {
|
||||||
|
// h || t.setValue(null);
|
||||||
|
// },
|
||||||
|
// treeData: r,
|
||||||
|
// treeLoadedKeys: m,
|
||||||
|
// onTreeLoad: (h) => g(h),
|
||||||
|
// loadData: (h) => x({ key: h.id, children: h.children }),
|
||||||
|
// fieldNames: { value: 'id' },
|
||||||
|
// showSearch: true,
|
||||||
|
// allowClear: true,
|
||||||
|
// treeNodeFilterProp: 'title',
|
||||||
|
// onSearch: A,
|
||||||
|
// labelInValue: true,
|
||||||
|
// })
|
||||||
|
// );
|
||||||
|
};
|
@ -0,0 +1,148 @@
|
|||||||
|
import { createStyles, useAPIClient, useRequest } from '@tachybase/client';
|
||||||
|
import { Button, Dropdown, Empty, Input, theme } from 'antd';
|
||||||
|
import { useContext, useState } from 'react';
|
||||||
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
||||||
|
import { useTranslation } from '../../../locale';
|
||||||
|
import { contextK } from '../context/contextK';
|
||||||
|
|
||||||
|
const createStyleAe = createStyles(({ css }) => ({
|
||||||
|
searchDropdown: css`
|
||||||
|
.ant-dropdown-menu {
|
||||||
|
max-height: 500px;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
}));
|
||||||
|
|
||||||
|
export const ComponentSe = () => {
|
||||||
|
const { t: e } = useTranslation();
|
||||||
|
const { token: t } = theme.useToken();
|
||||||
|
const { setDepartment: setDepartment, setUser: setUser } = useContext(contextK);
|
||||||
|
const [r, c] = useState(false);
|
||||||
|
const [i, x] = useState('');
|
||||||
|
const [m, g] = useState([]);
|
||||||
|
const [d, A] = useState([]);
|
||||||
|
const [b, h] = useState(true);
|
||||||
|
const [F, C] = useState(true);
|
||||||
|
const { styles } = createStyleAe();
|
||||||
|
const l = 10;
|
||||||
|
const api = useAPIClient();
|
||||||
|
const data = useRequest(
|
||||||
|
(M) =>
|
||||||
|
api
|
||||||
|
.resource('departments')
|
||||||
|
.aggregateSearch(M)
|
||||||
|
.then((P) => {
|
||||||
|
var q;
|
||||||
|
return (q = P == null ? void 0 : P.data) == null ? void 0 : q.data;
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
manual: true,
|
||||||
|
onSuccess: (M, P) => {
|
||||||
|
const {
|
||||||
|
values: { type: q },
|
||||||
|
} = P[0] || {};
|
||||||
|
M &&
|
||||||
|
((!q || q === 'user') && M.users.length < l && h(false),
|
||||||
|
(!q || q === 'department') && M.departments.length < l && C(false),
|
||||||
|
g((se) => [...se, ...M.users]),
|
||||||
|
A((se) => [...se, ...M.departments]));
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
const { run: S } = data;
|
||||||
|
const O = (M) => {
|
||||||
|
x(M), g([]), A([]), h(true), C(true), M && (S({ values: { keyword: M, limit: l } }), c(true));
|
||||||
|
};
|
||||||
|
const $ = (M) => {
|
||||||
|
M.target.value || (setUser(null), x(''), c(false), data.mutate({}), g([]), A([]));
|
||||||
|
};
|
||||||
|
const W = (M) => {
|
||||||
|
const P = M.title,
|
||||||
|
q = M.parent;
|
||||||
|
return q ? W(q) + ' / ' + P : P;
|
||||||
|
};
|
||||||
|
const H = (M) =>
|
||||||
|
jsx(Button, {
|
||||||
|
type: 'link',
|
||||||
|
style: { padding: '0 8px' },
|
||||||
|
onClick: (P) => {
|
||||||
|
c(true), S({ values: { keyword: i, limit: l, ...M } });
|
||||||
|
},
|
||||||
|
children: e('Load more'),
|
||||||
|
});
|
||||||
|
const J = () => {
|
||||||
|
const M = [];
|
||||||
|
return !m.length && !d.length
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
key: '0',
|
||||||
|
label: jsx(Empty, {
|
||||||
|
description: e('No results'),
|
||||||
|
image: Empty.PRESENTED_IMAGE_SIMPLE,
|
||||||
|
}),
|
||||||
|
disabled: true,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: (m.length &&
|
||||||
|
(M.push({
|
||||||
|
key: '0',
|
||||||
|
type: 'group',
|
||||||
|
label: e('Users'),
|
||||||
|
children: m.map((P) => ({
|
||||||
|
key: P.username,
|
||||||
|
label: jsxs('div', {
|
||||||
|
onClick: () => setUser(P),
|
||||||
|
children: [
|
||||||
|
jsx('div', { children: P.nickname || P.username }),
|
||||||
|
jsx('div', {
|
||||||
|
style: { fontSize: t.fontSizeSM, color: t.colorTextDescription },
|
||||||
|
children: `${P.username}${P.phone ? ' | ' + P.phone : ''}${P.email ? ' | ' + P.email : ''}`,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
})),
|
||||||
|
}),
|
||||||
|
b &&
|
||||||
|
M.push({
|
||||||
|
type: 'group',
|
||||||
|
key: '0-loadMore',
|
||||||
|
label: jsx(H, { type: 'user', last: m[m.length - 1].id }),
|
||||||
|
})),
|
||||||
|
d.length &&
|
||||||
|
(M.push({
|
||||||
|
key: '1',
|
||||||
|
type: 'group',
|
||||||
|
label: e('Departments'),
|
||||||
|
children: d.map((P) => ({
|
||||||
|
key: P.id,
|
||||||
|
label: jsx('div', { onClick: () => setDepartment(P), children: W(P) }),
|
||||||
|
})),
|
||||||
|
}),
|
||||||
|
F &&
|
||||||
|
M.push({
|
||||||
|
type: 'group',
|
||||||
|
key: '1-loadMore',
|
||||||
|
label: jsx(H, { type: 'department', last: d[d.length - 1].id }),
|
||||||
|
})),
|
||||||
|
M);
|
||||||
|
};
|
||||||
|
return jsx(Dropdown, {
|
||||||
|
menu: { items: J() },
|
||||||
|
overlayClassName: styles.searchDropdown,
|
||||||
|
trigger: ['click'],
|
||||||
|
open: r,
|
||||||
|
onOpenChange: (M) => c(M),
|
||||||
|
children: jsx(Input.Search, {
|
||||||
|
allowClear: true,
|
||||||
|
onClick: () => {
|
||||||
|
i || c(false);
|
||||||
|
},
|
||||||
|
onFocus: () => setDepartment(null),
|
||||||
|
onSearch: O,
|
||||||
|
onChange: $,
|
||||||
|
placeholder: e('Search for departments, users'),
|
||||||
|
style: { marginBottom: '20px' },
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
};
|
@ -0,0 +1,161 @@
|
|||||||
|
import { MoreOutlined } from '@ant-design/icons';
|
||||||
|
import { css, useAPIClient, useResourceActionContext } from '@tachybase/client';
|
||||||
|
import { App, Dropdown, Empty, Tree } from 'antd';
|
||||||
|
import { useContext, useEffect } from 'react';
|
||||||
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
||||||
|
import { useTranslation } from '../../../locale';
|
||||||
|
import { contextK } from '../context/contextK';
|
||||||
|
import { k } from '../others/k';
|
||||||
|
import { schemaHhe } from '../schema/schemaHhe';
|
||||||
|
import { schemaYye } from '../schema/schemaYye';
|
||||||
|
import { contextN } from '../context/contextN';
|
||||||
|
|
||||||
|
export const ComponentX = () => {
|
||||||
|
const { data: e, loading: t } = useResourceActionContext();
|
||||||
|
const { department, setDepartment, setUser } = useContext(contextK);
|
||||||
|
const { treeData, nodeMap, loadData, loadedKeys, setLoadedKeys, initData, expandedKeys, setExpandedKeys } =
|
||||||
|
useContext(contextN);
|
||||||
|
|
||||||
|
const h = (v) => {
|
||||||
|
if (!v.length) return;
|
||||||
|
const l = nodeMap[v[0]];
|
||||||
|
setDepartment(l);
|
||||||
|
setUser(null);
|
||||||
|
};
|
||||||
|
const F = (v) => {
|
||||||
|
setExpandedKeys(v);
|
||||||
|
};
|
||||||
|
const C = (v) => {
|
||||||
|
setLoadedKeys(v);
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
initData(e == null ? void 0 : e.data);
|
||||||
|
}, [e, initData, t]);
|
||||||
|
useEffect(() => {
|
||||||
|
if (!department) return;
|
||||||
|
const v = (u) => (u.parent ? [u.parent.id, ...v(u.parent)] : []),
|
||||||
|
l = v(department);
|
||||||
|
setExpandedKeys((u) => Array.from(new Set([...u, ...l])));
|
||||||
|
}, [department, setExpandedKeys]);
|
||||||
|
|
||||||
|
return jsx('div', {
|
||||||
|
className: css`
|
||||||
|
height: 57vh;
|
||||||
|
overflow: auto;
|
||||||
|
.ant-tree-node-content-wrapper {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
children:
|
||||||
|
treeData != null && treeData.length
|
||||||
|
? jsx(Tree.DirectoryTree, {
|
||||||
|
loadData: loadData,
|
||||||
|
treeData: treeData,
|
||||||
|
loadedKeys: loadedKeys,
|
||||||
|
onSelect: h,
|
||||||
|
selectedKeys: [department == null ? void 0 : department.id],
|
||||||
|
onExpand: F,
|
||||||
|
onLoad: C,
|
||||||
|
expandedKeys: expandedKeys,
|
||||||
|
expandAction: false,
|
||||||
|
showIcon: false,
|
||||||
|
fieldNames: { key: 'id' },
|
||||||
|
})
|
||||||
|
: jsx(Empty, { image: Empty.PRESENTED_IMAGE_SIMPLE }),
|
||||||
|
});
|
||||||
|
// return (
|
||||||
|
// useEffect(() => {
|
||||||
|
// initData(e == null ? void 0 : e.data);
|
||||||
|
// }, [e, initData, t]),
|
||||||
|
// useEffect(() => {
|
||||||
|
// if (!department) return;
|
||||||
|
// const v = (u) => (u.parent ? [u.parent.id, ...v(u.parent)] : []),
|
||||||
|
// l = v(department);
|
||||||
|
// setExpandedKeys((u) => Array.from(new Set([...u, ...l])));
|
||||||
|
// }, [department, setExpandedKeys]),
|
||||||
|
// jsx('div', {
|
||||||
|
// className: css`
|
||||||
|
// height: 57vh;
|
||||||
|
// overflow: auto;
|
||||||
|
// .ant-tree-node-content-wrapper {
|
||||||
|
// overflow: hidden;
|
||||||
|
// }
|
||||||
|
// `,
|
||||||
|
// children:
|
||||||
|
// treeData != null && treeData.length
|
||||||
|
// ? jsx(Tree.DirectoryTree, {
|
||||||
|
// loadData: loadData,
|
||||||
|
// treeData: treeData,
|
||||||
|
// loadedKeys: loadedKeys,
|
||||||
|
// onSelect: h,
|
||||||
|
// selectedKeys: [department == null ? void 0 : department.id],
|
||||||
|
// onExpand: F,
|
||||||
|
// onLoad: C,
|
||||||
|
// expandedKeys: expandedKeys,
|
||||||
|
// expandAction: false,
|
||||||
|
// showIcon: false,
|
||||||
|
// fieldNames: { key: 'id' },
|
||||||
|
// })
|
||||||
|
// : jsx(Empty, { image: Empty.PRESENTED_IMAGE_SIMPLE }),
|
||||||
|
// })
|
||||||
|
// );
|
||||||
|
};
|
||||||
|
ComponentX.Item = function ({ node: t, setVisible: o, setDrawer: a }) {
|
||||||
|
const { t: r } = useTranslation(),
|
||||||
|
{ refreshAsync: c } = useResourceActionContext(),
|
||||||
|
{ setLoadedKeys: i, expandedKeys: x, setExpandedKeys: m } = useContext(contextN),
|
||||||
|
{ modal: g, message: d } = App.useApp(),
|
||||||
|
A = useAPIClient(),
|
||||||
|
b = () => {
|
||||||
|
g.confirm({
|
||||||
|
title: r('Delete'),
|
||||||
|
content: r('Are you sure you want to delete it?'),
|
||||||
|
onOk: () =>
|
||||||
|
k(this, null, function* () {
|
||||||
|
yield A.resource('departments').destroy({ filterByTk: t.id }),
|
||||||
|
d.success(r('Deleted successfully')),
|
||||||
|
m((v) => v.filter((l) => l !== t.id));
|
||||||
|
const C = [...x];
|
||||||
|
i([]), m([]), yield c(), m(C);
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
h = (C) => {
|
||||||
|
a({ schema: C, node: t }), o(true);
|
||||||
|
},
|
||||||
|
F = ({ key: C, domEvent: v }) => {
|
||||||
|
switch ((v.stopPropagation(), C)) {
|
||||||
|
case 'new-sub':
|
||||||
|
h(schemaYye);
|
||||||
|
break;
|
||||||
|
case 'edit':
|
||||||
|
h(schemaHhe);
|
||||||
|
break;
|
||||||
|
case 'delete':
|
||||||
|
b();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return jsxs('div', {
|
||||||
|
style: { display: 'flex', justifyContent: 'space-between', overflow: 'hidden' },
|
||||||
|
children: [
|
||||||
|
jsx('div', {
|
||||||
|
style: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' },
|
||||||
|
children: t.title,
|
||||||
|
}),
|
||||||
|
jsx(Dropdown, {
|
||||||
|
menu: {
|
||||||
|
items: [
|
||||||
|
{ label: r('New sub department'), key: 'new-sub' },
|
||||||
|
{ label: r('Edit department'), key: 'edit' },
|
||||||
|
{ label: r('Delete department'), key: 'delete' },
|
||||||
|
],
|
||||||
|
onClick: F,
|
||||||
|
},
|
||||||
|
children: jsx('div', {
|
||||||
|
style: { marginLeft: '15px' },
|
||||||
|
children: jsx(MoreOutlined, {}),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
};
|
@ -0,0 +1,59 @@
|
|||||||
|
import { SchemaComponent } from '@tachybase/client';
|
||||||
|
import { jsx } from 'react/jsx-runtime';
|
||||||
|
import { useTranslation } from '../../../locale';
|
||||||
|
|
||||||
|
export const ComponentXxe = () => {
|
||||||
|
const { t: e } = useTranslation();
|
||||||
|
return jsx(SchemaComponent, {
|
||||||
|
scope: { t: e },
|
||||||
|
schema: {
|
||||||
|
type: 'void',
|
||||||
|
properties: {
|
||||||
|
newDepartment: {
|
||||||
|
type: 'void',
|
||||||
|
title: e('New department'),
|
||||||
|
'x-component': 'Action',
|
||||||
|
'x-component-props': { type: 'text', icon: 'PlusOutlined', style: { width: '100%', textAlign: 'left' } },
|
||||||
|
properties: {
|
||||||
|
drawer: {
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Action.Drawer',
|
||||||
|
'x-decorator': 'Form',
|
||||||
|
title: e('New department'),
|
||||||
|
properties: {
|
||||||
|
title: { 'x-component': 'CollectionField', 'x-decorator': 'FormItem', required: true },
|
||||||
|
parent: {
|
||||||
|
'x-component': 'CollectionField',
|
||||||
|
'x-decorator': 'FormItem',
|
||||||
|
'x-collection-field': 'departments.parent',
|
||||||
|
'x-component-props': { component: 'DepartmentSelect' },
|
||||||
|
},
|
||||||
|
roles: {
|
||||||
|
'x-component': 'CollectionField',
|
||||||
|
'x-decorator': 'FormItem',
|
||||||
|
'x-collection-field': 'departments.roles',
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Action.Drawer.Footer',
|
||||||
|
properties: {
|
||||||
|
cancel: {
|
||||||
|
title: '{{t("Cancel")}}',
|
||||||
|
'x-component': 'Action',
|
||||||
|
'x-component-props': { useAction: '{{ cm.useCancelAction }}' },
|
||||||
|
},
|
||||||
|
submit: {
|
||||||
|
title: '{{t("Submit")}}',
|
||||||
|
'x-component': 'Action',
|
||||||
|
'x-component-props': { type: 'primary', useAction: '{{ useCreateDepartment }}' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
@ -0,0 +1,3 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export const ContextR = React.createContext({});
|
@ -0,0 +1,72 @@
|
|||||||
|
import { EllipsisWithTooltip } from '@tachybase/client';
|
||||||
|
import { useField } from '@tachybase/schema';
|
||||||
|
import React, { useContext } from 'react';
|
||||||
|
// import { jsx, jsxs } from 'react/jsx-runtime';
|
||||||
|
import { contextK } from '../context/contextK';
|
||||||
|
import { getDepartmentStr } from '../utils/getDepartmentStr';
|
||||||
|
|
||||||
|
export const DepartmentFieldYe = () => {
|
||||||
|
const { setDepartment } = useContext(contextK);
|
||||||
|
const field = useField<{ value: Array<any> }>();
|
||||||
|
const fieldValues = field.value || [];
|
||||||
|
|
||||||
|
const department = fieldValues.reduce((acc, curr) => {
|
||||||
|
acc[curr.id] = curr;
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<EllipsisWithTooltip ellipsis={true}>
|
||||||
|
{fieldValues.map((currFieldValue, index) => (
|
||||||
|
<span key={index}>
|
||||||
|
<a
|
||||||
|
onClick={(event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
setDepartment(department[currFieldValue.id]);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{getDepartmentStr(currFieldValue)}
|
||||||
|
</a>
|
||||||
|
{index !== fieldValues.length - 1 ? <span style={{ marginRight: 4, color: '#aaa' }}>,</span> : ''}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</EllipsisWithTooltip>
|
||||||
|
);
|
||||||
|
|
||||||
|
// const children2 = fieldValues.map((currFieldValue, index) => {
|
||||||
|
// return (
|
||||||
|
// <span key={index}>
|
||||||
|
// <a
|
||||||
|
// onClick={(x) => {
|
||||||
|
// x.preventDefault(), setDepartment(department[currFieldValue.id]);
|
||||||
|
// }}
|
||||||
|
// >
|
||||||
|
// {getDepartmentStr(currFieldValue)}
|
||||||
|
// </a>
|
||||||
|
// {index !== fieldValues.length - 1 ? <span style={{ marginRight: 4, color: '#aaa' }}>,</span> : ''}
|
||||||
|
// </span>
|
||||||
|
// );
|
||||||
|
// });
|
||||||
|
|
||||||
|
// const children = fieldValues.map((currFieldValue, index) =>
|
||||||
|
// jsxs(
|
||||||
|
// 'span',
|
||||||
|
// {
|
||||||
|
// children: [
|
||||||
|
// jsx('a', {
|
||||||
|
// onClick: (x) => {
|
||||||
|
// x.preventDefault(), setDepartment(department[currFieldValue.id]);
|
||||||
|
// },
|
||||||
|
// children: getDepartmentStr(currFieldValue),
|
||||||
|
// }),
|
||||||
|
// index !== fieldValues.length - 1
|
||||||
|
// ? jsx('span', { style: { marginRight: 4, color: '#aaa' }, children: ',' })
|
||||||
|
// : '',
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
// index,
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
|
||||||
|
// return jsx(EllipsisWithTooltip, { ellipsis: true, children: children });
|
||||||
|
};
|
@ -0,0 +1,59 @@
|
|||||||
|
import { SchemaComponentOptions } from '@tachybase/client';
|
||||||
|
import { Col, Row } from 'antd';
|
||||||
|
// import { jsx, jsxs } from 'react/jsx-runtime';
|
||||||
|
import React from 'react';
|
||||||
|
import { useFilterActionPropsZ } from '../scopes/useFilterActionPropsZ';
|
||||||
|
import { CeComponent } from './CeComponent';
|
||||||
|
import { BeComponent } from './ComponentBe';
|
||||||
|
import { ComponentEEE } from './ComponentEEE';
|
||||||
|
import { ComponentIit } from './ComponentIit';
|
||||||
|
import { DepartmentSelect } from './DepartmentSelect';
|
||||||
|
import { SuperiorDepartmentSelect } from './SuperiorDepartmentSelect';
|
||||||
|
|
||||||
|
export const DepartmentManagement = () => {
|
||||||
|
return (
|
||||||
|
<SchemaComponentOptions
|
||||||
|
components={{ SuperiorDepartmentSelect, DepartmentSelect }}
|
||||||
|
scope={{ useFilterActionProps: useFilterActionPropsZ }}
|
||||||
|
>
|
||||||
|
<Row gutter={48} style={{ flexWrap: 'nowrap' }}>
|
||||||
|
<Col span={6} style={{ borderRight: '1px solid #eee', minWidth: '300px' }}>
|
||||||
|
<CeComponent>
|
||||||
|
<ComponentEEE />
|
||||||
|
</CeComponent>
|
||||||
|
</Col>
|
||||||
|
<Col flex="auto" style={{ overflow: 'hidden' }}>
|
||||||
|
<BeComponent>
|
||||||
|
<ComponentIit />
|
||||||
|
</BeComponent>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</SchemaComponentOptions>
|
||||||
|
);
|
||||||
|
// return jsx(SchemaComponentOptions, {
|
||||||
|
// components: {
|
||||||
|
// SuperiorDepartmentSelect: SuperiorDepartmentSelect,
|
||||||
|
// DepartmentSelect: DepartmentSelect,
|
||||||
|
// },
|
||||||
|
// scope: {
|
||||||
|
// useFilterActionProps: useFilterActionPropsZ,
|
||||||
|
// },
|
||||||
|
|
||||||
|
// children: jsxs(Row, {
|
||||||
|
// gutter: 48,
|
||||||
|
// style: { flexWrap: 'nowrap' },
|
||||||
|
// children: [
|
||||||
|
// jsx(Col, {
|
||||||
|
// span: 6,
|
||||||
|
// style: { borderRight: '1px solid #eee', minWidth: '300px' },
|
||||||
|
// children: jsx(CeComponent, { children: jsx(ComponentEEE, {}) }),
|
||||||
|
// }),
|
||||||
|
// jsx(Col, {
|
||||||
|
// flex: 'auto',
|
||||||
|
// style: { overflow: 'hidden' },
|
||||||
|
// children: jsx(BeComponent, { children: jsx(ComponentIit, {}) }),
|
||||||
|
// }),
|
||||||
|
// ],
|
||||||
|
// }),
|
||||||
|
// });
|
||||||
|
};
|
@ -0,0 +1,71 @@
|
|||||||
|
import {
|
||||||
|
ResourceActionProvider,
|
||||||
|
SchemaComponent,
|
||||||
|
ActionContextProvider,
|
||||||
|
useActionContext,
|
||||||
|
useRecord,
|
||||||
|
} from '@tachybase/client';
|
||||||
|
import { useField } from '@tachybase/schema';
|
||||||
|
import { Select } from 'antd';
|
||||||
|
import { useEffect, useRef, useState } from 'react';
|
||||||
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
||||||
|
import { schemaFfe } from '../schema/schemaFfe';
|
||||||
|
|
||||||
|
export const DepartmentOwnersField = () => {
|
||||||
|
const [e, t] = useState(false),
|
||||||
|
o = useRecord(),
|
||||||
|
a = useField(),
|
||||||
|
[r, c] = useState([]),
|
||||||
|
i = useRef([]),
|
||||||
|
x = (d, A) => {
|
||||||
|
i.current = A;
|
||||||
|
},
|
||||||
|
m = () => {
|
||||||
|
const { setVisible: d } = useActionContext();
|
||||||
|
return {
|
||||||
|
run() {
|
||||||
|
const A = a.value || [];
|
||||||
|
a.setValue([...A, ...i.current]), (i.current = []), d(false);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
a.value && c(a.value.map((d) => ({ value: d.id, label: d.nickname || d.username })));
|
||||||
|
}, [a.value]);
|
||||||
|
const g = (d) => {
|
||||||
|
var A;
|
||||||
|
return jsx(ResourceActionProvider, {
|
||||||
|
collection: 'users',
|
||||||
|
request: {
|
||||||
|
resource: `departments/${o.id}/members`,
|
||||||
|
action: 'list',
|
||||||
|
params: { filter: (A = a.value) != null && A.length ? { id: { $notIn: a.value.map((b) => b.id) } } : {} },
|
||||||
|
},
|
||||||
|
children: d.children,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return jsxs(ActionContextProvider, {
|
||||||
|
value: { visible: e, setVisible: t },
|
||||||
|
children: [
|
||||||
|
jsx(Select, {
|
||||||
|
open: false,
|
||||||
|
onChange: (d) => {
|
||||||
|
if (!d) {
|
||||||
|
a.setValue([]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
a.setValue(d.map(({ label: A, value: b }) => ({ id: b, nickname: A })));
|
||||||
|
},
|
||||||
|
mode: 'multiple',
|
||||||
|
value: r,
|
||||||
|
labelInValue: true,
|
||||||
|
onDropdownVisibleChange: (d) => t(d),
|
||||||
|
}),
|
||||||
|
jsx(SchemaComponent, {
|
||||||
|
schema: schemaFfe,
|
||||||
|
components: { RequestProvider: g },
|
||||||
|
scope: { department: o, handleSelect: x, useSelectOwners: m },
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
};
|
@ -0,0 +1,16 @@
|
|||||||
|
import { useContext } from 'react';
|
||||||
|
import { jsx } from 'react/jsx-runtime';
|
||||||
|
import { T } from '../others/T';
|
||||||
|
import { y } from '../others/y';
|
||||||
|
import { contextK } from '../context/contextK';
|
||||||
|
import { ComponentLle } from './ComponentLle';
|
||||||
|
import { useHooksG } from '../hooks/useHooksG';
|
||||||
|
|
||||||
|
export const DepartmentSelect = () => {
|
||||||
|
const e = useHooksG(),
|
||||||
|
{ departmentsResource: t } = useContext(contextK),
|
||||||
|
{
|
||||||
|
service: { data: o },
|
||||||
|
} = t || {};
|
||||||
|
return jsx(ComponentLle, T(y({}, e), { originData: o == null ? void 0 : o.data }));
|
||||||
|
};
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user