3.3.8 • Published 1 year ago

@lms-elements/test-task v3.3.8

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@lms-elements/test-task

Components for test tasks construct and solve. It can be used with CustomEditor automatically choose based on form state

Answer

IFormValuesForStudent - interface of Form values

IQuestionForStudent - interface of question object that contains in Form state like IQuestion[]

Answer - component that displays different Fields depending on type of answer

  • 'multiple' - displays many <Checkbox /> with answerOptions
  • 'single' - displays many <input type="radio" /> with answerOptions
  • 'open' - displays <textarea />
  • 'detailed' - displays <textarea /> if isTextAvailable and <Title /> to load file if isFileAvailable
  • 'binary' - similar as single but always two options "true" and "false". !!! typeof "true" and "false" === 'string'
export type answerType = 'multiple' | 'binary' | 'open' | 'detailed' | 'single';

export interface IAnswerProps {
    /**
     * final-form field name
     */
    name: string;
    /**
     * determines how component will use question and answerOptions
     */
    withEditor?: boolean;
}

Usage

import { Answer, IQuestionForStudent, IFormValuesForStudent } from '@lms-elements/test-task'

interface IYourFormProps {
    initialvalues: IFormValuesForStudent,
    // other stuff
}

const YourForm: React.FC<IYourFormProps> = (props) => (
    <Form
        onSubmit={props.onSubmit}
        mutators={{
            ...arrayMutators,
        }}
        initialValues={props.initialValues}
    >
        {({ handleSubmit }): React.ReactElement => {
            return (
                <form onSubmit={handleSubmit}>
                    <FieldArray name="questions">
                        {({ fields: questions }: FieldArrayRenderProps<IQuestionForStudent, HTMLInputElement>) =>
                            questions.map((name, index) => (
                                <Answer key={index} name={name} withEditor={withEditor} />
                            ))
                        }
                    </FieldArray>
                    <Button size="m" view={ButtonViewEnum.action} type="submit">
                        Submit
                    </Button>
                </form>
            );
        }}
    </Form>
);

ExpandedQuestion

createDefaultQuestion - utility to create default instance of IQuestion object

IFormValuesForTeacher - interface of Form values

IQuestionForTeacher - interface of question object that contains in Form state like IQuestion[]

ExpandedQuestion - component that displays needed form fields depending on question type

type questionType = 'multiple' | 'binary' | 'open' | 'detailed';

interface IExpandedQuestionProps {
    type: questionType; // type of question
    name: string; // name of IQuestionForTeacher object in your Form state
    multipleCheckboxesValidators?: ((value: boolean) => undefined | string)[];
    detailedCheckboxesValidators?: ((value: boolean) => undefined | string)[];
}
  • 'multiple' - displays many <Checkbox /> with answerOptions and <textarea /> or <CustomEditor /> for question
  • 'binary' - displays two <input type="radio" /> with answerOptions 'Верно' and 'Неверно' and <textarea /> or <CustomEditor /> for question
  • 'open' - displays <input type="text" /> wuth dropdown with mark partition that turns truthfulness property of question in Form state. it can be ['100 % от оценки', '75 % от оценки', '50 % от оценки', '25 % от оценки']
  • 'detailed' - displays two <input type="radio" /> with answerOptions that turns isTextAvailable and isFileAvailable, <textarea /> or <CustomEditor /> for question

Usage

Note that you HAVE TO wrap your WHOLE application into tag <DndProvider backend={HTML5Backend} />

import { Answer, ChooseAnswerName, IQuestionForStudent, IFormValuesForTeacher } from '@lms-elements/test-task'

interface IYourFormProps {
    initialValues: IFormValuesForTeacher;
    // other stuff
}

const FormLayout: React.FC<IYourFormProps> = (props) => {
    return (
        <DndProvider backend={HTML5Backend}> {/* note that you HAVE TO wrap your WHOLE application into this tag */}
            <div>
                <Form onSubmit={props.onSubmit} mutators={{ ...arrayMutators }} initialValues={initialValues}>
                    {({ handleSubmit }) => (
                        <form onSubmit={handleSubmit}>
                            <FieldArray name="questions">
                                {({ fields }: FieldArrayRenderProps<IQuestionForStudent, HTMLInputElement>) =>
                                    fields.map((name, index) => (
                                        <div key={name} style={{ marginTop: '32px' }}>
                                            <ExpandedQuestion
                                                name={name}
                                                type={fields.value[index].type}
                                            />
                                        </div>
                                    ))
                                }
                            </FieldArray>
                            <Button size="m" view={ButtonViewEnum.action} type="submit">
                                Submit
                            </Button>
                        </form>
                    )}
                </Form>
            </div>
        </DndProvider>
    );
};

