|
| 1 | +## High level |
| 2 | + |
| 3 | +```mermaid |
| 4 | +sequenceDiagram |
| 5 | + participant FormBuilder |
| 6 | + participant FieldTypeRouter |
| 7 | + participant Element Handlers |
| 8 | + participant SchemaUiHandler |
| 9 | +
|
| 10 | + loop each $property in $form |
| 11 | + FormBuilder ->> FieldTypeRouter: getFormElement() |
| 12 | + FieldTypeRouter ->> Element Handlers: handler functions<br />on helper classes |
| 13 | + Note over FieldTypeRouter, Element Handlers: Initial build of property<br />Elements |
| 14 | + Element Handlers ->> FormBuilder: Return default element for $property |
| 15 | + end |
| 16 | + |
| 17 | + FormBuilder ->> SchemaUiHandler: applySchemaUi() |
| 18 | + Note over FormBuilder, SchemaUiHandler: Now apply SchemaUi to full $form |
| 19 | + loop each $property |
| 20 | + SchemaUiHandler ->> SchemaUiHandler: applyOnBaseField() |
| 21 | + SchemaUiHandler ->> SchemaUiHandler: handlePropertySpec() |
| 22 | + Note over SchemaUiHandler, SchemaUiHandler: See handlePropertySpec() <br />internals diagram |
| 23 | + end |
| 24 | + SchemaUiHandler ->> FormBuilder: Return $form with SchemaUi alterations |
| 25 | +
|
| 26 | +``` |
| 27 | + |
| 28 | +## The handlePropertySpec() method |
| 29 | + |
| 30 | +As called from withing SchemaUiHandler::applyShemaUi |
| 31 | + |
| 32 | +```mermaid |
| 33 | +sequenceDiagram |
| 34 | + participant handlePropertySpec |
| 35 | +
|
| 36 | +
|
| 37 | +``` |
| 38 | + |
| 39 | +## The initial build |
| 40 | + |
1 | 41 | ```mermaid
|
2 | 42 | graph TD
|
3 | 43 | getForm["FormBuilder::getJsonForm()"] --> eachProp["foreach $properties"]
|
4 |
| - subgraph getElements |
5 |
| - eachProp --> getElement["FieldTypeRouter::getFormElement()"] |
6 |
| - getElement --> switch[Switch $type] |
7 |
| - switch --> object{object} |
8 |
| - |
9 |
| - object -- true --> handleObject["ObjectHelper::handleObjectElement()"] |
10 |
| - handleObject --> generateObject["ObjectHelper::generateObjectElement()"] |
11 |
| - generateObject --> generateProperties["ObjectHelper::generateProperties()"] |
12 |
| - generateProperties -- recursion --> eachProp |
13 |
| -
|
14 |
| -
|
15 |
| - object -- false --> array{array} |
16 |
| - array -- true --> handleArray["ArrayHelper::handleArrayElement()"] |
17 |
| - handleArray --> complex{Items are objects?} |
18 |
| - complex -- no --> buildSimple["ArrayHelper::buildSimpleArrayElement()"] |
19 |
| - complex -- yes --> buildComplex["ArrayHelper::buildComplexArrayElement()"] |
20 |
| - buildComplex --> handleObject |
21 |
| -
|
22 |
| - array -- false --> string["string"] |
23 |
| - string -- true --> handleString["StringHelper::handleStringElement()"] |
24 |
| - string -- false --> integer["integer"] |
25 |
| - integer -- true --> handleInteger["IntegerHelper::handleIntegerElement()"] |
26 |
| - switch --> eachProp |
27 |
| - end |
28 |
| - eachProp -->getForm |
29 |
| - getForm --> applySchemaUi["SchemaUiHandler::applySchemaUi()"] |
| 44 | + eachProp --> getElement["FieldTypeRouter::getFormElement()"] |
| 45 | + getElement --> switch[Switch $type] |
| 46 | + switch --> object{object} |
| 47 | + |
| 48 | + object -- true --> handleObject["ObjectHelper::handleObjectElement()"] |
| 49 | + handleObject --> generateObject["ObjectHelper::generateObjectElement()"] |
| 50 | + generateObject --> generateProperties["ObjectHelper::generateProperties()"] |
| 51 | + generateProperties -- recursion --> eachProp |
| 52 | +
|
| 53 | +
|
| 54 | + object -- false --> array{array} |
| 55 | + array -- true --> handleArray["ArrayHelper::handleArrayElement()"] |
| 56 | + handleArray --> complex{Items are objects?} |
| 57 | + complex -- no --> buildSimple["ArrayHelper::buildSimpleArrayElement()"] |
| 58 | + complex -- yes --> buildComplex["ArrayHelper::buildComplexArrayElement()"] |
| 59 | + buildComplex --> handleObject |
30 | 60 |
|
31 |
| - subgraph SchemaUI |
| 61 | + array -- false --> string["string"] |
| 62 | + string -- true --> handleString["StringHelper::handleStringElement()"] |
| 63 | + string -- false --> integer["integer"] |
| 64 | + integer -- true --> handleInteger["IntegerHelper::handleIntegerElement()"] |
| 65 | + switch --> eachProp |
| 66 | + eachProp --> getForm |
| 67 | +``` |
| 68 | + |
| 69 | +## Customizing widgets w/SchemaUI |
| 70 | + |
| 71 | +```mermaid |
| 72 | +flowchart-elk TD |
| 73 | + getForm["FormBuilder::getJsonForm()"] --> applySchemaUi["SchemaUiHandler::applySchemaUi()"] |
32 | 74 | applySchemaUi --> eachProp2["foreach schemaUI property"]
|
33 | 75 | eachProp2 --> applyOnBaseField["SchemaUiHandler::applyOnBaseField()"]
|
34 |
| - eachProp2 --> handlePropertySpec["SchemaUiHandler::handlePropertySpec()"] |
| 76 | + eachProp2 --> handlePropertySpec |
| 77 | + subgraph s1["applyOnBaseField()"] |
| 78 | + applyOnBaseField --> updateWidgets["SchemaUiHandler::updatewidgets()"] |
| 79 | + updateWidgets --> disableFields["SchemaUiHandler::disableFields()"] |
| 80 | + disableFields --> addPlaceholders["SchemaUiHandler::addPlaceholders()"] |
| 81 | + addPlaceholders --> changeFieldDescriptions["SchemaUiHandler::changeFieldDescriptions()"] |
| 82 | + changeFieldDescriptions --> changeFieldTitle["SchemaUiHandler::changeFieldTitle()"] |
| 83 | + end |
| 84 | + subgraph s2["handlePropertySpec"] |
| 85 | + handlePropertySpec["SchemaUiHandler::handlePropertySpec()"] --> what{"what is it"} |
| 86 | + what -- array --> eachArrayElement |
| 87 | + eachArrayElement --> applyOnArrayFields |
| 88 | + |
| 89 | + applyOnArrayFields --> eachArrayElementField |
| 90 | + eachArrayElementField --> inSpec{"Does SchemaUI<br>contain config for<br>this field?"} |
| 91 | + inSpec -- yes --> handlePropertySpec |
| 92 | + inSpec -- no --> applyOnBaseFieldRec["SchemaUiHandler::applyOnBaseField()"] |
| 93 | +
|
| 94 | + what -- object --> applyOnObjectFields |
| 95 | + applyOnObjectFields --> eachObjField["foreach object property in the SchemaUi spec"] |
| 96 | + eachObjField --> applyOnBaseFieldRec |
| 97 | + |
| 98 | + end |
35 | 99 |
|
36 |
| - end |
37 | 100 | ```
|
0 commit comments