@malloydata/render 0.0.51-dev230629171920 → 0.0.51-dev230705184641

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.
@@ -50,7 +50,7 @@ export declare type RenderDef = ({
50
50
  } & SparkLineRenderOptions) | ({
51
51
  renderer: 'bytes';
52
52
  } & BytesRenderOptions) | ({
53
- renderer: 'link';
53
+ renderer: 'url';
54
54
  } & LinkRenderOptions) | ({
55
55
  renderer: 'vega';
56
56
  } & VegaRenderOptions);
@@ -80,10 +80,13 @@ export interface TextRenderOptions extends DataRenderOptions {
80
80
  export interface BytesRenderOptions extends TextRenderOptions {
81
81
  bytes?: Record<string, unknown>;
82
82
  }
83
+ export declare enum Currency {
84
+ Dollars = "usd",
85
+ Euros = "euro",
86
+ Pounds = "pound"
87
+ }
83
88
  export interface CurrencyRenderOptions extends TextRenderOptions {
84
- currency?: {
85
- unit?: 'dollars' | 'pounds';
86
- };
89
+ currency?: Currency;
87
90
  }
88
91
  export interface TimeRenderOptions extends TextRenderOptions {
89
92
  time?: Record<string, unknown>;
@@ -22,4 +22,11 @@
22
22
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
  */
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.Currency = void 0;
26
+ var Currency;
27
+ (function (Currency) {
28
+ Currency["Dollars"] = "usd";
29
+ Currency["Euros"] = "euro";
30
+ Currency["Pounds"] = "pound";
31
+ })(Currency = exports.Currency || (exports.Currency = {}));
25
32
  //# sourceMappingURL=data_styles.js.map
@@ -1,14 +1,17 @@
1
- import { DataColumn, Explore, Field } from '@malloydata/malloy';
1
+ import { DataColumn, Explore, Field, MalloyTagProperties } from '@malloydata/malloy';
2
2
  import { HTMLTextRenderer } from './text';
3
3
  import { RendererFactory } from '../renderer_factory';
4
4
  import { CurrencyRenderOptions, StyleDefaults } from '../data_styles';
5
5
  import { RendererOptions } from '../renderer_types';
6
6
  import { Renderer } from '../renderer';
7
7
  export declare class HTMLCurrencyRenderer extends HTMLTextRenderer {
8
+ readonly options: CurrencyRenderOptions;
9
+ constructor(document: Document, options: CurrencyRenderOptions);
8
10
  getText(data: DataColumn): string | null;
9
11
  }
10
12
  export declare class CurrencyRendererFactory extends RendererFactory<CurrencyRenderOptions> {
11
13
  static readonly instance: CurrencyRendererFactory;
12
- create(document: Document, _styleDefaults: StyleDefaults, _rendererOptions: RendererOptions, _field: Field | Explore, _options: CurrencyRenderOptions): Renderer;
14
+ create(document: Document, _styleDefaults: StyleDefaults, _rendererOptions: RendererOptions, _field: Field | Explore, options: CurrencyRenderOptions): Renderer;
15
+ parseTagParameters(tags: MalloyTagProperties): CurrencyRenderOptions | undefined;
13
16
  get rendererName(): string;
14
17
  }
@@ -25,13 +25,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.CurrencyRendererFactory = exports.HTMLCurrencyRenderer = void 0;
26
26
  const text_1 = require("./text");
27
27
  const renderer_factory_1 = require("../renderer_factory");
28
+ const data_styles_1 = require("../data_styles");
28
29
  class HTMLCurrencyRenderer extends text_1.HTMLTextRenderer {
30
+ constructor(document, options) {
31
+ super(document);
32
+ this.options = options;
33
+ }
29
34
  getText(data) {
30
35
  if (data.isNull()) {
31
36
  return null;
32
37
  }
33
- // TODO get this from renderer options
34
- const unitText = '$';
38
+ let unitText = '$';
39
+ switch (this.options.currency) {
40
+ case data_styles_1.Currency.Euros:
41
+ unitText = '€';
42
+ break;
43
+ case data_styles_1.Currency.Pounds:
44
+ unitText = '£';
45
+ break;
46
+ case data_styles_1.Currency.Dollars:
47
+ // Do nothing.
48
+ break;
49
+ }
35
50
  const numText = data.number.value.toLocaleString('en-US', {
36
51
  minimumFractionDigits: 2,
37
52
  maximumFractionDigits: 2,
@@ -41,8 +56,14 @@ class HTMLCurrencyRenderer extends text_1.HTMLTextRenderer {
41
56
  }
42
57
  exports.HTMLCurrencyRenderer = HTMLCurrencyRenderer;
43
58
  class CurrencyRendererFactory extends renderer_factory_1.RendererFactory {
44
- create(document, _styleDefaults, _rendererOptions, _field, _options) {
45
- return new HTMLCurrencyRenderer(document);
59
+ create(document, _styleDefaults, _rendererOptions, _field, options) {
60
+ return new HTMLCurrencyRenderer(document, options);
61
+ }
62
+ parseTagParameters(tags) {
63
+ var _a;
64
+ return {
65
+ currency: (_a = tags[this.rendererName]) !== null && _a !== void 0 ? _a : data_styles_1.Currency.Dollars,
66
+ };
46
67
  }
47
68
  get rendererName() {
48
69
  return 'currency';
@@ -89,7 +89,7 @@ const suffixMap = {
89
89
  'dashboard': 'dashboard',
90
90
  'line_chart': 'line_chart',
91
91
  'scatter_chart': 'scatter_chart',
92
- 'url': 'link',
92
+ 'url': 'url',
93
93
  'list': 'list',
94
94
  'list_detail': 'list_detail',
95
95
  'sparkline': 'sparkline',
@@ -97,13 +97,7 @@ const suffixMap = {
97
97
  'sparkline_column': 'sparkline',
98
98
  'sparkline_bar': 'sparkline',
99
99
  };
100
- const atomicFieldTagMap = {
101
- 'percent': 'percent',
102
- 'currency': 'currency',
103
- };
104
- function getRendererOptions(field, dataStyles, tags) {
105
- var _a;
106
- const tagProperties = (_a = tags === null || tags === void 0 ? void 0 : tags.getMalloyTags().properties) !== null && _a !== void 0 ? _a : {};
100
+ function getRendererOptions(field, dataStyles) {
107
101
  let renderer = dataStyles[field.name];
108
102
  if (!renderer) {
109
103
  for (const sourceClass of field.sourceClasses) {
@@ -113,17 +107,7 @@ function getRendererOptions(field, dataStyles, tags) {
113
107
  }
114
108
  }
115
109
  const { name } = field;
116
- if (field.hasParentExplore() && field.isAtomicField()) {
117
- for (const tag in atomicFieldTagMap) {
118
- if (tagProperties[tag]) {
119
- return updateOrCreateRenderer(tag, name, atomicFieldTagMap, renderer);
120
- }
121
- }
122
- }
123
110
  for (const suffix in suffixMap) {
124
- if (tagProperties[suffix]) {
125
- return updateOrCreateRenderer(suffix, name, suffixMap, renderer);
126
- }
127
111
  if (name.endsWith(`_${suffix}`)) {
128
112
  const label = name.slice(0, name.length - suffix.length - 1);
129
113
  return updateOrCreateRenderer(suffix, label, suffixMap, renderer);
@@ -158,19 +142,19 @@ function isContainer(field) {
158
142
  }
159
143
  }
160
144
  function makeRenderer(field, document, options, styleDefaults, queryTimezone, tags) {
161
- const renderDef = getRendererOptions(field, options.dataStyles, tags) || {};
145
+ const renderDef = getRendererOptions(field, options.dataStyles);
162
146
  options.dataStyles[field.name] = renderDef;
163
- const renderer = new main_renderer_factory_1.MainRendererFactory().create(document, styleDefaults, options, field, renderDef, queryTimezone);
147
+ const renderer = new main_renderer_factory_1.MainRendererFactory().create(renderDef, tags === null || tags === void 0 ? void 0 : tags.getMalloyTags(), document, styleDefaults, options, field, queryTimezone);
164
148
  if (renderer) {
165
149
  return renderer;
166
150
  }
167
- if (renderDef.renderer === 'dashboard') {
151
+ if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'dashboard') {
168
152
  return makeContainerRenderer(dashboard_1.HTMLDashboardRenderer, document, isContainer(field), options);
169
153
  }
170
- else if (renderDef.renderer === 'list_detail') {
154
+ else if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'list_detail') {
171
155
  return makeContainerRenderer(list_detail_1.HTMLListDetailRenderer, document, isContainer(field), options);
172
156
  }
173
- else if (renderDef.renderer === 'table' ||
157
+ else if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'table' ||
174
158
  !field.hasParentExplore() ||
175
159
  field.isExploreField()) {
176
160
  return makeContainerRenderer(table_1.HTMLTableRenderer, document, isContainer(field), options);
@@ -1,6 +1,7 @@
1
- import { Field, Explore } from '@malloydata/malloy';
2
- import { RenderDef, StyleDefaults } from './data_styles';
1
+ import { Field, Explore, MalloyTags, MalloyTagProperties } from '@malloydata/malloy';
2
+ import { DataRenderOptions, RenderDef, StyleDefaults } from './data_styles';
3
3
  import { Renderer } from './renderer';
4
+ import { RendererFactory } from './renderer_factory';
4
5
  import { RendererOptions } from './renderer_types';
5
6
  import { ShapeMapRendererFactory } from './html/shape_map';
6
7
  import { PointMapRendererFactory } from './html/point_map';
@@ -26,5 +27,7 @@ import { UnsupportedRendererFactory } from './html/unsupported';
26
27
  import { TextRendererFactory } from './html/text';
27
28
  export declare class MainRendererFactory {
28
29
  static renderFactories: (JSONRendererFactory | TextRendererFactory | NumberRendererFactory | ShapeMapRendererFactory | PointMapRendererFactory | ImageRendererFactory | SegmentMapRendererFactory | VegaRendererFactory | LineChartRendererFactory | SparkLineRendererFactory | BarChartRendererFactory | BarSparkLineRendererFactory | AreaSparkLineRendererFactory | ColumnSparkLineRendererFactory | ScatterChartRendererFactory | DateRendererFactory | CurrencyRendererFactory | PercentRendererFactory | BytesRendererFactory | BooleanRendererFactory | LinkRendererFactory | UnsupportedRendererFactory)[];
29
- create(document: Document, styleDefaults: StyleDefaults, rendererOptions: RendererOptions, field: Field | Explore, renderDef: RenderDef, timezone?: string | undefined): Renderer | undefined;
30
+ create(renderDef: RenderDef | undefined, tags: MalloyTags | undefined, document: Document, styleDefaults: StyleDefaults, rendererOptions: RendererOptions, field: Field | Explore, timezone?: string | undefined): Renderer | undefined;
31
+ matchesRenderDef(renderDef: RenderDef | undefined, factory: RendererFactory<DataRenderOptions>): boolean | "" | undefined;
32
+ matchesTag(properties: MalloyTagProperties, factory: RendererFactory<DataRenderOptions>): string | boolean | undefined;
30
33
  }
@@ -24,11 +24,13 @@ const link_1 = require("./html/link");
24
24
  const unsupported_1 = require("./html/unsupported");
25
25
  const text_1 = require("./html/text");
26
26
  class MainRendererFactory {
27
- create(document, styleDefaults, rendererOptions, field, renderDef, timezone) {
27
+ create(renderDef, tags, document, styleDefaults, rendererOptions, field, timezone) {
28
+ var _a;
29
+ const tagProperties = (_a = tags === null || tags === void 0 ? void 0 : tags.properties) !== null && _a !== void 0 ? _a : {};
28
30
  let factory;
29
31
  for (const f of MainRendererFactory.renderFactories) {
30
- if ((f.rendererName &&
31
- renderDef.renderer === f.rendererName &&
32
+ if (((this.matchesRenderDef(renderDef, f) ||
33
+ this.matchesTag(tagProperties, f)) &&
32
34
  f.isValidMatch(field)) ||
33
35
  f.activates(field)) {
34
36
  factory = f;
@@ -36,7 +38,15 @@ class MainRendererFactory {
36
38
  break;
37
39
  }
38
40
  }
39
- return factory === null || factory === void 0 ? void 0 : factory.create(document, styleDefaults, rendererOptions, field, renderDef, timezone);
41
+ return factory === null || factory === void 0 ? void 0 : factory.create(document, styleDefaults, rendererOptions, field, renderDef || factory.parseTagParameters(tagProperties) || {}, timezone);
42
+ }
43
+ matchesRenderDef(renderDef, factory) {
44
+ return (renderDef &&
45
+ factory.rendererName &&
46
+ renderDef.renderer === factory.rendererName);
47
+ }
48
+ matchesTag(properties, factory) {
49
+ return (properties && factory.rendererName && properties[factory.rendererName]);
40
50
  }
41
51
  }
42
52
  exports.MainRendererFactory = MainRendererFactory;
@@ -1,4 +1,4 @@
1
- import { Explore, Field } from '@malloydata/malloy';
1
+ import { Explore, Field, MalloyTagProperties } from '@malloydata/malloy';
2
2
  import { Renderer } from './renderer';
3
3
  import { DataRenderOptions, RenderDef, StyleDefaults } from './data_styles';
4
4
  import { RendererOptions } from './renderer_types';
@@ -6,6 +6,7 @@ export declare abstract class RendererFactory<T extends DataRenderOptions> {
6
6
  activates(_field: Field | Explore): boolean;
7
7
  isValidMatch(_field: Field | Explore): boolean;
8
8
  matches(renderDef: RenderDef): boolean;
9
+ parseTagParameters(_tags: MalloyTagProperties): T | undefined;
9
10
  abstract get rendererName(): string | undefined;
10
11
  abstract create(document: Document, styleDefaults: StyleDefaults, rendererOptions: RendererOptions, field: Field | Explore, renderOptions: T, timezone?: string): Renderer;
11
12
  }
@@ -12,6 +12,9 @@ class RendererFactory {
12
12
  matches(renderDef) {
13
13
  return renderDef.renderer === this.rendererName;
14
14
  }
15
+ parseTagParameters(_tags) {
16
+ return undefined;
17
+ }
15
18
  }
16
19
  exports.RendererFactory = RendererFactory;
17
20
  //# sourceMappingURL=renderer_factory.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/render",
3
- "version": "0.0.51-dev230629171920",
3
+ "version": "0.0.51-dev230705184641",
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.51-dev230629171920",
21
+ "@malloydata/malloy": "^0.0.51-dev230705184641",
22
22
  "@types/luxon": "^2.4.0",
23
23
  "lodash": "^4.17.20",
24
24
  "luxon": "^2.4.0",