case-editor-tools 1.0.0-beta.43 → 1.0.0-beta.46

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.
package/exporter/index.js CHANGED
@@ -4,6 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var fs = require('fs');
6
6
  var logger_logger = require('../logger/logger.js');
7
+ var types_messageConfig = require('../types/messageConfig.js');
8
+ require('../types/duration.js');
7
9
 
8
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
11
 
@@ -22,6 +24,8 @@ const generateFilesForStudy = (study, pretty) => {
22
24
  generateStudyRuleFile(study, outputRoot, pretty);
23
25
  // Custom Study rules: (manually triggered rules)
24
26
  generateCustomStudyRules(study, outputRoot, pretty);
27
+ // Message configs:
28
+ generateMessageConfigs(study, outputRoot, pretty);
25
29
  };
26
30
  const generateSurveyFiles = (study, outputPath, pretty) => {
27
31
  if (study.surveys.length > 0) {
@@ -93,6 +97,31 @@ const generateCustomStudyRules = (study, outputPath, pretty) => {
93
97
  }
94
98
  logger_logger.Logger.success(`\t\tRule ${studyRule.name} saved`);
95
99
  });
100
+ };
101
+ const generateMessageConfigs = (study, outputPath, pretty) => {
102
+ if (!study.messageConfigs || study.messageConfigs.length < 1) {
103
+ logger_logger.Logger.log(`\tNo message configs in the study.`);
104
+ return;
105
+ }
106
+ else {
107
+ logger_logger.Logger.log(`\tMessage configs:`);
108
+ }
109
+ const messageConfigPath = `${outputPath}/messageConfigs`;
110
+ if (!fs__default["default"].existsSync(messageConfigPath)) {
111
+ fs__default["default"].mkdirSync(messageConfigPath, { recursive: true });
112
+ }
113
+ study.messageConfigs.forEach(conf => {
114
+ const fileName = `${messageConfigPath}/${conf.label.replace(' ', '_').toLocaleLowerCase()}.json`;
115
+ const outputObject = types_messageConfig.buildMessageConfig(conf);
116
+ try {
117
+ fs__default["default"].writeFileSync(fileName, JSON.stringify(outputObject, undefined, pretty ? 2 : undefined));
118
+ }
119
+ catch (err) {
120
+ logger_logger.Logger.error(err);
121
+ return;
122
+ }
123
+ logger_logger.Logger.success(`\t\tConfig for "${conf.label}" saved`);
124
+ });
96
125
  };
97
126
 
