@evergis/react 4.0.142 → 4.0.144
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Dashboard/containers/StructuredDataContainer/types.d.ts +12 -1
- package/dist/components/Dashboard/elements/ElementTable/components/AttachmentsCell.d.ts +9 -0
- package/dist/components/Dashboard/elements/ElementTable/components/TableHeadRow.d.ts +9 -0
- package/dist/components/Dashboard/elements/ElementTable/constants.d.ts +2 -0
- package/dist/components/Dashboard/elements/ElementTable/hooks/useAttachmentsCell.d.ts +26 -0
- package/dist/components/Dashboard/elements/ElementTable/hooks/useColumnResize.d.ts +20 -0
- package/dist/components/Dashboard/elements/ElementTable/hooks/useTableView.d.ts +7 -0
- package/dist/components/Dashboard/elements/ElementTable/styled.d.ts +38 -3
- package/dist/components/Dashboard/elements/ElementTable/types.d.ts +14 -0
- package/dist/components/Dashboard/elements/ElementTable/utils/columnStyle.d.ts +11 -0
- package/dist/components/Dashboard/hooks/useDataSources.d.ts +0 -5
- package/dist/components/Dashboard/types.d.ts +34 -0
- package/dist/index.js +254 -52
- package/dist/index.js.map +1 -1
- package/dist/react.esm.js +254 -52
- package/dist/react.esm.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
import { AttributeType, StringSubType } from '@evergis/api';
|
|
2
3
|
import { FeatureAttributeValue } from '../../../../types';
|
|
3
4
|
import { ConfigAttributeDescription } from '../../types';
|
|
4
5
|
/** Состояние строки черновика относительно последнего сохранения. */
|
|
@@ -22,10 +23,20 @@ export interface DraftRow {
|
|
|
22
23
|
export interface StructuredDataAttribute {
|
|
23
24
|
attributeName: string;
|
|
24
25
|
type: AttributeType;
|
|
26
|
+
/** Уточнение строкового типа из конфига: у источника такого поля нет. */
|
|
27
|
+
subType?: StringSubType;
|
|
25
28
|
alias: string;
|
|
26
29
|
description?: string;
|
|
27
30
|
isEditable: boolean;
|
|
28
31
|
stringFormat?: ConfigAttributeDescription["stringFormat"];
|
|
32
|
+
/** Ширина колонки в пикселах из конфига. Ниже её колонку не ужимает и раскладка таблицы. */
|
|
33
|
+
width?: number;
|
|
34
|
+
/** Ширину колонки разрешено тянуть мышью. */
|
|
35
|
+
resizable?: boolean;
|
|
36
|
+
/** Значение переносится по словам, а не режется многоточием. */
|
|
37
|
+
multiline?: boolean;
|
|
38
|
+
/** Стиль значений колонки из конфига. */
|
|
39
|
+
style?: CSSProperties;
|
|
29
40
|
}
|
|
30
41
|
/**
|
|
31
42
|
* Значение {@link StructuredDataContext} — всё, что нужно представлению (`ElementTable`)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { TableCellProps } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Колонка со вложениями: список файлов прямо в ячейке.
|
|
5
|
+
*
|
|
6
|
+
* Тип у атрибута строковый, вложениями его делает `subType: "Attachments"` в схеме контейнера —
|
|
7
|
+
* поэтому ветка стоит раньше разбора типа и обычных редакторов ячейки.
|
|
8
|
+
*/
|
|
9
|
+
export declare const AttachmentsCell: FC<TableCellProps>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { TableHeadRowProps } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Шапка таблицы: заголовки колонок, сортировка кликом и захват границы для ручной ширины.
|
|
5
|
+
*
|
|
6
|
+
* Захват рисуется по разрешению атрибута (`resizable`) и не смотрит на режим правки контейнера:
|
|
7
|
+
* ширина колонки — это вид, а не данные.
|
|
8
|
+
*/
|
|
9
|
+
export declare const TableHeadRow: FC<TableHeadRowProps>;
|
|
@@ -16,3 +16,5 @@ export declare const TIME_FORMAT: RegExp;
|
|
|
16
16
|
* закрытие редактора по клику снаружи обязано этот контейнер пропускать.
|
|
17
17
|
*/
|
|
18
18
|
export declare const PORTAL_ROOT_SELECTOR = "#portal-root";
|
|
19
|
+
/** Ниже этой ширины колонку не ужать мышью: уже неё в ячейке не остаётся места под значение. */
|
|
20
|
+
export declare const MIN_COLUMN_WIDTH = 48;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { IPreviewImage } from '@evergis/uilib-gl';
|
|
2
|
+
import { Attachment } from '../../../containers/AttachmentContainer/types';
|
|
3
|
+
import { TableCellProps } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Ячейка с вложениями: разбор значения, просмотр, скачивание и правка списка.
|
|
6
|
+
*
|
|
7
|
+
* Значение атрибута — строка: файлы приезжают в ней списком JSON, поэтому и обратно в черновик
|
|
8
|
+
* кладём строку, а не массив — иначе тип ячейки менялся бы от самой правки.
|
|
9
|
+
*
|
|
10
|
+
* Добавление здесь только по ссылке. Загрузка с диска требует ресурса-родителя и файлового
|
|
11
|
+
* api контейнера вложений, а у колонки таблицы ни того, ни другого нет.
|
|
12
|
+
*/
|
|
13
|
+
export declare const useAttachmentsCell: ({ attribute, row, canEdit, onChange }: TableCellProps) => {
|
|
14
|
+
items: Attachment[];
|
|
15
|
+
editable: boolean;
|
|
16
|
+
previewIndex: number;
|
|
17
|
+
previewImages: IPreviewImage[];
|
|
18
|
+
isLinkDialogOpen: boolean;
|
|
19
|
+
onPreview: (link: string) => void;
|
|
20
|
+
onClosePreview: () => void;
|
|
21
|
+
onDownload: (_image: IPreviewImage, index: number) => void;
|
|
22
|
+
onDelete: (link: string) => void;
|
|
23
|
+
onOpenLinkDialog: () => void;
|
|
24
|
+
onCloseLinkDialog: () => void;
|
|
25
|
+
onAddByLink: (url: string) => void;
|
|
26
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PointerEvent } from 'react';
|
|
2
|
+
import { StructuredDataAttribute } from '../../../containers/StructuredDataContainer/types';
|
|
3
|
+
/**
|
|
4
|
+
* Ручное изменение ширины колонок.
|
|
5
|
+
*
|
|
6
|
+
* Растянутые ширины живут только здесь: тянут их в рантайме, а `width` атрибута в конфиге задаёт
|
|
7
|
+
* лишь стартовое значение — записывать растянутое обратно в конфиг незачем.
|
|
8
|
+
*
|
|
9
|
+
* Разрешение (`resizable`) от `options.editMode` не зависит: ширина колонки — это вид таблицы,
|
|
10
|
+
* а не правка данных, и тянуть её должно быть можно и на таблице только для чтения.
|
|
11
|
+
*
|
|
12
|
+
* Стартовую ширину берём с самой ячейки, а не из конфига: у колонки без `width` её выбрала
|
|
13
|
+
* раскладка таблицы, и тянуть надо ровно от того, что видно.
|
|
14
|
+
*/
|
|
15
|
+
export declare const useColumnResize: (columns: StructuredDataAttribute[]) => {
|
|
16
|
+
columnWidths: Record<string, number>;
|
|
17
|
+
onResizeStart: (attributeName: string, event: PointerEvent<HTMLElement>) => void;
|
|
18
|
+
onResizeMove: (event: PointerEvent<HTMLElement>) => void;
|
|
19
|
+
onResizeEnd: (event: PointerEvent<HTMLElement>) => void;
|
|
20
|
+
};
|
|
@@ -12,6 +12,9 @@ import { TableSort } from '../types';
|
|
|
12
12
|
*
|
|
13
13
|
* `width`/`height` — размер собственного бокса таблицы: он ограничивает её саму и прокручивает
|
|
14
14
|
* то, что не влезло. Место, отведённое контейнеру, задаётся его же опциями и живёт отдельно.
|
|
15
|
+
*
|
|
16
|
+
* Ширины колонок — тоже вид: конфиг задаёт стартовую, растянутая мышью живёт в
|
|
17
|
+
* {@link useColumnResize} и в конфиг не возвращается.
|
|
15
18
|
*/
|
|
16
19
|
export declare const useTableView: (elementConfig?: ElementTableConfig) => {
|
|
17
20
|
context: import('../../../containers/StructuredDataContainer/types').StructuredDataContextValue;
|
|
@@ -21,5 +24,9 @@ export declare const useTableView: (elementConfig?: ElementTableConfig) => {
|
|
|
21
24
|
sortEnabled: boolean;
|
|
22
25
|
sizeCss: import('styled-components').CSSObject;
|
|
23
26
|
contentWidth: boolean;
|
|
27
|
+
columnWidths: Record<string, number>;
|
|
24
28
|
onSortToggle: (attributeName: string) => void;
|
|
29
|
+
onResizeStart: (attributeName: string, event: import('react').PointerEvent<HTMLElement>) => void;
|
|
30
|
+
onResizeMove: (event: import('react').PointerEvent<HTMLElement>) => void;
|
|
31
|
+
onResizeEnd: (event: import('react').PointerEvent<HTMLElement>) => void;
|
|
25
32
|
};
|
|
@@ -34,7 +34,18 @@ export declare const TableHead: import('styled-components').StyledComponent<"the
|
|
|
34
34
|
export declare const TableHeadCell: import('styled-components').StyledComponent<"th", any, {
|
|
35
35
|
$sortable?: boolean;
|
|
36
36
|
}, never>;
|
|
37
|
+
/**
|
|
38
|
+
* Содержимое заголовка. Псевдоним обрезается многоточием, значок сортировки не сжимается:
|
|
39
|
+
* у колонки с заданной шириной длинный псевдоним иначе выдавил бы значок за край ячейки.
|
|
40
|
+
*/
|
|
37
41
|
export declare const TableHeadContent: import('styled-components').StyledComponent<"span", any, {}, never>;
|
|
42
|
+
/**
|
|
43
|
+
* Захват правой границы колонки. Лежит поверх края ячейки и ловит указатель сам, поэтому
|
|
44
|
+
* перетаскивание не доходит до заголовка и не переключает сортировку.
|
|
45
|
+
*
|
|
46
|
+
* Ширина в пикселах, а не в rem: это зона попадания курсора, и от размера шрифта она не зависит.
|
|
47
|
+
*/
|
|
48
|
+
export declare const TableResizeHandle: import('styled-components').StyledComponent<"span", any, {}, never>;
|
|
38
49
|
/**
|
|
39
50
|
* Место под значок сортировки. Занято всегда, пока сортировка включена, а сам значок только
|
|
40
51
|
* прячется: появляясь и исчезая, он менял бы ширину колонки — и таблицу дёргало бы на каждый
|
|
@@ -58,7 +69,19 @@ export declare const TableRow: import('styled-components').StyledComponent<"tr",
|
|
|
58
69
|
export declare const TableCellWrapper: import('styled-components').StyledComponent<"td", any, {}, never>;
|
|
59
70
|
/** Колонка действий: узкая, не растягивается содержимым. */
|
|
60
71
|
export declare const TableActionsCell: import('styled-components').StyledComponent<"td", any, {}, never>;
|
|
61
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Как значение ведёт себя, когда не помещается в колонку: режется многоточием в одну строку
|
|
74
|
+
* или переносится по словам, растягивая строку таблицы вниз (`multiline` атрибута).
|
|
75
|
+
*
|
|
76
|
+
* Перенос разрешаем и посреди слова: колонка бывает уже одного длинного слова (ссылка, артикул),
|
|
77
|
+
* и без этого оно вылезло бы за заданную ширину, сделав её бессмысленной.
|
|
78
|
+
*/
|
|
79
|
+
export declare const cellWrapMixin: import('styled-components').FlattenInterpolation<import('styled-components').ThemedStyledProps<{
|
|
80
|
+
$multiline?: boolean;
|
|
81
|
+
}, any>>;
|
|
82
|
+
export declare const CellText: import('styled-components').StyledComponent<"div", any, {
|
|
83
|
+
$multiline?: boolean;
|
|
84
|
+
}, never>;
|
|
62
85
|
/**
|
|
63
86
|
* Редактируемая ячейка вне фокуса. Показывает значение по `stringFormat`, а редактор
|
|
64
87
|
* подставляется на фокус — иначе форматирование пришлось бы дублировать внутри инпута.
|
|
@@ -66,7 +89,9 @@ export declare const CellText: import('styled-components').StyledComponent<"div"
|
|
|
66
89
|
* Кнопка, а не просто текст, именно ради фокуса: она — таб-стоп ячейки, и Tab по таблице
|
|
67
90
|
* открывает редактор с курсором внутри.
|
|
68
91
|
*/
|
|
69
|
-
export declare const CellButton: import('styled-components').StyledComponent<"button", any, {
|
|
92
|
+
export declare const CellButton: import('styled-components').StyledComponent<"button", any, {
|
|
93
|
+
$multiline?: boolean;
|
|
94
|
+
}, never>;
|
|
70
95
|
export declare const CellPlaceholder: import('styled-components').StyledComponent<"span", any, {}, never>;
|
|
71
96
|
/**
|
|
72
97
|
* Ячейка в режиме правки: редактор лежит поверх невидимой копии значения.
|
|
@@ -75,6 +100,16 @@ export declare const CellPlaceholder: import('styled-components').StyledComponen
|
|
|
75
100
|
* иначе таблица дёргалась бы на каждый вход в правку и выход из неё.
|
|
76
101
|
*/
|
|
77
102
|
export declare const CellEditor: import('styled-components').StyledComponent<"div", any, {}, never>;
|
|
78
|
-
export declare const CellGhost: import('styled-components').StyledComponent<"span", any, {
|
|
103
|
+
export declare const CellGhost: import('styled-components').StyledComponent<"span", any, {
|
|
104
|
+
$multiline?: boolean;
|
|
105
|
+
}, never>;
|
|
79
106
|
export declare const CellField: import('styled-components').StyledComponent<"div", any, {}, never>;
|
|
107
|
+
/**
|
|
108
|
+
* Ячейка со вложениями. Список идёт колонкой, кнопка добавления — под ним, поэтому строка растёт
|
|
109
|
+
* ровно на столько, сколько файлов в ней лежит.
|
|
110
|
+
*
|
|
111
|
+
* Отступы те же, что у текстовой ячейки (`CellText`): в одном ряду с обычными колонками значения
|
|
112
|
+
* обязаны стоять на одной линии.
|
|
113
|
+
*/
|
|
114
|
+
export declare const AttachmentsCellBox: import('styled-components').StyledComponent<"div", any, {}, never>;
|
|
80
115
|
export declare const TableEmpty: import('styled-components').StyledComponent<"div", any, {}, never>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PointerEvent } from 'react';
|
|
1
2
|
import { FeatureAttributeValue } from '../../../../types';
|
|
2
3
|
import { DraftRow, StructuredDataAttribute } from '../../containers/StructuredDataContainer/types';
|
|
3
4
|
export type SortDirection = "asc" | "desc";
|
|
@@ -18,3 +19,16 @@ export interface TableCellProps {
|
|
|
18
19
|
canEdit: boolean;
|
|
19
20
|
onChange: (key: string, attributeName: string, value: FeatureAttributeValue) => void;
|
|
20
21
|
}
|
|
22
|
+
export interface TableHeadRowProps {
|
|
23
|
+
columns: StructuredDataAttribute[];
|
|
24
|
+
sort: TableSort | null;
|
|
25
|
+
sortEnabled: boolean;
|
|
26
|
+
/** Ширина каждой колонки: растянутая мышью, иначе из конфига. `undefined` — на усмотрение раскладки. */
|
|
27
|
+
columnWidths: Record<string, number | undefined>;
|
|
28
|
+
/** У таблицы есть колонка действий — шапке нужна пустая ячейка над ней. */
|
|
29
|
+
withActionsColumn: boolean;
|
|
30
|
+
onSortToggle: (attributeName: string) => void;
|
|
31
|
+
onResizeStart: (attributeName: string, event: PointerEvent<HTMLElement>) => void;
|
|
32
|
+
onResizeMove: (event: PointerEvent<HTMLElement>) => void;
|
|
33
|
+
onResizeEnd: (event: PointerEvent<HTMLElement>) => void;
|
|
34
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Инлайн-размер ячейки колонки с заданной шириной.
|
|
4
|
+
*
|
|
5
|
+
* Раскладка таблицы автоматическая (ширину колонок выбирает содержимое), и одной `width` ей мало —
|
|
6
|
+
* она для неё лишь пожелание. Жёстко колонку держат все три предела сразу, поэтому и ставим их
|
|
7
|
+
* втроём, на каждую ячейку колонки.
|
|
8
|
+
*
|
|
9
|
+
* Ширины нет — стиля нет: колонка остаётся на попечении раскладки, как и была.
|
|
10
|
+
*/
|
|
11
|
+
export declare const getColumnStyle: (width?: number) => CSSProperties | undefined;
|
|
@@ -11,9 +11,4 @@ export declare const useDataSources: ({ type: widgetType, config, attributes, fi
|
|
|
11
11
|
getDataSourcePromises: ({ ds, query, parameters, layerName, limit, condition, url, resourceId, fileName, methodName, }: ConfigDataSource, newFilters?: SelectedFilters, offset?: number) => Promise<EqlDataSource | PagedFeaturesListDc>;
|
|
12
12
|
getUpdatingDataSources: () => ConfigDataSource[];
|
|
13
13
|
getUpdatedDataSources: (responses: DataSourcePromise[], currentDataSources: ConfigDataSource[], otherDataSources: FetchedDataSource[]) => any;
|
|
14
|
-
zoomToLayersExtent: (layers: Array<{
|
|
15
|
-
layerName: string;
|
|
16
|
-
conditions: string[];
|
|
17
|
-
parameters?: Record<string, any>;
|
|
18
|
-
}>) => Promise<void>;
|
|
19
14
|
};
|
|
@@ -499,11 +499,30 @@ export interface ConfigDataSourceAttribute {
|
|
|
499
499
|
export interface ConfigAttributeDescription {
|
|
500
500
|
attributeName: string;
|
|
501
501
|
type?: AttributeType;
|
|
502
|
+
/**
|
|
503
|
+
* Уточнение строкового типа. Отдельного `AttributeType` под вложения нет: файлы приходят
|
|
504
|
+
* строкой, и разбирать её как список вложений велит именно `subType: "Attachments"`.
|
|
505
|
+
*/
|
|
506
|
+
subType?: StringSubType;
|
|
502
507
|
alias?: string;
|
|
503
508
|
description?: string;
|
|
504
509
|
/** Значение атрибута правится в ячейке. `false` — только чтение, в features-API не передаётся. */
|
|
505
510
|
isEditable?: boolean;
|
|
506
511
|
stringFormat?: AttributeFormatConfiguration;
|
|
512
|
+
/**
|
|
513
|
+
* Ширина колонки в пикселах. Задана — колонка её и занимает; не задана — ширину выбирает
|
|
514
|
+
* раскладка таблицы по содержимому.
|
|
515
|
+
*/
|
|
516
|
+
width?: number;
|
|
517
|
+
/** Ширину колонки можно тянуть мышью. Не зависит от `options.editMode` контейнера. */
|
|
518
|
+
resizable?: boolean;
|
|
519
|
+
/** Значение переносится на следующую строку вместо обрезки многоточием, высота строки растёт. */
|
|
520
|
+
multiline?: boolean;
|
|
521
|
+
/**
|
|
522
|
+
* Стиль значений колонки: семейство, размер, цвет и начертание шрифта. Своего узла-элемента
|
|
523
|
+
* у колонки нет, поэтому стиль живёт прямо у описания атрибута.
|
|
524
|
+
*/
|
|
525
|
+
style?: CSSProperties;
|
|
507
526
|
}
|
|
508
527
|
export interface ConfigDataSource {
|
|
509
528
|
name: string;
|
|
@@ -522,7 +541,22 @@ export interface ConfigDataSource {
|
|
|
522
541
|
methodName?: string;
|
|
523
542
|
url?: string;
|
|
524
543
|
type?: string;
|
|
544
|
+
/**
|
|
545
|
+
* Перезапрашивать источник, когда сервер сообщает об изменении объектов ЕГО слоя
|
|
546
|
+
* ({@link ConfigDataSource.layerName}). Только для источников со слоем; источникам
|
|
547
|
+
* query / python слушать нечего — им нужен {@link ConfigDataSource.autoSyncLayers}.
|
|
548
|
+
*/
|
|
525
549
|
autoSyncLayer?: boolean;
|
|
550
|
+
/**
|
|
551
|
+
* Имена слоёв, за изменением объектов которых следит источник: пришло серверное
|
|
552
|
+
* уведомление по любому из них — источник перезапрашивается.
|
|
553
|
+
*
|
|
554
|
+
* Только для источников БЕЗ {@link ConfigDataSource.layerName} — query (`ds` + `query`),
|
|
555
|
+
* внешних (`url`) и python (`resourceId`). У них нет собственного слоя, а данные они
|
|
556
|
+
* считают по чужим, поэтому связь задаётся явно. Если `layerName` задан, поле
|
|
557
|
+
* игнорируется и работает {@link ConfigDataSource.autoSyncLayer}.
|
|
558
|
+
*/
|
|
559
|
+
autoSyncLayers?: string[];
|
|
526
560
|
/**
|
|
527
561
|
* Задержка перед запросом источника, мс. `0` или отсутствие поля — запрос сразу.
|
|
528
562
|
*
|