plmt-constructor-sdk 0.13.26 → 0.13.28

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.
@@ -1,5 +1,6 @@
1
- import { Text, DataQueryMethod, DataQueryFunction } from '../config';
1
+ import { AllColumnsHidden, DataQueryFunction, DataQueryMethod, HiddenColumnIdx, ShowColumnIdx, Text } from '../config';
2
2
  import { ColumnType } from '../data';
3
+ import { CamelToSnakeCase } from '../tools';
3
4
  import { DatasetColumnType_Server } from './dataset';
4
5
  export declare enum ConfigDataBlockType_Server {
5
6
  Column = "column",
@@ -8,11 +9,23 @@ export declare enum ConfigDataBlockType_Server {
8
9
  Colorizer = "colorizer",
9
10
  Drilldown = "drilldown"
10
11
  }
12
+ export declare enum DataQueryFunction_Server {
13
+ Group = "GROUP",
14
+ Sum = "SUM",
15
+ Min = "MIN",
16
+ Max = "MAX",
17
+ Average = "AVG",
18
+ Median = "MEDIAN",
19
+ ClickhouseMedian = "median",
20
+ Count = "COUNT",
21
+ CountDistinct = "COUNT_DISTINCT"
22
+ }
11
23
  export interface Config_Server {
12
24
  label: Text;
13
25
  icon: string;
14
26
  data_options: ConfigDataOption_Server[];
15
27
  alternative_sort?: true;
28
+ custom_default_data_rules: CustomDefaultDataRules_Server;
16
29
  doc: {
17
30
  info: string;
18
31
  assets: string;
@@ -53,6 +66,10 @@ export interface ConfigDataOptionBlock_Server {
53
66
  function?: DataQueryFunction;
54
67
  sorted?: true;
55
68
  }
69
+ export declare type CustomDefaultDataRules_Server = Rule_Server | Rule_Server[];
70
+ export declare type Rule_Server = {
71
+ [key: string]: CamelToSnakeCase<AllColumnsHidden | HiddenColumnIdx | ShowColumnIdx>;
72
+ };
56
73
  export declare const configDataBlock_Server = "8316067a-d04b-4b21-bd4d-35529846617b";
57
74
  export declare const blockFilterKey = "34642664-dbd1-4e35-b0ea-2eaabe796b48";
58
75
  export declare const blockSortKey = "2c849ed6-6105-4aa2-a961-9f95135dfe3b";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.encodeDrilldownData = exports.decodeDrilldownData = exports.blockColorizeKey = exports.blockSortKey = exports.blockFilterKey = exports.configDataBlock_Server = exports.ConfigDataBlockType_Server = void 0;
3
+ exports.encodeDrilldownData = exports.decodeDrilldownData = exports.blockColorizeKey = exports.blockSortKey = exports.blockFilterKey = exports.configDataBlock_Server = exports.DataQueryFunction_Server = exports.ConfigDataBlockType_Server = void 0;
4
4
  // enums
5
5
  var ConfigDataBlockType_Server;
6
6
  (function (ConfigDataBlockType_Server) {
@@ -10,6 +10,18 @@ var ConfigDataBlockType_Server;
10
10
  ConfigDataBlockType_Server["Colorizer"] = "colorizer";
11
11
  ConfigDataBlockType_Server["Drilldown"] = "drilldown";
12
12
  })(ConfigDataBlockType_Server = exports.ConfigDataBlockType_Server || (exports.ConfigDataBlockType_Server = {}));
13
+ var DataQueryFunction_Server;
14
+ (function (DataQueryFunction_Server) {
15
+ DataQueryFunction_Server["Group"] = "GROUP";
16
+ DataQueryFunction_Server["Sum"] = "SUM";
17
+ DataQueryFunction_Server["Min"] = "MIN";
18
+ DataQueryFunction_Server["Max"] = "MAX";
19
+ DataQueryFunction_Server["Average"] = "AVG";
20
+ DataQueryFunction_Server["Median"] = "MEDIAN";
21
+ DataQueryFunction_Server["ClickhouseMedian"] = "median";
22
+ DataQueryFunction_Server["Count"] = "COUNT";
23
+ DataQueryFunction_Server["CountDistinct"] = "COUNT_DISTINCT";
24
+ })(DataQueryFunction_Server = exports.DataQueryFunction_Server || (exports.DataQueryFunction_Server = {}));
13
25
  exports.configDataBlock_Server = '8316067a-d04b-4b21-bd4d-35529846617b';
14
26
  exports.blockFilterKey = '34642664-dbd1-4e35-b0ea-2eaabe796b48';
15
27
  exports.blockSortKey = '2c849ed6-6105-4aa2-a961-9f95135dfe3b';
@@ -1,6 +1,6 @@
1
1
  import { Locale } from '../config';
2
2
  import { DataOptionFilter, Filter, Sort, Target } from '../data';
3
- import { WidgetRenderEnv } from '../widget';
3
+ import { CustomQueryFields, WidgetRenderEnv } from '../widget';
4
4
  import { ThemeProvide } from './theme';
5
5
  import { WidgetDataOptionColumn_Server, WidgetRepresent } from './widget';
6
6
  export declare enum Input {
@@ -17,7 +17,8 @@ export declare enum Output {
17
17
  RemoveFilterAt = "ptnl.output.RemoveFilterAt",
18
18
  SetSort = "ptnl.output.setSort",
19
19
  RemoveSortAt = "ptnl.output.RemoveSortAt",
20
- Interact = "ptnl.output.interact"
20
+ Interact = "ptnl.output.interact",
21
+ CustomQuery = "ptnl.output.customQuery"
21
22
  }
22
23
  export interface InputParameter extends Record<Input, any> {
23
24
  [Input.Change]: WidgetRepresent;
@@ -60,6 +61,9 @@ export interface OutputParameter extends Record<Output, any> {
60
61
  dataOptionId: number;
61
62
  dataIndex: number;
62
63
  };
64
+ [Output.CustomQuery]: {
65
+ customQueryData: CustomQueryFields;
66
+ };
63
67
  }
64
68
  export declare type OutputData = {
65
69
  [K in Output]: {
@@ -18,4 +18,5 @@ var Output;
18
18
  Output["SetSort"] = "ptnl.output.setSort";
19
19
  Output["RemoveSortAt"] = "ptnl.output.RemoveSortAt";
20
20
  Output["Interact"] = "ptnl.output.interact";
21
+ Output["CustomQuery"] = "ptnl.output.customQuery";
21
22
  })(Output = exports.Output || (exports.Output = {}));
@@ -1,4 +1,4 @@
1
1
  import { DataSettings } from '../widget';
2
2
  import { WidgetRepresent } from './widget';
3
- export declare type DataSettingsMethods = Pick<DataSettings, 'setFilter' | 'removeFilterAt' | 'setSort' | 'removeSortAt' | 'interact'>;
3
+ export declare type DataSettingsMethods = Pick<DataSettings, 'setFilter' | 'removeFilterAt' | 'setSort' | 'removeSortAt' | 'interact' | 'customQuery'>;
4
4
  export declare function provideDataTo(widget: any, { dataOptionsMap, viewOptions }: WidgetRepresent, dataSettingsMethods?: DataSettingsMethods): void;
@@ -11,6 +11,7 @@ const defaultDataSettingsMethods = {
11
11
  setSort() { },
12
12
  removeSortAt() { },
13
13
  interact() { },
14
+ customQuery() { },
14
15
  };
15
16
  function provideDataTo(widget, { dataOptionsMap, viewOptions }, dataSettingsMethods = defaultDataSettingsMethods) {
16
17
  const widgetMultiData = {};
package/config.d.ts CHANGED
@@ -29,7 +29,29 @@ export declare enum BlockIcon {
29
29
  }
30
30
  export declare type Locale = 'ru' | 'en';
31
31
  export declare type Text = Record<Locale, string>;
32
- export interface Config {
32
+ /**
33
+ * Правила для **дефолтного** запроса данных
34
+ *
35
+ * Например, для сущности нужно получать данные не по всем вынесенным в блоки колонкам
36
+ *
37
+ * Собственно, на данный момент кастомные правила эту проблему и решают
38
+ *
39
+ * Интерфейс при необходимости можно расширять (не забыть про обработку на уровне платформы)
40
+ */
41
+ export declare type CustomDefaultDataRules = Rule | Rule[];
42
+ export declare type Rule = {
43
+ [key: string]: AllColumnsHidden | HiddenColumnIdx | ShowColumnIdx;
44
+ };
45
+ export interface AllColumnsHidden {
46
+ allColumnsHidden: true;
47
+ }
48
+ export interface HiddenColumnIdx {
49
+ hiddenColumnIdx: number[];
50
+ }
51
+ export interface ShowColumnIdx {
52
+ showColumnIdx: number[];
53
+ }
54
+ export declare type Config = {
33
55
  label: Text;
34
56
  icon: string;
35
57
  type?: string;
@@ -39,8 +61,13 @@ export interface Config {
39
61
  max?: number;
40
62
  };
41
63
  documentation: ConfigDocumentation;
42
- dataSettings: Omit<DataSettings, 'key'> | DataSettings[];
43
- }
64
+ } & ({
65
+ customDefaultDataRules?: Rule[];
66
+ dataSettings: DataSettings[];
67
+ } | {
68
+ customDefaultDataRules?: Rule;
69
+ dataSettings: Omit<DataSettings, 'key'>;
70
+ });
44
71
  export interface ConfigDocumentation {
45
72
  readme: string;
46
73
  assetsDirectory: string;
package/declare.js CHANGED
@@ -98,6 +98,11 @@ function Declare(params) {
98
98
  dataIndex,
99
99
  });
100
100
  },
101
+ customQuery(query) {
102
+ output(token, widget_io_1.Output.CustomQuery, {
103
+ customQueryData: query,
104
+ });
105
+ },
101
106
  };
102
107
  let inited = false;
103
108
  input(widget_io_1.Input.Change, (widgetRepresent) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plmt-constructor-sdk",
3
- "version": "0.13.26",
3
+ "version": "0.13.28",
4
4
  "description": "Набор инструментов для создания виджетов.",
5
5
  "dependencies": {
6
6
  "logical-not": "^1.0.9"
@@ -0,0 +1,6 @@
1
+ export declare type CamelToSnakeCaseField<S extends string> = S extends `${infer T}${infer U}` ? `${T extends Capitalize<T> ? '_' : ''}${Lowercase<T>}${CamelToSnakeCaseField<U>}` : S;
2
+ export declare type CamelToSnakeCase<T extends {
3
+ [key: string]: any;
4
+ }> = {
5
+ [K in Extract<keyof T, string> as CamelToSnakeCaseField<K>]: T[K];
6
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export * from './camel-to-snake';
package/tools/index.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./camel-to-snake"), exports);
package/widget.d.ts CHANGED
@@ -4,8 +4,9 @@
4
4
  * @packageDocumentation
5
5
  * @module Класс Widget
6
6
  */
7
- import { Locale } from './config';
8
- import { Column, DataItem, DataOptionFilter, Filter, Sort, Target } from './data';
7
+ import { DataQueryFunction_Server } from './__internal__/config';
8
+ import { AllColumnsHidden, DataQueryMethod, Locale } from './config';
9
+ import { Column, DataItem, DataOptionFilter, Filter, Sort, SortDirection, Target } from './data';
9
10
  import { Theme } from './theme';
10
11
  export declare abstract class Widget {
11
12
  viewSettings: ViewSettings;
@@ -46,6 +47,12 @@ export interface DataSettings {
46
47
  setSort(sort: Sort | null): void;
47
48
  removeSortAt(index: number): void;
48
49
  interact(dataIndex: number): void;
50
+ /**
51
+ * Метод для выполнения кастомных запросов
52
+ *
53
+ * Выполняет запросы вне зависимости от стандартного конфига виджета
54
+ */
55
+ customQuery(query: CustomQueryFields): void;
49
56
  events: {
50
57
  onOtherFilterChange?: (filter: Filter) => void;
51
58
  };
@@ -79,3 +86,39 @@ export interface SetFilterFn {
79
86
  (target: Target.Self, filter: DataOptionFilter[]): void;
80
87
  };
81
88
  }
89
+ export interface CustomQueryFields {
90
+ /** Метод выполнения запроса*/
91
+ method?: DataQueryMethod;
92
+ /** Правила, по которым будет строиться DataOption*/
93
+ rules: {
94
+ [key: string]: CustomDataRule;
95
+ };
96
+ /** Фильтры, которые будут отправлены в запросе*/
97
+ filters?: DataOptionFilter[];
98
+ /** Сортировка, которая будет отправлена в запросе*/
99
+ sort?: DataOptionSort[];
100
+ /** Смещение относительно данных датасета (применимо например в пагинации)*/
101
+ offset?: number;
102
+ }
103
+ /**
104
+ * Интерфейс для создания правил, по которым будет строиться DataOption
105
+ *
106
+ * При необходимости можно дополнять интерфейс
107
+ */
108
+ export declare type CustomDataRule = (AllColumnsHidden | HiddenColumnIds | ShowColumnIds) & {
109
+ sort?: {
110
+ [id: number]: DataOptionSort;
111
+ };
112
+ };
113
+ export interface HiddenColumnIds {
114
+ hiddenColumnIds: number[];
115
+ }
116
+ export interface ShowColumnIds {
117
+ showColumnIds: number[];
118
+ }
119
+ export interface DataOptionSort {
120
+ column_id: number;
121
+ direction?: SortDirection;
122
+ agg_fn?: DataQueryFunction_Server;
123
+ path?: string;
124
+ }