@malloydata/render 0.0.44-dev230623185845 → 0.0.44

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,15 +1,15 @@
1
- import { DataArray, Explore, Field } from '@malloydata/malloy';
1
+ import { DataArray, Explore, Field, Result, Tags } from '@malloydata/malloy';
2
2
  import { StyleDefaults } from '../data_styles';
3
3
  import { Renderer } from '../renderer';
4
4
  import { RendererOptions } from '../renderer_types';
5
5
  export declare class HTMLView {
6
6
  private document;
7
7
  constructor(document: Document);
8
- render(table: DataArray, options: RendererOptions): Promise<HTMLElement>;
8
+ render(result: Result, options: RendererOptions): Promise<HTMLElement>;
9
9
  }
10
10
  export declare class JSONView {
11
11
  private document;
12
12
  constructor(document: Document);
13
13
  render(table: DataArray): Promise<HTMLElement>;
14
14
  }
15
- export declare function makeRenderer(field: Explore | Field, document: Document, options: RendererOptions, styleDefaults: StyleDefaults, queryTimezone: string | undefined): Renderer;
15
+ export declare function makeRenderer(field: Explore | Field, document: Document, options: RendererOptions, styleDefaults: StyleDefaults, queryTimezone: string | undefined, tags?: Tags): Renderer;
@@ -56,10 +56,11 @@ class HTMLView {
56
56
  constructor(document) {
57
57
  this.document = document;
58
58
  }
59
- async render(table, options) {
59
+ async render(result, options) {
60
+ const table = result.data;
60
61
  const renderer = makeRenderer(table.field, this.document, options, {
61
62
  size: 'large',
62
- }, table.field.structDef.queryTimezone);
63
+ }, table.field.structDef.queryTimezone, result.getTags());
63
64
  try {
64
65
  // TODO Implement row streaming capability for some renderers: some renderers should be usable
65
66
  // as a builder with `begin(field: StructDef)`, `row(field: StructDef, row: QueryDataRow)`,
@@ -101,26 +102,26 @@ class JSONView {
101
102
  }
102
103
  exports.JSONView = JSONView;
103
104
  const suffixMap = {
104
- '_shape_map': 'shape_map',
105
- '_point_map': 'point_map',
106
- '_bar_chart': 'bar_chart',
107
- '_image': 'image',
108
- '_json': 'json',
109
- '_segment_map': 'segment_map',
110
- '_dashboard': 'dashboard',
111
- '_line_chart': 'line_chart',
112
- '_scatter_chart': 'scatter_chart',
113
- '_url': 'link',
114
- '_list': 'list',
115
- '_list_detail': 'list_detail',
116
- '_sparkline': 'sparkline',
117
- '_sparkline_area': 'sparkline',
118
- '_sparkline_column': 'sparkline',
119
- '_sparkline_bar': 'sparkline',
105
+ 'shape_map': 'shape_map',
106
+ 'point_map': 'point_map',
107
+ 'bar_chart': 'bar_chart',
108
+ 'image': 'image',
109
+ 'json': 'json',
110
+ 'segment_map': 'segment_map',
111
+ 'dashboard': 'dashboard',
112
+ 'line_chart': 'line_chart',
113
+ 'scatter_chart': 'scatter_chart',
114
+ 'url': 'link',
115
+ 'list': 'list',
116
+ 'list_detail': 'list_detail',
117
+ 'sparkline': 'sparkline',
118
+ 'sparkline_area': 'sparkline',
119
+ 'sparkline_column': 'sparkline',
120
+ 'sparkline_bar': 'sparkline',
120
121
  };
121
- function getRendererOptions(field, dataStyles) {
122
- var _a, _b, _c;
123
- var _d;
122
+ function getRendererOptions(field, dataStyles, tags) {
123
+ var _a;
124
+ const tagProperties = (_a = tags === null || tags === void 0 ? void 0 : tags.getMalloyTags().properties) !== null && _a !== void 0 ? _a : {};
124
125
  let renderer = dataStyles[field.name];
125
126
  if (!renderer) {
126
127
  for (const sourceClass of field.sourceClasses) {
@@ -129,26 +130,33 @@ function getRendererOptions(field, dataStyles) {
129
130
  }
130
131
  }
131
132
  }
133
+ const { name } = field;
132
134
  for (const suffix in suffixMap) {
133
- const { name } = field;
134
- if (name.endsWith(suffix)) {
135
- const label = name.slice(0, name.length - suffix.length);
136
- if (renderer) {
137
- (_a = renderer.renderer) !== null && _a !== void 0 ? _a : (renderer.renderer = suffixMap[suffix]);
138
- (_b = renderer.data) !== null && _b !== void 0 ? _b : (renderer.data = {});
139
- (_c = (_d = renderer.data).label) !== null && _c !== void 0 ? _c : (_d.label = label);
140
- }
141
- else {
142
- renderer = {
143
- renderer: suffixMap[suffix],
144
- data: {
145
- label,
146
- },
147
- };
148
- }
149
- break;
135
+ if (tagProperties[suffix] === true) {
136
+ return updateOrCreateRenderer(suffix, name, renderer);
137
+ }
138
+ if (name.endsWith(`_${suffix}`)) {
139
+ const label = name.slice(0, name.length - suffix.length - 1);
140
+ return updateOrCreateRenderer(suffix, label, renderer);
150
141
  }
151
142
  }
143
+ }
144
+ function updateOrCreateRenderer(rendererKey, label, renderer) {
145
+ var _a, _b, _c;
146
+ var _d;
147
+ if (renderer) {
148
+ (_a = renderer.renderer) !== null && _a !== void 0 ? _a : (renderer.renderer = suffixMap[rendererKey]);
149
+ (_b = renderer.data) !== null && _b !== void 0 ? _b : (renderer.data = {});
150
+ (_c = (_d = renderer.data).label) !== null && _c !== void 0 ? _c : (_d.label = label);
151
+ }
152
+ else {
153
+ renderer = {
154
+ renderer: suffixMap[rendererKey],
155
+ data: {
156
+ label,
157
+ },
158
+ };
159
+ }
152
160
  return renderer;
153
161
  }
154
162
  function isContainer(field) {
@@ -159,8 +167,8 @@ function isContainer(field) {
159
167
  throw new Error(`${field.name} does not contain fields and cannot be rendered this way`);
160
168
  }
161
169
  }
162
- function makeRenderer(field, document, options, styleDefaults, queryTimezone) {
163
- const renderDef = getRendererOptions(field, options.dataStyles) || {};
170
+ function makeRenderer(field, document, options, styleDefaults, queryTimezone, tags) {
171
+ const renderDef = getRendererOptions(field, options.dataStyles, tags) || {};
164
172
  options.dataStyles[field.name] = renderDef;
165
173
  if (renderDef.renderer === 'shape_map') {
166
174
  return new shape_map_1.HTMLShapeMapRenderer(document, styleDefaults, options, renderDef);
@@ -280,7 +288,7 @@ function makeContainerRenderer(cType, document, explore, options) {
280
288
  const c = container_1.ContainerRenderer.make(cType, document, explore, options);
281
289
  const result = {};
282
290
  explore.intrinsicFields.forEach((field) => {
283
- result[field.name] = makeRenderer(field, document, options, c.defaultStylesForChildren, explore.queryTimezone);
291
+ result[field.name] = makeRenderer(field, document, options, c.defaultStylesForChildren, explore.queryTimezone, field.getTags());
284
292
  });
285
293
  c.childRenderers = result;
286
294
  return c;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/render",
3
- "version": "0.0.44-dev230623185845",
3
+ "version": "0.0.44",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "prepublishOnly": "npm run build"
19
19
  },
20
20
  "dependencies": {
21
- "@malloydata/malloy": "^0.0.44-dev230623185845",
21
+ "@malloydata/malloy": "^0.0.44",
22
22
  "@types/luxon": "^2.4.0",
23
23
  "lodash": "^4.17.20",
24
24
  "luxon": "^2.4.0",