Настройка таблицы результатов поиска¶
Результаты поиска записей отображаются в виде таблицы. Можно изменить внешний вид ячеек таблицы: добавить фон, изменить цвет текста и т.д..
Кастомизация ячейки таблицы¶
Точка расширения UERenderCell предназначена для отрисовки кастомизации в ячейке результатов поиска.
Описание UERenderCell:
interface IProps {
searchStore: AbstractSearchStore<AbstractSearchPanelStore, AbstractSearchColumnsStore>;
cellRenderProps: CellRendererProps<SearchHit, ISearchColumn | undefined>;
}
type RenderCellResolver = (params: {
searchStore: AbstractSearchStore<AbstractSearchPanelStore, AbstractSearchColumnsStore>;
cellRenderProps: CellRendererProps<SearchHit, ISearchColumn | undefined>;
}) => boolean;
export type UERenderCell = UeModuleBase<RenderCellResolver, {}> & {
component: ComponentType<IProps>;
}
Пример реализации: перекраска текста ячейки таблицы в красный цвет.
let React = window.UnidataReact.React;
export interface ISearchColumn extends IAbstractModel {
displayName: StringField;
description: StringField;
helperText: StringField;
displayable: BooleanField;
searchable: BooleanField;
order: IntegerField;
searchMorphologically: BooleanField;
children: ModelCollection<ISearchColumn>;
width: IntegerField;
typeValue: StringField<null>;
}
interface IProps {
record: SearchHit;
namespaceId: NamespaceId;
entityName: string;
column: ISearchColumn;
}
class CellView extends React.Component<IProps> {
render() {
const field = this.props.record.preview.find((item) => item.field === this.props.column.name.getValue());
if (field === undefined) {
return null;
}
const values = field.values.getValue();
return (
<div style={{color: 'red'}}>
{values.join(', ')}
</div>
);
}
}
export default {
type: 'RENDER_CELL', // Пользовательский тип расширения. Требуется указать это значение, чтобы переопределить внешний вид ячейки
moduleId: 'search-table-transform-value-lookup', // string - уникальный идентификатор модуля, можно ввести другое имя
active: true, // flag - Модуль активен? В большинстве случаев остается значение true
system: false, // flag - Модуль является системным? Остается false
resolver: () => { // Расширить отображение?
return true;
},
component: CellView // Компонент расширения
}
Кастомизация ячейки таблицы (только в DG)¶
Точка расширения DgRenderCell предназначена для отрисовки кастомизации в ячейке результатов поиска в Юниверс DG.
Описание UERenderCell:
export interface IProps {
record: SearchHit;
namespaceId: UniverseNamespace.NamespaceId;
entityName: string;
column: ISearchColumn;
searchStore: AssetSearchStore;
linkDescriptor: LocationDescriptorObject;
}
type Resolver = (params: IProps) => boolean
export type UERenderCell = UeModuleBase<Resolver, {}> & {
component: ComponentType<IProps>;
}
Пример реализации отрисовки ячейки со значением поля "$custom_field":
export const testColumnCellRenderUe: UniverseUE.IUeMeta['DgRenderCell'] = {
moduleId: 'testColumnCell',
active: true,
system: false,
meta: {},
resolver: (params: IProps) => {
return params.column.name.isEqual("$custom_field");
},
component: CustomCellComponent
};
Добавление поискового критерия (асинхронного)¶
Точка расширения UEPromiseCriterion предназначена для добавления критерия на страницу поиска, для формирования которого нужна предварительно асинхронная операция.
Описание UEPromiseCriterion:
type PromiseCriterionProps = {
metaRecord: IMetaModel;
searchPanelStore: AbstractSearchPanelStore;
searchTerms: any[]; // Список уже выбранных поисковых терминов
}
type DropDownTreeNode<T> = {
key: string;
displayName: string;
children: Array<DropDownTreeNode<T>>;
} & ({
view: 'subtree' | 'plain';
} | {
view: 'simple';
value: T;
onSelect: (value: T) => void;
isDisabled?: () => boolean;
})
export type UEPromiseCriterion = UeModuleBase & {
default: {
fn: (props: PromiseCriterionProps) => Promise<Array<DropDownTreeNode<AbstractSearchTerm>>>;
meta: {};
};
}
Добавление поискового критерия¶
Точка расширения UERenderCriterion предназначена для добавления критерия на страницу поиска.
Описание UERenderCriterion:
type RenderCriterionProps = {
metaRecord: IMetaModel;
searchPanelStore: AbstractSearchPanelStore;
searchTerms: any[]; // Список уже выбранных поисковых терминов
}
type DropDownTreeNode<T> = {
key: string;
displayName: string;
children: Array<DropDownTreeNode<T>>;
} & ({
view: 'subtree' | 'plain';
} | {
view: 'simple';
value: T;
onSelect: (value: T) => void;
isDisabled?: () => boolean;
})
export type UERenderCriterion = UeModuleBase & {
default: {
fn: (props: RenderCriterionProps) => Array<DropDownTreeNode<AbstractSearchTerm>>;
meta: {};
};
}
Добавление колонки результатов поиска¶
Точка расширения SearchColumnDG предназначена для отрисовки кастомной колонки результатов поиска в DG.
Описание UESearchColumnDG:
type Resolver = (store: AbstractSearchStore<any, any>) => boolean;
export type UESearchColumnDG = UeModuleBase<Resolver, {}> & {
fn: (store: AbstractSearchStore<any, any>, metaSearchStore: AssetTypeMetaSearchStore) => SearchColumn[];
}
Пример реализации колонки со значением поля "$custom_field":
import {SearchColumn} from '@universe-platform/search';
import {SIMPLE_DATA_TYPE} from '@universe-platform/meta';
export const customSearchColumnUe: UniverseUE.IUeMeta['SearchColumnDG'] = {
moduleId: 'customSearchColumn',
active: true,
system: false,
meta: {},
resolver: (store) => store instanceof AssetSearchStore,
fn: (store, metaSearchStore) => {
return [
new SearchColumn({ // SearchColumn используеться для полей одиночным значением
name: "$custom_field", // Название поля
displayName: i18n.t('dgModule.column>customName'), // Отображаемое имя
typeValue: SIMPLE_DATA_TYPE.NUMBER, // Enum "SIMPLE_DATA_TYPE" иммеет значение "STRING", "INTEGER", "NUMBER", "BOOLEAN", "DATE", "TIMESTAMP", "TIME"
searchable: false,
displayable: true // Сразу отображать колонку
})
];
}
};
Пример "fn" реализации со множественным значением поля:
import {ArraySearchColumn} from '@universe-platform/record';
export const customArraySearchColumnUe: UniverseUE.IUeMeta['SearchColumnDG'] = {
moduleId: 'customArraySearchColumn',
active: true,
system: false,
meta: {},
resolver: (store) => store instanceof AssetSearchStore,
fn: (store, metaSearchStore) => {
return [
new ArraySearchColumn({ // ArraySearchColumn используеться для полей со множественным значением
name: "$array_custom_field",
displayName: i18n.t('dgModule.column>secondCustomName'),
searchable: true,
displayable: true
})
];
}
};
Отображение поискового критерия в строке поиска¶
Точка расширения UERenderSearchTerm предназначена для отрисовки поискового терма в строке поиска.
Описание UERenderSearchTerm:
type RenderSearchTermProps = {
searchTerm: AbstractSearchTerm;
searchTermList: AbstractSearchTerm[];
onAddTerm?: () => void;
onDelete: () => void;
}
export type UERenderSearchTerm = UeModuleBase & {
default: {
component: ComponentType<RenderSearchTermProps>;
meta: {};
};
}
Регистрация класса для формирования части поискового запроса (отдельный поинт в рендеринге)¶
Точка расширения UERegisterSearchQuery предназначена для регистрации работы с кастомными поисковыми запросами в рамках общего поиска.
Описание UERegisterSearchQuery:
type SearchStore = AbstractSearchStore<
AbstractSearchPanelStore,
AbstractSearchColumnsStore
>;
export type UERegisterSearchQuery = UeModuleBase & {
default: {
fn: (searchStore: SearchStore) => void;
resolver: (searchStore: SearchStore) => boolean;
};
}
Пример: поиск по правилам качества или классификаторам регистрируют дополнительные поля в общем поисковом запросе (SearchQuery
- обработчик для них).
Пример UERegisterSearchQuery в классификации:
function registerSearchQuery (searchStore: DataSearchStore) {
searchStore.searchPanel.unregisterQuery(SearchPayloadKeys.EE_DATACLASSIFIER);
searchStore.searchPanel.registerQuery(SearchPayloadKeys.EE_DATACLASSIFIER, new ClassifierSearchQuery());
}
export const registerSearchQueryUe: UERegisterSearchQuery = {
'default': {
type: UEList.RegisterSearchQuery,
moduleId: 'registerSearchQueryClassifier',
active: true,
system: false,
fn: registerSearchQuery,
resolver: () => {
return true;
},
meta: {}
}
};
Факторы моделей поисковых критериев¶
Точка расширения UESearchTermFactory предназначена для создания кастомных моделей SearchTerm
по json-данным из термов (при перезагрузке страницы поиска или при получении данных из сохраненных запросов).
Описание UESearchTermFactory:
export type UESearchTermFactory<T extends JsonData, ST extends AbstractSearchTerm> = UeModuleBase & {
default: {
resolver: (constructorName: string) => boolean;
fn: (term: T) => ST;
};
}
Расширенный поиск атрибута "Ссылка на справочник"¶
Точка расширения LookupExtendedSearchEnabled используется для активации и деактивации расширенного поиска по атрибутам типа "Ссылка на справочник".
User exit влияет на отображение расширенного поиска в карточке записи (кнопка "Расширенный поиск" при выборе значения атрибута) и в окне поиска записей типа актива.
Для того чтобы активировать расширенный поиск, необходимо добавить этот модуль в проект. Если модуль уже добавлен, а от расширенного поиска необходимо отказаться, то модуль нужно отключить.
По аналогии был создан User exit HierarchyLookupExtendedSearchEnabled для иерархических атрибутов типа "Ссылка на справочник".
Описание LookupExtendedSearchEnabled:
import {DefaultUeResolver, UeModuleBase} from '@universe-platform/user-exit';
export type UEHierarchyLookupExtendedSearchEnabled = UeModuleBase<DefaultUeResolver, {}>
Добавление вариантов создания объектов на странице поиска¶
Точка расширения CreateAssetMenuItem позволяет добавить новые варианты создания объектов на странице поиска записей.
Описание CreateAssetMenuItem:
type CreateAssetMenuItemProps = {
metaStore: AssetTypeMetaStore;
searchStore: AssetSearchStore;
}
type Resolver = (metaStore: AssetTypeMetaStore, searchStore: AssetSearchStore) => boolean;
type Meta = {
order: number;
};
export type CreateAssetMenuItem = UeModuleBase<Resolver, Meta> & {
component: ComponentType<CreateAssetMenuItemProps>;
};
metaStore
- store, содержащий информацию о текущем типе актива.searchStore
- store, содержащий информацию о странице поиска.
Пример: добавление дополнительной опции.
export class Comp extends React.Component<any, any>{
override render () {
return <div>'CREATE OTHER'</div>;
}
}
export const сreateAssetMenuItemUE: UniverseUE.IUeMeta['CreateAssetMenuItem'] = {
moduleId: 'сreateAssetMenuItem',
active: true,
system: false,
component: Comp,
resolver: (metaStore: AssetTypeMetaStore, searchStore: AssetSearchStore) => {
console.log('resolve panel!');
return true;
},
meta: {}
};
Рисунок 1 - Пример отображения вариантов создания объектов
Настройка кнопки "Импорт данных"¶
Точка расширения UEImportWizardButton для кастомной кнопки "Импорт данных" на странице "Поиск по активам".
С помощью этой точки расширения можно создавать кастомные кнопку импорта и диалоговое окно импорта. В случае добавления UE стандартная кнопка и модальное окно отображаться не будут.
Описание UEImportWizardButton:
import {ComponentType} from 'react';
import {UeModuleBase} from '@universe-platform/user-exit';
import {AssetTypeMetaStore} from '@unidata-dg/meta';
export type IProps = {
isDisabled: boolean;
metaStore: AssetTypeMetaStore;
}
type Resolver = (metaStore: AssetTypeMetaStore) => boolean;
export type UEImportWizardButton = UeModuleBase<Resolver, {}> & {
component: ComponentType<IProps>;
}