@genesislcap/foundation-forms 14.4.0 → 14.5.0

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.
Files changed (46) hide show
  1. package/dist/dts/filters/filters.d.ts +98 -0
  2. package/dist/dts/filters/filters.d.ts.map +1 -0
  3. package/dist/dts/filters/filters.styles.d.ts +2 -0
  4. package/dist/dts/filters/filters.styles.d.ts.map +1 -0
  5. package/dist/dts/filters/filters.template.d.ts +3 -0
  6. package/dist/dts/filters/filters.template.d.ts.map +1 -0
  7. package/dist/dts/filters/index.d.ts +2 -0
  8. package/dist/dts/filters/index.d.ts.map +1 -0
  9. package/dist/dts/index.d.ts +1 -0
  10. package/dist/dts/index.d.ts.map +1 -1
  11. package/dist/dts/jsonforms/renderers/ControlWrapperRenderer.d.ts.map +1 -1
  12. package/dist/dts/jsonforms/renderers/FilterDateControlRenderer.d.ts +3 -0
  13. package/dist/dts/jsonforms/renderers/FilterDateControlRenderer.d.ts.map +1 -0
  14. package/dist/dts/jsonforms/renderers/FilterNumberControlRenderer.d.ts +3 -0
  15. package/dist/dts/jsonforms/renderers/FilterNumberControlRenderer.d.ts.map +1 -0
  16. package/dist/dts/utils/filters.d.ts +13 -0
  17. package/dist/dts/utils/filters.d.ts.map +1 -0
  18. package/dist/dts/utils/index.d.ts +1 -0
  19. package/dist/dts/utils/index.d.ts.map +1 -1
  20. package/dist/esm/filters/filters.js +144 -0
  21. package/dist/esm/filters/filters.styles.js +62 -0
  22. package/dist/esm/filters/filters.template.js +40 -0
  23. package/dist/esm/filters/index.js +1 -0
  24. package/dist/esm/index.js +1 -0
  25. package/dist/esm/jsonforms/renderers/ControlWrapperRenderer.js +1 -0
  26. package/dist/esm/jsonforms/renderers/FilterDateControlRenderer.js +67 -0
  27. package/dist/esm/jsonforms/renderers/FilterNumberControlRenderer.js +60 -0
  28. package/dist/esm/utils/filters.js +84 -0
  29. package/dist/esm/utils/index.js +1 -0
  30. package/dist/foundation-forms.api.json +363 -0
  31. package/dist/foundation-forms.d.ts +109 -0
  32. package/docs/api/foundation-forms.createexpressions.md +13 -0
  33. package/docs/api/foundation-forms.filters.clearfiltersdata.md +18 -0
  34. package/docs/api/foundation-forms.filters.data.md +13 -0
  35. package/docs/api/foundation-forms.filters.disconnectedcallback.md +18 -0
  36. package/docs/api/foundation-forms.filters.jsonschema.md +18 -0
  37. package/docs/api/foundation-forms.filters.md +37 -0
  38. package/docs/api/foundation-forms.filters.renderers.md +13 -0
  39. package/docs/api/foundation-forms.filters.resourcename.md +13 -0
  40. package/docs/api/foundation-forms.filters.uischema.md +50 -0
  41. package/docs/api/foundation-forms.filters.value.md +13 -0
  42. package/docs/api/foundation-forms.filters.valuechanged.md +18 -0
  43. package/docs/api/foundation-forms.filtersrenderers.md +12 -0
  44. package/docs/api/foundation-forms.md +3 -0
  45. package/docs/api-report.md +40 -0
  46. package/package.json +6 -5
@@ -0,0 +1,98 @@
1
+ import { UISchemaElement } from '@jsonforms/core';
2
+ import { FoundationElement } from '@microsoft/fast-foundation';
3
+ import { JSONSchema7 } from 'json-schema';
4
+ import { RendererEntry } from '../types';
5
+ /** @internal */
6
+ export declare const filtersLogger: import("@genesislcap/foundation-utils").Logger;
7
+ /** @public */
8
+ export declare const filtersRenderers: any[];
9
+ /**
10
+ * Foundation filters component for automatically generated filters based on json schema
11
+ * obtained from the api, supplied initial data or supplied JSON schema.
12
+ * Allowing customisable filters elements using UI schema and set of custom renderers
13
+ * @beta
14
+ */
15
+ export declare class Filters extends FoundationElement {
16
+ /**
17
+ * Name of the backend resource which will provide metadata
18
+ * used to generate filters
19
+ * @public
20
+ */
21
+ resourceName: string;
22
+ private resourceNameChanged;
23
+ clearFiltersData(): void;
24
+ /**
25
+ * UI schema used to define configuration of the layout and elements in the filters
26
+ * Check {@link UiSchemaElement} for possible options
27
+ *
28
+ * @remarks
29
+ * If not provided will be autogenerated based on json schema or initial data
30
+ *
31
+ * @example
32
+ * Here's a simple example:
33
+ * ```
34
+ * const sampleUISchema = {
35
+ * type: 'VerticalLayout',
36
+ * elements: [
37
+ * {
38
+ * type: 'Control',
39
+ * scope: '#/properties/QUANTITY',
40
+ * label: 'Quantity',
41
+ * },
42
+ * {
43
+ * type: 'Control',
44
+ * scope: '#/properties/INSTRUMENT_ID',
45
+ * options: {
46
+ * allOptionsResourceName: 'INSTRUMENT',
47
+ * valueField: 'INSTRUMENT_ID',
48
+ * labelField: 'INSTRUMENT_ID',
49
+ * },
50
+ * label: 'Instrument',
51
+ * },
52
+ * {
53
+ * type: 'Control',
54
+ * scope: '#/properties/SIDE',
55
+ * label: 'Side',
56
+ * },
57
+ * ],
58
+ * };
59
+ * ```
60
+ * @public
61
+ */
62
+ uischema: UISchemaElement;
63
+ /**
64
+ * Allows to provide set of renderers used by the filters. If not provided it will default to text-field inputs
65
+ * @public
66
+ */
67
+ renderers: RendererEntry[];
68
+ /**
69
+ * Alternatively to providing {@link Form.resourceName} you can hardcode the JSON schema on the client.
70
+ * @public
71
+ * @remarks
72
+ * Use this when you want to avoid fetching metadata from the server but
73
+ * be aware that it could get out of sync if metadata changes on the server
74
+ */
75
+ jsonSchema: JSONSchema7;
76
+ private connect;
77
+ /**
78
+ * Initial data for the filters
79
+ * @public
80
+ */
81
+ data: any;
82
+ /**
83
+ * Created criteria based on the given data that can be used to filter the data
84
+ * @public
85
+ */
86
+ value: string;
87
+ valueChanged(): void;
88
+ /**
89
+ * @internal
90
+ */
91
+ searchFilters(): void;
92
+ /**
93
+ * @internal
94
+ */
95
+ onChange(event: CustomEvent): void;
96
+ disconnectedCallback(): void;
97
+ }
98
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/filters/filters.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC,gBAAgB;AAChB,eAAO,MAAM,aAAa,gDAAqC,CAAC;AAchE,cAAc;AACd,eAAO,MAAM,gBAAgB,OAY5B,CAAC;AACF;;;;;GAKG;AAEH,qBAKa,OAAQ,SAAQ,iBAAiB;IAC5C;;;;OAIG;IACG,YAAY,EAAE,MAAM,CAAC;YACb,mBAAmB;IAW1B,gBAAgB;IAIvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACS,QAAQ,EAAE,eAAe,CAAC;IACtC;;;OAGG;IACS,SAAS,EAAE,aAAa,EAAE,CAAoB;IAC1D;;;;;;OAMG;IACS,UAAU,EAAE,WAAW,CAAC;IAE3B,OAAO,CAAC,OAAO,CAAW;IACnC;;;OAGG;IACS,IAAI,EAAE,GAAG,CAAM;IAC3B;;;OAGG;IACS,KAAK,EAAE,MAAM,CAAC;IAC1B,YAAY;IAIZ;;OAEG;IACH,aAAa;IAqBb;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW;IAO3B,oBAAoB;CAKrB"}
@@ -0,0 +1,2 @@
1
+ export declare const foundationFiltersStyles: import("@microsoft/fast-element").ElementStyles;
2
+ //# sourceMappingURL=filters.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.styles.d.ts","sourceRoot":"","sources":["../../../src/filters/filters.styles.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,iDA2DnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Filters } from './filters';
2
+ export declare const foundationFiltersTemplate: import("@microsoft/fast-element").ViewTemplate<Filters, any>;
3
+ //# sourceMappingURL=filters.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.template.d.ts","sourceRoot":"","sources":["../../../src/filters/filters.template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,eAAO,MAAM,yBAAyB,8DAgCrC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './filters';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/filters/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from './filters';
1
2
  export * from './form';
2
3
  export * from './types';
3
4
  export * from './utils';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ControlWrapperRenderer.d.ts","sourceRoot":"","sources":["../../../../src/jsonforms/renderers/ControlWrapperRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAML,WAAW,EAEZ,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,8BAA8B,0DA4B1C,CAAC;AA0BF,qBAKa,cAAe,SAAQ,WAAW;IACjC,OAAO,MAAC;IACR,OAAO,MAAC;IAEpB,IACI,eAAe,YAOlB;IAED,IACI,aAAa,WAMhB;CACF"}
1
+ {"version":3,"file":"ControlWrapperRenderer.d.ts","sourceRoot":"","sources":["../../../../src/jsonforms/renderers/ControlWrapperRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAML,WAAW,EAEZ,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,8BAA8B,0DA4B1C,CAAC;AA2BF,qBAKa,cAAe,SAAQ,WAAW;IACjC,OAAO,MAAC;IACR,OAAO,MAAC;IAEpB,IACI,eAAe,YAOlB;IAED,IACI,aAAa,WAMhB;CACF"}
@@ -0,0 +1,3 @@
1
+ export declare const DateControlRendererTemplate: import("@microsoft/fast-element").ViewTemplate<any, any>;
2
+ export declare const FilterDateControlRendererEntry: any;
3
+ //# sourceMappingURL=FilterDateControlRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterDateControlRenderer.d.ts","sourceRoot":"","sources":["../../../../src/jsonforms/renderers/FilterDateControlRenderer.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B,0DAmDvC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,GAI5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const FilterNumberControlRendererTemplate: import("@microsoft/fast-element").ViewTemplate<any, any>;
2
+ export declare const FilterNumberControlRendererEntry: any;
3
+ //# sourceMappingURL=FilterNumberControlRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterNumberControlRenderer.d.ts","sourceRoot":"","sources":["../../../../src/jsonforms/renderers/FilterNumberControlRenderer.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mCAAmC,0DAsD/C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,GAI9C,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Expression } from '@genesislcap/foundation-criteria';
2
+ type Expressions = {
3
+ options: Expression[];
4
+ numberOptions: Expression[];
5
+ dateOptions: Expression[];
6
+ };
7
+ /**
8
+ * Creates a expressions/criteria from given payload
9
+ * @public
10
+ */
11
+ export declare const createExpressions: (payload: any) => Expressions;
12
+ export {};
13
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/utils/filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkC,MAAM,kCAAkC,CAAC;AAM9F,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,YAAa,GAAG,gBAyC7C,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from './filters';
1
2
  export * from './translation';
2
3
  export * from './validation';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,144 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { Connect } from '@genesislcap/foundation-comms';
3
+ import { CriteriaBuilder, Join } from '@genesislcap/foundation-criteria';
4
+ import { createLogger } from '@genesislcap/foundation-utils';
5
+ import { isControl, isStringControl, mapStateToControlProps, rankWith, } from '@jsonforms/core';
6
+ import { attr, customElement, observable } from '@microsoft/fast-element';
7
+ import { FoundationElement } from '@microsoft/fast-foundation';
8
+ import { BooleanControlEntry } from '../jsonforms/renderers/BooleanControlRenderer';
9
+ import { ConnectedMultiselectControlRendererEntry } from '../jsonforms/renderers/ConnectedMultiselectControlRenderer';
10
+ import { ConnectedSelectControlRendererEntry } from '../jsonforms/renderers/ConnectedSelectControlRenderer';
11
+ import { EnumControlRendererEntry } from '../jsonforms/renderers/EnumControlRenderer';
12
+ import { FilterDateControlRendererEntry } from '../jsonforms/renderers/FilterDateControlRenderer';
13
+ import { FilterNumberControlRendererEntry } from '../jsonforms/renderers/FilterNumberControlRenderer';
14
+ import { InvisibleControlEntry } from '../jsonforms/renderers/InvisibleControlRenderer';
15
+ import { LayoutRendererEntry } from '../jsonforms/renderers/LayoutRenderer';
16
+ import { LayoutVertical2ColumnsEntry } from '../jsonforms/renderers/LayoutVertical2ColumnsRenderer';
17
+ import { StringControlRendererTemplate } from '../jsonforms/renderers/StringControlRenderer';
18
+ import { createExpressions } from '../utils/filters';
19
+ import { foundationFiltersStyles as styles } from './filters.styles';
20
+ import { foundationFiltersTemplate as template } from './filters.template';
21
+ /** @internal */
22
+ export const filtersLogger = createLogger('foundation-filters');
23
+ const stringEntry = {
24
+ renderer: StringControlRendererTemplate,
25
+ tester: rankWith(2, isStringControl),
26
+ mapper: mapStateToControlProps,
27
+ };
28
+ const fallbackEntry = {
29
+ renderer: StringControlRendererTemplate,
30
+ tester: rankWith(1, isControl),
31
+ mapper: mapStateToControlProps,
32
+ };
33
+ /** @public */
34
+ export const filtersRenderers = [
35
+ fallbackEntry,
36
+ stringEntry,
37
+ BooleanControlEntry,
38
+ LayoutVertical2ColumnsEntry,
39
+ LayoutRendererEntry,
40
+ FilterNumberControlRendererEntry,
41
+ ConnectedMultiselectControlRendererEntry,
42
+ EnumControlRendererEntry,
43
+ ConnectedSelectControlRendererEntry,
44
+ FilterDateControlRendererEntry,
45
+ InvisibleControlEntry,
46
+ ];
47
+ /**
48
+ * Foundation filters component for automatically generated filters based on json schema
49
+ * obtained from the api, supplied initial data or supplied JSON schema.
50
+ * Allowing customisable filters elements using UI schema and set of custom renderers
51
+ * @beta
52
+ */
53
+ let Filters = class Filters extends FoundationElement {
54
+ constructor() {
55
+ super(...arguments);
56
+ /**
57
+ * Allows to provide set of renderers used by the filters. If not provided it will default to text-field inputs
58
+ * @public
59
+ */
60
+ this.renderers = filtersRenderers;
61
+ /**
62
+ * Initial data for the filters
63
+ * @public
64
+ */
65
+ this.data = {};
66
+ }
67
+ resourceNameChanged() {
68
+ var _a, _b, _c;
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ this.jsonSchema = undefined;
71
+ if (this.resourceName) {
72
+ const jsonSchemaResponse = yield this.connect.getJSONSchema(this.resourceName);
73
+ this.jsonSchema = (_b = (_a = jsonSchemaResponse === null || jsonSchemaResponse === void 0 ? void 0 : jsonSchemaResponse.OUTBOUND) === null || _a === void 0 ? void 0 : _a.$defs) === null || _b === void 0 ? void 0 : _b['global.genesis.message.core.dataserver.QueryRow'];
74
+ (_c = this.jsonSchema) === null || _c === void 0 ? true : delete _c.properties['DETAILS'];
75
+ }
76
+ });
77
+ }
78
+ clearFiltersData() {
79
+ this.data = {};
80
+ }
81
+ valueChanged() {
82
+ this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
83
+ }
84
+ /**
85
+ * @internal
86
+ */
87
+ searchFilters() {
88
+ this.value = '';
89
+ const payload = Object.assign({}, this.data);
90
+ const expressions = createExpressions(payload);
91
+ const criteriaBuilder = new CriteriaBuilder();
92
+ filtersLogger.debug({ payload });
93
+ if (expressions.dateOptions.length > 0 ||
94
+ expressions.numberOptions.length > 0 ||
95
+ expressions.options.length > 0) {
96
+ for (const [key, value] of Object.entries(expressions)) {
97
+ value.length > 0 ? criteriaBuilder.withExpression(value, { join: Join.And() }) : '';
98
+ }
99
+ this.value = criteriaBuilder.build();
100
+ }
101
+ }
102
+ /**
103
+ * @internal
104
+ */
105
+ onChange(event) {
106
+ filtersLogger.debug({ event });
107
+ if (event.detail) {
108
+ this.data = event.detail.data;
109
+ }
110
+ }
111
+ disconnectedCallback() {
112
+ super.disconnectedCallback();
113
+ this.data = {};
114
+ }
115
+ };
116
+ __decorate([
117
+ attr
118
+ ], Filters.prototype, "resourceName", void 0);
119
+ __decorate([
120
+ observable
121
+ ], Filters.prototype, "uischema", void 0);
122
+ __decorate([
123
+ observable
124
+ ], Filters.prototype, "renderers", void 0);
125
+ __decorate([
126
+ observable
127
+ ], Filters.prototype, "jsonSchema", void 0);
128
+ __decorate([
129
+ Connect
130
+ ], Filters.prototype, "connect", void 0);
131
+ __decorate([
132
+ observable
133
+ ], Filters.prototype, "data", void 0);
134
+ __decorate([
135
+ observable
136
+ ], Filters.prototype, "value", void 0);
137
+ Filters = __decorate([
138
+ customElement({
139
+ name: 'foundation-filters',
140
+ template,
141
+ styles,
142
+ })
143
+ ], Filters);
144
+ export { Filters };
@@ -0,0 +1,62 @@
1
+ import { controlCornerRadius, designUnit, strokeWidth } from '@microsoft/fast-components';
2
+ import { css } from '@microsoft/fast-element';
3
+ import { forcedColorsStylesheetBehavior } from '@microsoft/fast-foundation';
4
+ import { SystemColors } from '@microsoft/fast-web-utilities';
5
+ export const foundationFiltersStyles = css `
6
+ :host {
7
+ display: flex;
8
+ height: 100%;
9
+ width: 100%;
10
+ border: calc(${strokeWidth} * 1px) solid transparent;
11
+ margin: 0;
12
+ border-radius: calc(${controlCornerRadius} * 1px);
13
+ min-width: 64px;
14
+ }
15
+
16
+ .header {
17
+ padding: calc(var(--design-unit) * 4px);
18
+ }
19
+
20
+ .header h2 {
21
+ margin: 0;
22
+ }
23
+
24
+ .container {
25
+ width: 100%;
26
+ display: flex;
27
+ flex-direction: column;
28
+ }
29
+
30
+ .container-forms {
31
+ overflow: hidden;
32
+ overflow-y: scroll;
33
+ display: flex;
34
+ }
35
+
36
+ .container-forms json-forms {
37
+ width: 100%;
38
+ padding: 0 15px;
39
+ }
40
+
41
+ .label {
42
+ font-size: calc(${designUnit} * 1px + 0.7vmin);
43
+ }
44
+
45
+ .actions {
46
+ display: flex;
47
+ flex-direction: row;
48
+ align-items: flex-start;
49
+ justify-content: flex-end;
50
+ padding: calc(${designUnit} * 4px);
51
+ gap: calc(${designUnit} * 2px);
52
+ }
53
+
54
+ .action-button {
55
+ width: 70px;
56
+ }
57
+ `.withBehaviors(forcedColorsStylesheetBehavior(css `
58
+ :host {
59
+ background: ${SystemColors.Canvas};
60
+ border-color: ${SystemColors.CanvasText};
61
+ }
62
+ `));
@@ -0,0 +1,40 @@
1
+ import { html } from '@microsoft/fast-element';
2
+ import { JSONForms } from '../jsonforms/json-forms';
3
+ import { ControlWrapper } from '../jsonforms/renderers/ControlWrapperRenderer';
4
+ import { DispatchRenderer } from '../jsonforms/renderers/dispatch-renderer';
5
+ JSONForms;
6
+ ControlWrapper;
7
+ DispatchRenderer;
8
+ export const foundationFiltersTemplate = html `
9
+ <template>
10
+ <div class="container" part="container">
11
+ <div class="container-forms" part="container-forms">
12
+ <json-forms
13
+ :renderers=${(x) => x.renderers}
14
+ :uischema=${(x) => x.uischema}
15
+ :schema=${(x) => x.jsonSchema}
16
+ :data=${(x) => x.data}
17
+ @data-change=${(x, c) => x.onChange(c.event)}
18
+ ></json-forms>
19
+ </div>
20
+ <div class="actions">
21
+ <fast-button
22
+ @click="${(x) => x.clearFiltersData()}"
23
+ class="action-button"
24
+ appearance="neutral"
25
+ data-test-id="clear-filters-button"
26
+ >
27
+ Clear
28
+ </fast-button>
29
+ <fast-button
30
+ @click="${(x) => x.searchFilters()}"
31
+ data-test-id="search-filters-button"
32
+ class="action-button"
33
+ appearance="accent"
34
+ >
35
+ Search
36
+ </fast-button>
37
+ </div>
38
+ </div>
39
+ </template>
40
+ `;
@@ -0,0 +1 @@
1
+ export * from './filters';
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './filters';
1
2
  export * from './form';
