@beinformed/ui 1.61.1 → 1.62.1
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/CHANGELOG.md +16 -0
- package/esm/constants/Settings.js +2 -1
- package/esm/constants/Settings.js.flow +2 -0
- package/esm/constants/Settings.js.map +1 -1
- package/esm/models/attributes/__tests__/AttributeContent.spec.js.flow +1 -1
- package/esm/models/concepts/ConceptIndexModel.js +1 -1
- package/esm/models/concepts/ConceptIndexModel.js.flow +3 -1
- package/esm/models/concepts/ConceptIndexModel.js.map +1 -1
- package/esm/models/concepts/ConceptLinkModel.d.ts +15 -0
- package/esm/models/concepts/ConceptLinkModel.js +14 -0
- package/esm/models/concepts/ConceptLinkModel.js.flow +21 -0
- package/esm/models/concepts/ConceptLinkModel.js.map +1 -1
- package/esm/models/concepts/SourceReferenceModel.d.ts +9 -0
- package/esm/models/concepts/SourceReferenceModel.js +16 -2
- package/esm/models/concepts/SourceReferenceModel.js.flow +22 -10
- package/esm/models/concepts/SourceReferenceModel.js.map +1 -1
- package/esm/models/concepts/__mock__/related_concepts.js.flow +12 -0
- package/esm/models/concepts/__tests__/RelatedConcepts.spec.js.flow +60 -0
- package/esm/models/concepts/__tests__/SourceReferenceModel.spec.js.flow +99 -0
- package/esm/models/content/ContentLinkModel.d.ts +8 -0
- package/esm/models/content/ContentLinkModel.js +31 -1
- package/esm/models/content/ContentLinkModel.js.flow +35 -1
- package/esm/models/content/ContentLinkModel.js.map +1 -1
- package/esm/models/content/ContentTOCModel.d.ts +3 -0
- package/esm/models/content/ContentTOCModel.js +6 -0
- package/esm/models/content/ContentTOCModel.js.flow +6 -0
- package/esm/models/content/ContentTOCModel.js.map +1 -1
- package/esm/models/content/__tests__/ContentIndexModel.spec.js.flow +3 -0
- package/esm/models/content/__tests__/ContentModel.spec.js.flow +5 -5
- package/esm/models/content/__tests__/Formalsource.spec.js.flow +4 -0
- package/esm/models/types.d.ts +6 -0
- package/esm/models/types.js.flow +7 -0
- package/esm/models/types.js.map +1 -1
- package/esm/utils/helpers/__tests__/createHash.spec.js.flow +5 -5
- package/esm/utils/helpers/createHash.d.ts +2 -1
- package/esm/utils/helpers/createHash.js +10 -9
- package/esm/utils/helpers/createHash.js.flow +10 -10
- package/esm/utils/helpers/createHash.js.map +1 -1
- package/lib/constants/Settings.js +2 -1
- package/lib/constants/Settings.js.map +1 -1
- package/lib/models/concepts/ConceptIndexModel.js +1 -1
- package/lib/models/concepts/ConceptIndexModel.js.map +1 -1
- package/lib/models/concepts/ConceptLinkModel.d.ts +15 -0
- package/lib/models/concepts/ConceptLinkModel.js +14 -0
- package/lib/models/concepts/ConceptLinkModel.js.map +1 -1
- package/lib/models/concepts/SourceReferenceModel.d.ts +9 -0
- package/lib/models/concepts/SourceReferenceModel.js +16 -2
- package/lib/models/concepts/SourceReferenceModel.js.map +1 -1
- package/lib/models/content/ContentLinkModel.d.ts +8 -0
- package/lib/models/content/ContentLinkModel.js +31 -1
- package/lib/models/content/ContentLinkModel.js.map +1 -1
- package/lib/models/content/ContentTOCModel.d.ts +3 -0
- package/lib/models/content/ContentTOCModel.js +6 -0
- package/lib/models/content/ContentTOCModel.js.map +1 -1
- package/lib/models/types.d.ts +6 -0
- package/lib/models/types.js.map +1 -1
- package/lib/utils/helpers/createHash.d.ts +2 -1
- package/lib/utils/helpers/createHash.js +11 -9
- package/lib/utils/helpers/createHash.js.map +1 -1
- package/package.json +3 -1
- package/src/constants/Settings.js +2 -0
- package/src/models/attributes/__tests__/AttributeContent.spec.js +1 -1
- package/src/models/concepts/ConceptIndexModel.js +3 -1
- package/src/models/concepts/ConceptLinkModel.js +21 -0
- package/src/models/concepts/SourceReferenceModel.js +22 -10
- package/src/models/concepts/__mock__/related_concepts.js +12 -0
- package/src/models/concepts/__mock__/related_concepts_contributions.json +41 -0
- package/src/models/concepts/__mock__/related_concepts_data.json +2292 -0
- package/src/models/concepts/__tests__/RelatedConcepts.spec.js +60 -0
- package/src/models/concepts/__tests__/SourceReferenceModel.spec.js +99 -0
- package/src/models/content/ContentLinkModel.js +35 -1
- package/src/models/content/ContentTOCModel.js +6 -0
- package/src/models/content/__tests__/ContentIndexModel.spec.js +3 -0
- package/src/models/content/__tests__/ContentModel.spec.js +5 -5
- package/src/models/content/__tests__/Formalsource.spec.js +4 -0
- package/src/models/content/__tests__/content-index.json +1 -0
- package/src/models/content/__tests__/formalsource-complete.json +1 -0
- package/src/models/types.js +7 -0
- package/src/utils/helpers/__tests__/createHash.spec.js +5 -5
- package/src/utils/helpers/createHash.js +10 -10
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import SourceReferenceModel from "../SourceReferenceModel";
|
|
2
|
+
import { setSetting } from "../../../constants/Settings";
|
|
3
|
+
|
|
4
|
+
const data = {
|
|
5
|
+
label: "4. Purpose of Grant",
|
|
6
|
+
type: "Reference",
|
|
7
|
+
sourceLabel: "Grant Funding Agreement - Terms and Conditions",
|
|
8
|
+
sourceAbbreviation: "GFA-TC-01",
|
|
9
|
+
_links: {
|
|
10
|
+
self: {
|
|
11
|
+
href: "/content/bundle-com.beinformed.source.GrantFundingAgreementTermsandConditions/Grant%20Funding%20Agreement.formalsource/Chapter4",
|
|
12
|
+
},
|
|
13
|
+
content: {
|
|
14
|
+
href: "/content/bundle-com.beinformed.source.GrantFundingAgreementTermsandConditions/Grant%20Funding%20Agreement.formalsource",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
sectionFragment: {
|
|
18
|
+
sectionId: "Chapter4",
|
|
19
|
+
text: "Research Grant",
|
|
20
|
+
startOffset: 32,
|
|
21
|
+
endOffset: 18,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
2
24
|
|
|
3
25
|
describe("sourceReferenceModel", () => {
|
|
4
26
|
it("should be able to create an empty SourceReferenceModel object", () => {
|
|
@@ -6,4 +28,81 @@ describe("sourceReferenceModel", () => {
|
|
|
6
28
|
|
|
7
29
|
expect(sourceReference).toBeInstanceOf(SourceReferenceModel);
|
|
8
30
|
});
|
|
31
|
+
|
|
32
|
+
it("can handle source reference data", () => {
|
|
33
|
+
const sourceReference = new SourceReferenceModel(data);
|
|
34
|
+
|
|
35
|
+
expect(sourceReference.label).toBe("4. Purpose of Grant");
|
|
36
|
+
expect(sourceReference.sourceLabel).toBe(
|
|
37
|
+
"Grant Funding Agreement - Terms and Conditions",
|
|
38
|
+
);
|
|
39
|
+
expect(sourceReference.type).toBe("Reference");
|
|
40
|
+
expect(sourceReference.sourceAbbreviation).toBe("GFA-TC-01");
|
|
41
|
+
expect(sourceReference.referenceHash).toBe(10443215482258);
|
|
42
|
+
expect(sourceReference.fragment.text).toBe("Research Grant");
|
|
43
|
+
expect(sourceReference.fragment.startOffset).toBe(32);
|
|
44
|
+
expect(sourceReference.fragment.endOffset).toBe(18);
|
|
45
|
+
|
|
46
|
+
expect(sourceReference.link.label).toBe("4. Purpose of Grant");
|
|
47
|
+
expect(sourceReference.link.sourceLabel).toBe(
|
|
48
|
+
"Grant Funding Agreement - Terms and Conditions",
|
|
49
|
+
);
|
|
50
|
+
expect(sourceReference.link.abbreviation).toBe("GFA-TC-01");
|
|
51
|
+
expect(sourceReference.link.selfhref.path).toBe(
|
|
52
|
+
"/content/bundle-com.beinformed.source.GrantFundingAgreementTermsandConditions/Grant%20Funding%20Agreement.formalsource/Chapter4",
|
|
53
|
+
);
|
|
54
|
+
expect(sourceReference.link.selfhref.toLocation()).toEqual({
|
|
55
|
+
hash: "",
|
|
56
|
+
pathname:
|
|
57
|
+
"/content/bundle-com.beinformed.source.GrantFundingAgreementTermsandConditions/Grant%20Funding%20Agreement.formalsource/Chapter4",
|
|
58
|
+
search: "",
|
|
59
|
+
state: {
|
|
60
|
+
contextPath: "/BeInformed",
|
|
61
|
+
fragment: {
|
|
62
|
+
endOffset: 18,
|
|
63
|
+
sectionId: "Chapter4",
|
|
64
|
+
startOffset: 32,
|
|
65
|
+
text: "Research Grant",
|
|
66
|
+
},
|
|
67
|
+
origin: "",
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
expect(sourceReference.link.fragment.text).toBe("Research Grant");
|
|
72
|
+
expect(sourceReference.link.fragment.startOffset).toBe(32);
|
|
73
|
+
expect(sourceReference.link.fragment.endOffset).toBe(18);
|
|
74
|
+
|
|
75
|
+
expect(sourceReference.link.selfhref.state.fragment.text).toBe(
|
|
76
|
+
"Research Grant",
|
|
77
|
+
);
|
|
78
|
+
expect(sourceReference.link.selfhref.state.fragment.startOffset).toBe(32);
|
|
79
|
+
expect(sourceReference.link.selfhref.state.fragment.endOffset).toBe(18);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("can handle source reference data complete source", () => {
|
|
83
|
+
setSetting("COMPLETE_SOURCE", true);
|
|
84
|
+
const sourceReference = new SourceReferenceModel(data);
|
|
85
|
+
|
|
86
|
+
expect(sourceReference.link.selfhref.path).toBe(
|
|
87
|
+
"/content/bundle-com.beinformed.source.GrantFundingAgreementTermsandConditions/Grant%20Funding%20Agreement.formalsource",
|
|
88
|
+
);
|
|
89
|
+
expect(sourceReference.link.selfhref.toLocation()).toEqual({
|
|
90
|
+
hash: "#Chapter4",
|
|
91
|
+
pathname:
|
|
92
|
+
"/content/bundle-com.beinformed.source.GrantFundingAgreementTermsandConditions/Grant%20Funding%20Agreement.formalsource",
|
|
93
|
+
search: "?complete=true",
|
|
94
|
+
state: {
|
|
95
|
+
contextPath: "/BeInformed",
|
|
96
|
+
fragment: {
|
|
97
|
+
endOffset: 18,
|
|
98
|
+
sectionId: "Chapter4",
|
|
99
|
+
startOffset: 32,
|
|
100
|
+
text: "Research Grant",
|
|
101
|
+
},
|
|
102
|
+
origin: "",
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
setSetting("COMPLETE_SOURCE", false);
|
|
107
|
+
});
|
|
9
108
|
});
|
|
@@ -38,6 +38,10 @@ export default class ContentLinkModel extends BaseModel {
|
|
|
38
38
|
* Retrieve the label of the source a link to a section belongs to
|
|
39
39
|
*/
|
|
40
40
|
get sourceLabel(): string | null;
|
|
41
|
+
/**
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
get abbreviation(): string | null;
|
|
41
45
|
/**
|
|
42
46
|
*/
|
|
43
47
|
createEncodedHref(): Href;
|
|
@@ -68,6 +72,9 @@ export default class ContentLinkModel extends BaseModel {
|
|
|
68
72
|
* Concept type href of concept
|
|
69
73
|
*/
|
|
70
74
|
get contentTypeHref(): Href | null;
|
|
75
|
+
/**
|
|
76
|
+
*/
|
|
77
|
+
get fragment(): SectionFragment | void;
|
|
71
78
|
/**
|
|
72
79
|
* Children of link model in TOC
|
|
73
80
|
*/
|
|
@@ -82,4 +89,5 @@ import ContentTypeModel from "./ContentTypeModel";
|
|
|
82
89
|
import LinkModel from "../links/LinkModel";
|
|
83
90
|
import { ModularUIModel } from "../types";
|
|
84
91
|
import Href from "../href/Href";
|
|
92
|
+
import { SectionFragment } from "../types";
|
|
85
93
|
import { ModelOptions } from "../types";
|
|
@@ -5,6 +5,7 @@ import Href from "../href/Href";
|
|
|
5
5
|
import LinkModel from "../links/LinkModel";
|
|
6
6
|
import ContentTypeModel from "./ContentTypeModel";
|
|
7
7
|
import { TIMEVERSION_FILTER_NAME } from "../../constants/Constants";
|
|
8
|
+
import { getSetting } from "../../constants/Settings";
|
|
8
9
|
import LinkCollection from "../links/LinkCollection";
|
|
9
10
|
/**
|
|
10
11
|
* Link to a concept
|
|
@@ -88,6 +89,13 @@ export default class ContentLinkModel extends BaseModel {
|
|
|
88
89
|
return this.getData("sourceLabel");
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
/**
|
|
93
|
+
*
|
|
94
|
+
*/
|
|
95
|
+
get abbreviation() {
|
|
96
|
+
return this.getData("abbreviation") || this.getData("sourceAbbreviation");
|
|
97
|
+
}
|
|
98
|
+
|
|
91
99
|
/**
|
|
92
100
|
*/
|
|
93
101
|
createEncodedHref() {
|
|
@@ -130,10 +138,26 @@ export default class ContentLinkModel extends BaseModel {
|
|
|
130
138
|
* Get self link of model
|
|
131
139
|
*/
|
|
132
140
|
get selflink() {
|
|
133
|
-
|
|
141
|
+
let selflink = this.links.getLinkByKey("self");
|
|
142
|
+
if (getSetting("COMPLETE_SOURCE", false)) {
|
|
143
|
+
if (this.links.hasLinkByKey("content")) {
|
|
144
|
+
selflink = this.links.getLinkByKey("content");
|
|
145
|
+
}
|
|
146
|
+
if (selflink != null) {
|
|
147
|
+
selflink.href.addParameter("complete", "true");
|
|
148
|
+
selflink.href.hash = this.data.section;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
134
151
|
if (selflink === null) {
|
|
135
152
|
throw new Error(`Could not find self link for ${this.key === null ? "unknown" : this.key}`);
|
|
136
153
|
}
|
|
154
|
+
if (!selflink.href.state) {
|
|
155
|
+
selflink.href.state = {
|
|
156
|
+
fragment: this.fragment
|
|
157
|
+
};
|
|
158
|
+
} else {
|
|
159
|
+
selflink.href.state.fragment = this.fragment;
|
|
160
|
+
}
|
|
137
161
|
return selflink;
|
|
138
162
|
}
|
|
139
163
|
|
|
@@ -169,6 +193,12 @@ export default class ContentLinkModel extends BaseModel {
|
|
|
169
193
|
return null;
|
|
170
194
|
}
|
|
171
195
|
|
|
196
|
+
/**
|
|
197
|
+
*/
|
|
198
|
+
get fragment() {
|
|
199
|
+
return this.data.sectionFragment;
|
|
200
|
+
}
|
|
201
|
+
|
|
172
202
|
/**
|
|
173
203
|
* Children of link model in TOC
|
|
174
204
|
*/
|
|
@@ -4,6 +4,7 @@ import Href from "../href/Href";
|
|
|
4
4
|
import LinkModel from "../links/LinkModel";
|
|
5
5
|
import ContentTypeModel from "./ContentTypeModel";
|
|
6
6
|
import { TIMEVERSION_FILTER_NAME } from "../../constants/Constants";
|
|
7
|
+
import { getSetting } from "../../constants/Settings";
|
|
7
8
|
|
|
8
9
|
import LinkCollection from "../links/LinkCollection";
|
|
9
10
|
|
|
@@ -11,6 +12,7 @@ import type {
|
|
|
11
12
|
ModularUIModel,
|
|
12
13
|
IModelWithChildModels,
|
|
13
14
|
ModelOptions,
|
|
15
|
+
SectionFragment,
|
|
14
16
|
} from "../types";
|
|
15
17
|
|
|
16
18
|
/**
|
|
@@ -107,6 +109,13 @@ export default class ContentLinkModel
|
|
|
107
109
|
return this.getData("sourceLabel");
|
|
108
110
|
}
|
|
109
111
|
|
|
112
|
+
/**
|
|
113
|
+
*
|
|
114
|
+
*/
|
|
115
|
+
get abbreviation(): string | null {
|
|
116
|
+
return this.getData("abbreviation") || this.getData("sourceAbbreviation");
|
|
117
|
+
}
|
|
118
|
+
|
|
110
119
|
/**
|
|
111
120
|
*/
|
|
112
121
|
createEncodedHref(): Href {
|
|
@@ -167,7 +176,18 @@ export default class ContentLinkModel
|
|
|
167
176
|
* Get self link of model
|
|
168
177
|
*/
|
|
169
178
|
get selflink(): LinkModel {
|
|
170
|
-
|
|
179
|
+
let selflink = this.links.getLinkByKey("self");
|
|
180
|
+
|
|
181
|
+
if (getSetting("COMPLETE_SOURCE", false)) {
|
|
182
|
+
if (this.links.hasLinkByKey("content")) {
|
|
183
|
+
selflink = this.links.getLinkByKey("content");
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (selflink != null) {
|
|
187
|
+
selflink.href.addParameter("complete", "true");
|
|
188
|
+
selflink.href.hash = this.data.section;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
171
191
|
|
|
172
192
|
if (selflink === null) {
|
|
173
193
|
throw new Error(
|
|
@@ -177,6 +197,14 @@ export default class ContentLinkModel
|
|
|
177
197
|
);
|
|
178
198
|
}
|
|
179
199
|
|
|
200
|
+
if (!selflink.href.state) {
|
|
201
|
+
selflink.href.state = {
|
|
202
|
+
fragment: this.fragment,
|
|
203
|
+
};
|
|
204
|
+
} else {
|
|
205
|
+
selflink.href.state.fragment = this.fragment;
|
|
206
|
+
}
|
|
207
|
+
|
|
180
208
|
return selflink;
|
|
181
209
|
}
|
|
182
210
|
|
|
@@ -217,6 +245,12 @@ export default class ContentLinkModel
|
|
|
217
245
|
return null;
|
|
218
246
|
}
|
|
219
247
|
|
|
248
|
+
/**
|
|
249
|
+
*/
|
|
250
|
+
get fragment(): SectionFragment | void {
|
|
251
|
+
return this.data.sectionFragment;
|
|
252
|
+
}
|
|
253
|
+
|
|
220
254
|
/**
|
|
221
255
|
* Children of link model in TOC
|
|
222
256
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentLinkModel.js","names":["BaseModel","Href","LinkModel","ContentTypeModel","TIMEVERSION_FILTER_NAME","LinkCollection","ContentLinkModel","constructor","data","entryDate","arguments","length","undefined","modelOptions","_defineProperty","_entryDate","getInitialChildModelLinks","contentTypeLink","isCacheable","setChildModels","models","href","contentTypeModel","_findInstanceProperty","call","model","selfhref","equalsWithParameters","type","contentType","_contentType","key","getData","label","sourceLabel","createEncodedHref","startURI","selfHref","_links","self","path","section","sourceId","substring","lastIndexOf","encodeURIComponent","encodedHref","addParameter","links","Array","isArray","selflink","getLinkByKey","Error","subSectionID","hash","contentTypeHref","items","_items"],"sources":["../../../src/models/content/ContentLinkModel.js"],"sourcesContent":["// @flow\nimport BaseModel from \"../base/BaseModel\";\nimport Href from \"../href/Href\";\nimport LinkModel from \"../links/LinkModel\";\nimport ContentTypeModel from \"./ContentTypeModel\";\nimport { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\n\nimport LinkCollection from \"../links/LinkCollection\";\n\nimport type {\n ModularUIModel,\n IModelWithChildModels,\n ModelOptions,\n} from \"../types\";\n\n/**\n * Link to a concept\n */\nexport default class ContentLinkModel\n extends BaseModel\n implements IModelWithChildModels\n{\n _links: ?LinkCollection;\n _entryDate: ?ISO_DATE;\n _contentType: ContentTypeModel | null = null;\n _items: Array<ContentLinkModel>;\n\n /**\n */\n constructor(\n data: Object,\n entryDate: ?ISO_DATE = null,\n modelOptions?: ModelOptions,\n ) {\n super(data, {}, modelOptions);\n\n this._entryDate = entryDate;\n }\n\n /**\n */\n // $FlowFixMe[method-unbinding]\n getInitialChildModelLinks(): Array<LinkModel> {\n if (this.contentTypeLink) {\n this.contentTypeLink.isCacheable = true;\n return [this.contentTypeLink];\n }\n\n return [];\n }\n\n /**\n */\n // $FlowFixMe[method-unbinding]\n setChildModels(models: Array<ModularUIModel>) {\n if (this.contentTypeLink) {\n const href = this.contentTypeLink.href;\n const contentTypeModel = models.find((model) =>\n model.selfhref.equalsWithParameters(href),\n );\n\n if (contentTypeModel?.type === \"ContentType\") {\n this.contentType = contentTypeModel;\n }\n }\n }\n\n /**\n * Retrieve content type\n */\n get contentType(): ?ContentTypeModel | null {\n return this._contentType;\n }\n\n /**\n * Set concept type\n */\n set contentType(contentType: ?ModularUIModel) {\n this._contentType =\n contentType instanceof ContentTypeModel ? contentType : null;\n }\n\n /**\n */\n set entryDate(entryDate: ISO_DATE) {\n this._entryDate = entryDate;\n }\n\n /**\n * Retrieve key\n */\n get key(): string {\n return this.getData(\"_id\", \"\");\n }\n\n /**\n * Retrieve label\n */\n get label(): string {\n return this.getData(\"label\", \"\");\n }\n\n /**\n * Retrieve the label of the source a link to a section belongs to\n */\n get sourceLabel(): string | null {\n return this.getData(\"sourceLabel\");\n }\n\n /**\n */\n createEncodedHref(): Href {\n const startURI = \"/content/\";\n const selfHref = new Href(\n this.data._links.self.href,\n \"\",\n this.modelOptions,\n );\n const href = selfHref.path;\n\n const section = this.data.section;\n const sourceId = section\n ? href.substring(startURI.length, href.lastIndexOf(\"/\"))\n : href.substring(startURI.length);\n\n if (section) {\n selfHref.path = `${startURI}${encodeURIComponent(sourceId)}/${encodeURIComponent(section)}`;\n } else {\n selfHref.path = `${startURI}${encodeURIComponent(sourceId)}`;\n }\n\n return selfHref;\n }\n\n /**\n * Encode the content-identifier of the path to the content resource.\n * This makes it a single uri part, which can be used on routes to make nested routes\n */\n get encodedHref(): Href {\n const href = this.createEncodedHref();\n\n if (this._entryDate !== null) {\n return href.addParameter(TIMEVERSION_FILTER_NAME, this._entryDate);\n }\n\n return href;\n }\n\n /**\n * Getting the links of the resource\n */\n get links(): LinkCollection {\n if (!this._links) {\n this._links = new LinkCollection(\n Array.isArray(this.data._links)\n ? this.data._links[0]\n : this.data._links,\n null,\n this.modelOptions,\n );\n }\n\n return this._links;\n }\n\n /**\n * Get self link of model\n */\n get selflink(): LinkModel {\n const selflink = this.links.getLinkByKey(\"self\");\n\n if (selflink === null) {\n throw new Error(\n `Could not find self link for ${\n this.key === null ? \"unknown\" : this.key\n }`,\n );\n }\n\n return selflink;\n }\n\n /**\n * Self href of concept\n */\n get selfhref(): Href {\n if (this._entryDate !== null) {\n return this.selflink.href.addParameter(\n TIMEVERSION_FILTER_NAME,\n this._entryDate,\n );\n }\n\n return this.selflink.href;\n }\n\n /**\n */\n get subSectionID(): string {\n return this.selfhref.hash;\n }\n\n /**\n */\n get contentTypeLink(): LinkModel | null {\n return this.links.getLinkByKey(\"contenttype\");\n }\n\n /**\n * Concept type href of concept\n */\n get contentTypeHref(): Href | null {\n if (this.contentTypeLink) {\n return this.contentTypeLink.href;\n }\n\n return null;\n }\n\n /**\n * Children of link model in TOC\n */\n set items(items: Array<ContentLinkModel>) {\n this._items = items;\n }\n\n /**\n */\n get items(): Array<ContentLinkModel> {\n return this._items;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ContentLinkModel.js","names":["BaseModel","Href","LinkModel","ContentTypeModel","TIMEVERSION_FILTER_NAME","getSetting","LinkCollection","ContentLinkModel","constructor","data","entryDate","arguments","length","undefined","modelOptions","_defineProperty","_entryDate","getInitialChildModelLinks","contentTypeLink","isCacheable","setChildModels","models","href","contentTypeModel","_findInstanceProperty","call","model","selfhref","equalsWithParameters","type","contentType","_contentType","key","getData","label","sourceLabel","abbreviation","createEncodedHref","startURI","selfHref","_links","self","path","section","sourceId","substring","lastIndexOf","encodeURIComponent","encodedHref","addParameter","links","Array","isArray","selflink","getLinkByKey","hasLinkByKey","hash","Error","state","fragment","subSectionID","contentTypeHref","sectionFragment","items","_items"],"sources":["../../../src/models/content/ContentLinkModel.js"],"sourcesContent":["// @flow\nimport BaseModel from \"../base/BaseModel\";\nimport Href from \"../href/Href\";\nimport LinkModel from \"../links/LinkModel\";\nimport ContentTypeModel from \"./ContentTypeModel\";\nimport { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { getSetting } from \"../../constants/Settings\";\n\nimport LinkCollection from \"../links/LinkCollection\";\n\nimport type {\n ModularUIModel,\n IModelWithChildModels,\n ModelOptions,\n SectionFragment,\n} from \"../types\";\n\n/**\n * Link to a concept\n */\nexport default class ContentLinkModel\n extends BaseModel\n implements IModelWithChildModels\n{\n _links: ?LinkCollection;\n _entryDate: ?ISO_DATE;\n _contentType: ContentTypeModel | null = null;\n _items: Array<ContentLinkModel>;\n\n /**\n */\n constructor(\n data: Object,\n entryDate: ?ISO_DATE = null,\n modelOptions?: ModelOptions,\n ) {\n super(data, {}, modelOptions);\n\n this._entryDate = entryDate;\n }\n\n /**\n */\n // $FlowFixMe[method-unbinding]\n getInitialChildModelLinks(): Array<LinkModel> {\n if (this.contentTypeLink) {\n this.contentTypeLink.isCacheable = true;\n return [this.contentTypeLink];\n }\n\n return [];\n }\n\n /**\n */\n // $FlowFixMe[method-unbinding]\n setChildModels(models: Array<ModularUIModel>) {\n if (this.contentTypeLink) {\n const href = this.contentTypeLink.href;\n const contentTypeModel = models.find((model) =>\n model.selfhref.equalsWithParameters(href),\n );\n\n if (contentTypeModel?.type === \"ContentType\") {\n this.contentType = contentTypeModel;\n }\n }\n }\n\n /**\n * Retrieve content type\n */\n get contentType(): ?ContentTypeModel | null {\n return this._contentType;\n }\n\n /**\n * Set concept type\n */\n set contentType(contentType: ?ModularUIModel) {\n this._contentType =\n contentType instanceof ContentTypeModel ? contentType : null;\n }\n\n /**\n */\n set entryDate(entryDate: ISO_DATE) {\n this._entryDate = entryDate;\n }\n\n /**\n * Retrieve key\n */\n get key(): string {\n return this.getData(\"_id\", \"\");\n }\n\n /**\n * Retrieve label\n */\n get label(): string {\n return this.getData(\"label\", \"\");\n }\n\n /**\n * Retrieve the label of the source a link to a section belongs to\n */\n get sourceLabel(): string | null {\n return this.getData(\"sourceLabel\");\n }\n\n /**\n *\n */\n get abbreviation(): string | null {\n return this.getData(\"abbreviation\") || this.getData(\"sourceAbbreviation\");\n }\n\n /**\n */\n createEncodedHref(): Href {\n const startURI = \"/content/\";\n const selfHref = new Href(\n this.data._links.self.href,\n \"\",\n this.modelOptions,\n );\n const href = selfHref.path;\n\n const section = this.data.section;\n const sourceId = section\n ? href.substring(startURI.length, href.lastIndexOf(\"/\"))\n : href.substring(startURI.length);\n\n if (section) {\n selfHref.path = `${startURI}${encodeURIComponent(sourceId)}/${encodeURIComponent(section)}`;\n } else {\n selfHref.path = `${startURI}${encodeURIComponent(sourceId)}`;\n }\n\n return selfHref;\n }\n\n /**\n * Encode the content-identifier of the path to the content resource.\n * This makes it a single uri part, which can be used on routes to make nested routes\n */\n get encodedHref(): Href {\n const href = this.createEncodedHref();\n\n if (this._entryDate !== null) {\n return href.addParameter(TIMEVERSION_FILTER_NAME, this._entryDate);\n }\n\n return href;\n }\n\n /**\n * Getting the links of the resource\n */\n get links(): LinkCollection {\n if (!this._links) {\n this._links = new LinkCollection(\n Array.isArray(this.data._links)\n ? this.data._links[0]\n : this.data._links,\n null,\n this.modelOptions,\n );\n }\n\n return this._links;\n }\n\n /**\n * Get self link of model\n */\n get selflink(): LinkModel {\n let selflink = this.links.getLinkByKey(\"self\");\n\n if (getSetting(\"COMPLETE_SOURCE\", false)) {\n if (this.links.hasLinkByKey(\"content\")) {\n selflink = this.links.getLinkByKey(\"content\");\n }\n\n if (selflink != null) {\n selflink.href.addParameter(\"complete\", \"true\");\n selflink.href.hash = this.data.section;\n }\n }\n\n if (selflink === null) {\n throw new Error(\n `Could not find self link for ${\n this.key === null ? \"unknown\" : this.key\n }`,\n );\n }\n\n if (!selflink.href.state) {\n selflink.href.state = {\n fragment: this.fragment,\n };\n } else {\n selflink.href.state.fragment = this.fragment;\n }\n\n return selflink;\n }\n\n /**\n * Self href of concept\n */\n get selfhref(): Href {\n if (this._entryDate !== null) {\n return this.selflink.href.addParameter(\n TIMEVERSION_FILTER_NAME,\n this._entryDate,\n );\n }\n\n return this.selflink.href;\n }\n\n /**\n */\n get subSectionID(): string {\n return this.selfhref.hash;\n }\n\n /**\n */\n get contentTypeLink(): LinkModel | null {\n return this.links.getLinkByKey(\"contenttype\");\n }\n\n /**\n * Concept type href of concept\n */\n get contentTypeHref(): Href | null {\n if (this.contentTypeLink) {\n return this.contentTypeLink.href;\n }\n\n return null;\n }\n\n /**\n */\n get fragment(): SectionFragment | void {\n return this.data.sectionFragment;\n }\n\n /**\n * Children of link model in TOC\n */\n set items(items: Array<ContentLinkModel>) {\n this._items = items;\n }\n\n /**\n */\n get items(): Array<ContentLinkModel> {\n return this._items;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -92,6 +92,12 @@ export default class ContentTOCModel extends ResourceModel {
|
|
|
92
92
|
return this.getData("label", "");
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
+
/**
|
|
96
|
+
*/
|
|
97
|
+
get abbreviation(): string | null {
|
|
98
|
+
return this.getData("abbreviation");
|
|
99
|
+
}
|
|
100
|
+
|
|
95
101
|
/**
|
|
96
102
|
* Getting the self link of this list
|
|
97
103
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentTOCModel.js","names":["has","ResourceModel","FilterCollection","ContentLinkModel","ContentTypeModel","Href","SectionModel","TIMEVERSION_FILTER_NAME","getItems","items","entryDate","modelOptions","_mapInstanceProperty","call","item","link","section","_id","sections","ContentTOCModel","constructor","arguments","_defineProperty","type","modelName","isApplicableModel","data","contributions","resourcetype","getInitialChildModelLinks","contentTypeLink","links","getLinkByKey","setChildModels","models","contentType","_findInstanceProperty","model","label","getData","selfhref","href","selflink","filterCollection","forEach","filter","params","param","value","setParameter","name","removeParameter","selfContentLink","_context","categories","_context2","category","_contentType","_filterCollection","_context3","_filterInstanceProperty","_context4","key","_Object$keys","timeversionFilter","getFilterByAttributeKey","attribute","isCompleteSource","completeFilter"],"sources":["../../../src/models/content/ContentTOCModel.js"],"sourcesContent":["// @flow\nimport { has } from \"../../utils/helpers/objects\";\n\nimport ResourceModel from \"../base/ResourceModel\";\nimport FilterCollection from \"../filters/FilterCollection\";\nimport ContentLinkModel from \"./ContentLinkModel\";\nimport ContentTypeModel from \"./ContentTypeModel\";\nimport Href from \"../href/Href\";\n\nimport SectionModel from \"./SectionModel\";\n\nimport { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport type LinkModel from \"../links/LinkModel\";\nimport type { ModelOptions, ModularUIModel } from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\n\n/**\n * Get content items recursively\n */\nconst getItems = (\n items: Array<Object>,\n entryDate: ISO_DATE | null,\n modelOptions?: ModelOptions,\n): Array<ContentLinkModel> =>\n items.map((item) => {\n const link = new ContentLinkModel(\n {\n ...item,\n section: item._id,\n },\n entryDate,\n modelOptions,\n );\n\n if (item.items) {\n link.items = getItems(item.items, entryDate, modelOptions);\n }\n if (item.sections) {\n link.items = getItems(item.sections, entryDate, modelOptions);\n }\n\n return link;\n });\n\n/**\n * Content detail model\n */\nexport default class ContentTOCModel extends ResourceModel {\n _contentType: ContentTypeModel | null = null;\n _filterCollection: FilterCollection;\n\n /**\n */\n get type(): string {\n return \"ContentTOC\";\n }\n\n /**\n */\n static get modelName(): string {\n return \"ContentTOCModel\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return data.contributions?.resourcetype === \"ContentTOC\";\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n const contentTypeLink = this.links.getLinkByKey(\"contenttype\");\n\n if (contentTypeLink) {\n return [contentTypeLink];\n }\n\n return [];\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n this.contentType = models.find((model) => model.type === \"ContentType\");\n }\n\n /**\n * Get content label\n */\n get label(): string {\n return this.getData(\"label\", \"\");\n }\n\n /**\n * Getting the self link of this list\n */\n get selfhref(): Href {\n const href = new Href(this.selflink.href);\n\n this.filterCollection.forEach((filter) => {\n filter.params.forEach((param) => {\n if (param.value) {\n href.setParameter(param.name, param.value);\n } else {\n href.removeParameter(param.name);\n }\n });\n });\n\n return href;\n }\n\n /**\n */\n get selfContentLink(): ContentLinkModel {\n return new ContentLinkModel(this.data, this.entryDate, this.modelOptions);\n }\n\n /**\n * Get sub items of toc\n */\n get items(): Array<ContentLinkModel> {\n if (this.data.items) {\n return getItems(this.data.items, this.entryDate, this.modelOptions);\n }\n\n if (this.data.sections) {\n return getItems(this.data.sections, this.entryDate, this.modelOptions);\n }\n\n return [];\n }\n\n /**\n */\n get sections(): Array<SectionModel> {\n if (this.data.sections) {\n return this.data.sections.map(\n (section) =>\n new SectionModel(section, this.entryDate, this.modelOptions),\n );\n }\n return [];\n }\n\n /**\n * get categories of content\n */\n get categories(): Array<ContentLinkModel> {\n if (this.data.categories) {\n return this.data.categories.map(\n (category) => new ContentLinkModel(category, null, this.modelOptions),\n );\n }\n\n return [];\n }\n\n /**\n * Retrieve content type model\n */\n get contentType(): ContentTypeModel | null {\n return this._contentType;\n }\n\n /**\n */\n set contentType(contentType: ?ModularUIModel) {\n this._contentType =\n contentType instanceof ContentTypeModel ? contentType : null;\n }\n\n /**\n * Retrieve available filters on concept toc\n */\n get filterCollection(): FilterCollection {\n if (!this._filterCollection) {\n this._filterCollection = new FilterCollection(\n this.data.filter,\n {\n filter: this.contributions.filter.filter((filter) => {\n const [key] = Object.keys(filter);\n return has(this.data?.filter, key);\n }),\n },\n this.modelOptions,\n );\n }\n\n return this._filterCollection;\n }\n\n /**\n * Retrieve modelcatalog.js of content toc\n */\n get entryDate(): ISO_DATE | null {\n const timeversionFilter = this.filterCollection.getFilterByAttributeKey(\n TIMEVERSION_FILTER_NAME,\n );\n\n return timeversionFilter?.attribute?.value ?? null;\n }\n\n /**\n */\n get isCompleteSource(): boolean {\n const completeFilter =\n this.filterCollection.getFilterByAttributeKey(\"complete\");\n return completeFilter?.attribute?.value === \"true\";\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ContentTOCModel.js","names":["has","ResourceModel","FilterCollection","ContentLinkModel","ContentTypeModel","Href","SectionModel","TIMEVERSION_FILTER_NAME","getItems","items","entryDate","modelOptions","_mapInstanceProperty","call","item","link","section","_id","sections","ContentTOCModel","constructor","arguments","_defineProperty","type","modelName","isApplicableModel","data","contributions","resourcetype","getInitialChildModelLinks","contentTypeLink","links","getLinkByKey","setChildModels","models","contentType","_findInstanceProperty","model","label","getData","abbreviation","selfhref","href","selflink","filterCollection","forEach","filter","params","param","value","setParameter","name","removeParameter","selfContentLink","_context","categories","_context2","category","_contentType","_filterCollection","_context3","_filterInstanceProperty","_context4","key","_Object$keys","timeversionFilter","getFilterByAttributeKey","attribute","isCompleteSource","completeFilter"],"sources":["../../../src/models/content/ContentTOCModel.js"],"sourcesContent":["// @flow\nimport { has } from \"../../utils/helpers/objects\";\n\nimport ResourceModel from \"../base/ResourceModel\";\nimport FilterCollection from \"../filters/FilterCollection\";\nimport ContentLinkModel from \"./ContentLinkModel\";\nimport ContentTypeModel from \"./ContentTypeModel\";\nimport Href from \"../href/Href\";\n\nimport SectionModel from \"./SectionModel\";\n\nimport { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport type LinkModel from \"../links/LinkModel\";\nimport type { ModelOptions, ModularUIModel } from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\n\n/**\n * Get content items recursively\n */\nconst getItems = (\n items: Array<Object>,\n entryDate: ISO_DATE | null,\n modelOptions?: ModelOptions,\n): Array<ContentLinkModel> =>\n items.map((item) => {\n const link = new ContentLinkModel(\n {\n ...item,\n section: item._id,\n },\n entryDate,\n modelOptions,\n );\n\n if (item.items) {\n link.items = getItems(item.items, entryDate, modelOptions);\n }\n if (item.sections) {\n link.items = getItems(item.sections, entryDate, modelOptions);\n }\n\n return link;\n });\n\n/**\n * Content detail model\n */\nexport default class ContentTOCModel extends ResourceModel {\n _contentType: ContentTypeModel | null = null;\n _filterCollection: FilterCollection;\n\n /**\n */\n get type(): string {\n return \"ContentTOC\";\n }\n\n /**\n */\n static get modelName(): string {\n return \"ContentTOCModel\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return data.contributions?.resourcetype === \"ContentTOC\";\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n const contentTypeLink = this.links.getLinkByKey(\"contenttype\");\n\n if (contentTypeLink) {\n return [contentTypeLink];\n }\n\n return [];\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n this.contentType = models.find((model) => model.type === \"ContentType\");\n }\n\n /**\n * Get content label\n */\n get label(): string {\n return this.getData(\"label\", \"\");\n }\n\n /**\n */\n get abbreviation(): string | null {\n return this.getData(\"abbreviation\");\n }\n\n /**\n * Getting the self link of this list\n */\n get selfhref(): Href {\n const href = new Href(this.selflink.href);\n\n this.filterCollection.forEach((filter) => {\n filter.params.forEach((param) => {\n if (param.value) {\n href.setParameter(param.name, param.value);\n } else {\n href.removeParameter(param.name);\n }\n });\n });\n\n return href;\n }\n\n /**\n */\n get selfContentLink(): ContentLinkModel {\n return new ContentLinkModel(this.data, this.entryDate, this.modelOptions);\n }\n\n /**\n * Get sub items of toc\n */\n get items(): Array<ContentLinkModel> {\n if (this.data.items) {\n return getItems(this.data.items, this.entryDate, this.modelOptions);\n }\n\n if (this.data.sections) {\n return getItems(this.data.sections, this.entryDate, this.modelOptions);\n }\n\n return [];\n }\n\n /**\n */\n get sections(): Array<SectionModel> {\n if (this.data.sections) {\n return this.data.sections.map(\n (section) =>\n new SectionModel(section, this.entryDate, this.modelOptions),\n );\n }\n return [];\n }\n\n /**\n * get categories of content\n */\n get categories(): Array<ContentLinkModel> {\n if (this.data.categories) {\n return this.data.categories.map(\n (category) => new ContentLinkModel(category, null, this.modelOptions),\n );\n }\n\n return [];\n }\n\n /**\n * Retrieve content type model\n */\n get contentType(): ContentTypeModel | null {\n return this._contentType;\n }\n\n /**\n */\n set contentType(contentType: ?ModularUIModel) {\n this._contentType =\n contentType instanceof ContentTypeModel ? contentType : null;\n }\n\n /**\n * Retrieve available filters on concept toc\n */\n get filterCollection(): FilterCollection {\n if (!this._filterCollection) {\n this._filterCollection = new FilterCollection(\n this.data.filter,\n {\n filter: this.contributions.filter.filter((filter) => {\n const [key] = Object.keys(filter);\n return has(this.data?.filter, key);\n }),\n },\n this.modelOptions,\n );\n }\n\n return this._filterCollection;\n }\n\n /**\n * Retrieve modelcatalog.js of content toc\n */\n get entryDate(): ISO_DATE | null {\n const timeversionFilter = this.filterCollection.getFilterByAttributeKey(\n TIMEVERSION_FILTER_NAME,\n );\n\n return timeversionFilter?.attribute?.value ?? null;\n }\n\n /**\n */\n get isCompleteSource(): boolean {\n const completeFilter =\n this.filterCollection.getFilterByAttributeKey(\"complete\");\n return completeFilter?.attribute?.value === \"true\";\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -30,6 +30,9 @@ describe("content index model", () => {
|
|
|
30
30
|
const firstLink = contentIndexModel.items.first;
|
|
31
31
|
expect(firstLink).toBeInstanceOf(ContentLinkModel);
|
|
32
32
|
|
|
33
|
+
expect(firstLink.label).toBe("Another formal content");
|
|
34
|
+
expect(firstLink.abbreviation).toBe("AFC-01");
|
|
35
|
+
|
|
33
36
|
expect(firstLink.encodedHref.toString()).toBe(
|
|
34
37
|
"/content/Content%2FSources%2FFormal%2FAnother%2520formal%2520content.formalsource",
|
|
35
38
|
);
|
|
@@ -67,7 +67,7 @@ describe("contentmodel", () => {
|
|
|
67
67
|
expect(contentModel.relatedConceptsHref.href.toString()).toBe(
|
|
68
68
|
"/content/Incident/Business design/Content/Blaastest.bixml/67beed02/relatedConcepts?entryDate=2021-08-31",
|
|
69
69
|
);
|
|
70
|
-
expect(contentModel.referenceHash).toBe(
|
|
70
|
+
expect(contentModel.referenceHash).toBe(9969574676612);
|
|
71
71
|
});
|
|
72
72
|
|
|
73
73
|
it("can handle content service with childsections", () => {
|
|
@@ -106,7 +106,7 @@ describe("contentmodel", () => {
|
|
|
106
106
|
expect(contentModel.relatedConceptsHref.href.toString()).toBe(
|
|
107
107
|
"/content/Incident/Business design/Content/Blaastest.textilesource/uitslag/relatedConcepts?entryDate=2021-08-31",
|
|
108
108
|
);
|
|
109
|
-
expect(contentModel.referenceHash).toBe(
|
|
109
|
+
expect(contentModel.referenceHash).toBe(8236987459042);
|
|
110
110
|
|
|
111
111
|
const firstChildSectionLink = contentModel.childSectionLinks[0];
|
|
112
112
|
expect(firstChildSectionLink instanceof ContentLinkModel).toBe(true);
|
|
@@ -174,7 +174,7 @@ describe("contentmodel", () => {
|
|
|
174
174
|
expect(contentModel.subSections).toHaveLength(4);
|
|
175
175
|
expect(contentModel.relatedConceptsHrefs).toHaveLength(4);
|
|
176
176
|
expect(contentModel.relatedConceptsHref).toBeNull();
|
|
177
|
-
expect(contentModel.referenceHash).toBe(
|
|
177
|
+
expect(contentModel.referenceHash).toBe(3949483866644);
|
|
178
178
|
|
|
179
179
|
const firstSubSection = contentModel.subSections[0];
|
|
180
180
|
expect(firstSubSection instanceof SubSectionModel).toBe(true);
|
|
@@ -199,8 +199,8 @@ describe("contentmodel", () => {
|
|
|
199
199
|
"/content/Incident/Business design/Content/Blaastest subsections.formalsource/Pass/relatedConcepts?entryDate=2021-08-31",
|
|
200
200
|
);
|
|
201
201
|
expect(firstSubSection.relatedConceptsHref.getReferenceHash()).toBe(
|
|
202
|
-
|
|
202
|
+
7092890320518,
|
|
203
203
|
);
|
|
204
|
-
expect(firstSubSection.referenceHash).toBe(
|
|
204
|
+
expect(firstSubSection.referenceHash).toBe(7092890320518);
|
|
205
205
|
});
|
|
206
206
|
});
|
|
@@ -55,6 +55,10 @@ describe("formalsource", () => {
|
|
|
55
55
|
expect(completeModel.sections[0].sections).toHaveLength(0);
|
|
56
56
|
expect(completeModel.sections[1].sections).toHaveLength(2);
|
|
57
57
|
|
|
58
|
+
expect(completeModel.label).toBe(
|
|
59
|
+
"Grant Funding Agreement - Terms and Conditions",
|
|
60
|
+
);
|
|
61
|
+
expect(completeModel.abbreviation).toBe("GFA-TC-01");
|
|
58
62
|
expect(completeModel.isCompleteSource).toBe(true);
|
|
59
63
|
|
|
60
64
|
const firstSection = completeModel.sections[0];
|
package/esm/models/types.d.ts
CHANGED
|
@@ -155,6 +155,12 @@ type ContentData = {
|
|
|
155
155
|
label?: string | undefined;
|
|
156
156
|
elements: (PropertyElement | TextFragmentElement | ContentElement)[];
|
|
157
157
|
};
|
|
158
|
+
type SectionFragment = {
|
|
159
|
+
sectionId?: string | undefined;
|
|
160
|
+
text: string;
|
|
161
|
+
startOffset: number;
|
|
162
|
+
endOffset: number;
|
|
163
|
+
};
|
|
158
164
|
type ModelOptions = {
|
|
159
165
|
origin?: string | null | undefined;
|
|
160
166
|
contextPath?: string | null | undefined;
|
package/esm/models/types.js.flow
CHANGED
|
@@ -262,6 +262,13 @@ export type ContentData = {
|
|
|
262
262
|
elements: Array<PropertyElement | TextFragmentElement | ContentElement>,
|
|
263
263
|
};
|
|
264
264
|
|
|
265
|
+
export type SectionFragment = {
|
|
266
|
+
sectionId?: string,
|
|
267
|
+
text: string,
|
|
268
|
+
startOffset: number,
|
|
269
|
+
endOffset: number,
|
|
270
|
+
};
|
|
271
|
+
|
|
265
272
|
export type ModelOptions = {
|
|
266
273
|
origin?: ?string,
|
|
267
274
|
contextPath?: ?string,
|
package/esm/models/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/models/types.js"],"sourcesContent":["// @flow\nimport type ApplicationModel from \"./application/ApplicationModel\";\nimport type BooleanAttributeModel from \"./attributes/BooleanAttributeModel\";\nimport type CaptchaAttributeModel from \"./attributes/CaptchaAttributeModel\";\nimport type ChoiceAttributeModel from \"./attributes/ChoiceAttributeModel\";\nimport type CompositeAttributeModel from \"./attributes/CompositeAttributeModel\";\nimport type DatetimeAttributeModel from \"./attributes/DatetimeAttributeModel\";\nimport type HelptextAttributeModel from \"./attributes/HelptextAttributeModel\";\nimport type LabelAttributeModel from \"./attributes/LabelAttributeModel\";\nimport type MemoAttributeModel from \"./attributes/MemoAttributeModel\";\nimport type MoneyAttributeModel from \"./attributes/MoneyAttributeModel\";\nimport type NumberAttributeModel from \"./attributes/NumberAttributeModel\";\nimport type PasswordAttributeModel from \"./attributes/PasswordAttributeModel\";\nimport type StringAttributeModel from \"./attributes/StringAttributeModel\";\nimport type UploadAttributeModel from \"./attributes/UploadAttributeModel\";\nimport type XMLAttributeModel from \"./attributes/XMLAttributeModel\";\nimport type CaseViewModel from \"./caseview/CaseViewModel\";\nimport type BusinessScenarioModel from \"./concepts/BusinessScenarioModel\";\nimport type ConceptDetailModel from \"./concepts/ConceptDetailModel\";\nimport type ConceptIndexModel from \"./concepts/ConceptIndexModel\";\nimport type ConceptTypeDetailModel from \"./concepts/ConceptTypeDetailModel\";\nimport type ContentIndexModel from \"./content/ContentIndexModel\";\nimport type ContentModel from \"./content/ContentModel\";\nimport type SectionModel from \"./content/SectionModel\";\nimport type ContentTOCModel from \"./content/ContentTOCModel\";\nimport type ContentTypeModel from \"./content/ContentTypeModel\";\nimport type DetailModel from \"./detail/DetailModel\";\nimport type AssignmentFilterModel from \"./filters/AssignmentFilterModel\";\nimport type FilterModel from \"./filters/FilterModel\";\nimport type RangeFilterModel from \"./filters/RangeFilterModel\";\nimport type ConceptIndexFilterModel from \"./filters/ConceptIndexFilterModel\";\nimport type FormModel from \"./form/FormModel\";\nimport type ListDetailModel from \"./list/ListDetailModel\";\nimport type ListModel from \"./list/ListModel\";\nimport type ModelCatalogModel from \"./modelcatalog/ModelCatalogModel\";\nimport type GroupingPanelModel from \"./panels/GroupingPanelModel\";\nimport type CaseSearchModel from \"./search/CaseSearchModel\";\nimport type TabModel from \"./tab/TabModel\";\nimport type TaskGroupModel from \"./taskgroup/TaskGroupModel\";\nimport type UserModel from \"./user/UserModel\";\nimport type UserServicesModel from \"./user/UserServicesModel\";\nimport type LinkModel from \"./links/LinkModel\";\nimport type LookupOptionsModel from \"./lookup/LookupOptionsModel\";\nimport type BaseFilterModel from \"./filters/BaseFilterModel\";\nimport type AttributeCollection from \"./attributes/AttributeCollection\";\nimport type AttributeModel from \"./attributes/AttributeModel\";\nimport type LayoutHintCollection from \"./layouthint/LayoutHintCollection\";\nimport type ErrorResponse from \"./error/ErrorResponse\";\n\nexport type ModularUIModel =\n | ApplicationModel\n | CaseSearchModel\n | CaseViewModel\n | ListDetailModel\n | DetailModel\n | FormModel\n | GroupingPanelModel\n | ListModel\n | TabModel\n | TaskGroupModel\n | UserModel\n | UserServicesModel\n | ModelCatalogModel\n | ConceptIndexModel\n | ConceptDetailModel\n | BusinessScenarioModel\n | ConceptTypeDetailModel\n | ContentIndexModel\n | ContentTOCModel\n | ContentModel\n | ContentTypeModel\n | LookupOptionsModel;\n\nexport type AttributeType =\n | BooleanAttributeModel\n | CaptchaAttributeModel\n | ChoiceAttributeModel\n | DatetimeAttributeModel\n | HelptextAttributeModel\n | LabelAttributeModel\n | MemoAttributeModel\n | MoneyAttributeModel\n | NumberAttributeModel\n | PasswordAttributeModel\n | CompositeAttributeModel\n | StringAttributeModel\n | UploadAttributeModel\n | XMLAttributeModel;\n\nexport type RangeChildAttributeType =\n | NumberAttributeModel\n | DatetimeAttributeModel;\n\nexport type FilterType =\n | BaseFilterModel\n | FilterModel\n | AssignmentFilterModel\n | RangeFilterModel\n | ConceptIndexFilterModel;\n\nexport type FormErrorAnchor = {\n id: string,\n properties?: {\n [propertyName: string]: string | number,\n },\n anchor?: {\n objectid: string,\n elementid?: string,\n _links?: Object,\n index?: number,\n \"index-identifier\"?: string,\n },\n layouthint: LayoutHintCollection,\n message: string,\n param?: {\n name: string,\n },\n};\n\nexport type labelsJSON = {\n _id: string,\n label: string,\n value: string,\n};\n\nexport type propertyJSON = {\n _id: string,\n type: string,\n mandatory: string,\n label: string,\n value: string,\n};\n\nexport type textfragmentJSON = {\n label: string,\n text: string,\n type: string,\n};\n\nexport interface IConstraintModel {\n +id: string;\n +defaultMessage: string;\n +parameters: Object;\n +isMandatoryConstraint: boolean;\n validate(value: any): boolean;\n hasValidation(): boolean;\n}\n\nexport interface ILayoutHintRule {\n process(attribute: AttributeModel, attributes: AttributeCollection): void;\n}\n\nexport interface IModelWithChildModels {\n getInitialChildModelLinks(): Array<LinkModel>;\n setChildModels(\n models: Array<ModularUIModel>,\n errors: Array<ErrorResponse>,\n ): void;\n}\n\nexport type AuthenticationType = {\n name: string,\n authentication: string,\n redirectUri?: string,\n isPrimary: boolean,\n};\n\nexport type FileEntryType = {\n name: string,\n size?: number,\n progress: number,\n error?: string,\n token?: string,\n};\n\nexport type FilesType = {\n [filename: string]: FileEntryType,\n};\n\nexport type FiletypeConstraintsType = Array<{|\n extensions: Array<string>,\n mimeTypes: Array<string>,\n|}>;\n\nexport type FilesizeConstraintsType = {\n fileSize: ?number,\n maxTotalFileSize: ?number,\n isMaxTotal: boolean,\n};\n\nexport type PropertyData = { type: string, label: string, value: string };\nexport type TextFragmentData = {\n type: string,\n label: string,\n text: string | { id?: string, message: string, properties?: Object },\n};\nexport type SectionData = {\n id: string,\n type: string,\n label?: string,\n number?: string,\n body: string | { id?: string, message: string, properties?: Object },\n _links: { self: { href: string } },\n childSections: Array<SectionData>,\n subSections: Array<SectionData>,\n};\n\nexport type PropertyElement = {\n propertyElement: {\n label: string,\n layouthint: Array<string>,\n properties: Array<PropertyData>,\n },\n};\nexport type TextFragmentElement = {\n textFragmentElement: {\n label: string,\n layouthint: Array<string>,\n textfragments: Array<TextFragmentData>,\n },\n};\nexport type ContentElement = {\n contentElement: {\n label: string,\n layouthint: Array<string>,\n sections: Array<SectionData>,\n },\n};\n\nexport type PropertyElementMapped = {\n propertyElement: {\n label: string,\n layouthint: LayoutHintCollection,\n properties: Array<PropertyData>,\n },\n};\nexport type TextFragmentElementMapped = {\n textFragmentElement: {\n label: string,\n layouthint: LayoutHintCollection,\n textfragments: Array<TextFragmentData>,\n },\n};\nexport type ContentElementMapped = {\n contentElement: {\n label: string,\n layouthint: LayoutHintCollection,\n sections: Array<SectionModel>,\n },\n};\n\nexport type ContentAll = Array<\n PropertyElementMapped | TextFragmentElementMapped | ContentElementMapped,\n>;\n\nexport type ContentData = {\n header: {\n label?: string,\n description?: { id?: string, message: string, properties?: Object },\n },\n label?: string,\n elements: Array<PropertyElement | TextFragmentElement | ContentElement>,\n};\n\nexport type ModelOptions = {\n origin?: ?string,\n contextPath?: ?string,\n};\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/models/types.js"],"sourcesContent":["// @flow\nimport type ApplicationModel from \"./application/ApplicationModel\";\nimport type BooleanAttributeModel from \"./attributes/BooleanAttributeModel\";\nimport type CaptchaAttributeModel from \"./attributes/CaptchaAttributeModel\";\nimport type ChoiceAttributeModel from \"./attributes/ChoiceAttributeModel\";\nimport type CompositeAttributeModel from \"./attributes/CompositeAttributeModel\";\nimport type DatetimeAttributeModel from \"./attributes/DatetimeAttributeModel\";\nimport type HelptextAttributeModel from \"./attributes/HelptextAttributeModel\";\nimport type LabelAttributeModel from \"./attributes/LabelAttributeModel\";\nimport type MemoAttributeModel from \"./attributes/MemoAttributeModel\";\nimport type MoneyAttributeModel from \"./attributes/MoneyAttributeModel\";\nimport type NumberAttributeModel from \"./attributes/NumberAttributeModel\";\nimport type PasswordAttributeModel from \"./attributes/PasswordAttributeModel\";\nimport type StringAttributeModel from \"./attributes/StringAttributeModel\";\nimport type UploadAttributeModel from \"./attributes/UploadAttributeModel\";\nimport type XMLAttributeModel from \"./attributes/XMLAttributeModel\";\nimport type CaseViewModel from \"./caseview/CaseViewModel\";\nimport type BusinessScenarioModel from \"./concepts/BusinessScenarioModel\";\nimport type ConceptDetailModel from \"./concepts/ConceptDetailModel\";\nimport type ConceptIndexModel from \"./concepts/ConceptIndexModel\";\nimport type ConceptTypeDetailModel from \"./concepts/ConceptTypeDetailModel\";\nimport type ContentIndexModel from \"./content/ContentIndexModel\";\nimport type ContentModel from \"./content/ContentModel\";\nimport type SectionModel from \"./content/SectionModel\";\nimport type ContentTOCModel from \"./content/ContentTOCModel\";\nimport type ContentTypeModel from \"./content/ContentTypeModel\";\nimport type DetailModel from \"./detail/DetailModel\";\nimport type AssignmentFilterModel from \"./filters/AssignmentFilterModel\";\nimport type FilterModel from \"./filters/FilterModel\";\nimport type RangeFilterModel from \"./filters/RangeFilterModel\";\nimport type ConceptIndexFilterModel from \"./filters/ConceptIndexFilterModel\";\nimport type FormModel from \"./form/FormModel\";\nimport type ListDetailModel from \"./list/ListDetailModel\";\nimport type ListModel from \"./list/ListModel\";\nimport type ModelCatalogModel from \"./modelcatalog/ModelCatalogModel\";\nimport type GroupingPanelModel from \"./panels/GroupingPanelModel\";\nimport type CaseSearchModel from \"./search/CaseSearchModel\";\nimport type TabModel from \"./tab/TabModel\";\nimport type TaskGroupModel from \"./taskgroup/TaskGroupModel\";\nimport type UserModel from \"./user/UserModel\";\nimport type UserServicesModel from \"./user/UserServicesModel\";\nimport type LinkModel from \"./links/LinkModel\";\nimport type LookupOptionsModel from \"./lookup/LookupOptionsModel\";\nimport type BaseFilterModel from \"./filters/BaseFilterModel\";\nimport type AttributeCollection from \"./attributes/AttributeCollection\";\nimport type AttributeModel from \"./attributes/AttributeModel\";\nimport type LayoutHintCollection from \"./layouthint/LayoutHintCollection\";\nimport type ErrorResponse from \"./error/ErrorResponse\";\n\nexport type ModularUIModel =\n | ApplicationModel\n | CaseSearchModel\n | CaseViewModel\n | ListDetailModel\n | DetailModel\n | FormModel\n | GroupingPanelModel\n | ListModel\n | TabModel\n | TaskGroupModel\n | UserModel\n | UserServicesModel\n | ModelCatalogModel\n | ConceptIndexModel\n | ConceptDetailModel\n | BusinessScenarioModel\n | ConceptTypeDetailModel\n | ContentIndexModel\n | ContentTOCModel\n | ContentModel\n | ContentTypeModel\n | LookupOptionsModel;\n\nexport type AttributeType =\n | BooleanAttributeModel\n | CaptchaAttributeModel\n | ChoiceAttributeModel\n | DatetimeAttributeModel\n | HelptextAttributeModel\n | LabelAttributeModel\n | MemoAttributeModel\n | MoneyAttributeModel\n | NumberAttributeModel\n | PasswordAttributeModel\n | CompositeAttributeModel\n | StringAttributeModel\n | UploadAttributeModel\n | XMLAttributeModel;\n\nexport type RangeChildAttributeType =\n | NumberAttributeModel\n | DatetimeAttributeModel;\n\nexport type FilterType =\n | BaseFilterModel\n | FilterModel\n | AssignmentFilterModel\n | RangeFilterModel\n | ConceptIndexFilterModel;\n\nexport type FormErrorAnchor = {\n id: string,\n properties?: {\n [propertyName: string]: string | number,\n },\n anchor?: {\n objectid: string,\n elementid?: string,\n _links?: Object,\n index?: number,\n \"index-identifier\"?: string,\n },\n layouthint: LayoutHintCollection,\n message: string,\n param?: {\n name: string,\n },\n};\n\nexport type labelsJSON = {\n _id: string,\n label: string,\n value: string,\n};\n\nexport type propertyJSON = {\n _id: string,\n type: string,\n mandatory: string,\n label: string,\n value: string,\n};\n\nexport type textfragmentJSON = {\n label: string,\n text: string,\n type: string,\n};\n\nexport interface IConstraintModel {\n +id: string;\n +defaultMessage: string;\n +parameters: Object;\n +isMandatoryConstraint: boolean;\n validate(value: any): boolean;\n hasValidation(): boolean;\n}\n\nexport interface ILayoutHintRule {\n process(attribute: AttributeModel, attributes: AttributeCollection): void;\n}\n\nexport interface IModelWithChildModels {\n getInitialChildModelLinks(): Array<LinkModel>;\n setChildModels(\n models: Array<ModularUIModel>,\n errors: Array<ErrorResponse>,\n ): void;\n}\n\nexport type AuthenticationType = {\n name: string,\n authentication: string,\n redirectUri?: string,\n isPrimary: boolean,\n};\n\nexport type FileEntryType = {\n name: string,\n size?: number,\n progress: number,\n error?: string,\n token?: string,\n};\n\nexport type FilesType = {\n [filename: string]: FileEntryType,\n};\n\nexport type FiletypeConstraintsType = Array<{|\n extensions: Array<string>,\n mimeTypes: Array<string>,\n|}>;\n\nexport type FilesizeConstraintsType = {\n fileSize: ?number,\n maxTotalFileSize: ?number,\n isMaxTotal: boolean,\n};\n\nexport type PropertyData = { type: string, label: string, value: string };\nexport type TextFragmentData = {\n type: string,\n label: string,\n text: string | { id?: string, message: string, properties?: Object },\n};\nexport type SectionData = {\n id: string,\n type: string,\n label?: string,\n number?: string,\n body: string | { id?: string, message: string, properties?: Object },\n _links: { self: { href: string } },\n childSections: Array<SectionData>,\n subSections: Array<SectionData>,\n};\n\nexport type PropertyElement = {\n propertyElement: {\n label: string,\n layouthint: Array<string>,\n properties: Array<PropertyData>,\n },\n};\nexport type TextFragmentElement = {\n textFragmentElement: {\n label: string,\n layouthint: Array<string>,\n textfragments: Array<TextFragmentData>,\n },\n};\nexport type ContentElement = {\n contentElement: {\n label: string,\n layouthint: Array<string>,\n sections: Array<SectionData>,\n },\n};\n\nexport type PropertyElementMapped = {\n propertyElement: {\n label: string,\n layouthint: LayoutHintCollection,\n properties: Array<PropertyData>,\n },\n};\nexport type TextFragmentElementMapped = {\n textFragmentElement: {\n label: string,\n layouthint: LayoutHintCollection,\n textfragments: Array<TextFragmentData>,\n },\n};\nexport type ContentElementMapped = {\n contentElement: {\n label: string,\n layouthint: LayoutHintCollection,\n sections: Array<SectionModel>,\n },\n};\n\nexport type ContentAll = Array<\n PropertyElementMapped | TextFragmentElementMapped | ContentElementMapped,\n>;\n\nexport type ContentData = {\n header: {\n label?: string,\n description?: { id?: string, message: string, properties?: Object },\n },\n label?: string,\n elements: Array<PropertyElement | TextFragmentElement | ContentElement>,\n};\n\nexport type SectionFragment = {\n sectionId?: string,\n text: string,\n startOffset: number,\n endOffset: number,\n};\n\nexport type ModelOptions = {\n origin?: ?string,\n contextPath?: ?string,\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -2,10 +2,10 @@ import { createHash } from "../createHash";
|
|
|
2
2
|
|
|
3
3
|
describe("createHash", () => {
|
|
4
4
|
it("creates hash from string", () => {
|
|
5
|
-
expect(createHash("")).toBe(
|
|
6
|
-
expect(createHash("abcdefgh")).toBe(
|
|
7
|
-
expect(createHash(123455)).toBe(
|
|
8
|
-
expect(createHash(null)).toBe(
|
|
9
|
-
expect(createHash()).toBe(
|
|
5
|
+
expect(createHash("")).toBe(729279156);
|
|
6
|
+
expect(createHash("abcdefgh")).toBe(17595859189820);
|
|
7
|
+
expect(createHash(123455)).toBe(15900277965517);
|
|
8
|
+
expect(createHash(null)).toBe(711079339769);
|
|
9
|
+
expect(createHash()).toBe(4721361581144);
|
|
10
10
|
});
|
|
11
11
|
});
|
|
@@ -4,5 +4,6 @@
|
|
|
4
4
|
export function createHash(str: string): number;
|
|
5
5
|
/**
|
|
6
6
|
*/
|
|
7
|
-
export function createHashFromHref(href: Href): number;
|
|
7
|
+
export function createHashFromHref(href: Href, fragment?: SectionFragment): number;
|
|
8
8
|
import Href from "../../models/href/Href";
|
|
9
|
+
import { SectionFragment } from "../../models";
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
+
import hash from "hash-it";
|
|
1
2
|
/**
|
|
2
3
|
* https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
|
|
3
4
|
*/
|
|
4
5
|
const createHash = str => {
|
|
5
|
-
|
|
6
|
-
let hash = 0;
|
|
7
|
-
for (let i = 0; i < str.length; i++) {
|
|
8
|
-
hash = (hash << 5) - hash + str.charCodeAt(i);
|
|
9
|
-
hash = hash & hash;
|
|
10
|
-
}
|
|
11
|
-
return hash;
|
|
6
|
+
return hash(str);
|
|
12
7
|
};
|
|
13
8
|
|
|
14
9
|
/**
|
|
15
10
|
*/
|
|
16
|
-
const createHashFromHref = href => {
|
|
11
|
+
const createHashFromHref = (href, fragment) => {
|
|
17
12
|
const hrefString = href.hash ? [href.toString(), href.hash].join("#") : href.toString();
|
|
18
|
-
|
|
13
|
+
if (fragment) {
|
|
14
|
+
return hash({
|
|
15
|
+
hrefString,
|
|
16
|
+
fragment
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return hash(hrefString);
|
|
19
20
|
};
|
|
20
21
|
export { createHash, createHashFromHref };
|
|
21
22
|
//# sourceMappingURL=createHash.js.map
|