Skip to content

Commit e5c9377

Browse files
authored
fix: Add hyperlink to Org Unit from submission
Refs: IA-3871
2 parents 363fea7 + c1611ea commit e5c9377

File tree

3 files changed

+48
-59
lines changed

3 files changed

+48
-59
lines changed

hat/assets/js/apps/Iaso/domains/instances/components/ActionTableColumnComponent.js

+3-29
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
import React from 'react';
12
import LinkIcon from '@mui/icons-material/Link';
23
import LinkOffIcon from '@mui/icons-material/LinkOff';
34
import LockIcon from '@mui/icons-material/Lock';
45
import { DialogContentText } from '@mui/material';
56
import { IconButton as IconButtonComponent } from 'bluesquare-components';
67
import omit from 'lodash/omit';
7-
import React from 'react';
88
import { FormattedMessage } from 'react-intl';
99
import ConfirmCancelDialogComponent from '../../../components/dialogs/ConfirmCancelDialogComponent';
1010
import { baseUrls } from '../../../constants/urls.ts';
@@ -19,7 +19,7 @@ import {
1919
useCurrentUser,
2020
} from '../../../utils/usersUtils.ts';
2121
import { useSaveOrgUnit } from '../../orgUnits/hooks';
22-
import { userHasOneOfPermissions, userHasPermission } from '../../users/utils';
22+
import { userHasPermission } from '../../users/utils';
2323
import { REFERENCE_FLAG_CODE, REFERENCE_UNFLAG_CODE } from '../constants';
2424
import MESSAGES from '../messages';
2525
// eslint-disable-next-line camelcase
@@ -43,18 +43,6 @@ const initialFormState = (
4343
};
4444
};
4545

