shinkansen-pinion 1.0.36

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 (126) hide show
  1. package/.husky/pre-commit +4 -0
  2. package/README.md +10 -0
  3. package/babel.config.js +72 -0
  4. package/gulp.sh +42 -0
  5. package/index.js +7 -0
  6. package/lib/components/check-answers/index.js +1 -0
  7. package/lib/components/common/index.js +1 -0
  8. package/lib/components/common/text-content/index.js +1 -0
  9. package/lib/components/error-summary/index.js +1 -0
  10. package/lib/components/index.js +1 -0
  11. package/lib/components/pinion/index.js +1 -0
  12. package/lib/index.js +1 -0
  13. package/lib/transformers/check-answers/get-answer-title.js +1 -0
  14. package/lib/transformers/check-answers/get-answer-value-for-type-array.js +1 -0
  15. package/lib/transformers/check-answers/get-answer-value-for-type-object.js +1 -0
  16. package/lib/transformers/check-answers/get-answer-value.js +1 -0
  17. package/lib/transformers/check-answers/get-any-of-selected-item-value.js +1 -0
  18. package/lib/transformers/check-answers/get-any-of-selected-items-value.js +1 -0
  19. package/lib/transformers/check-answers/get-change-answer.js +1 -0
  20. package/lib/transformers/check-answers/get-enum-selected-item-value.js +1 -0
  21. package/lib/transformers/check-answers/get-enum-selected-items-value.js +1 -0
  22. package/lib/transformers/check-answers/get-one-of-selected-item-value.js +1 -0
  23. package/lib/transformers/check-answers/get-one-of-selected-items-value.js +1 -0
  24. package/lib/transformers/check-answers/get-visually-hidden-text.js +1 -0
  25. package/lib/transformers/check-answers/index.js +1 -0
  26. package/lib/transformers/check-answers/to-answer-value.js +1 -0
  27. package/lib/transformers/check-answers/transform-answer-title.js +1 -0
  28. package/lib/transformers/check-answers/transform-answer-value.js +1 -0
  29. package/lib/transformers/check-answers/transform-any-of-value.js +1 -0
  30. package/lib/transformers/check-answers/transform-enum-value.js +1 -0
  31. package/lib/transformers/check-answers/transform-field-value.js +1 -0
  32. package/lib/transformers/check-answers/transform-one-of-value.js +1 -0
  33. package/lib/transformers/check-answers/transform-type-array-answers.js +1 -0
  34. package/lib/transformers/check-answers/transform-type-boolean-answer.js +1 -0
  35. package/lib/transformers/check-answers/transform-type-null-answer.js +1 -0
  36. package/lib/transformers/check-answers/transform-type-number-answer.js +1 -0
  37. package/lib/transformers/check-answers/transform-type-object-answers.js +1 -0
  38. package/lib/transformers/check-answers/transform-type-string-answer.js +1 -0
  39. package/lib/transformers/common/get-any-of.js +1 -0
  40. package/lib/transformers/common/get-component.js +1 -0
  41. package/lib/transformers/common/get-description.js +1 -0
  42. package/lib/transformers/common/get-elements-title.js +1 -0
  43. package/lib/transformers/common/get-enum.js +1 -0
  44. package/lib/transformers/common/get-field.js +1 -0
  45. package/lib/transformers/common/get-group.js +1 -0
  46. package/lib/transformers/common/get-one-of.js +1 -0
  47. package/lib/transformers/common/get-required.js +1 -0
  48. package/lib/transformers/common/get-resource-url.js +1 -0
  49. package/lib/transformers/common/get-title.js +1 -0
  50. package/lib/transformers/common/get-type.js +1 -0
  51. package/lib/transformers/common/get-value.js +1 -0
  52. package/lib/transformers/common/has-any-of.js +1 -0
  53. package/lib/transformers/common/has-component.js +1 -0
  54. package/lib/transformers/common/has-description.js +1 -0
  55. package/lib/transformers/common/has-elements-title.js +1 -0
  56. package/lib/transformers/common/has-enum.js +1 -0
  57. package/lib/transformers/common/has-field.js +1 -0
  58. package/lib/transformers/common/has-one-of.js +1 -0
  59. package/lib/transformers/common/has-required.js +1 -0
  60. package/lib/transformers/common/has-title.js +1 -0
  61. package/lib/transformers/common/has-type.js +1 -0
  62. package/lib/transformers/common/has-value.js +1 -0
  63. package/lib/transformers/common/index.js +1 -0
  64. package/lib/transformers/error-message/index.js +1 -0
  65. package/lib/transformers/index.js +1 -0
  66. package/package.json +104 -0
  67. package/src/components/check-answers/index.js +5 -0
  68. package/src/components/common/index.js +1 -0
  69. package/src/components/common/text-content/index.js +14 -0
  70. package/src/components/error-summary/index.js +5 -0
  71. package/src/components/index.js +4 -0
  72. package/src/components/pinion/index.js +404 -0
  73. package/src/index.js +10 -0
  74. package/src/transformers/check-answers/get-answer-title.js +11 -0
  75. package/src/transformers/check-answers/get-answer-value-for-type-array.js +14 -0
  76. package/src/transformers/check-answers/get-answer-value-for-type-object.js +14 -0
  77. package/src/transformers/check-answers/get-answer-value.js +11 -0
  78. package/src/transformers/check-answers/get-any-of-selected-item-value.js +13 -0
  79. package/src/transformers/check-answers/get-any-of-selected-items-value.js +17 -0
  80. package/src/transformers/check-answers/get-change-answer.js +16 -0
  81. package/src/transformers/check-answers/get-enum-selected-item-value.js +13 -0
  82. package/src/transformers/check-answers/get-enum-selected-items-value.js +15 -0
  83. package/src/transformers/check-answers/get-one-of-selected-item-value.js +13 -0
  84. package/src/transformers/check-answers/get-one-of-selected-items-value.js +17 -0
  85. package/src/transformers/check-answers/get-visually-hidden-text.js +16 -0
  86. package/src/transformers/check-answers/index.js +108 -0
  87. package/src/transformers/check-answers/to-answer-value.js +15 -0
  88. package/src/transformers/check-answers/transform-answer-title.js +16 -0
  89. package/src/transformers/check-answers/transform-answer-value.js +47 -0
  90. package/src/transformers/check-answers/transform-any-of-value.js +20 -0
  91. package/src/transformers/check-answers/transform-enum-value.js +20 -0
  92. package/src/transformers/check-answers/transform-field-value.js +16 -0
  93. package/src/transformers/check-answers/transform-one-of-value.js +20 -0
  94. package/src/transformers/check-answers/transform-type-array-answers.js +26 -0
  95. package/src/transformers/check-answers/transform-type-boolean-answer.js +22 -0
  96. package/src/transformers/check-answers/transform-type-null-answer.js +22 -0
  97. package/src/transformers/check-answers/transform-type-number-answer.js +22 -0
  98. package/src/transformers/check-answers/transform-type-object-answers.js +26 -0
  99. package/src/transformers/check-answers/transform-type-string-answer.js +22 -0
  100. package/src/transformers/common/get-any-of.js +1 -0
  101. package/src/transformers/common/get-component.js +1 -0
  102. package/src/transformers/common/get-description.js +1 -0
  103. package/src/transformers/common/get-elements-title.js +3 -0
  104. package/src/transformers/common/get-enum.js +1 -0
  105. package/src/transformers/common/get-field.js +1 -0
  106. package/src/transformers/common/get-group.js +18 -0
  107. package/src/transformers/common/get-one-of.js +1 -0
  108. package/src/transformers/common/get-required.js +1 -0
  109. package/src/transformers/common/get-resource-url.js +37 -0
  110. package/src/transformers/common/get-title.js +1 -0
  111. package/src/transformers/common/get-type.js +1 -0
  112. package/src/transformers/common/get-value.js +1 -0
  113. package/src/transformers/common/has-any-of.js +1 -0
  114. package/src/transformers/common/has-component.js +1 -0
  115. package/src/transformers/common/has-description.js +1 -0
  116. package/src/transformers/common/has-elements-title.js +3 -0
  117. package/src/transformers/common/has-enum.js +1 -0
  118. package/src/transformers/common/has-field.js +1 -0
  119. package/src/transformers/common/has-one-of.js +1 -0
  120. package/src/transformers/common/has-required.js +1 -0
  121. package/src/transformers/common/has-title.js +1 -0
  122. package/src/transformers/common/has-type.js +1 -0
  123. package/src/transformers/common/has-value.js +1 -0
  124. package/src/transformers/common/index.js +26 -0
  125. package/src/transformers/error-message/index.js +15 -0
  126. package/src/transformers/index.js +3 -0
package/package.json ADDED
@@ -0,0 +1,104 @@
1
+ {
2
+ "name": "shinkansen-pinion",
3
+ "version": "1.0.36",
4
+ "description": "Shinkansen Pinion",
5
+ "keywords": [
6
+ "Shinkansen",
7
+ "Pinion",
8
+ "Zashiki Karakuri",
9
+ "Zashiki",
10
+ "Karakuri",
11
+ "React"
12
+ ],
13
+ "main": "./index.js",
14
+ "author": "Jonathan Perry for Modern Poacher Limited <modernpoacher@modernpoacher.com>",
15
+ "license": "MIT",
16
+ "engines": {
17
+ "node": ">=12.19.0"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git@github.com/modernpoacher/shinkansen-pinion.git"
22
+ },
23
+ "scripts": {
24
+ "prepublishOnly": "cross-env NODE_ENV=production npm run build",
25
+ "prebuild": "npm run clean",
26
+ "build": "cross-env DEBUG=shinkansen-pinion npm run babel -- --ignore \"**/__tests__/**\" && npm run gulp",
27
+ "build:watch": "npm run gulp -- build:watch",
28
+ "watch": "cross-env DEBUG=shinkansen-pinion concurrently -r \"npm run babel:watch\" \"npm run build:watch\"",
29
+ "clean": "rimraf lib",
30
+ "transform": "npm run gulp -- transform",
31
+ "transform:watch": "npm run gulp -- transform:watch",
32
+ "babel": "babel src -d lib",
33
+ "babel:watch": "npm run babel -- -w",
34
+ "gulp": "bash gulp.sh --color",
35
+ "lint": "eslint .",
36
+ "lint:fix": "npm run lint -- --fix",
37
+ "test": "cross-env NODE_ENV=test jest --collect-coverage false --verbose --run-in-band",
38
+ "storybook": "npm run build && npm run transform && start-storybook -p 6008",
39
+ "build-storybook": "build-storybook",
40
+ "pre-commit": "npm run lint && npm test && npm run build && npm run transform && git add lib .storybook"
41
+ },
42
+ "dependencies": {
43
+ "debug": "^4.3.2"
44
+ },
45
+ "devDependencies": {
46
+ "@babel/cli": "^7.15.4",
47
+ "@babel/core": "^7.15.5",
48
+ "@babel/eslint-parser": "^7.15.4",
49
+ "@babel/plugin-proposal-class-properties": "^7.14.5",
50
+ "@babel/plugin-proposal-export-default-from": "^7.14.5",
51
+ "@babel/plugin-proposal-export-namespace-from": "^7.14.5",
52
+ "@babel/preset-env": "^7.15.6",
53
+ "@babel/preset-react": "^7.14.5",
54
+ "@babel/register": "^7.15.3",
55
+ "@modernpoacher/design-system": "0.0.383",
56
+ "autoprefixer": "^10.3.4",
57
+ "babel-jest": "^27.2.0",
58
+ "babel-plugin-module-resolver": "^4.1.0",
59
+ "concurrently": "^6.2.1",
60
+ "core-js": "^3.17.3",
61
+ "cross-env": "^7.0.3",
62
+ "cssnano": "^5.0.8",
63
+ "dart-sass": "^1.25.0",
64
+ "del": "^6.0.0",
65
+ "enzyme": "^3.11.0",
66
+ "enzyme-adapter-react-16": "^1.15.6",
67
+ "eslint": "^7.32.0",
68
+ "eslint-config-standard": "^16.0.3",
69
+ "eslint-import-resolver-babel-module": "^5.3.1",
70
+ "eslint-plugin-import": "^2.24.2",
71
+ "eslint-plugin-node": "^11.1.0",
72
+ "eslint-plugin-promise": "^5.1.0",
73
+ "eslint-plugin-react": "^7.25.2",
74
+ "glob-all": "^3.2.1",
75
+ "gulp": "^4.0.2",
76
+ "gulp-clean-css": "^4.3.0",
77
+ "gulp-css-purge": "^3.0.9",
78
+ "gulp-debug": "^4.0.0",
79
+ "gulp-postcss": "^9.0.1",
80
+ "gulp-rename": "^2.0.0",
81
+ "gulp-sass": "^5.0.0",
82
+ "gulp-sourcemaps": "^3.0.0",
83
+ "husky": "^7.0.2",
84
+ "jest": "^27.2.0",
85
+ "postcss": "^8.3.6",
86
+ "postcss-easy-import": "^3.0.0",
87
+ "postcss-map": "^0.11.0",
88
+ "postcss-normalize": "^10.0.1",
89
+ "postcss-scss": "^4.0.0",
90
+ "prop-types": "15.7.2",
91
+ "react": "16.14.0",
92
+ "react-dom": "16.14.0",
93
+ "react-router": "5.2.0",
94
+ "react-router-dom": "5.2.0",
95
+ "react-test-renderer": "16.14.0",
96
+ "regenerator-runtime": "^0.13.9",
97
+ "rimraf": "^3.0.2",
98
+ "shinkansen-cogs": "1.5.26",
99
+ "shinkansen-rails": "1.0.18",
100
+ "shinkansen-signals": "1.1.2",
101
+ "shinkansen-sprockets": "1.0.30",
102
+ "vinyl-paths": "3.0.1"
103
+ }
104
+ }
@@ -0,0 +1,5 @@
1
+ import {
2
+ CheckAnswersSprocket
3
+ } from 'shinkansen-sprockets'
4
+
5
+ export default CheckAnswersSprocket
@@ -0,0 +1 @@
1
+ export * as textContent from './text-content'
@@ -0,0 +1,14 @@
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+
4
+ const TextContent = ({ textContent }) => (
5
+ <span className='text-content'>
6
+ {textContent}
7
+ </span>
8
+ )
9
+
10
+ TextContent.propTypes = {
11
+ textContent: PropTypes.string.isRequired
12
+ }
13
+
14
+ export default TextContent
@@ -0,0 +1,5 @@
1
+ import {
2
+ ErrorSummarySprocket
3
+ } from 'shinkansen-sprockets'
4
+
5
+ export default ErrorSummarySprocket
@@ -0,0 +1,4 @@
1
+ export CheckAnswers from './check-answers'
2
+ export * as common from './common'
3
+ export ErrorSummary from './error-summary'
4
+ export Pinion from './pinion'
@@ -0,0 +1,404 @@
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import debug from 'debug'
4
+
5
+ import {
6
+ FieldsetSprocket
7
+ } from 'shinkansen-sprockets'
8
+
9
+ import {
10
+ RadioCog,
11
+ SelectCog,
12
+ TextCog
13
+ } from 'shinkansen-cogs'
14
+
15
+ import hasEnum from 'shinkansen-pinion/transformers/common/has-enum'
16
+ import hasAnyOf from 'shinkansen-pinion/transformers/common/has-any-of'
17
+ import hasOneOf from 'shinkansen-pinion/transformers/common/has-one-of'
18
+ import hasComponent from 'shinkansen-pinion/transformers/common/has-component'
19
+ import getComponent from 'shinkansen-pinion/transformers/common/get-component'
20
+ import {
21
+ getError
22
+ } from 'shinkansen-pinion/transformers/error-message'
23
+
24
+ const log = debug('shinkansen-pinion')
25
+
26
+ log('`pinion` is awake')
27
+
28
+ function onChange () {
29
+ /* */
30
+ }
31
+
32
+ const getKey = (value, index) => `${value}-${index}`
33
+ const getDefaultValue = (field) => Reflect.has(field, 'defaultValue') ? Reflect.get(field, 'defaultValue') : ''
34
+ const getValue = (field) => Reflect.has(field, 'value') ? Reflect.get(field, 'value') : getDefaultValue(field)
35
+
36
+ /* eslint-disable-next-line react/prop-types */
37
+ export function renderToRadiosForEnum ({ items = [], selectedItems = [], uri }, { title, description, enum: { id, name = id, isRequired = false } }, { components, errors }, onChange) {
38
+ log('renderToRadiosForEnum')
39
+
40
+ return (
41
+ <FieldsetSprocket
42
+ title={title}
43
+ description={description}
44
+ errorMessage={getError(errors, uri)}>
45
+ {items.map((value, index) => {
46
+ const key = getKey(uri, index)
47
+
48
+ return (
49
+ <RadioCog
50
+ key={key}
51
+ title={String(value)}
52
+ value={String(index)}
53
+ id={key}
54
+ name={name}
55
+ onChange={onChange}
56
+ required={isRequired}
57
+ checked={selectedItems.includes(index)}
58
+ />
59
+ )
60
+ })}
61
+ </FieldsetSprocket>
62
+ )
63
+ }
64
+
65
+ /* eslint-disable-next-line react/prop-types */
66
+ export function renderToRadiosForAnyOf ({ items = [], selectedItems = [], uri }, { title, description, anyOf: { id, name = id, isRequired = false } }, { components, errors }, onChange) {
67
+ log('renderToRadiosForAnyOf')
68
+
69
+ return (
70
+ <FieldsetSprocket
71
+ title={title}
72
+ description={description}
73
+ errorMessage={getError(errors, uri)}>
74
+ {items.map(({ meta: { uri }, elements: { title, description, field: { id } } }, index) => (
75
+ <RadioCog
76
+ key={uri}
77
+ title={title}
78
+ description={description}
79
+ value={String(index)}
80
+ id={id}
81
+ name={name}
82
+ onChange={onChange}
83
+ required={isRequired}
84
+ checked={selectedItems.includes(index)}
85
+ />
86
+ ))}
87
+ </FieldsetSprocket>
88
+ )
89
+ }
90
+
91
+ /* eslint-disable-next-line react/prop-types */
92
+ export function renderToRadiosForOneOf ({ items = [], selectedItems = [], uri }, { title, description, oneOf: { id, name = id, isRequired = false } }, { components, errors }, onChange) {
93
+ log('renderToRadiosForOneOf')
94
+
95
+ return (
96
+ <FieldsetSprocket
97
+ title={title}
98
+ description={description}
99
+ errorMessage={getError(errors, uri)}>
100
+ {items.map(({ meta: { uri }, elements: { title, description, field: { id } } }, index) => (
101
+ <RadioCog
102
+ key={uri}
103
+ title={title}
104
+ description={description}
105
+ value={String(index)}
106
+ id={id}
107
+ name={name}
108
+ onChange={onChange}
109
+ required={isRequired}
110
+ checked={selectedItems.includes(index)}
111
+ />
112
+ ))}
113
+ </FieldsetSprocket>
114
+ )
115
+ }
116
+
117
+ /* eslint-disable-next-line react/prop-types */
118
+ export function renderToSelectForEnum ({ items = [], selectedItems = [], uri }, { title, description, enum: { id, name = id, isRequired = false } }, { components, errors }, onChange) {
119
+ log('renderToSelectForEnum')
120
+
121
+ return (
122
+ <SelectCog
123
+ title={title}
124
+ description={description}
125
+ errorMessage={getError(errors, uri)}
126
+ name={name}
127
+ onChange={onChange}
128
+ required={isRequired}>
129
+ {items.map((value, index) => (
130
+ <option
131
+ key={getKey(uri, index)}
132
+ value={String(index)}
133
+ selected={selectedItems.includes(index)}>
134
+ {value}
135
+ </option>
136
+ ))}
137
+ </SelectCog>
138
+ )
139
+ }
140
+
141
+ /* eslint-disable-next-line react/prop-types */
142
+ export function renderToSelectForAnyOf ({ items = [], selectedItems = [], uri }, { title, description, anyOf: { id, name = id, isRequired = false } }, { components, errors }, onChange) {
143
+ log('renderToSelectForAnyOf')
144
+
145
+ return (
146
+ <SelectCog
147
+ title={title}
148
+ description={description}
149
+ errorMessage={getError(errors, uri)}
150
+ name={name}
151
+ onChange={onChange}
152
+ required={isRequired}>
153
+ {items.map(({ meta: { uri }, elements: { title } }, index) => (
154
+ <option
155
+ key={uri}
156
+ value={String(index)}
157
+ selected={selectedItems.includes(index)}>
158
+ {title}
159
+ </option>
160
+ ))}
161
+ </SelectCog>
162
+ )
163
+ }
164
+
165
+ /* eslint-disable-next-line react/prop-types */
166
+ export function renderToSelectForOneOf ({ items = [], selectedItems = [], uri }, { title, description, oneOf: { id, name = id, isRequired = false } }, { components, errors }, onChange) {
167
+ log('renderToSelectForOneOf')
168
+
169
+ return (
170
+ <SelectCog
171
+ title={title}
172
+ description={description}
173
+ errorMessage={getError(errors, uri)}
174
+ name={name}
175
+ onChange={onChange}
176
+ required={isRequired}>
177
+ {items.map(({ meta: { uri }, elements: { title } }, index) => (
178
+ <option
179
+ key={uri}
180
+ value={String(index)}
181
+ selected={selectedItems.includes(index)}>
182
+ {title}
183
+ </option>
184
+ ))}
185
+ </SelectCog>
186
+ )
187
+ }
188
+
189
+ export function renderToField (meta, elements, params, onChange) {
190
+ log('renderToField')
191
+
192
+ const {
193
+ uri
194
+ } = meta
195
+
196
+ const {
197
+ title,
198
+ description,
199
+ field: {
200
+ id,
201
+ isRequired = false,
202
+ ...field
203
+ } = {}
204
+ } = elements
205
+
206
+ const {
207
+ errors
208
+ } = params
209
+
210
+ return (
211
+ <TextCog
212
+ title={title}
213
+ description={description}
214
+ name={id}
215
+ value={getValue(field)}
216
+ errorMessage={getError(errors, uri)}
217
+ required={isRequired}
218
+ onChange={onChange}
219
+ />
220
+ )
221
+ }
222
+
223
+ export function GroupComponent ({ component, meta, elements, params, onChange }) {
224
+
225
+ }
226
+
227
+ export function FieldComponent ({ component, meta, elements, params, onChange }) {
228
+
229
+ }
230
+
231
+ export function Group ({ meta, elements, params, onChange }) {
232
+ log('Group')
233
+
234
+ const {
235
+ uri
236
+ } = meta
237
+
238
+ const {
239
+ title,
240
+ description,
241
+ fields = []
242
+ } = elements
243
+
244
+ const {
245
+ errors
246
+ } = params
247
+
248
+ return (
249
+ <FieldsetSprocket
250
+ title={title}
251
+ description={description}
252
+ errorMessage={getError(errors, uri)}>
253
+ {fields.map((pinion) => {
254
+ const {
255
+ meta: {
256
+ uri
257
+ } = {}
258
+ } = pinion
259
+
260
+ return (
261
+ <Pinion
262
+ key={uri}
263
+ pinion={pinion}
264
+ params={params}
265
+ onChange={onChange}
266
+ />
267
+ )
268
+ })}
269
+ </FieldsetSprocket>
270
+ )
271
+ }
272
+
273
+ Group.propTypes = {
274
+ meta: PropTypes.shape().isRequired,
275
+ elements: PropTypes.shape().isRequired,
276
+ params: PropTypes.shape().isRequired,
277
+ onChange: PropTypes.func
278
+ }
279
+
280
+ Group.defaultProps = {
281
+ onChange
282
+ }
283
+
284
+ export function Field ({ meta, elements, params, onChange }) {
285
+ log('Field')
286
+
287
+ if (hasEnum(elements)) {
288
+ log('Field (`enum`)')
289
+
290
+ return renderToRadiosForEnum(meta, elements, params, onChange)
291
+ } else {
292
+ if (hasAnyOf(elements)) {
293
+ log('Field (`anyOf`)')
294
+
295
+ return renderToRadiosForAnyOf(meta, elements, params, onChange)
296
+ } else {
297
+ if (hasOneOf(elements)) {
298
+ log('Field (`oneOf`)')
299
+
300
+ return renderToRadiosForOneOf(meta, elements, params, onChange)
301
+ } else {
302
+ log('Field (`field`)')
303
+
304
+ return renderToField(meta, elements, params, onChange)
305
+ }
306
+ }
307
+ }
308
+ }
309
+
310
+ Field.propTypes = {
311
+ meta: PropTypes.shape().isRequired,
312
+ elements: PropTypes.shape().isRequired,
313
+ params: PropTypes.shape().isRequired,
314
+ onChange: PropTypes.func
315
+ }
316
+
317
+ Field.defaultProps = {
318
+ onChange
319
+ }
320
+
321
+ export function renderGroup ({ meta, elements }, params, onChange) { // eslint-disable-line
322
+ log('renderGroup')
323
+
324
+ if (hasComponent(meta)) {
325
+ const component = getComponent(meta)
326
+
327
+ return (
328
+ <GroupComponent
329
+ component={component}
330
+ meta={meta}
331
+ elements={elements}
332
+ params={params}
333
+ onChange={onChange}
334
+ />
335
+ )
336
+ }
337
+
338
+ return (
339
+ <Group
340
+ meta={meta}
341
+ elements={elements}
342
+ params={params}
343
+ onChange={onChange}
344
+ />
345
+ )
346
+ }
347
+
348
+ export function renderField ({ meta, elements }, params, onChange) { // eslint-disable-line
349
+ log('renderField')
350
+
351
+ if (hasComponent(meta)) {
352
+ const component = getComponent(meta)
353
+
354
+ return (
355
+ <FieldComponent
356
+ component={component}
357
+ meta={meta}
358
+ elements={elements}
359
+ params={params}
360
+ onChange={onChange}
361
+ />
362
+ )
363
+ }
364
+
365
+ return (
366
+ <Field
367
+ meta={meta}
368
+ elements={elements}
369
+ params={params}
370
+ onChange={onChange}
371
+ />
372
+ )
373
+ }
374
+
375
+ export default function Pinion ({ pinion, params, onChange }) {
376
+ log('Pinion')
377
+
378
+ const {
379
+ meta: {
380
+ type
381
+ } = {}
382
+ } = pinion
383
+
384
+ return (type === 'object' || type === 'array')
385
+ ? renderGroup(pinion, params, onChange)
386
+ : renderField(pinion, params, onChange)
387
+ }
388
+
389
+ Pinion.propTypes = {
390
+ pinion: PropTypes.shape({
391
+ meta: PropTypes.shape().isRequired,
392
+ elements: PropTypes.shape().isRequired
393
+ }).isRequired,
394
+ params: PropTypes.shape({
395
+ components: PropTypes.shape(),
396
+ errors: PropTypes.array
397
+ }),
398
+ onChange: PropTypes.func
399
+ }
400
+
401
+ Pinion.defaultProps = {
402
+ params: {},
403
+ onChange
404
+ }
package/src/index.js ADDED
@@ -0,0 +1,10 @@
1
+ import debug from 'debug'
2
+
3
+ const log = debug('shinkansen-pinion')
4
+
5
+ log('`pinion` is awake')
6
+
7
+ export * as components from './components'
8
+ export * as transformers from './transformers'
9
+
10
+ export Pinion from './components/pinion'
@@ -0,0 +1,11 @@
1
+ import debug from 'debug'
2
+
3
+ import transformAnswerTitle from './transform-answer-title'
4
+
5
+ const log = debug('shinkansen-pinion:transformers:check-answers')
6
+
7
+ export default function getAnswerTitle ({ elements = {} }) {
8
+ log('getAnswerTitle')
9
+
10
+ return transformAnswerTitle(elements)
11
+ }
@@ -0,0 +1,14 @@
1
+ import debug from 'debug'
2
+
3
+ import transformAnswerValue from './transform-answer-value'
4
+
5
+ const log = debug('shinkansen-pinion:transformers:check-answers')
6
+
7
+ export default function getAnswerValueForTypeArray (group = []) {
8
+ log('getAnswerValueForTypeArray')
9
+
10
+ return (
11
+ group
12
+ .map(({ elements = {} }) => transformAnswerValue(elements))
13
+ )
14
+ }
@@ -0,0 +1,14 @@
1
+ import debug from 'debug'
2
+
3
+ import transformAnswerValue from './transform-answer-value'
4
+
5
+ const log = debug('shinkansen-pinion:transformers:check-answers')
6
+
7
+ export default function getAnswerValueForTypeObject (group = []) {
8
+ log('getAnswerValueForTypeObject')
9
+
10
+ return (
11
+ group
12
+ .map(({ elements = {} }) => transformAnswerValue(elements))
13
+ )
14
+ }
@@ -0,0 +1,11 @@
1
+ import debug from 'debug'
2
+
3
+ import transformAnswerValue from './transform-answer-value'
4
+
5
+ const log = debug('shinkansen-pinion:transformers:check-answers')
6
+
7
+ export default function getAnswerValue ({ elements = {} }) {
8
+ log('getAnswerValue')
9
+
10
+ return transformAnswerValue(elements)
11
+ }
@@ -0,0 +1,13 @@
1
+ import debug from 'debug'
2
+
3
+ import toAnswerValue from './to-answer-value'
4
+
5
+ const log = debug('shinkansen-pinion:transformers:check-answers')
6
+
7
+ export default function getAnyOfSelectedItemValue (items = [], [selectedItem] = []) {
8
+ log('getAnyOfSelectedItemValue')
9
+
10
+ return (Reflect.has(items, selectedItem))
11
+ ? toAnswerValue(Reflect.get(items, selectedItem)) // || 'Not answered'
12
+ : '' // 'Not answered'
13
+ }
@@ -0,0 +1,17 @@
1
+ import debug from 'debug'
2
+
3
+ import toAnswerValue from './to-answer-value'
4
+
5
+ const log = debug('shinkansen-pinion:transformers:check-answers')
6
+
7
+ export default function getAnyOfSelectedItemsValue (items = [], selectedItems = []) {
8
+ log('getAnyOfSelectedItemsValue')
9
+
10
+ return (
11
+ selectedItems.reduce((accumulator, selectedItem) => (
12
+ (Reflect.has(items, selectedItem))
13
+ ? accumulator.concat(toAnswerValue(Reflect.get(items, selectedItem)))
14
+ : accumulator
15
+ ), '') // || 'Not answered'
16
+ )
17
+ }
@@ -0,0 +1,16 @@
1
+ import debug from 'debug'
2
+
3
+ import getResourceUrl from 'shinkansen-pinion/transformers/common/get-resource-url'
4
+ import getVisuallyHiddenText from './get-visually-hidden-text'
5
+
6
+ const log = debug('shinkansen-pinion:transformers:check-answers')
7
+
8
+ export default function getChangeAnswer (answer, resource) {
9
+ log('getChangeAnswer')
10
+
11
+ return {
12
+ href: getResourceUrl(resource),
13
+ text: 'Change',
14
+ visuallyHiddenText: getVisuallyHiddenText(answer)
15
+ }
16
+ }
@@ -0,0 +1,13 @@
1
+ import debug from 'debug'
2
+
3
+ const log = debug('shinkansen-pinion:transformers:check-answers')
4
+
5
+ export default function getEnumSelectedItemValue (items = [], [selectedItem] = []) {
6
+ log('getEnumSelectedItemValue')
7
+
8
+ return (
9
+ Reflect.has(items, selectedItem)
10
+ ? String(Reflect.get(items, selectedItem))
11
+ : '' // 'Not answered'
12
+ )
13
+ }
@@ -0,0 +1,15 @@
1
+ import debug from 'debug'
2
+
3
+ const log = debug('shinkansen-pinion:transformers:check-answers')
4
+
5
+ export default function getEnumSelectedItemsValue (items = [], selectedItems = []) {
6
+ log('getEnumSelectedItemsValue')
7
+
8
+ return (
9
+ selectedItems.reduce((accumulator, selectedItem) => (
10
+ (Reflect.has(items, selectedItem))
11
+ ? accumulator.concat(Reflect.get(items, selectedItem))
12
+ : accumulator
13
+ ), '') // || 'Not answered'
14
+ )
15
+ }