Skip to content

Commit 8a6d9c0

Browse files
[BAH-4159] Loading All Privileges when assign (#118)
* Fetching all privileges from the paginated API * Searching for next link if present * Adding a limit to fetch the priviledges * Fetching complete response for all forms as the openmrs API is paginated. Updating name for the limit constant * Fixing lint errors
1 parent 7b31501 commit 8a6d9c0

File tree

3 files changed

+46
-8
lines changed

3 files changed

+46
-8
lines changed

src/form-builder/components/FormBuilderContainer.jsx

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,38 @@ export class FormBuilderContainer extends Component {
3535
}
3636

3737
getFormData() {
38-
return httpInterceptor
39-
.get(`${formBuilderConstants.formUrl}?v=custom:(id,uuid,name,version,published,auditInfo)`)
40-
.then((data) => {
41-
this.setState({ data: this.orderFormByVersion(data.results), loading: false });
38+
let initialForms = [];
39+
let forms = [];
40+
const queryParams = '?=';
41+
const fetchFormsUrl = `${formBuilderConstants.formUrl}?v=custom:(id,uuid,name,version,published,auditInfo)`;
42+
return httpInterceptor.get(fetchFormsUrl)
43+
.then((initialForms) => {
44+
this.collectAllForms(initialForms, forms);
4245
})
4346
.catch((error) => {
4447
this.showErrors(error);
4548
this.setState({ loading: false });
4649
});
4750
}
4851

52+
collectAllForms(initialForms, forms) {
53+
forms.push(...initialForms.results);
54+
if (forms.length === formBuilderConstants.dataLimit) {
55+
this.setState({ data: this.orderFormByVersion(forms), loading: false });
56+
return;
57+
}
58+
if (initialForms.links !== undefined && initialForms.links.length > 0 && initialForms.links.find(link => link.rel === 'next') !== undefined) {
59+
httpInterceptor.get(initialForms.links[0].uri)
60+
.then((privileges) => this.collectAllForms(privileges, forms))
61+
.catch((error) => {
62+
this.showErrors(error);
63+
this.setState({ loading: false });
64+
});
65+
} else {
66+
this.setState({ data: this.orderFormByVersion(forms), loading: false });
67+
}
68+
}
69+
4970
getDefaultLocale() {
5071
httpInterceptor
5172
.get(`${formBuilderConstants.defaultLocaleUrl}`, 'text')

src/form-builder/components/FormPrivilegeTable.jsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,32 @@ export default class FormPrivilegeTable extends Component {
8080
this.setState({ loading: false });
8181
});
8282
}
83+
8384
fetchPrivileges() {
8485
let initialPrivileges = [];
86+
let privileges = [];
8587
const queryParams = '?=';
8688
const optionsUrl = `${formBuilderConstants.formPrivilegeUrl}${queryParams}`;
8789
httpInterceptor.get(optionsUrl)
88-
.then((initialPrivileges) => {
89-
this.setState({ availablePrivileges: this.arrangePrivileges(initialPrivileges.results), loading: false });
90-
});
90+
.then((initialPrivileges) => {
91+
this.collectAllPrivileges(initialPrivileges, privileges);
92+
});
9193
}
94+
95+
collectAllPrivileges(initialPrivileges, allPrivileges) {
96+
allPrivileges.push(...initialPrivileges.results);
97+
if (allPrivileges.length === formBuilderConstants.dataLimit) {
98+
this.setState({ availablePrivileges: this.arrangePrivileges(allPrivileges), loading: false });
99+
return;
100+
}
101+
if (initialPrivileges.links !== undefined && initialPrivileges.links.length > 0 && initialPrivileges.links.find(link => link.rel === 'next') !== undefined) {
102+
httpInterceptor.get(initialPrivileges.links[0].uri)
103+
.then((privileges) => this.collectAllPrivileges(privileges, allPrivileges));
104+
} else {
105+
this.setState({ availablePrivileges: this.arrangePrivileges(allPrivileges), loading: false });
106+
}
107+
}
108+
92109
fetchFormPrivilegesFromDB() {
93110
let initialPrivilegesFromDB = [];
94111
const queryParams = '?=';

src/form-builder/constants.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ export const formBuilderConstants = {
2828
getFormPrivilegesFromUuidUrl: '/openmrs/ws/rest/v1/bahmniie/form/getFormPrivilegesFromUuid',
2929
jsonToPdfConvertionUrl: '/openmrs/ws/rest/v1/bahmniie/form/jsonToPdf',
3030
pdfDownloadUrl: '/openmrs/ws/rest/v1/bahmniie/form/download/',
31-
31+
dataLimit: 9999,
3232
};

0 commit comments

Comments
 (0)