diff --git a/src/actions.js b/src/actions.js
index f206b19..e9b35b3 100644
--- a/src/actions.js
+++ b/src/actions.js
@@ -220,6 +220,7 @@ export function fetchUser(mm, userId, clientMutationId) {
lastName
otherNames
roles { id name isSystem}
+ programSet { edges{node{id idProgram nameProgram validityDateFrom}}}
healthFacility ${mm.getProjection("location.HealthFacilityPicker.projection")}
validityFrom
validityTo
diff --git a/src/components/AdminMainMenu.js b/src/components/AdminMainMenu.js
index 4fbdc5d..7835c3c 100644
--- a/src/components/AdminMainMenu.js
+++ b/src/components/AdminMainMenu.js
@@ -12,6 +12,7 @@ import {
People,
PinDrop,
Tune,
+ FormatAlignLeft
} from "@material-ui/icons";
import { formatMessage, MainMenuContribution, withModulesManager } from "@openimis/fe-core";
import {
@@ -34,6 +35,7 @@ class AdminMainMenu extends Component {
constructor(props) {
super(props);
this.isWorker = props.modulesManager.getConf("fe-core", "isWorker", false);
+ this.isProgramAvailable = props.modulesManager.getConf("fe-core", "isProgramAvailable", false);
}
render() {
@@ -86,6 +88,15 @@ class AdminMainMenu extends Component {
id: "admin.healthFacilities",
});
}
+ if (this.isProgramAvailable) {
+ entries.push({
+ text: formatMessage(this.props.intl, "admin", "menu.programs"),
+ icon: ,
+ route: "/program/programs",
+ id: "admin.programs",
+ withDivider: true,
+ });
+ }
if (rights.includes(RIGHT_PRICELISTMS)) {
entries.push({
text: formatMessage(this.props.intl, "admin", "menu.medicalServicesPrices"),
diff --git a/src/components/UserMasterPanel.js b/src/components/UserMasterPanel.js
index 1f428f1..24e2244 100644
--- a/src/components/UserMasterPanel.js
+++ b/src/components/UserMasterPanel.js
@@ -67,6 +67,8 @@ const UserMasterPanel = (props) => {
const { formatMessage, formatMessageWithValues } = useTranslations("admin", modulesManager);
const dispatch = useDispatch();
+ const isProgramAvailable = modulesManager.getConf("fe-core", "isProgramAvailable", true);
+
useEffect(() => {
dispatch(fetchPasswordPolicy());
}, [dispatch]);
@@ -266,7 +268,21 @@ const UserMasterPanel = (props) => {
onChange={(roles) => onEditedChanged({ ...edited, roles })}
/>
-
+ {isProgramAvailable && (
+
+ onEditedChanged({ ...edited, programs })}
+ />
+
+ )}
+
{
u.language = u.iUser.languageId;
u.roles = u.iUser.roles;
u.districts = u.iUser.districts.map((d) => d.location);
+ u.programs = u.iUser.programSet.edges.map((p) => p.node);
}
if (u.claimAdmin) {
u.hasLogin = u.hasLogin || u.claimAdmin.hasLogin;
@@ -57,6 +58,7 @@ export const mapQueriesUserToStore = (u) => {
u.phoneNumber = u.claimAdmin.phone;
u.birthDate = u.claimAdmin.dob;
u.healthFacility = u.claimAdmin.healthFacility;
+ u.programs = u.claimAdmin.programs;
}
if (u.officer) {
u.hasLogin = u.hasLogin || u.officer.hasLogin;
@@ -95,6 +97,7 @@ export const mapUserValuesToInput = (values) => {
substitutionOfficerId: values.substitutionOfficer?.id ? decodeId(values.substitutionOfficer.id) : null,
worksTo: values.worksTo,
villageIds: values.officerVillages?.map((location) => decodeId(location.id)),
+ programs: values.programs.map((p) => decodeId(p.id)),
};
return input;
};