98
127
  exports.generateFilesForStudy = generateFilesForStudy;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -7,6 +7,7 @@ export declare const NativeStudyEngineExpressions: {
7
7
  responseHasOnlyKeysOtherThan: (itemKey: string, responseSlotKey: string, ...optionKeys: string[]) => Expression;
8
8
  getResponseValueAsNum: (itemKey: string, responseKey: string) => Expression;
9
9
  getResponseValueAsStr: (itemKey: string, responseKey: string) => Expression;
10
+ getSelectedKeys: (itemKey: string, responseKey: string) => Expression;
10
11
  hasResponseKey: (itemKey: string, responseKey: string) => Expression;
11
12
  hasResponseKeyWithValue: (itemKey: string, responseKey: string, value: string) => Expression;
12
13
  countResponseItems: (itemKey: string, responseKey: string) => Expression;
@@ -64,7 +65,7 @@ export declare const StudyEngineActions: {
64
65
  reports: {
65
66
  init: (reportKey: string) => Expression;
66
67
  cancel: (reportKey: string) => Expression;
67
- updateData: (reportKey: string, attributeKey: string, value: number | string | Expression, dtype?: "string" | "date" | "float" | "int" | "rawMessage" | undefined) => Expression;
68
+ updateData: (reportKey: string, attributeKey: string, value: number | string | Expression, dtype?: "string" | "date" | "float" | "int" | "rawMessage" | "keyList" | undefined) => Expression;
68
69
  removeData: (reportKey: string, attributeKey: string) => Expression;
69
70
  setReportIcon: (reportKey: string, icon: string) => Expression;
70
71
  setReportMessage: (reportKey: string, content: string, asTranslationKey?: boolean | undefined) => Expression;
@@ -127,7 +128,7 @@ export declare const StudyEngine: {
127
128
  reports: {
128
129
  init: (reportKey: string) => Expression;
129
130
  cancel: (reportKey: string) => Expression;
130
- updateData: (reportKey: string, attributeKey: string, value: number | string | Expression, dtype?: "string" | "date" | "float" | "int" | "rawMessage" | undefined) => Expression;
131
+ updateData: (reportKey: string, attributeKey: string, value: number | string | Expression, dtype?: "string" | "date" | "float" | "int" | "rawMessage" | "keyList" | undefined) => Expression;
131
132
  removeData: (reportKey: string, attributeKey: string) => Expression;
132
133
  setReportIcon: (reportKey: string, icon: string) => Expression;
133
134
  setReportMessage: (reportKey: string, content: string, asTranslationKey?: boolean | undefined) => Expression;
@@ -151,6 +152,7 @@ export declare const StudyEngine: {
151
152
  responseHasOnlyKeysOtherThan: (itemKey: string, responseSlotKey: string, ...optionKeys: string[]) => Expression;
152
153
  getResponseValueAsNum: (itemKey: string, responseKey: string) => Expression;
153
154
  getResponseValueAsStr: (itemKey: string, responseKey: string) => Expression;
155
+ getSelectedKeys: (itemKey: string, responseKey: string) => Expression;
154
156
  hasResponseKey: (itemKey: string, responseKey: string) => Expression;
155
157
  hasResponseKeyWithValue: (itemKey: string, responseKey: string, value: string) => Expression;
156
158
  countResponseItems: (itemKey: string, responseKey: string) => Expression;
@@ -62,6 +62,15 @@ const getResponseValueAsNum = (itemKey, responseKey) => {
62
62
  const getResponseValueAsStr = (itemKey, responseKey) => {
63
63
  return expressionUtils_expressionGen.generateExpression('getResponseValueAsStr', 'string', itemKey, responseKey);
64
64
  };
65
+ /**
66
+ * Retrieve the selected keys from a response slot
67
+ * @param itemKey full key to the survey item, in the form, e.g., <surveyKey>.<groupKey>.<itemKey>
68
+ * @param responseKey key of the response slot, where keys should be retrieved from
69
+ * @returns
70
+ */
71
+ const getSelectedKeys = (itemKey, responseKey) => {
72
+ return expressionUtils_expressionGen.generateExpression('getSelectedKeys', 'string', itemKey, responseKey);
73
+ };
65
74
  const countResponseItems = (itemKey, responseKey) => {
66
75
  return expressionUtils_expressionGen.generateExpression('countResponseItems', undefined, itemKey, responseKey);
67
76
  };
@@ -357,6 +366,7 @@ const NativeStudyEngineExpressions = {
357
366
  responseHasOnlyKeysOtherThan,
358
367
  getResponseValueAsNum,
359
368
  getResponseValueAsStr,
369
+ getSelectedKeys,
360
370
  hasResponseKey,
361
371
  hasResponseKeyWithValue,
362
372
  countResponseItems,
@@ -1 +1 @@
1
- {"version":3,"file":"studyEngineExpressions.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"studyEngineExpressions.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "case-editor-tools",
3
3
  "description": "Javascript tools to simplify survey and study coding for CASE.",
4
- "version": "1.0.0-beta.43",
4
+ "version": "1.0.0-beta.46",
5
5
  "main": "index.js",
6
6
  "license": "Apache-2.0",
7
7
  "repository": "github:case-framework/case-editor-tools",
@@ -0,0 +1,50 @@
1
+ import { Expression } from "survey-engine/data_types";
2
+ import { Duration } from "./duration";
3
+ export declare type MessageType = 'registration' | 'invitation' | 'verify-email' | 'verification-code' | 'password-reset' | 'password-changed' | 'account-id-changed' | 'weekly' | 'study-reminder' | 'newsletter' | 'account-deleted';
4
+ export interface MessageConfig {
5
+ sendTo: 'study-participants' | 'all-users' | 'scheduled-participant-messages';
6
+ studyKey: string;
7
+ label: string;
8
+ headerOverrides?: {
9
+ from: string;
10
+ sender: string;
11
+ replyTo: string[];
12
+ };
13
+ messageType: MessageType;
14
+ sendingTime: {
15
+ hour: number;
16
+ minute: number;
17
+ };
18
+ period: Duration;
19
+ defaultLanguage: string;
20
+ condition: Expression;
21
+ translations: Array<{
22
+ lang: string;
23
+ subject: string;
24
+ }>;
25
+ }
26
+ export declare const buildMessageConfig: (props: MessageConfig) => {
27
+ sendTo: "study-participants" | "all-users" | "scheduled-participant-messages";
28
+ studyKey: string;
29
+ label: string;
30
+ headerOverrides: {
31
+ from: string;
32
+ sender: string;
33
+ replyTo: string[];
34
+ } | undefined;
35
+ messageType: MessageType;
36
+ sendingTime: {
37
+ hour: number;
38
+ minute: number;
39
+ };
40
+ condition: {
41
+ dtype: string;
42
+ exp: Expression;
43
+ };
44
+ period: number;
45
+ defaultLanguage: string;
46
+ translations: {
47
+ lang: string;
48
+ subject: string;
49
+ }[];
50
+ };
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var types_duration = require('./duration.js');
6
+
7
+ const buildMessageConfig = (props) => {
8
+ return {
9
+ sendTo: props.sendTo,
10
+ studyKey: props.studyKey,
11
+ label: props.label,
12
+ headerOverrides: props.headerOverrides,
13
+ messageType: props.messageType,
14
+ sendingTime: props.sendingTime,
15
+ condition: { dtype: 'exp', exp: props.condition },
16
+ period: Math.floor(types_duration.durationObjectToSeconds(props.period)),
17
+ defaultLanguage: props.defaultLanguage,
18
+ translations: props.translations,
19
+ };
20
+ };
21
+
22
+ exports.buildMessageConfig = buildMessageConfig;
23
+ //# sourceMappingURL=messageConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageConfig.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
package/types/study.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Expression } from "survey-engine/data_types";
2
2
  import { StudyRules } from "./studyRules";
3
3
  import { SurveyDefinition } from "../surveys/types/survey-definition";
4
+ import { MessageConfig } from "./messageConfig";
4
5
  export interface Study {
5
6
  studyKey: string;
6
7
  outputFolderName?: string;
@@ -10,4 +11,5 @@ export interface Study {
10
11
  name: string;
11
12
  rules: Expression[];
12
13
  }>;
14
+ messageConfigs?: Array<MessageConfig>;
13
15
  }