46-
const getUrlOrgUnit = data => {
47-
const rowOriginal = data.row.original;
48-
// each instance should have a formId
49-
let initialUrl = `/${baseUrls.orgUnitDetails}/orgUnitId/${rowOriginal.org_unit.id}/formId/${rowOriginal.form_id}`;
50-
// there are some instances which don't have a reference form Id
51-
if (rowOriginal.is_reference_instance) {
52-
initialUrl = `${initialUrl}/referenceFormId/${rowOriginal.form_id}`;
53-
}
54-
// each instance has an id
55-
return `${initialUrl}/instanceId/${rowOriginal.id}`;
56-
};
57-
5846
const getUrlInstance = data => {
5947
const rowOriginal = data.row.original;
6048
// each instance should have a formId
@@ -119,14 +107,6 @@ const ActionTableColumnComponent = ({ settings }) => {
119107
!settings.row.original.is_reference_instance &&
120108
userHasPermission(Permission.ORG_UNITS, user);
121109

122-
const showOrgUnitButton =
123-
settings.row.original.org_unit &&
124-
userHasOneOfPermissions(
125-
[Permission.ORG_UNITS, Permission.ORG_UNITS_READ],
126-
user,
127-
) &&
128-
userHasPermission(Permission.SUBMISSIONS_UPDATE, user);
129-
130110
const confirmCancelTitleMessage = isItLinked => {
131111
return !isItLinked
132112
? MESSAGES.linkOffOrgUnitToInstanceReferenceTitle
@@ -158,13 +138,7 @@ const ActionTableColumnComponent = ({ settings }) => {
158138
icon="remove-red-eye"
159139
tooltipMessage={MESSAGES.view}
160140
/>
161-
{showOrgUnitButton && (
162-
<IconButtonComponent
163-
url={getUrlOrgUnit(settings)}
164-
icon="orgUnit"
165-
tooltipMessage={MESSAGES.viewOrgUnit}
166-
/>
167-
)}
141+
168142
{showLinkOrgUnitInstanceReferenceButton && (
169143
<ConfirmCancelDialogComponent
170144
titleMessage={confirmCancelTitleMessage(notLinked)}

hat/assets/js/apps/Iaso/domains/instances/components/InstancesFiltersComponent.js

+15-18
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
import PropTypes from 'prop-types';
21
import React, { useCallback, useMemo, useState } from 'react';
3-
2+
import Search from '@mui/icons-material/Search';
43
import { Box, Button, Grid, Typography } from '@mui/material';
54
import { makeStyles } from '@mui/styles';
6-
7-
import Search from '@mui/icons-material/Search';
85
import {
96
QueryBuilderInput,
107
commonStyles,
@@ -13,35 +10,36 @@ import {
1310
useSkipEffectOnMount,
1411
InputWithInfos,
1512
} from 'bluesquare-components';
13+
import PropTypes from 'prop-types';
1614

1715
import DatesRange from '../../../components/filters/DatesRange';
16+
import { AsyncSelect } from '../../../components/forms/AsyncSelect.tsx';
1817
import InputComponent from '../../../components/forms/InputComponent.tsx';
18+
import { UserOrgUnitRestriction } from '../../../components/UserOrgUnitRestriction.tsx';
19+
import { getInstancesFilterValues, useFormState } from '../../../hooks/form';
20+
import { LocationLimit } from '../../../utils/map/LocationLimit';
21+
import { Popper } from '../../forms/fields/components/Popper.tsx';
22+
import { useGetFormDescriptor } from '../../forms/fields/hooks/useGetFormDescriptor.ts';
23+
import { useGetQueryBuilderListToReplace } from '../../forms/fields/hooks/useGetQueryBuilderListToReplace.ts';
24+
import { useGetQueryBuildersFields } from '../../forms/fields/hooks/useGetQueryBuildersFields.ts';
25+
import { OrgUnitTreeviewModal } from '../../orgUnits/components/TreeView/OrgUnitTreeviewModal.tsx';
26+
import { useGetOrgUnit } from '../../orgUnits/components/TreeView/requests.ts';
1927
import PeriodPicker from '../../periods/components/PeriodPicker.tsx';
2028
import { periodTypeOptions } from '../../periods/constants';
2129
import { Period } from '../../periods/models.ts';
2230
import { isValidPeriod } from '../../periods/utils';
2331

2432
import { INSTANCE_STATUSES } from '../constants';
2533

26-
import { getInstancesFilterValues, useFormState } from '../../../hooks/form';
27-
import { useGetFormDescriptor } from '../../forms/fields/hooks/useGetFormDescriptor.ts';
28-
import { useGetQueryBuilderListToReplace } from '../../forms/fields/hooks/useGetQueryBuilderListToReplace.ts';
29-
import { useGetQueryBuildersFields } from '../../forms/fields/hooks/useGetQueryBuildersFields.ts';
3034
import { useGetForms } from '../hooks';
35+
import { getUsersDropDown } from '../hooks/requests/getUsersDropDown.tsx';
36+
import { useGetProfilesDropdown } from '../hooks/useGetProfilesDropdown.tsx';
37+
import MESSAGES from '../messages';
3138
import { parseJson } from '../utils/jsonLogicParse.ts';
3239

33-
import { Popper } from '../../forms/fields/components/Popper.tsx';
34-
import { OrgUnitTreeviewModal } from '../../orgUnits/components/TreeView/OrgUnitTreeviewModal.tsx';
35-
import { useGetOrgUnit } from '../../orgUnits/components/TreeView/requests.ts';
36-
import MESSAGES from '../messages';
3740

38-
import { AsyncSelect } from '../../../components/forms/AsyncSelect.tsx';
39-
import { UserOrgUnitRestriction } from '../../../components/UserOrgUnitRestriction.tsx';
40-
import { LocationLimit } from '../../../utils/map/LocationLimit';
4141
import { useGetPlanningsOptions } from '../../plannings/hooks/requests/useGetPlannings.ts';
4242
import { useGetProjectsDropdownOptions } from '../../projects/hooks/requests.ts';
43-
import { getUsersDropDown } from '../hooks/requests/getUsersDropDown.tsx';
44-
import { useGetProfilesDropdown } from '../hooks/useGetProfilesDropdown.tsx';
4543
import { ColumnSelect } from './ColumnSelect.tsx';
4644
import { useGetOrgUnitTypesDropdownOptions } from '../../orgUnits/orgUnitTypes/hooks/useGetOrgUnitTypesDropdownOptions';
4745

@@ -600,7 +598,6 @@ InstancesFiltersComponent.propTypes = {
600598
labelKeys: PropTypes.array.isRequired,
601599
periodType: PropTypes.string,
602600
possibleFields: PropTypes.array,
603-
formDetails: PropTypes.object,
604601
};
605602

606603
export default InstancesFiltersComponent;

hat/assets/js/apps/Iaso/domains/instances/constants.js

+30-12
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@ import {
44
displayDateFromTimestamp,
55
textPlaceholder,
66
} from 'bluesquare-components';
7+
import PropTypes from 'prop-types';
78
import { FormattedMessage } from 'react-intl';
8-
import getDisplayName from '../../utils/usersUtils.ts';
9+
import * as Permission from '../../utils/permissions.ts';
10+
import getDisplayName, { useCurrentUser } from '../../utils/usersUtils.ts';
911
import { LinkToForm } from '../forms/components/LinkToForm.tsx';
12+
import { LinkToOrgUnit } from '../orgUnits/components/LinkToOrgUnit';
1013
import { OrgUnitLabel } from '../orgUnits/components/OrgUnitLabel.tsx';
1114
import OrgUnitTooltip from '../orgUnits/components/OrgUnitTooltip';
12-
import { LinkToPlanning } from '../plannings/components/LinkToPlanning.tsx';
1315
import { usePrettyPeriod } from '../periods/utils';
16+
import { LinkToPlanning } from '../plannings/components/LinkToPlanning.tsx';
17+
import { userHasOneOfPermissions, userHasPermission } from '../users/utils';
1418
import MESSAGES from './messages';
15-
import { LinkToOrgUnit } from '../orgUnits/components/LinkToOrgUnit';
1619

1720
export const INSTANCE_STATUS_READY = 'READY';
1821
export const INSTANCE_STATUS_ERROR = 'ERROR';
@@ -31,6 +34,7 @@ const PrettyPeriod = ({ value }) => {
3134
const formatPeriod = usePrettyPeriod();
3235
return formatPeriod(value);
3336
};
37+
3438
export const INSTANCE_MAP_METAS_FIELDS = [
3539
{
3640
key: 'org_unit_type_name',
@@ -94,6 +98,28 @@ export const INSTANCE_MAP_METAS_FIELDS = [
9498
},
9599
];
96100

101+
const OrgUnitLabelHyperLink = ({ value }) => {
102+
const currentUser = useCurrentUser();
103+
const showOrgUnitLink =
104+
userHasOneOfPermissions(
105+
[Permission.ORG_UNITS, Permission.ORG_UNITS_READ],
106+
currentUser,
107+
) && userHasPermission(Permission.SUBMISSIONS_UPDATE, currentUser);
108+
return (
109+
<OrgUnitTooltip key={value.id} orgUnit={value} domComponent="span">
110+
{showOrgUnitLink ? (
111+
<LinkToOrgUnit orgUnit={value} />
112+
) : (
113+
<OrgUnitLabel orgUnit={value} withType withSource={false} />
114+
)}
115+
</OrgUnitTooltip>
116+
);
117+
};
118+
119+
OrgUnitLabelHyperLink.propTypes = {
120+
value: PropTypes.object.isRequired,
121+
};
122+
97123
export const INSTANCE_METAS_FIELDS = [
98124
{
99125
key: 'uuid',
@@ -210,15 +236,7 @@ export const INSTANCE_METAS_FIELDS = [
210236
accessor: 'org_unit__name',
211237
render: value => {
212238
if (!value) return null;
213-
return (
214-
<OrgUnitTooltip
215-
key={value.id}
216-
orgUnit={value}
217-
domComponent="span"
218-
>
219-
<OrgUnitLabel orgUnit={value} withType withSource={false} />
220-
</OrgUnitTooltip>
221-
);
239+
return <OrgUnitLabelHyperLink value={value} />;
222240
},
223241
active: true,
224242
tableOrder: 5,

0 commit comments

Comments
 (0)