1 | import Model from 'model/Model'
|
2 |
|
3 | class ModelFunction {
|
4 | constructor (model, onChangeListener, onCollectListener) {
|
5 | this._model = Model.fromSpec(model)
|
6 | this._onChangeListener = onChangeListener
|
7 | this._onCollectListener = onCollectListener
|
8 | }
|
9 |
|
10 | getModel () {
|
11 | return this._model
|
12 | }
|
13 |
|
14 | listenInput (field) {
|
15 | let self = this
|
16 | return (e) => {
|
17 | self._model[field].setValue(e.target.value)
|
18 | if (self._onChangeListener != null && typeof self._onChangeListener !== 'undefined') {
|
19 | self._onChangeListener(self._model, field, e.target.value, this)
|
20 | }
|
21 | }
|
22 | }
|
23 |
|
24 | listenInputOnly (field) {
|
25 | let self = this
|
26 | return (e) => {
|
27 | if (self._onChangeListener != null && typeof self._onChangeListener !== 'undefined') {
|
28 | self._onChangeListener(self._model, field, e.target.value, this)
|
29 | }
|
30 | }
|
31 | }
|
32 |
|
33 | listen (field) {
|
34 | let self = this
|
35 | return (value) => {
|
36 | self._model[field].setValue(value)
|
37 | if (self._onChangeListener != null && typeof self._onChangeListener !== 'undefined') {
|
38 | self._onChangeListener(self._model, field, value, this)
|
39 | }
|
40 | }
|
41 | }
|
42 |
|
43 | listenOnly (field) {
|
44 | let self = this
|
45 | return (value) => {
|
46 | if (self._onChangeListener != null && typeof self._onChangeListener !== 'undefined') {
|
47 | self._onChangeListener(self._model, field, value, this)
|
48 | }
|
49 | }
|
50 | }
|
51 |
|
52 | value (field) {
|
53 | if (this._model[field] != null && typeof this._model[field] !== 'undefined') {
|
54 | return this._model[field].value
|
55 | } else {
|
56 | return null
|
57 | }
|
58 | }
|
59 |
|
60 | set (field, value) {
|
61 | if (this._model[field] != null && typeof this._model[field] !== 'undefined') {
|
62 | this._model[field].set(value)
|
63 | }
|
64 | }
|
65 |
|
66 | validation (field) {
|
67 | if (this._model[field] != null && typeof this._model[field] !== 'undefined') {
|
68 | return this._model[field].validation
|
69 | } else {
|
70 | return {
|
71 | message: ''
|
72 | }
|
73 | }
|
74 | }
|
75 |
|
76 | bind (value) {
|
77 | this._model.bind(value)
|
78 | }
|
79 |
|
80 | updateAction () {
|
81 | return {
|
82 | type: '__MODEL_UPDATE__',
|
83 | data: this._model.getValue()
|
84 | }
|
85 | }
|
86 |
|
87 | collect () {
|
88 | let self = this
|
89 | return () => {
|
90 | self._onCollectListener(self._model)
|
91 | }
|
92 | }
|
93 |
|
94 | static setup (model, onChange, onCollect) {
|
95 | return new ModelFunction(model, onChange, onCollect)
|
96 | }
|
97 | }
|
98 |
|
99 | export default ModelFunction
|