2
3
  export * from './types';
3
4
  export * from './utils';
@@ -47,6 +47,7 @@ const styles = css `
47
47
  .wrapper {
48
48
  display: flex;
49
49
  width: 100%;
50
+ align-items: center;
50
51
  }
51
52
  `;
52
53
  let ControlWrapper = class ControlWrapper extends FASTElement {
@@ -0,0 +1,67 @@
1
+ import { mapStateToControlProps, rankWith } from '@jsonforms/core';
2
+ import { html } from '@microsoft/fast-element';
3
+ import { isDate } from '../testers/isDate';
4
+ import { DATE_CONTROL_RANK } from './RenderersRanks';
5
+ export const DateControlRendererTemplate = html `
6
+ <template>
7
+ <control-wrapper :control=${(x) => x.control} ?submitted=${(x) => x.submitted}>
8
+ <zero-text-field
9
+ :value=${(x) => {
10
+ var _a, _b;
11
+ return ((_a = x.control.data) === null || _a === void 0 ? void 0 : _a.min) === undefined || ((_b = x.control.data) === null || _b === void 0 ? void 0 : _b.min) === null
12
+ ? ''
13
+ : new Intl.DateTimeFormat('fr-CA', {
14
+ year: 'numeric',
15
+ month: '2-digit',
16
+ day: '2-digit',
17
+ }).format(x.control.data.min);
18
+ }}
19
+ @change="${(x, c) => {
20
+ var _a, _b;
21
+ const value = c.event.target.control.valueAsNumber;
22
+ return x.control.handleChange(x.control.path, {
23
+ min: value ? value : undefined,
24
+ max: ((_a = x.control.data) === null || _a === void 0 ? void 0 : _a.max) < value ? undefined : (_b = x.control.data) === null || _b === void 0 ? void 0 : _b.max,
25
+ type: 'date',
26
+ });
27
+ }}"
28
+ id=${(x) => `min-${x.control.path}`}
29
+ type="date"
30
+ data-test-id=${(x) => `min-${x.control.path}`}
31
+ @blur=${(x) => x.onBlur()}
32
+ style="width: 100%"
33
+ ></zero-text-field>
34
+ <zero-text-field
35
+ :value=${(x) => {
36
+ var _a, _b;
37
+ return ((_a = x.control.data) === null || _a === void 0 ? void 0 : _a.max) === undefined || ((_b = x.control.data) === null || _b === void 0 ? void 0 : _b.max) === null
38
+ ? ''
39
+ : new Intl.DateTimeFormat('fr-CA', {
40
+ year: 'numeric',
41
+ month: '2-digit',
42
+ day: '2-digit',
43
+ }).format(x.control.data.max);
44
+ }}
45
+ @change="${(x, c) => {
46
+ var _a, _b;
47
+ const value = c.event.target.control.valueAsNumber;
48
+ return x.control.handleChange(x.control.path, {
49
+ min: ((_a = x.control.data) === null || _a === void 0 ? void 0 : _a.min) > value ? undefined : (_b = x.control.data) === null || _b === void 0 ? void 0 : _b.min,
50
+ max: value ? value : undefined,
51
+ type: 'date',
52
+ });
53
+ }}"
54
+ id=${(x) => `max-${x.control.path}`}
55
+ type="date"
56
+ data-test-id=${(x) => `max-${x.control.path}`}
57
+ @blur=${(x) => x.onBlur()}
58
+ style="width: 100%"
59
+ ></zero-text-field>
60
+ </control-wrapper>
61
+ </template>
62
+ `;
63
+ export const FilterDateControlRendererEntry = {
64
+ renderer: DateControlRendererTemplate,
65
+ tester: rankWith(DATE_CONTROL_RANK, isDate),
66
+ mapper: mapStateToControlProps, // TODO: change mapper to handle dates instead of doing it in the template
67
+ };
@@ -0,0 +1,60 @@
1
+ import { mapStateToControlProps, rankWith } from '@jsonforms/core';
2
+ import { html } from '@microsoft/fast-element';
3
+ import { isOneOfNumber } from '../testers/isOneOfNumber';
4
+ import { NUMBER_CONTROL_RANK } from './RenderersRanks';
5
+ export const FilterNumberControlRendererTemplate = html `
6
+ <template>
7
+ <control-wrapper :control=${(x) => x.control} ?submitted=${(x) => x.submitted}>
8
+ <zero-text-field
9
+ :value=${(x) => { var _a; return (((_a = x.control.data) === null || _a === void 0 ? void 0 : _a.min) === undefined ? '' : x.control.data.min); }}
10
+ @change=${(x, c) => {
11
+ var _a, _b;
12
+ const value = parseFloat(c.event.target.value);
13
+ return x.control.handleChange(x.control.path, !isNaN(value)
14
+ ? {
15
+ min: value,
16
+ max: ((_a = x.control.data) === null || _a === void 0 ? void 0 : _a.max) < value ? undefined : (_b = x.control.data) === null || _b === void 0 ? void 0 : _b.max,
17
+ type: 'number',
18
+ }
19
+ : Object.assign(Object.assign({}, x.control.data), { min: undefined }));
20
+ }}
21
+ placeholder="Min"
22
+ id=${(x) => `min-${x.control.path}`}
23
+ data-test-id=${(x) => `min-${x.control.path}`}
24
+ @blur=${(x) => x.onBlur()}
25
+ style="width: 100%"
26
+ ></zero-text-field>
27
+ <span
28
+ style="
29
+ font-size: xx-large;
30
+ color: rgb(135, 155, 166);"
31
+ >
32
+ -
33
+ </span>
34
+ <zero-text-field
35
+ :value=${(x) => { var _a; return (((_a = x.control.data) === null || _a === void 0 ? void 0 : _a.max) === undefined ? '' : x.control.data.max); }}
36
+ @change=${(x, c) => {
37
+ var _a, _b;
38
+ const value = parseFloat(c.event.target.value);
39
+ return x.control.handleChange(x.control.path, !isNaN(value)
40
+ ? {
41
+ min: ((_a = x.control.data) === null || _a === void 0 ? void 0 : _a.min) > value ? undefined : (_b = x.control.data) === null || _b === void 0 ? void 0 : _b.min,
42
+ max: value,
43
+ type: 'number',
44
+ }
45
+ : Object.assign(Object.assign({}, x.control.data), { max: undefined }));
46
+ }}
47
+ placeholder="Max"
48
+ id=${(x) => `max-${x.control.path}`}
49
+ data-test-id=${(x) => `max-${x.control.path}`}
50
+ @blur=${(x) => x.onBlur()}
51
+ style="width: 100%"
52
+ ></zero-text-field>
53
+ </control-wrapper>
54
+ </template>
55
+ `;
56
+ export const FilterNumberControlRendererEntry = {
57
+ renderer: FilterNumberControlRendererTemplate,
58
+ tester: rankWith(NUMBER_CONTROL_RANK, isOneOfNumber),
59
+ mapper: mapStateToControlProps,
60
+ };