Бизнес-процессы

Добавление кнопки в заголовке карточки процесса

Точка расширения ProcessWorkflowCardAction используется для дополнительного контрола в заголовке модального окна карточки процесса.

Описание ProcessWorkflowCardAction:

type IProps = {
    processStore: ProcessCardStore;
    searchStore: ProcessSearchStore;
}

type Resolver = (processStore: ProcessCardStore) => boolean;

type Meta = {
    order: number;
};

export type UEProcessWorkflowCardAction = UeModuleBase<Resolver, Meta> & {
    component: ComponentType<IProps>;
};

Пример: кнопка удаления процесса:

type IProps  = {
    processStore: ProcessCardStore;
    searchStore: ProcessSearchStore;
}

@observer
export class RemoveButton extends React.Component<IProps, {}> {

    onDeleteProcess = () => {};

    override render () {
        return (
            <ButtonWithConfirmation
                leftIcon={'trash2'}
                title={'Удалить процесс?'}
                isMinimal={true}
                tooltipPlacement={PLACEMENT.LEFT}
                intent={INTENT.DANGER}
                onConfirm={this.onDeleteProcess}
                confirmationMessage={'Вы уверены?'}/>
        );
    }

}

export const removeProcessActionUe: UniverseUE.IUeMeta['ProcessWorkflowCardAction'] = {
    moduleId: 'ProcessWorkflowCardAction',
    active: true,
    system: false,
    meta: {
        order: 1
    },
    resolver: (store: ProcessCardStore) => {
        return true;
    },
    component: RemoveButton
};

ueModuleManager.addModule('ProcessWorkflowCardAction', removeProcessActionUe);

Добавление кнопки в таблице процессов

Точка расширения ProcessWorkflowRowAction используется для дополнительного контрола в таблице процессов (отображается при наведении на строку).

Описание ProcessWorkflowRowAction:

type IProps = {
    rowActionProps: RowActionsProps<SearchHit>;
    processStore: ProcessSearchStore;
}

type Resolver = (props: RowActionsProps<SearchHit>) => boolean;

type Meta = {
    order: number;
};

export type UEProcessWorkflowRowAction = UeModuleBase<Resolver, Meta> & {
    component: ComponentType<IProps>;
};

Пример: кнопка удаления процесса:

type IProps  = {
    rowActionProps: RowActionsProps<SearchHit>;
    processStore: ProcessSearchStore;
}

@observer
export class RemoveButton extends React.Component<IProps, {}> {

    onDeleteProcess = () => {};

    override render () {
        return (
            <ButtonWithConfirmation
                leftIcon={'trash2'}
                title={'Удалить процесс?'}
                isMinimal={true}
                tooltipPlacement={PLACEMENT.LEFT}
                intent={INTENT.DANGER}
                onConfirm={this.onDeleteProcess}
                confirmationMessage={'Вы уверены?'}/>
        );
    }

}

export const removeProcessActionUe: UniverseUE.IUeMeta['ProcessWorkflowRowAction'] = {
    moduleId: 'ProcessWorkflowRowAction',
    active: true,
    system: false,
    meta: {
        order: 1
    },
    resolver: (hit: RowActionsProps<SearchHit>) => {
        return true;
    },
    component: RemoveButton
};

ueModuleManager.addModule('ProcessWorkflowRowAction', removeProcessActionUe);

Добавление пунктов меню в "Создать задачу"

Точка расширения UETaskMenuItem предназначена для добавления пунктов меню у кнопки Создать задачу на странице задач.

Описание UETaskMenuItem:

type TaskMenuItemProps = {
    taskStore: TaskSearchStore<ITreeNodeModel<any>>;
}

type Resolver = (taskStore: TaskSearchStore<ITreeNodeModel<any>>) => boolean;

type Meta = {
    order: number;
};

export type UETaskMenuItem = UeModuleBase<Resolver, Meta> & {
    component: ComponentType<TaskMenuItemProps>;
};

Пример: пункт меню с названием SomeDropDownItemName, при нажатии на который появляется модальное окно.

@observer
class SomeComponent extends React.Component<IProps> {
    @observable
    isModalOpen = false;

    @action
    toggleModal = () => {
        this.isModalOpen = !this.isModalOpen;
    };

    override render () {
        const taskStore = this.props.taskStore;

        return (
            <>
                <DropDown.Item
                    onClick={this.toggleModal}
                >
                    {'SomeDropDownItemName'}
                </DropDown.Item>
                <Modal
                    isOpen={this.isModalOpen}
                    onClose={this.toggleModal}
                >
                    <>
                        {'someModalContent'}
                    </>
                </Modal>
            </>
        );
    }
}

export const someNewTaskMenuItemUE: UniverseUE.IUeMeta['TaskMenuItem'] =
    {
        moduleId: 'exampleUeModule1',
        active: true,
        system: false,
        meta: {
        order: 2
        },
        component: SomeComponent,
        resolver: (taskStore: TaskSearchStore<ITreeNodeModel<any>>) => {
            return true;
        }
    };

ueModuleManager.addModule('TaskMenuItem', someNewTaskMenuItemUE);