MinimizedQuestion

MinimizedQuestion - component that displays small tip about question with specific type

type questionType = 'multiple' | 'binary' | 'open' | 'detailed';

interface IMinimizedQuestionProps {
    type: questionType; // type of question
}

If you want to use MinimizedQuestion as dragable component wrap it in for example <div> and set ref porepty to this wrapper

To turn MinimizedQuestion into ExpandedQuestion on drag to some specific area just make MinimizedQuestion dissapeared or kind of it and push new instance of IQuestionForTeacher into Form state. Use createDefaultQuestion in this case.

Usage

import { MinimizedQuestion } from '@lms-elements/test-task';

<MinimizedQuestion type={type} />
3.2.24

1 year ago

3.2.23

1 year ago

3.2.26

1 year ago

3.2.25

1 year ago

3.2.28

1 year ago

3.2.27

1 year ago

3.2.29

1 year ago

3.2.20

2 years ago

3.2.22

1 year ago

3.2.21

1 year ago

3.3.8

1 year ago

3.3.7

1 year ago

3.3.6

1 year ago

3.2.15

2 years ago

3.2.17

2 years ago

3.2.16

2 years ago

3.2.19

2 years ago

3.2.18

2 years ago

3.3.1

1 year ago

3.3.0

1 year ago

3.3.5

1 year ago

3.3.4

1 year ago

3.3.3

1 year ago

3.3.2

1 year ago

3.2.2

2 years ago

3.2.1

2 years ago

3.2.0

2 years ago

3.2.6

2 years ago

3.2.5

2 years ago

3.2.4

2 years ago

3.2.3

2 years ago

3.2.9

2 years ago

3.2.8

2 years ago

3.2.7

2 years ago

3.2.13

2 years ago

3.1.3

2 years ago

3.2.12

2 years ago

3.1.2

2 years ago

3.1.1

2 years ago

3.2.14

2 years ago

3.1.0

2 years ago

3.1.7

2 years ago

3.1.6

2 years ago

3.1.5

2 years ago

3.1.4

2 years ago

3.2.11

2 years ago

3.2.10

2 years ago

3.1.9

2 years ago

3.1.8

2 years ago

3.0.8

2 years ago

3.0.9

2 years ago

3.0.12

2 years ago

3.0.13

2 years ago

3.0.10

2 years ago

3.0.11

2 years ago

3.0.16

2 years ago

3.0.17

2 years ago

3.0.14

2 years ago

3.0.15

2 years ago

3.0.23

2 years ago

3.0.24

2 years ago

3.0.21

2 years ago

3.0.22

2 years ago

3.0.27

2 years ago

3.0.28

2 years ago

3.0.25

2 years ago

3.0.26

2 years ago

3.0.18

2 years ago

3.0.19

2 years ago

3.0.34

2 years ago

3.0.32

2 years ago

3.0.33

2 years ago

3.0.30

2 years ago

3.0.31

2 years ago

3.0.29

2 years ago

2.4.18

2 years ago

2.4.17

2 years ago

2.4.19

2 years ago

2.4.14

2 years ago

2.4.13

2 years ago

2.4.16

2 years ago

2.4.15

2 years ago

2.4.10

2 years ago

2.4.12

2 years ago

2.4.11

2 years ago

2.4.9

2 years ago

2.4.29

2 years ago

2.4.28

2 years ago

2.4.25

2 years ago

2.4.24

2 years ago

2.4.27

2 years ago

2.4.26

2 years ago

2.4.21

2 years ago

2.4.20

2 years ago

2.4.23

2 years ago

2.4.22

2 years ago

2.4.30

2 years ago

3.0.4

2 years ago

3.0.3

2 years ago

3.0.2

2 years ago

3.0.1

2 years ago

3.0.7

2 years ago

3.0.6

2 years ago

3.0.5

2 years ago

3.0.0

2 years ago

2.4.1

2 years ago

2.4.0

2 years ago

2.4.3

2 years ago

2.4.2

2 years ago

2.3.23

2 years ago

2.4.5

2 years ago

2.4.4

2 years ago

2.3.20

2 years ago

2.3.22

2 years ago

2.3.21

2 years ago

2.3.0

2 years ago

2.3.2

2 years ago

2.3.1

2 years ago

2.3.4

2 years ago

2.3.3

2 years ago

2.3.6

2 years ago

2.3.5

2 years ago

2.4.7

2 years ago

2.4.6

2 years ago

2.4.8

2 years ago

2.2.1

2 years ago

2.2.15

2 years ago

2.2.3

2 years ago

2.2.16

2 years ago

2.2.2

2 years ago

