@evergis/react 4.0.157 → 4.0.159
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/LICENSE +21 -21
- package/README.md +7 -7
- package/dist/components/Dashboard/containers/StructuredDataContainer/constants.d.ts +3 -0
- package/dist/components/Dashboard/containers/StructuredDataContainer/hooks/useStructuredDataSchema.d.ts +4 -0
- package/dist/components/Dashboard/containers/StructuredDataContainer/types.d.ts +8 -1
- package/dist/components/Dashboard/containers/StructuredDataContainer/utils/listOptions.d.ts +17 -0
- package/dist/components/Dashboard/elements/ElementModal/styled.d.ts +6 -0
- package/dist/components/Dashboard/elements/ElementTable/components/ChipsCell.d.ts +13 -0
- package/dist/components/Dashboard/elements/ElementTable/components/DropdownCell.d.ts +10 -0
- package/dist/components/Dashboard/elements/ElementTable/constants.d.ts +9 -0
- package/dist/components/Dashboard/elements/ElementTable/hooks/useCellEditing.d.ts +1 -0
- package/dist/components/Dashboard/elements/ElementTable/hooks/useDropdownAutoOpen.d.ts +9 -0
- package/dist/components/Dashboard/elements/ElementTable/styled.d.ts +11 -0
- package/dist/components/Dashboard/elements/ElementTable/utils/listValue.d.ts +11 -0
- package/dist/components/Dashboard/types.d.ts +21 -0
- package/dist/index.js +3960 -3756
- package/dist/index.js.map +1 -1
- package/dist/react.esm.js +3960 -3756
- package/dist/react.esm.js.map +1 -1
- package/package.json +5 -5
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Everpoint
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Everpoint
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# @evergis/react
|
|
2
|
-
|
|
3
|
-
В данном репозитории находятся специфичные (в отличии от `@evergis/uilib-gl`) для `Evergis Online`,
|
|
4
|
-
но в целом переиспользуемые на других проектах, построенных на Evergis API, React-компоненты.
|
|
5
|
-
|
|
6
|
-
***ВАЖНО!!!***: Разрабатываемые компоненты не должны иметь зависимостей
|
|
7
|
-
от системы поддержки мультиязычности `Evergis Online`!
|
|
1
|
+
# @evergis/react
|
|
2
|
+
|
|
3
|
+
В данном репозитории находятся специфичные (в отличии от `@evergis/uilib-gl`) для `Evergis Online`,
|
|
4
|
+
но в целом переиспользуемые на других проектах, построенных на Evergis API, React-компоненты.
|
|
5
|
+
|
|
6
|
+
***ВАЖНО!!!***: Разрабатываемые компоненты не должны иметь зависимостей
|
|
7
|
+
от системы поддержки мультиязычности `Evergis Online`!
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AttributeType } from '@evergis/api';
|
|
2
|
+
import { ConfigAttributeControl } from '../../types';
|
|
2
3
|
/** Слот представления: единственный ребёнок контейнера, рисующий данные (элемент `table`). */
|
|
3
4
|
export declare const STRUCTURED_DATA_VIEW_SLOT = "data";
|
|
4
5
|
/**
|
|
@@ -12,5 +13,7 @@ export declare const NUMBER_EDITOR_TYPES: AttributeType[];
|
|
|
12
13
|
export declare const INTEGER_ATTRIBUTE_TYPES: AttributeType[];
|
|
13
14
|
/** Тип атрибута, когда его не задали ни конфиг, ни источник. */
|
|
14
15
|
export declare const DEFAULT_ATTRIBUTE_TYPE = AttributeType.String;
|
|
16
|
+
/** Контрол колонки со списком значений, когда `control` в описании атрибута не задан. */
|
|
17
|
+
export declare const DEFAULT_ATTRIBUTE_CONTROL: ConfigAttributeControl;
|
|
15
18
|
/** Сколько миллисекунд висит нотификация об ошибке записи. */
|
|
16
19
|
export declare const SAVE_ERROR_DURATION = 5000;
|
|
@@ -11,9 +11,13 @@ import { StructuredDataContainerConfig, WidgetType } from '../../../types';
|
|
|
11
11
|
*
|
|
12
12
|
* Берётся из конфига страницы, а не из загруженного источника: от него зависит, какие ячейки
|
|
13
13
|
* редактируемы, и до окончания загрузки схема не должна меняться.
|
|
14
|
+
*
|
|
15
|
+
* `viewSchema` — та же схема со списками значений для представления. Списки зависят от
|
|
16
|
+
* загруженных источников страницы, поэтому в схему данных (черновик, запись) они не входят.
|
|
14
17
|
*/
|
|
15
18
|
export declare const useStructuredDataSchema: (type: WidgetType, elementConfig?: StructuredDataContainerConfig) => {
|
|
16
19
|
schema: import('../types').StructuredDataAttribute[];
|
|
20
|
+
viewSchema: import('../types').StructuredDataAttribute[];
|
|
17
21
|
dataSource: import('../../../types').WidgetDataSource;
|
|
18
22
|
layerName: string;
|
|
19
23
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CSSProperties } from 'react';
|
|
2
2
|
import { AttributeType, StringSubType } from '@evergis/api';
|
|
3
3
|
import { FeatureAttributeValue } from '../../../../types';
|
|
4
|
-
import { ConfigAttributeDescription } from '../../types';
|
|
4
|
+
import { ChipOption, ConfigAttributeControl, ConfigAttributeDescription } from '../../types';
|
|
5
5
|
/** Состояние строки черновика относительно последнего сохранения. */
|
|
6
6
|
export type DraftRowState = "pristine" | "created" | "updated" | "deleted";
|
|
7
7
|
/**
|
|
@@ -43,6 +43,13 @@ export interface StructuredDataAttribute {
|
|
|
43
43
|
parentResourceId?: string;
|
|
44
44
|
/** Что разрешено выбирать в диалоге файлов колонки вложений — значение `accept`. */
|
|
45
45
|
fileExtensions?: string;
|
|
46
|
+
/** Контрол выбора из списка. Задан ровно тогда, когда задан `listOptions`. */
|
|
47
|
+
control?: ConfigAttributeControl;
|
|
48
|
+
/**
|
|
49
|
+
* Допустимые значения колонки — из `variants` либо из записей `relatedDataSource`. Есть только
|
|
50
|
+
* у схемы представления: черновику и записи список не нужен.
|
|
51
|
+
*/
|
|
52
|
+
listOptions?: ChipOption[];
|
|
46
53
|
}
|
|
47
54
|
/**
|
|
48
55
|
* Значение {@link StructuredDataContext} — всё, что нужно представлению (`ElementTable`)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ChipOption, ConfigAttributeDescription, WidgetDataSource } from '../../../types';
|
|
2
|
+
import { StructuredDataAttribute } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Список допустимых значений колонки: варианты из конфига, а без них — записи связанного
|
|
5
|
+
* источника. `undefined` — списка нет, и значение вводится вручную.
|
|
6
|
+
*
|
|
7
|
+
* Источник, ещё не загруженный или не найденный, даёт пустой список, а не его отсутствие:
|
|
8
|
+
* колонка со списком не должна на время загрузки превращаться в свободный ввод.
|
|
9
|
+
*/
|
|
10
|
+
export declare const getAttributeListOptions: (description: ConfigAttributeDescription | undefined, dataSources: WidgetDataSource[]) => ChipOption[] | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Схема представления: схема данных плюс списки значений и их контролы.
|
|
13
|
+
*
|
|
14
|
+
* Отдельно от схемы данных потому, что зависит от загруженных источников страницы: черновик
|
|
15
|
+
* пересобирает строки при каждой смене схемы, и загрузка справочника стирала бы в нём правки.
|
|
16
|
+
*/
|
|
17
|
+
export declare const withListControls: (schema: StructuredDataAttribute[], attributesDescription: ConfigAttributeDescription[] | undefined, dataSources: WidgetDataSource[]) => StructuredDataAttribute[];
|
|
@@ -15,4 +15,10 @@ export declare const ModalTitleText: import('styled-components').StyledComponent
|
|
|
15
15
|
* верхний угол строки заголовка, как в макете, а кликабельная площадь кнопки сохраняется.
|
|
16
16
|
*/
|
|
17
17
|
export declare const ModalCloseButton: import('styled-components').StyledComponent<import('react').FC<import('@evergis/uilib-gl').IIconButtonProps>, any, {}, never>;
|
|
18
|
+
/**
|
|
19
|
+
* Каждого прямого ребёнка модалки `ContainerChildren` (`isMain`) оборачивает карточкой дашборда
|
|
20
|
+
* `ContainerWrapper`. `noBorders` снимает с неё тень и отступ, но не фон (90% белого) и не
|
|
21
|
+
* `backdrop-filter` — поверх шапки они легли бы белой размытой подложкой под каждым ребёнком.
|
|
22
|
+
* Селектор прямой: вложенные карточки страниц внутри содержимого остаются как есть.
|
|
23
|
+
*/
|
|
18
24
|
export declare const ModalContent: import('styled-components').StyledComponent<"div", any, {}, never>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { TableCellProps } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Колонка со списком значений в виде ряда кнопок (`control: "chips"`).
|
|
5
|
+
*
|
|
6
|
+
* Ряд виден всегда, как галка у логической колонки: выбор — один клик, без открытия редактора.
|
|
7
|
+
* Выбранный пункт подсвечен, клик по нему снимает выбор — иначе очистить ячейку было бы нечем.
|
|
8
|
+
* Без права правки ряд остаётся на месте и показывает выбор, но на клики не отвечает.
|
|
9
|
+
*
|
|
10
|
+
* Кнопки — те же, что у фильтра-чипсов: вариант со своим `color`/`icon` выглядит одинаково и там,
|
|
11
|
+
* и здесь.
|
|
12
|
+
*/
|
|
13
|
+
export declare const ChipsCell: FC<TableCellProps>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { TableCellProps } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Колонка со списком значений в виде выпадающего списка (`control: "dropdown"`).
|
|
5
|
+
*
|
|
6
|
+
* Вне фокуса показывает подпись выбранного пункта, а сам список встаёт на фокус — как редакторы
|
|
7
|
+
* остальных ячеек. Значение не из списка (справочник поменялся, строка пришла из источника)
|
|
8
|
+
* показывается как есть, по `stringFormat` колонки: так видно, что в данных, а не пустота.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DropdownCell: FC<TableCellProps>;
|
|
@@ -33,5 +33,14 @@ export declare const ATTACHMENTS_INLINE_LIMIT = 1;
|
|
|
33
33
|
* Величина с макета и опцией не выносится: поп-ап у колонки один на все таблицы.
|
|
34
34
|
*/
|
|
35
35
|
export declare const ATTACHMENTS_SHOWN_ITEMS = 3;
|
|
36
|
+
/**
|
|
37
|
+
* Пустой пункт выпадающего списка в ячейке: выбор снимает значение. У `Dropdown` пункт с пустым
|
|
38
|
+
* значением показывается как плейсхолдер, поэтому и подпись у него — тот же прочерк, что у
|
|
39
|
+
* пустой ячейки.
|
|
40
|
+
*/
|
|
41
|
+
export declare const EMPTY_LIST_OPTION: {
|
|
42
|
+
text: string;
|
|
43
|
+
value: string;
|
|
44
|
+
};
|
|
36
45
|
/** Вид списка, с которого поп-ап вложений открывается. */
|
|
37
46
|
export declare const ATTACHMENTS_VIEW_MODE: "list";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Раскрывает `Dropdown` сразу, как ячейка перешла в правку.
|
|
3
|
+
*
|
|
4
|
+
* Правку открывает фокус ячейки, а своего «открыться сразу» у `Dropdown` нет: без этого список
|
|
5
|
+
* пришлось бы раскрывать вторым кликом, а с Tab-а — ещё и Enter-ом. Меню переключает клик по полю
|
|
6
|
+
* списка; поле — родитель скрытого `input`, которым `Dropdown` ловит клавиатуру (`FocusTrap`), и
|
|
7
|
+
* другого инпута внутри нет: поиск по пунктам живёт в портале.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useDropdownAutoOpen: (editing: boolean) => import('react').MutableRefObject<HTMLDivElement>;
|
|
@@ -135,4 +135,15 @@ export declare const ColorCellBox: import('styled-components').StyledComponent<"
|
|
|
135
135
|
export declare const ColorSwatch: import('styled-components').StyledComponent<"div", any, {
|
|
136
136
|
$color: string;
|
|
137
137
|
}, never>;
|
|
138
|
+
/**
|
|
139
|
+
* Ряд кнопок колонки со списком. Не влезает в ширину колонки — переносится, и строка таблицы
|
|
140
|
+
* растёт вниз: резать выбор многоточием, как текст, нельзя.
|
|
141
|
+
*
|
|
142
|
+
* Зазор между кнопками по горизонтали даёт их собственный правый отступ, поэтому здесь задан
|
|
143
|
+
* только межстрочный. Отступы ряда — как у текстовой ячейки, чтобы значения соседних колонок
|
|
144
|
+
* стояли на одной линии.
|
|
145
|
+
*/
|
|
146
|
+
export declare const ChipsCellBox: import('styled-components').StyledComponent<"div", any, {
|
|
147
|
+
$interactive?: boolean;
|
|
148
|
+
}, never>;
|
|
138
149
|
export declare const TableEmpty: import('styled-components').StyledComponent<"div", any, {}, never>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FeatureAttributeValue } from '../../../../../types';
|
|
2
|
+
import { ChipOption } from '../../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Значение ячейки совпадает со значением пункта списка.
|
|
5
|
+
*
|
|
6
|
+
* Сравниваем строками: у варианта из конфига значение бывает строкой, а в ячейке числового
|
|
7
|
+
* атрибута лежит число, и строгое сравнение не узнало бы собственный выбор.
|
|
8
|
+
*/
|
|
9
|
+
export declare const isSameListValue: (left: FeatureAttributeValue, right: FeatureAttributeValue) => boolean;
|
|
10
|
+
/** Пункт списка, выбранный в ячейке. Нет — значение в ячейке не из списка либо пусто. */
|
|
11
|
+
export declare const findListOption: (listOptions: ChipOption[], value: FeatureAttributeValue) => ChipOption | undefined;
|
|
@@ -606,7 +606,28 @@ export interface ConfigAttributeDescription {
|
|
|
606
606
|
* (`".pdf,.jpg"` либо `"image/*"`). Не задан — ограничений нет.
|
|
607
607
|
*/
|
|
608
608
|
fileExtensions?: string;
|
|
609
|
+
/**
|
|
610
|
+
* Контрол выбора значения из списка — `variants` либо записей `relatedDataSource`. Список задан,
|
|
611
|
+
* а контрол нет — `"dropdown"`. Без списка опция ни на что не влияет.
|
|
612
|
+
*/
|
|
613
|
+
control?: ConfigAttributeControl;
|
|
614
|
+
/**
|
|
615
|
+
* Допустимые значения атрибута: в ячейку пишется `value`, показывается `text`. Заданы вместе
|
|
616
|
+
* с `relatedDataSource` — выигрывают варианты.
|
|
617
|
+
*/
|
|
618
|
+
variants?: ChipOption[];
|
|
619
|
+
/** ⚠️ entity-ref: источник страницы, из записей которого собирается список значений. */
|
|
620
|
+
relatedDataSource?: string;
|
|
621
|
+
/** Атрибут записи `relatedDataSource`, чьё значение пишется в ячейку. Не задан — `attributeName`. */
|
|
622
|
+
attributeValue?: string;
|
|
623
|
+
/**
|
|
624
|
+
* Атрибут записи `relatedDataSource`, который показывается подписью значения. Не задан —
|
|
625
|
+
* `attributeValue`. Не путать с `alias` — это заголовок самой колонки.
|
|
626
|
+
*/
|
|
627
|
+
attributeAlias?: string;
|
|
609
628
|
}
|
|
629
|
+
/** Контрол выбора значения атрибута из списка: выпадающий список либо ряд кнопок. */
|
|
630
|
+
export type ConfigAttributeControl = "dropdown" | "chips";
|
|
610
631
|
export interface ConfigDataSource {
|
|
611
632
|
name: string;
|
|
612
633
|
alias?: string;
|