@evergis/react 4.0.151 → 4.0.153

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.
@@ -432,7 +432,7 @@ export interface SlideshowContainerConfig extends Omit<ConfigContainerChild, "op
432
432
  export interface SlideshowContainerProps extends Omit<ContainerProps, "elementConfig"> {
433
433
  elementConfig?: SlideshowContainerConfig;
434
434
  }
435
- export type StructuredDataContainerOptions = Pick<ConfigOptions, "attributesDescription" | "relatedDataSource" | "filterName" | "editMode" | "expandable" | "expanded"> & ContainerBoxOptions;
435
+ export type StructuredDataContainerOptions = Pick<ConfigOptions, "attributesDescription" | "relatedDataSource" | "filterName" | "editMode" | "saveToLayer" | "expandable" | "expanded"> & ContainerBoxOptions;
436
436
  export interface StructuredDataTableChild extends Omit<ConfigContainerChild, "id" | "type" | "options"> {
437
437
  id: "data";
438
438
  type?: "table";
@@ -7,9 +7,9 @@ import { StructuredDataContextValue } from '../types';
7
7
  * редакторов ячеек, добавления, удаления и кнопок сохранения. Состав строк закрывается отдельно:
8
8
  * с `editOnly` у представления правка ячеек остаётся, а добавление и удаление уходят.
9
9
  *
10
- * Вид источника на права правки не влияет — от него зависит только адресат «Сохранить». Слой
11
- * принимает запись через features-API, источник без `layerName` (EQL, python-скрипт, внешний
12
- * url) не принимает ничего, и правка такой таблицы уходит только в фильтр.
10
+ * Вид источника на права правки не влияет. Адресат «Сохранить» — фильтр всегда, а слой — только
11
+ * с `options.saveToLayer`: слой принимает запись через features-API, источник без `layerName`
12
+ * (EQL, python-скрипт, внешний url) не принимает ничего, и опция у него уходит вхолостую.
13
13
  *
14
14
  * Значение фильтра читается так же, как его читают остальные потребители дашборда: выбор
15
15
  * пользователя, а пока его нет — `defaultValue` из конфига фильтра. Общего стейта, залитого
@@ -1,7 +1,7 @@
1
1
  import { WidgetType } from '../../../types';
2
2
  import { DraftRow, StructuredDataAttribute } from '../types';
3
3
  /**
4
- * Запись черновика: сперва в источник (если он поддерживает запись), затем в фильтр.
4
+ * Запись черновика: сперва в слой (если задан — то есть включён `saveToLayer`), затем в фильтр.
5
5
  *
6
6
  * Порядок не случаен: потребители фильтра не должны увидеть данные, которых источник не принял.
7
7
  * При ошибке черновик остаётся нетронутым — пользователь может исправить значения и повторить.
@@ -5,8 +5,12 @@ import { StructuredDataContainerConfig, WidgetType } from '../../../types';
5
5
  * Источник резолвится через общий `useRelatedDataSourceAttributes`: он собирает layerInfo
6
6
  * реального слоя, а для EQL/python-источников — синтетический из атрибутов ответа.
7
7
  *
8
- * `layerName` берётся из конфига страницы, а не из загруженного источника: от него зависит,
9
- * какие ячейки редактируемы, и до окончания загрузки схема не должна меняться.
8
+ * `layerName` — слой ЗАПИСИ, а не просто слой источника: он задан только при `saveToLayer` и
9
+ * источнике со слоем. Без опции правка уходит лишь в фильтр, и слой ни на что не влияет — ни на
10
+ * адресат «Сохранить», ни на ограничения схемы, ни на предупреждение при удалении строки.
11
+ *
12
+ * Берётся из конфига страницы, а не из загруженного источника: от него зависит, какие ячейки
13
+ * редактируемы, и до окончания загрузки схема не должна меняться.
10
14
  */
11
15
  export declare const useStructuredDataSchema: (type: WidgetType, elementConfig?: StructuredDataContainerConfig) => {
12
16
  schema: import('../types').StructuredDataAttribute[];
@@ -220,6 +220,16 @@ export interface ConfigLayoutOptions {
220
220
  * контейнеров отношения не имеет.
221
221
  */
222
222
  editMode?: boolean;
223
+ /**
224
+ * Запись правок `StructuredData` в слой источника. Результат «Сохранить» уходит в фильтр
225
+ * `filterName` всегда, а в слой — только с этой опцией и только если у `relatedDataSource`
226
+ * есть `layerName` (EQL, python-скрипт и внешний url записи не принимают).
227
+ *
228
+ * От неё же зависят ограничения схемы: id-атрибут, вычисляемые и нередактируемые в источнике
229
+ * поля закрыты для правки лишь тогда, когда правка действительно едет в слой. Без `editMode`
230
+ * опция ничего не делает.
231
+ */
232
+ saveToLayer?: boolean;
223
233
  /**
224
234
  * Высота сетки задана снаружи и не редактируется: у корневой строки не рендерится ручка
225
235
  * нижней границы. Нужен сеткам, растянутым на бокс, которым распоряжается внешняя
package/dist/index.js CHANGED
@@ -11461,7 +11461,7 @@ const saveToSource = async ({ api, layerName, rows, schema, }) => {
11461
11461
  };
11462
11462
 
11463
11463
  /**
11464
- * Запись черновика: сперва в источник (если он поддерживает запись), затем в фильтр.
11464
+ * Запись черновика: сперва в слой (если задан — то есть включён `saveToLayer`), затем в фильтр.
11465
11465
  *
11466
11466
  * Порядок не случаен: потребители фильтра не должны увидеть данные, которых источник не принял.
11467
11467
  * При ошибке черновик остаётся нетронутым — пользователь может исправить значения и повторить.
@@ -11510,9 +11510,9 @@ const getSourceAttributes = (attributesConfiguration) => {
11510
11510
  * поле сервер всё равно не примет, поэтому конфиг может такую ячейку только ЗАПРЕТИТЬ, но не
11511
11511
  * разрешить.
11512
11512
  *
11513
- * Источник без записи (EQL-запрос, python-скрипт, внешний url) их не накладывает вовсе: его
11514
- * строки уходят только в фильтр, и «нередактируемо» там значит лишь «нельзя записать обратно».
11515
- * Решает конфиг — по умолчанию правка разрешена.
11513
+ * Без записи в слой — источник без него (EQL-запрос, python-скрипт, внешний url) или слой без
11514
+ * `saveToLayer` — они не накладываются вовсе: строки уходят только в фильтр, и «нередактируемо»
11515
+ * там значит лишь «нельзя записать обратно». Решает конфиг — по умолчанию правка разрешена.
11516
11516
  */
11517
11517
  const resolveIsEditable = ({ description, source, idAttribute, canWriteToSource }) => {
11518
11518
  const sourceEditable = source && canWriteToSource
@@ -11582,18 +11582,22 @@ const buildStructuredDataSchema = ({ attributesDescription, attributesConfigurat
11582
11582
  * Источник резолвится через общий `useRelatedDataSourceAttributes`: он собирает layerInfo
11583
11583
  * реального слоя, а для EQL/python-источников — синтетический из атрибутов ответа.
11584
11584
  *
11585
- * `layerName` берётся из конфига страницы, а не из загруженного источника: от него зависит,
11586
- * какие ячейки редактируемы, и до окончания загрузки схема не должна меняться.
11585
+ * `layerName` — слой ЗАПИСИ, а не просто слой источника: он задан только при `saveToLayer` и
11586
+ * источнике со слоем. Без опции правка уходит лишь в фильтр, и слой ни на что не влияет — ни на
11587
+ * адресат «Сохранить», ни на ограничения схемы, ни на предупреждение при удалении строки.
11588
+ *
11589
+ * Берётся из конфига страницы, а не из загруженного источника: от него зависит, какие ячейки
11590
+ * редактируемы, и до окончания загрузки схема не должна меняться.
11587
11591
  */
11588
11592
  const useStructuredDataSchema = (type, elementConfig) => {
11589
11593
  const { dataSources } = useWidgetContext(type);
11590
- const { attributesDescription, relatedDataSource } = elementConfig?.options || {};
11594
+ const { attributesDescription, relatedDataSource, saveToLayer } = elementConfig?.options || {};
11591
11595
  const { layerInfo, dataSource, configDataSource } = useRelatedDataSourceAttributes({
11592
11596
  type,
11593
11597
  elementConfig,
11594
11598
  dataSources,
11595
11599
  });
11596
- const layerName = configDataSource?.layerName;
11600
+ const layerName = React.useMemo(() => (saveToLayer ? configDataSource?.layerName : undefined), [configDataSource?.layerName, saveToLayer]);
11597
11601
  const attributesConfiguration = React.useMemo(() => (relatedDataSource ? getAttributesConfiguration(layerInfo) : undefined), [layerInfo, relatedDataSource]);
11598
11602
  const schema = React.useMemo(() => buildStructuredDataSchema({ attributesDescription, attributesConfiguration, canWriteToSource: !!layerName }), [attributesDescription, attributesConfiguration, layerName]);
11599
11603
  return { schema, dataSource, layerName };
@@ -11606,9 +11610,9 @@ const useStructuredDataSchema = (type, elementConfig) => {
11606
11610
  * редакторов ячеек, добавления, удаления и кнопок сохранения. Состав строк закрывается отдельно:
11607
11611
  * с `editOnly` у представления правка ячеек остаётся, а добавление и удаление уходят.
11608
11612
  *
11609
- * Вид источника на права правки не влияет — от него зависит только адресат «Сохранить». Слой
11610
- * принимает запись через features-API, источник без `layerName` (EQL, python-скрипт, внешний
11611
- * url) не принимает ничего, и правка такой таблицы уходит только в фильтр.
11613
+ * Вид источника на права правки не влияет. Адресат «Сохранить» — фильтр всегда, а слой — только
11614
+ * с `options.saveToLayer`: слой принимает запись через features-API, источник без `layerName`
11615
+ * (EQL, python-скрипт, внешний url) не принимает ничего, и опция у него уходит вхолостую.
11612
11616
  *
11613
11617
  * Значение фильтра читается так же, как его читают остальные потребители дашборда: выбор
11614
11618
  * пользователя, а пока его нет — `defaultValue` из конфига фильтра. Общего стейта, залитого