2.2.13

2 years ago

2.2.5

2 years ago

2.2.14

2 years ago

2.2.4

2 years ago

2.2.11

2 years ago

2.2.7

2 years ago

2.2.12

2 years ago

2.2.10

2 years ago

2.3.8

2 years ago

2.3.7

2 years ago

2.3.9

2 years ago

2.2.9

2 years ago

2.2.8

2 years ago

2.3.17

2 years ago

2.3.16

2 years ago

2.3.19

2 years ago

2.3.18

2 years ago

2.3.13

2 years ago

2.3.12

2 years ago

2.3.15

2 years ago

2.3.14

2 years ago

2.3.11

2 years ago

2.3.10

2 years ago

2.2.0

2 years ago

2.1.114

2 years ago

2.1.113

2 years ago

2.1.116

2 years ago

2.1.115

2 years ago

2.1.118

2 years ago

2.1.117

2 years ago

2.1.119

2 years ago

2.1.121

2 years ago

2.1.120

2 years ago

2.1.123

2 years ago

2.1.122

2 years ago

2.1.125

2 years ago

2.1.124

2 years ago

2.1.127

2 years ago

2.1.126

2 years ago

2.1.89

2 years ago

2.1.87

2 years ago

2.1.88

2 years ago

2.1.85

2 years ago

2.1.86

2 years ago

2.1.83

2 years ago

2.1.84

2 years ago

2.1.82

2 years ago

2.1.98

2 years ago

2.1.99

2 years ago

2.1.101

2 years ago

2.1.96

2 years ago

2.1.100

2 years ago

2.1.97

2 years ago

2.1.103

2 years ago

2.1.94

2 years ago

2.1.102

2 years ago

2.1.95

2 years ago

2.1.105

2 years ago

2.1.92

2 years ago

2.1.104

2 years ago

2.1.93

2 years ago

2.1.107

2 years ago

2.1.90

2 years ago

2.1.106

2 years ago

2.1.91

2 years ago

2.1.109

2 years ago

2.1.108

2 years ago

2.1.110

2 years ago

2.1.112

2 years ago

2.1.111

2 years ago

2.1.81

2 years ago

2.1.80

2 years ago

2.1.78

2 years ago

2.1.79

2 years ago

2.1.49

2 years ago

2.1.47

2 years ago

2.1.48

2 years ago

2.1.45

2 years ago

2.1.46

2 years ago

2.1.58

2 years ago

2.1.59

2 years ago

2.1.56

2 years ago

2.1.57

2 years ago

2.1.54

2 years ago

2.1.55

2 years ago

2.1.52

2 years ago

2.1.53

2 years ago

2.1.50

2 years ago

2.1.51

2 years ago

2.1.69

2 years ago

2.1.67

2 years ago

2.1.68

2 years ago

2.1.65

2 years ago

2.1.66

2 years ago

2.1.63

2 years ago

2.1.64

2 years ago

2.1.61

2 years ago

2.1.62

2 years ago

2.1.60

2 years ago

2.1.76

2 years ago

2.1.77

2 years ago

2.1.74

2 years ago

2.1.75

2 years ago

2.1.72

2 years ago

2.1.73

2 years ago

2.1.70

2 years ago

2.1.71

2 years ago

2.1.43

2 years ago

2.1.44

2 years ago

2.1.41

2 years ago

2.1.42

2 years ago

2.1.40

2 years ago

2.1.19

3 years ago

2.1.27

2 years ago

2.1.28

2 years ago

2.1.25

2 years ago

2.1.26

2 years ago

2.1.23

2 years ago

2.1.24

2 years ago

2.1.21

3 years ago

2.1.22

3 years ago

2.1.20

3 years ago

2.1.29

2 years ago

2.1.38

2 years ago

2.1.39

2 years ago

2.1.36

2 years ago

2.1.37

2 years ago

2.1.34

2 years ago

2.1.35

2 years ago

2.1.32

2 years ago

2.1.33

2 years ago

2.1.30

2 years ago

2.1.31

2 years ago

2.1.18

3 years ago

2.1.16

3 years ago

2.1.17

3 years ago

2.1.15

3 years ago

2.1.14

3 years ago

2.1.12

3 years ago

2.1.13

3 years ago

2.1.11

3 years ago

2.1.10

3 years ago

2.1.9

3 years ago

2.1.8

3 years ago

2.1.7

3 years ago

2.1.6

3 years ago

2.1.5

3 years ago

2.1.2

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

2.1.1

3 years ago

2.0.3

3 years ago

2.1.0

3 years ago

2.0.2

3 years ago

2.0.1

3 years ago

1.0.8

3 years ago

2.0.0

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago