Skip to content

Commit e781407

Browse files
committed
Remove registerStartupRenderer and replace with explicit initialization
Remove JsonFormsInit Re-order dependencies in material renderer set
1 parent 0969a09 commit e781407

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+638
-532
lines changed

packages/core/src/core.ts

Lines changed: 0 additions & 19 deletions
This file was deleted.

packages/core/src/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
export * from './core';
21
export * from './util';
32

43
export * from './models/jsonSchema';
@@ -24,8 +23,8 @@ import { ControlElement, LabelDescription } from './models/uischema';
2423

2524
const Helpers: {
2625
createLabelDescriptionFrom(withLabel: ControlElement): LabelDescription;
27-
convertToValidClassName(s: string): string } = {
28-
26+
convertToValidClassName(s: string): string
27+
} = {
2928
createLabelDescriptionFrom,
3029
convertToValidClassName
3130
};

packages/core/src/util/field.ts

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,16 @@
11
import * as _ from 'lodash';
22
import { ControlElement } from '../models/uischema';
3-
import { RankedTester } from '../testers';
4-
import { JsonFormsInit } from '../core';
53
import { getData, getErrorAt } from '../reducers';
64
import {
75
composeWithUi,
8-
StatePropsOfField,
96
isEnabled,
107
isVisible,
11-
Resolve
8+
Resolve,
9+
StatePropsOfField
1210
} from '../util';
1311
import { mapDispatchToControlProps } from './renderer';
1412
import { DispatchPropsOfControl } from '../renderers';
1513

16-
/**
17-
* Registers the given field renderer when a JSON Forms store is created.
18-
* @param {RankedTester} tester
19-
* @param field the field to be registered
20-
* @returns {any}
21-
*/
22-
export const registerStartupField = (tester: RankedTester, field: any) => {
23-
JsonFormsInit.fields.push({
24-
tester,
25-
field
26-
});
27-
28-
return field;
29-
};
30-
3114
/**
3215
* Map state to field props.
3316
*

packages/core/src/util/renderer.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as _ from 'lodash';
22
import { connect } from 'react-redux';
33
import { JsonSchema } from '../models/jsonSchema';
4-
import { JsonFormsInit } from '../core';
54
import {
65
composeWithUi,
76
createLabelDescriptionFrom,
@@ -80,15 +79,6 @@ export const mapStateToLayoutProps = (state, ownProps): StatePropsOfLayout => {
8079
};
8180
};
8281

83-
export const registerStartupRenderer = (tester: RankedTester, renderer: any) => {
84-
JsonFormsInit.renderers.push({
85-
tester,
86-
renderer
87-
});
88-
89-
return renderer;
90-
};
91-
9282
const isRequired = (schema: JsonSchema, schemaPath: string): boolean => {
9383
const pathSegments = schemaPath.split('/');
9484
const lastSegment = pathSegments[pathSegments.length - 1];

packages/core/test/renderers/JsonForms.test.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { test } from 'ava';
99
import * as _ from 'lodash';
1010
import { combineReducers, createStore } from 'redux';
1111
import { Provider } from 'react-redux';
12-
import { JsonForms, JsonFormsInit, JsonSchema, UISchemaElement} from '../../src';
12+
import { JsonForms, JsonSchema, UISchemaElement } from '../../src';
1313
import { RendererProps, StatelessRenderer } from '../../src/renderers';
1414
import '../../src/renderers';
1515
import { registerRenderer, unregisterRenderer } from '../../src/actions';
@@ -58,8 +58,6 @@ export const initJsonFormsStore = ({
5858
schema,
5959
uischema
6060
},
61-
renderers: JsonFormsInit.renderers,
62-
fields: JsonFormsInit.fields,
6361
...props
6462
}
6563
}

packages/examples/src/register.ts

Lines changed: 85 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { JsonFormsElement } from '@jsonforms/webcomponent';
22
import { ExampleDescription } from './example';
3-
import { JsonFormsInit, jsonformsReducer } from '@jsonforms/core';
3+
import { jsonformsReducer, RankedTester } from '@jsonforms/core';
44
import { combineReducers, createStore, Reducer } from 'redux';
55
import { i18nReducer, translateProps } from '@jsonforms/i18n';
66

@@ -11,97 +11,108 @@ const knownExamples: {[key: string]: ExampleDescription} = {};
1111

1212
export interface AdditionalStoreParams {
1313
name: string;
14-
reducer: Reducer<any>;
14+
reducer?: Reducer<any>;
1515
state: any;
1616
}
1717

1818
export const registerExamples = (examples: ExampleDescription[]): void => {
1919
examples.forEach(example => knownExamples[example.name] = example);
2020
};
2121

22-
export const changeExample = (selectedExample: string, ...additionalStoreParams: AdditionalStoreParams[]) => {
23-
let body = document.getElementById(viewDivId);
24-
if (body.firstChild !== null && body.firstChild.childNodes.length !== 0) {
25-
body.removeChild(body.firstChild);
26-
}
27-
const example: ExampleDescription = knownExamples[selectedExample];
28-
if (example.setupCallback !== undefined) {
29-
const div = document.createElement('div');
30-
example.setupCallback(div);
31-
body.appendChild(div);
32-
body = div;
33-
}
22+
export const changeExample =
23+
(selectedExample: string,
24+
renderers: { tester: RankedTester, renderer: any}[],
25+
fields: { tester: RankedTester, field: any}[],
26+
...additionalStoreParams: AdditionalStoreParams[]) => {
27+
let body = document.getElementById(viewDivId);
28+
if (body.firstChild !== null && body.firstChild.childNodes.length !== 0) {
29+
body.removeChild(body.firstChild);
30+
}
31+
const example: ExampleDescription = knownExamples[selectedExample];
32+
if (example.setupCallback !== undefined) {
33+
const div = document.createElement('div');
34+
example.setupCallback(div);
35+
body.appendChild(div);
36+
body = div;
37+
}
38+
39+
const jsonForms = document.createElement('json-forms') as JsonFormsElement;
40+
const additionalReducers = additionalStoreParams.reduce(
41+
(acc, x) => {
42+
if (x.reducer) {
43+
acc[x.name] = x.reducer;
44+
}
45+
return acc;
46+
},
47+
{}
48+
);
49+
const additionalInitState = additionalStoreParams.reduce(
50+
(acc, x) => {
51+
acc[x.name] = x.state;
3452

35-
const jsonForms = document.createElement('json-forms') as JsonFormsElement;
36-
const additionalReducers = additionalStoreParams.reduce(
37-
(acc, x) => {
38-
acc[x.name] = x.reducer;
39-
return acc;
40-
},
41-
{}
42-
);
43-
const additionalInitState = additionalStoreParams.reduce(
44-
(acc, x) => {
45-
acc[x.name] = x.state;
46-
return acc;
47-
},
48-
{}
49-
);
53+
return acc;
54+
},
55+
{}
56+
);
5057

51-
jsonForms.store = createStore(
52-
combineReducers({
58+
jsonForms.store = createStore(
59+
combineReducers({
5360
jsonforms: jsonformsReducer(
5461
{
5562
i18n: i18nReducer,
5663
...additionalReducers
5764
},
5865
)
5966
}
60-
),
61-
{
62-
jsonforms: {
63-
core: {
64-
data: example.data,
65-
schema: example.schema,
66-
uischema: example.uiSchema
67-
},
68-
i18n: {
69-
translations: example.translations,
70-
locale: example.locale || navigator.language
71-
},
72-
transformProps: [translateProps],
73-
renderers: JsonFormsInit.renderers,
74-
fields: JsonFormsInit.fields,
75-
...additionalInitState
67+
),
68+
{
69+
jsonforms: {
70+
core: {
71+
data: example.data,
72+
schema: example.schema,
73+
uischema: example.uiSchema
74+
},
75+
renderers,
76+
fields,
77+
i18n: {
78+
translations: example.translations,
79+
locale: example.locale || navigator.language
80+
},
81+
transformProps: [translateProps],
82+
...additionalInitState
83+
}
7684
}
77-
}
78-
);
85+
);
7986

80-
body.appendChild(jsonForms);
81-
};
87+
body.appendChild(jsonForms);
88+
};
8289

83-
export const createExampleSelection = (...additionalStoreParams: AdditionalStoreParams[]): HTMLSelectElement => {
90+
export const createExampleSelection = (
91+
renderers: { tester: RankedTester, renderer: any}[],
92+
fields: { tester: RankedTester, field: any}[],
93+
...additionalStoreParams: AdditionalStoreParams[]
94+
): HTMLSelectElement => {
8495

85-
const examplesDiv = document.getElementById(exampleDivId);
86-
const labelExample = document.createElement('label');
87-
labelExample.textContent = 'Example:';
88-
labelExample.htmlFor = 'example_select';
89-
examplesDiv.appendChild(labelExample);
90-
const select = document.createElement('select');
91-
select.id = 'example_select';
92-
Object.keys(knownExamples).forEach(key => {
93-
const example = knownExamples[key];
94-
const option = document.createElement('option');
95-
option.value = example.name;
96-
option.label = example.label;
97-
option.text = example.label;
98-
select.appendChild(option);
99-
});
100-
select.onchange = () => {
101-
changeExample(select.value, ...additionalStoreParams);
102-
};
103-
examplesDiv.appendChild(select);
104-
changeExample(select.value, ...additionalStoreParams);
96+
const examplesDiv = document.getElementById(exampleDivId);
97+
const labelExample = document.createElement('label');
98+
labelExample.textContent = 'Example:';
99+
labelExample.htmlFor = 'example_select';
100+
examplesDiv.appendChild(labelExample);
101+
const select = document.createElement('select');
102+
select.id = 'example_select';
103+
Object.keys(knownExamples).forEach(key => {
104+
const example = knownExamples[key];
105+
const option = document.createElement('option');
106+
option.value = example.name;
107+
option.label = example.label;
108+
option.text = example.label;
109+
select.appendChild(option);
110+
});
111+
select.onchange = () => {
112+
changeExample(select.value, renderers, fields, ...additionalStoreParams);
113+
};
114+
examplesDiv.appendChild(select);
115+
changeExample(select.value, renderers, fields, ...additionalStoreParams);
105116

106-
return select;
107-
};
117+
return select;
118+
};

packages/material/example/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { createExampleSelection } from '../../examples/src/register';
2+
import { materialFields, materialRenderers } from '../src';
23

34
window.onload = () => {
4-
createExampleSelection();
5+
createExampleSelection(
6+
materialRenderers,
7+
materialFields
8+
);
59
};

packages/material/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
"material-ui": "1.0.0-beta.25",
3838
"material-ui-icons": "^1.0.0-beta.17",
3939
"react": "^16.2.0",
40-
"react-dom": "^16.2.0",
41-
"react-redux": "^5.0.6",
4240
"redux": "^3.7.2"
4341
},
4442
"devDependencies": {
@@ -50,6 +48,7 @@
5048
"jsdom": "^11.5.1",
5149
"jsdom-global": "^3.0.2",
5250
"react-dom": "^16.2.0",
51+
"react-redux": "^5.0.6",
5352
"source-map-loader": "^0.2.3",
5453
"ts-loader": "^3.2.0",
5554
"tslint-loader": "^3.5.3",

packages/material/src/complex/MaterialArrayControlRenderer.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import * as React from 'react';
22

33
import {
4+
connectToJsonForms,
45
mapDispatchToTableControlProps,
56
mapStateToTableControlProps,
67
RendererComponent,
78
TableControlProps
89
} from '@jsonforms/core';
9-
import { connect } from 'react-redux';
1010
import { TableToolbar } from './TableToolbar';
1111
import { MaterialTableControl } from './MaterialTableControl';
1212
import Button from 'material-ui/Button';
@@ -129,7 +129,7 @@ export interface TableState {
129129
openConfirmDelete: boolean;
130130
}
131131

132-
export default connect(
132+
export default connectToJsonForms(
133133
mapStateToTableControlProps,
134-
mapDispatchToTableControlProps)
135-
(MaterialArrayControlRenderer);
134+
mapDispatchToTableControlProps
135+
)(MaterialArrayControlRenderer);
Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import {
2-
isArrayObjectControl,
3-
rankWith,
4-
registerStartupRenderer,
2+
isArrayObjectControl,
3+
RankedTester,
4+
rankWith,
55
} from '@jsonforms/core';
66
import MaterialArrayControlRenderer from './MaterialArrayControlRenderer';
77

8-
registerStartupRenderer(
9-
rankWith(3, isArrayObjectControl),
10-
MaterialArrayControlRenderer
11-
);
12-
13-
export default MaterialArrayControlRenderer;
8+
export const materialArrayControlTester: RankedTester = rankWith(3, isArrayObjectControl);
9+
export { MaterialArrayControlRenderer };

0 commit comments

Comments
 (0)