@openforis/arena-core 2.3.42 → 2.4.0
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/dist/esm/record/_records/recordCompletion.js +3 -3
- package/dist/esm/record/_records/recordCompletion.js.map +1 -1
- package/dist/esm/record/_records/recordGetters.js +221 -143
- package/dist/esm/record/_records/recordGetters.js.map +1 -1
- package/dist/esm/record/_records/recordPagesValidation.js +5 -5
- package/dist/esm/record/_records/recordPagesValidation.js.map +1 -1
- package/dist/esm/record/_records/recordUtils.js +3 -7
- package/dist/esm/record/_records/recordUtils.js.map +1 -1
- package/dist/esm/record/nodePointers.js +1 -1
- package/dist/esm/record/nodePointers.js.map +1 -1
- package/dist/esm/record/recordCloner.js +1 -1
- package/dist/esm/record/recordCloner.js.map +1 -1
- package/dist/esm/record/recordExpressionEvaluator/functions.js +4 -5
- package/dist/esm/record/recordExpressionEvaluator/functions.js.map +1 -1
- package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js +1 -1
- package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
- package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +2 -2
- package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
- package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js +1 -1
- package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
- package/dist/esm/record/recordFixer.js +5 -5
- package/dist/esm/record/recordFixer.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js +2 -8
- package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +6 -6
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +1 -6
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +3 -4
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +3 -3
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -9
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +2 -3
- package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js +1 -5
- package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -9
- package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js +1 -1
- package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
- package/dist/esm/record/recordPrettyPrinter.js +14 -12
- package/dist/esm/record/recordPrettyPrinter.js.map +1 -1
- package/dist/esm/record/recordUpdater.js +2 -2
- package/dist/esm/record/recordUpdater.js.map +1 -1
- package/dist/esm/record/recordValidator/attributeKeyValidator.js +4 -4
- package/dist/esm/record/recordValidator/attributeKeyValidator.js.map +1 -1
- package/dist/esm/record/recordValidator/attributeUniqueValidator.js +1 -1
- package/dist/esm/record/recordValidator/attributeUniqueValidator.js.map +1 -1
- package/dist/esm/record/recordValidator/attributeValidator.js +8 -10
- package/dist/esm/record/recordValidator/attributeValidator.js.map +1 -1
- package/dist/esm/record/recordValidator/countVaildator.js +2 -2
- package/dist/esm/record/recordValidator/countVaildator.js.map +1 -1
- package/dist/esm/record/recordValidator/recordValidator.js +1 -2
- package/dist/esm/record/recordValidator/recordValidator.js.map +1 -1
- package/dist/record/_records/recordCompletion.js +3 -3
- package/dist/record/_records/recordCompletion.js.map +1 -1
- package/dist/record/_records/recordGetters.d.ts +104 -51
- package/dist/record/_records/recordGetters.js +221 -170
- package/dist/record/_records/recordGetters.js.map +1 -1
- package/dist/record/_records/recordPagesValidation.js +5 -5
- package/dist/record/_records/recordPagesValidation.js.map +1 -1
- package/dist/record/_records/recordUtils.js +3 -7
- package/dist/record/_records/recordUtils.js.map +1 -1
- package/dist/record/nodePointers.js +1 -1
- package/dist/record/nodePointers.js.map +1 -1
- package/dist/record/recordCloner.js +1 -1
- package/dist/record/recordCloner.js.map +1 -1
- package/dist/record/recordExpressionEvaluator/functions.js +4 -5
- package/dist/record/recordExpressionEvaluator/functions.js.map +1 -1
- package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js +1 -1
- package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
- package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +2 -2
- package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
- package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js +1 -1
- package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
- package/dist/record/recordFixer.js +5 -5
- package/dist/record/recordFixer.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js +2 -8
- package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +6 -6
- package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +1 -1
- package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +1 -6
- package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +3 -4
- package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +3 -3
- package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -9
- package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +2 -3
- package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodesDeleter.js +1 -5
- package/dist/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -9
- package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
- package/dist/record/recordNodesUpdater/recordNodesUpdater.js +1 -1
- package/dist/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
- package/dist/record/recordPrettyPrinter.js +14 -12
- package/dist/record/recordPrettyPrinter.js.map +1 -1
- package/dist/record/recordUpdater.js +2 -2
- package/dist/record/recordUpdater.js.map +1 -1
- package/dist/record/recordValidator/attributeKeyValidator.js +4 -4
- package/dist/record/recordValidator/attributeKeyValidator.js.map +1 -1
- package/dist/record/recordValidator/attributeUniqueValidator.js +1 -1
- package/dist/record/recordValidator/attributeUniqueValidator.js.map +1 -1
- package/dist/record/recordValidator/attributeValidator.js +8 -10
- package/dist/record/recordValidator/attributeValidator.js.map +1 -1
- package/dist/record/recordValidator/countVaildator.js +2 -2
- package/dist/record/recordValidator/countVaildator.js.map +1 -1
- package/dist/record/recordValidator/recordValidator.js +1 -2
- package/dist/record/recordValidator/recordValidator.js.map +1 -1
- package/dist/record/records.d.ts +340 -40
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordCompletion.js","sourceRoot":"","sources":["../../../src/record/_records/recordCompletion.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AACnD,2CAA4E;AAC5E,yCAA8C;AAC9C,uCAAqC;AAErC,mDAAsD;AAOtD,MAAM,UAAU,GAAG,GAA0B,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;AAEzE,MAAM,QAAQ,GAAG,CAAC,QAA+B,EAAE,UAAiC,EAAQ,EAAE;IAC5F,QAAQ,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IAClC,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,2BAA2B,GAAG,CAAC,MAIpC,EAAyB,EAAE;IAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAE1C,IAAI,kBAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,YAAK,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;QAC3E,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO,UAAU,EAAE,CAAA;QAEhE,MAAM,gBAAgB,GAAG,IAAA,2BAAW,EAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"recordCompletion.js","sourceRoot":"","sources":["../../../src/record/_records/recordCompletion.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArenaRecordNode, Nodes } from '../../node'\nimport { NodeDef, NodeDefProps, NodeDefs, NodeDefType } from '../../nodeDef'\nimport { Survey, Surveys } from '../../survey'\nimport { Numbers } from '../../utils'\nimport { ArenaRecord } from '../record'\nimport { getChildren, getRoot } from './recordGetters'\n\nexport interface EntityCompletionStats {\n total: number\n filled: number\n}\n\nconst emptyStats = (): EntityCompletionStats => ({ total: 0, filled: 0 })\n\nconst addStats = (statsAcc: EntityCompletionStats, statsToAdd: EntityCompletionStats): void => {\n statsAcc.total += statsToAdd.total\n statsAcc.filled += statsToAdd.filled\n}\n\nconst getAttributeCompletionStats = (params: {\n record: ArenaRecord\n entity: ArenaRecordNode\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): EntityCompletionStats => {\n const { record, entity, nodeDef } = params\n\n if (NodeDefs.isMultiple(nodeDef)) {\n const minCount = Nodes.getChildrenMinCount({ parentNode: entity, nodeDef })\n if (Number.isNaN(minCount) || minCount <= 0) return emptyStats()\n\n const filledNodesCount = getChildren({ parentNode: entity, childDefUuid: nodeDef.uuid })(record).filter(\n Nodes.isValueNotBlank\n ).length\n\n return { total: minCount, filled: Math.min(filledNodesCount, minCount) }\n }\n\n if (!NodeDefs.isRequired(nodeDef) && !NodeDefs.isKey(nodeDef)) return emptyStats()\n\n const node = getChildren({ parentNode: entity, childDefUuid: nodeDef.uuid })(record)[0]\n return { total: 1, filled: node && Nodes.isValueNotBlank(node) ? 1 : 0 }\n}\n\nconst getChildEntityCompletionStats = (params: {\n survey: Survey\n record: ArenaRecord\n parentEntity: ArenaRecordNode\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): EntityCompletionStats => {\n const { survey, record, parentEntity, nodeDef } = params\n const childEntities = getChildren({ parentNode: parentEntity, childDefUuid: nodeDef.uuid })(record)\n\n if (NodeDefs.isSingle(nodeDef)) {\n const childEntity = childEntities[0]\n return childEntity ? getEntityCompletionStats({ survey, record, entity: childEntity }) : emptyStats()\n }\n\n const minCountRaw = Nodes.getChildrenMinCount({ parentNode: parentEntity, nodeDef })\n const minCount = Number.isNaN(minCountRaw) ? 0 : Math.max(minCountRaw, 0)\n // entities added beyond the min count are still expected to be complete\n const expectedCount = Math.max(minCount, childEntities.length)\n if (expectedCount === 0) return emptyStats()\n\n const stats = emptyStats()\n for (let index = 0; index < expectedCount; index++) {\n const childEntity = childEntities[index]\n // a missing repetition (below the min count) counts as a single incomplete unit\n addStats(\n stats,\n childEntity ? getEntityCompletionStats({ survey, record, entity: childEntity }) : { total: 1, filled: 0 }\n )\n }\n return stats\n}\n\nexport const getEntityCompletionStats = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n includeNestedEntities?: boolean\n}): EntityCompletionStats => {\n const { survey, record, entity, includeNestedEntities = true } = params\n const entityDef = Surveys.getNodeDefByUuid({ survey, uuid: entity.nodeDefUuid })\n const childDefs = Surveys.getNodeDefChildren({ survey, nodeDef: entityDef })\n\n const stats = emptyStats()\n for (const childDef of childDefs) {\n if (!Nodes.isChildApplicable(entity, childDef.uuid)) continue\n\n if (NodeDefs.isEntity(childDef)) {\n if (!includeNestedEntities) continue\n addStats(stats, getChildEntityCompletionStats({ survey, record, parentEntity: entity, nodeDef: childDef }))\n } else {\n addStats(stats, getAttributeCompletionStats({ record, entity, nodeDef: childDef }))\n }\n }\n return stats\n}\n\nconst toCompletionPercent = (stats: EntityCompletionStats): number => {\n const { total, filled } = stats\n if (total <= 0) return 100\n return Numbers.roundToPrecision((filled / total) * 100, 2)\n}\n\n/**\n * Returns the percentage of completion of the given entity (0-100), considering every descendant recursively.\n * A required or key attribute is considered filled when it has a non empty value; multiple attributes and\n * entities are considered filled based on their min count (see Nodes.getChildrenMinCount).\n */\nexport const getEntityCompletionPercent = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n}): number => toCompletionPercent(getEntityCompletionStats(params))\n\n/**\n * Returns the percentage of completion of the given entity (0-100), considering only its own attributes\n * (nested entities are ignored).\n */\nexport const getEntityOwnCompletionPercent = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n}): number => toCompletionPercent(getEntityCompletionStats({ ...params, includeNestedEntities: false }))\n\n/**\n * Returns the percentage of completion of the given record (0-100), i.e. the completion of its root entity.\n */\nexport const getRecordCompletionPercent = (params: { survey: Survey; record: ArenaRecord }): number => {\n const { survey, record } = params\n const rootEntity = getRoot(record)\n return rootEntity ? getEntityCompletionPercent({ survey, record, entity: rootEntity }) : 0\n}\n"]}
|
|
@@ -3,68 +3,117 @@ import { ArenaRecordNode, NodePointer, NodesMap } from '../../node';
|
|
|
3
3
|
import { NodeDef, NodeDefCode, NodeDefCodeProps, NodeDefProps, NodeDefType } from '../../nodeDef';
|
|
4
4
|
import { Survey, SurveyDependencyType } from '../../survey/survey';
|
|
5
5
|
import { ArenaRecord } from '../record';
|
|
6
|
+
type RecordParams = {
|
|
7
|
+
record: ArenaRecord;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Record getter: takes the parameters first and the record as separate (curried) parameter: `getter(params)(record)`.
|
|
11
|
+
* The deprecated form, with the record inside the parameters (`getter({ record, ...params })`), is still supported.
|
|
12
|
+
*/
|
|
13
|
+
type RecordGetter<P extends RecordParams, R> = {
|
|
14
|
+
/** @deprecated Pass the record as separate parameter: `getter(params)(record)` */
|
|
15
|
+
(params: P): R;
|
|
16
|
+
(params: Omit<P, 'record'>): (record: ArenaRecord) => R;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Record getter (with parameters object) that also supports the deprecated form with positional parameters:
|
|
20
|
+
* `getter(arg1, arg2)(record)`.
|
|
21
|
+
*/
|
|
22
|
+
type PositionalRecordGetter<P, A extends unknown[], R> = {
|
|
23
|
+
(params: P): (record: ArenaRecord) => R;
|
|
24
|
+
/** @deprecated Pass the parameters as an object: `getter({ ...params })(record)` */
|
|
25
|
+
(...args: A): (record: ArenaRecord) => R;
|
|
26
|
+
};
|
|
6
27
|
export declare const getCycle: (record: ArenaRecord) => string;
|
|
7
28
|
export declare const getNodes: (record: ArenaRecord) => Dictionary<ArenaRecordNode>;
|
|
8
29
|
export declare const getNodesArray: (record: ArenaRecord) => ArenaRecordNode[];
|
|
9
|
-
export declare const getNodeByUuid:
|
|
10
|
-
|
|
30
|
+
export declare const getNodeByUuid: PositionalRecordGetter<{
|
|
31
|
+
uuid: string;
|
|
32
|
+
}, [uuid: string], ArenaRecordNode | undefined>;
|
|
33
|
+
export declare const getNodesByUuids: PositionalRecordGetter<{
|
|
34
|
+
uuids: string[];
|
|
35
|
+
}, [uuids: string[]], ArenaRecordNode[]>;
|
|
11
36
|
export declare const getRoot: (record: ArenaRecord) => ArenaRecordNode | undefined;
|
|
12
|
-
export declare const getChildren:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export declare const
|
|
17
|
-
|
|
37
|
+
export declare const getChildren: PositionalRecordGetter<{
|
|
38
|
+
parentNode: ArenaRecordNode;
|
|
39
|
+
childDefUuid?: string;
|
|
40
|
+
}, [parentNode: ArenaRecordNode, childDefUuid?: string | undefined], ArenaRecordNode[]>;
|
|
41
|
+
export declare const getChild: PositionalRecordGetter<{
|
|
42
|
+
parentNode: ArenaRecordNode;
|
|
43
|
+
childDefUuid: string;
|
|
44
|
+
}, [parentNode: ArenaRecordNode, childDefUuid: string], ArenaRecordNode>;
|
|
45
|
+
export declare const getParent: PositionalRecordGetter<{
|
|
18
46
|
node: ArenaRecordNode;
|
|
19
|
-
}
|
|
20
|
-
export declare const
|
|
21
|
-
|
|
47
|
+
}, [node: ArenaRecordNode], ArenaRecordNode | undefined>;
|
|
48
|
+
export declare const getNodesByDefUuid: PositionalRecordGetter<{
|
|
49
|
+
nodeDefUuid: string;
|
|
50
|
+
}, [nodeDefUuid: string], ArenaRecordNode[]>;
|
|
51
|
+
export declare const isNodeApplicable: RecordGetter<RecordParams & {
|
|
22
52
|
node: ArenaRecordNode;
|
|
23
|
-
}
|
|
24
|
-
export declare const
|
|
25
|
-
record: ArenaRecord;
|
|
53
|
+
}, boolean>;
|
|
54
|
+
export declare const isNodeEditable: RecordGetter<RecordParams & {
|
|
26
55
|
node: ArenaRecordNode;
|
|
27
|
-
}
|
|
28
|
-
export declare const
|
|
56
|
+
}, boolean>;
|
|
57
|
+
export declare const isNodeVisible: RecordGetter<RecordParams & {
|
|
58
|
+
node: ArenaRecordNode;
|
|
59
|
+
}, boolean>;
|
|
60
|
+
export declare const getDependentCodeAttributes: PositionalRecordGetter<{
|
|
61
|
+
node: ArenaRecordNode;
|
|
62
|
+
}, [node: ArenaRecordNode], ArenaRecordNode[]>;
|
|
29
63
|
export declare const getParentCodeAttribute: (params: {
|
|
30
64
|
parentNode: ArenaRecordNode;
|
|
31
65
|
nodeDef: NodeDefCode;
|
|
32
66
|
}) => (record: ArenaRecord) => ArenaRecordNode | undefined;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Visits the specified node and its ancestors, from the node up to the root: the visit stops when the visitor returns true.
|
|
69
|
+
*/
|
|
70
|
+
export declare const visitAncestorsAndSelf: PositionalRecordGetter<{
|
|
71
|
+
node: ArenaRecordNode;
|
|
72
|
+
visitor: (node: ArenaRecordNode) => boolean | void;
|
|
73
|
+
}, [node: ArenaRecordNode, visitor: (node: ArenaRecordNode) => void, stopIfFn?: (() => boolean) | undefined], void>;
|
|
74
|
+
/**
|
|
75
|
+
* Returns the first node satisfying the predicate among the specified node and its ancestors (from the node up to the root).
|
|
76
|
+
*/
|
|
77
|
+
export declare const findAncestor: (params: {
|
|
78
|
+
node: ArenaRecordNode;
|
|
79
|
+
predicate: (node: ArenaRecordNode) => boolean;
|
|
80
|
+
}) => (record: ArenaRecord) => ArenaRecordNode | undefined;
|
|
81
|
+
export declare const getAncestor: RecordGetter<{
|
|
36
82
|
record: ArenaRecord;
|
|
37
83
|
node: ArenaRecordNode;
|
|
38
84
|
ancestorDefUuid: string;
|
|
39
|
-
}
|
|
85
|
+
}, ArenaRecordNode | undefined>;
|
|
40
86
|
/**
|
|
41
87
|
* Returns the list of ancestors from the given node to the root entity
|
|
42
88
|
*/
|
|
43
|
-
export declare const getAncestorsAndSelf:
|
|
89
|
+
export declare const getAncestorsAndSelf: RecordGetter<{
|
|
44
90
|
record: ArenaRecord;
|
|
45
91
|
node: ArenaRecordNode;
|
|
46
|
-
}
|
|
47
|
-
export declare const getDescendantsOrSelf:
|
|
92
|
+
}, ArenaRecordNode[]>;
|
|
93
|
+
export declare const getDescendantsOrSelf: RecordGetter<{
|
|
48
94
|
record: ArenaRecord;
|
|
49
95
|
node: ArenaRecordNode;
|
|
50
96
|
nodeDefDescendant: NodeDef<any>;
|
|
51
|
-
}
|
|
52
|
-
export declare const getDescendant:
|
|
97
|
+
}, ArenaRecordNode[]>;
|
|
98
|
+
export declare const getDescendant: RecordGetter<{
|
|
53
99
|
record: ArenaRecord;
|
|
54
100
|
node: ArenaRecordNode;
|
|
55
101
|
nodeDefDescendant: NodeDef<any>;
|
|
56
|
-
}
|
|
102
|
+
}, ArenaRecordNode>;
|
|
57
103
|
export declare const isDescendantOf: (params: {
|
|
58
104
|
node: ArenaRecordNode;
|
|
59
105
|
ancestor: ArenaRecordNode;
|
|
60
106
|
}) => boolean;
|
|
61
|
-
export declare const visitDescendantsAndSelf:
|
|
107
|
+
export declare const visitDescendantsAndSelf: RecordGetter<{
|
|
62
108
|
record: ArenaRecord;
|
|
63
109
|
node: ArenaRecordNode;
|
|
64
110
|
visitor: (node: ArenaRecordNode) => boolean | void;
|
|
65
111
|
traverseMethod?: TraverseMethod;
|
|
66
|
-
}
|
|
67
|
-
export declare const findDescendantOrSelf: (
|
|
112
|
+
}, void>;
|
|
113
|
+
export declare const findDescendantOrSelf: (params: {
|
|
114
|
+
node: ArenaRecordNode;
|
|
115
|
+
predicate: (node: ArenaRecordNode) => boolean;
|
|
116
|
+
}) => (record: ArenaRecord) => ArenaRecordNode | undefined;
|
|
68
117
|
type EntityKeyNodesGetterParams = {
|
|
69
118
|
survey: Survey;
|
|
70
119
|
cycle?: string;
|
|
@@ -72,62 +121,66 @@ type EntityKeyNodesGetterParams = {
|
|
|
72
121
|
entity: ArenaRecordNode;
|
|
73
122
|
keyDefs?: NodeDef<NodeDefType, NodeDefProps>[];
|
|
74
123
|
};
|
|
75
|
-
export declare const getEntityKeyNodesByDefUuid:
|
|
76
|
-
export declare const getEntityKeyNodes:
|
|
77
|
-
export declare const getEntityKeyValuesByDefUuid:
|
|
78
|
-
export declare const getEntityKeyValues:
|
|
79
|
-
export declare const getEntitySiblings:
|
|
124
|
+
export declare const getEntityKeyNodesByDefUuid: RecordGetter<EntityKeyNodesGetterParams, NodesMap>;
|
|
125
|
+
export declare const getEntityKeyNodes: RecordGetter<EntityKeyNodesGetterParams, ArenaRecordNode[]>;
|
|
126
|
+
export declare const getEntityKeyValuesByDefUuid: RecordGetter<EntityKeyNodesGetterParams, Dictionary<any>>;
|
|
127
|
+
export declare const getEntityKeyValues: RecordGetter<EntityKeyNodesGetterParams, any[]>;
|
|
128
|
+
export declare const getEntitySiblings: RecordGetter<{
|
|
80
129
|
record: ArenaRecord;
|
|
81
130
|
entity: ArenaRecordNode;
|
|
82
131
|
includeSelf?: boolean;
|
|
83
|
-
}
|
|
84
|
-
export declare const getAttributeSiblings:
|
|
132
|
+
}, ArenaRecordNode[]>;
|
|
133
|
+
export declare const getAttributeSiblings: RecordGetter<{
|
|
85
134
|
record: ArenaRecord;
|
|
86
135
|
node: ArenaRecordNode;
|
|
87
136
|
nodeDef: NodeDef<NodeDefType, NodeDefProps>;
|
|
88
|
-
}
|
|
89
|
-
export declare const getNodeIndex:
|
|
137
|
+
}, ArenaRecordNode[]>;
|
|
138
|
+
export declare const getNodeIndex: RecordGetter<{
|
|
90
139
|
record: ArenaRecord;
|
|
91
140
|
node: ArenaRecordNode;
|
|
92
|
-
}
|
|
93
|
-
export declare const findEntityByKeyValues:
|
|
141
|
+
}, number>;
|
|
142
|
+
export declare const findEntityByKeyValues: RecordGetter<{
|
|
94
143
|
survey: Survey;
|
|
95
144
|
cycle: string;
|
|
96
145
|
record: ArenaRecord;
|
|
97
146
|
parentEntity: ArenaRecordNode;
|
|
98
147
|
entityDefUuid: string;
|
|
99
148
|
keyValuesByDefUuid: Dictionary<any>;
|
|
100
|
-
}
|
|
101
|
-
export declare const findEntityWithSameKeysInAnotherRecord:
|
|
149
|
+
}, ArenaRecordNode | undefined>;
|
|
150
|
+
export declare const findEntityWithSameKeysInAnotherRecord: RecordGetter<{
|
|
102
151
|
survey: Survey;
|
|
103
152
|
cycle: string;
|
|
104
153
|
entityUuid: string;
|
|
105
154
|
record: ArenaRecord;
|
|
106
155
|
recordOther: ArenaRecord;
|
|
107
|
-
}
|
|
108
|
-
export declare const getDependentNodePointers:
|
|
156
|
+
}, ArenaRecordNode | undefined>;
|
|
157
|
+
export declare const getDependentNodePointers: RecordGetter<{
|
|
109
158
|
survey: Survey;
|
|
110
159
|
record: ArenaRecord;
|
|
111
160
|
node: ArenaRecordNode;
|
|
112
161
|
dependencyType: SurveyDependencyType;
|
|
113
162
|
includeSelf?: boolean;
|
|
114
163
|
filterFn?: (nodePointer: NodePointer) => boolean;
|
|
115
|
-
}
|
|
116
|
-
export declare const getAncestorCodePath:
|
|
164
|
+
}, NodePointer[]>;
|
|
165
|
+
export declare const getAncestorCodePath: RecordGetter<{
|
|
117
166
|
survey: Survey;
|
|
118
167
|
record: ArenaRecord;
|
|
119
168
|
parentNode: ArenaRecordNode;
|
|
120
169
|
nodeDef: NodeDef<NodeDefType.code, NodeDefCodeProps>;
|
|
121
|
-
}
|
|
122
|
-
export declare const getCategoryItemUuid:
|
|
170
|
+
}, string[]>;
|
|
171
|
+
export declare const getCategoryItemUuid: RecordGetter<{
|
|
123
172
|
survey: Survey;
|
|
124
173
|
nodeDef: NodeDef<NodeDefType.code, NodeDefCodeProps>;
|
|
125
174
|
record: ArenaRecord;
|
|
126
175
|
parentNode: ArenaRecordNode;
|
|
127
176
|
code: string;
|
|
128
|
-
}
|
|
129
|
-
export declare const isNodeFilledByUser:
|
|
130
|
-
|
|
177
|
+
}, string | undefined>;
|
|
178
|
+
export declare const isNodeFilledByUser: PositionalRecordGetter<{
|
|
179
|
+
node: ArenaRecordNode;
|
|
180
|
+
}, [node: ArenaRecordNode], boolean>;
|
|
181
|
+
export declare const isNodeEmpty: PositionalRecordGetter<{
|
|
182
|
+
node: ArenaRecordNode;
|
|
183
|
+
}, [node: ArenaRecordNode], boolean>;
|
|
131
184
|
export declare const isEmpty: (record: ArenaRecord) => boolean;
|
|
132
185
|
export declare const getStep: (record: ArenaRecord) => string;
|
|
133
186
|
export declare const isInAnalysisStep: (record: ArenaRecord) => boolean;
|