• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

akvo / nmis-mobile / 5619348824

21 Jul 2023 06:25AM UTC coverage: 73.019%. First build
5619348824

push

github

ifirmawan
Merge branch 'main' into feature/63-modify-boolean-values-in-tinyinteger-columns

385 of 563 branches covered (68.38%)

Branch coverage included in aggregate %.

95 of 95 new or added lines in 8 files covered. (100.0%)

868 of 1153 relevant lines covered (75.28%)

7.91 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

50.0
/app/src/form/components/QuestionField.js
1
import React, { useEffect } from 'react';
2
import {
3
  TypeDate,
4
  TypeImage,
5
  TypeInput,
6
  TypeMultipleOption,
7
  TypeOption,
8
  TypeText,
9
  TypeNumber,
10
  TypeGeo,
11
} from '../fields';
12
import { useField } from 'formik';
13
import { View, Text } from 'react-native';
14
import { styles } from '../styles';
15
import { FormState } from '../../store';
16

17
const QuestionField = ({ keyform, field: questionField, setFieldValue, values, validate }) => {
3✔
18
  const [field, meta, helpers] = useField({ name: questionField.id, validate });
136✔
19

20
  useEffect(() => {
136✔
21
    if (meta.error && field.name) {
17!
22
      FormState.update((s) => {
×
23
        const removedErrorValues = Object.keys(s.questionGroupListCurrentValues)
×
24
          .filter((key) => key.toString() !== field.name.toString())
×
25
          .reduce((acc, curr) => ({ ...acc, [curr]: s.questionGroupListCurrentValues[curr] }), {});
×
26
        s.questionGroupListCurrentValues = removedErrorValues;
×
27
      });
28
    } else {
29
      FormState.update((s) => {
17✔
30
        s.questionGroupListCurrentValues = { ...s.questionGroupListCurrentValues, ...values };
17✔
31
      });
32
    }
33
  }, [meta.error, field.name, values]);
34

35
  const handleOnChangeField = (id, value) => {
136✔
36
    helpers.setTouched({ [field.name]: true });
×
37
    FormState.update((s) => {
×
38
      s.currentValues = { ...s.currentValues, [id]: value };
×
39
      if (questionField?.meta) {
×
40
        s.dataPointName = s.dataPointName.map((dp) =>
×
41
          dp.id.toString() === id.toString()
×
42
            ? {
43
                ...dp,
44
                value: value,
45
              }
46
            : dp,
47
        );
48
      }
49
    });
50
    setFieldValue(id, value);
×
51
  };
52

53
  const renderField = () => {
136✔
54
    switch (questionField?.type) {
136!
55
      case 'date':
56
        return (
16✔
57
          <TypeDate
58
            keyform={keyform}
59
            onChange={handleOnChangeField}
60
            values={values}
61
            {...questionField}
62
          />
63
        );
64
      case 'image':
65
        return (
×
66
          <TypeImage
67
            keyform={keyform}
68
            onChange={handleOnChangeField}
69
            values={values}
70
            {...questionField}
71
          />
72
        );
73
      case 'multiple_option':
74
        return (
×
75
          <TypeMultipleOption
76
            keyform={keyform}
77
            onChange={handleOnChangeField}
78
            values={values}
79
            {...questionField}
80
          />
81
        );
82
      case 'option':
83
        return (
64✔
84
          <TypeOption
85
            keyform={keyform}
86
            onChange={handleOnChangeField}
87
            values={values}
88
            {...questionField}
89
          />
90
        );
91
      case 'text':
92
        return (
16✔
93
          <TypeText
94
            keyform={keyform}
95
            onChange={handleOnChangeField}
96
            values={values}
97
            {...questionField}
98
          />
99
        );
100
      case 'number':
101
        return (
24✔
102
          <TypeNumber
103
            keyform={keyform}
104
            onChange={handleOnChangeField}
105
            values={values}
106
            {...questionField}
107
          />
108
        );
109
      case 'geo':
110
        return (
×
111
          <TypeGeo
112
            keyform={keyform}
113
            onChange={handleOnChangeField}
114
            values={values}
115
            {...questionField}
116
          />
117
        );
118
      default:
119
        return (
16✔
120
          <TypeInput
121
            keyform={keyform}
122
            onChange={handleOnChangeField}
123
            values={values}
124
            {...questionField}
125
          />
126
        );
127
    }
128
  };
129

130
  return (
136✔
131
    <View>
132
      {renderField()}
133
      {meta.touched && meta.error ? (
374!
134
        <Text style={styles.validationErrorText}>{meta.error}</Text>
135
      ) : null}
136
    </View>
137
  );
138
};
139

140
export default QuestionField;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc