Skip to content

Commit

Permalink
Translations + Keys + update freshly closed referral display and perm…
Browse files Browse the repository at this point in the history
…issions
  • Loading branch information
Adrien Jézégou committed Jan 9, 2024
1 parent a111944 commit 7f8cfe5
Show file tree
Hide file tree
Showing 14 changed files with 263 additions and 195 deletions.
2 changes: 2 additions & 0 deletions src/backend/partaj/core/api/referral_report_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ class CanCreateVersion(BasePermission):
- User is authenticated
- User is referral's topic unit member
- Referral is not published yet
- Referral is not closed yet
"""

def has_permission(self, request, view):
Expand All @@ -67,6 +68,7 @@ def has_permission(self, request, view):
request.user.is_authenticated
and report.referral.units.filter(members__id=request.user.id).exists()
and report.referral.state != models.ReferralState.ANSWERED
and report.referral.state != models.ReferralState.CLOSED
)


Expand Down
5 changes: 2 additions & 3 deletions src/backend/partaj/core/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,9 +290,7 @@ class NotificationSerializer(serializers.ModelSerializer):

class Meta:
model = models.Notification
fields = [
"notified",
]
fields = ["notified", "id"]


class EventMetadataSerializer(serializers.ModelSerializer):
Expand Down Expand Up @@ -338,6 +336,7 @@ class Meta:
"content",
"created_at",
"report",
"state",
"verb",
"user",
"metadata",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,12 @@ export const DropzoneFileUploader = ({
<FormattedMessage {...dropzoneMessage} />
</p>
{withButton && (
<button
<div
className={`btn btn-gray relative rounded-sm pt-1 pb-1 pr-2 pl-2 flex space-y-2 items-center`}
>
<ArrowUpIcon />
<FormattedMessage {...messages.dropzoneCta} />
</button>
</div>
)}
</div>
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ export const Message = ({
{notifications.map((notification: MessageNotification) => {
return (
<span
key={notification.notified.display_name}
key={notification.id}
className={`rounded-sm font-light text-sm ml-1`}
>
@{notification.notified.display_name}
Expand Down
178 changes: 90 additions & 88 deletions src/frontend/js/components/ReferralReport/Version.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { useCurrentUser } from '../../data/useCurrentUser';
import { isAuthor } from '../../utils/version';
import { SendVersionModal } from './SendVersionModal';
import { ReferralContext } from '../../data/providers/ReferralProvider';
import { referralIsPublished } from '../../utils/referral';
import { referralIsClosed, referralIsPublished } from '../../utils/referral';
import { EditFileIcon, SendIcon } from '../Icons';
import { VersionUpdateButton } from '../FileUploader/VersionUpdateButton';
import { IconTextButton } from '../buttons/IconTextButton';
Expand Down Expand Up @@ -261,7 +261,6 @@ export const Version: React.FC<VersionProps> = ({
{version.created_by.first_name} {version.created_by.last_name}
</span>
</div>

<div className={`flex justify-between text-sm text-gray-500`}>
<FormattedMessage
{...messages.publicationDate}
Expand All @@ -276,9 +275,7 @@ export const Version: React.FC<VersionProps> = ({
),
}}
/>
<div>
<p>{version.created_by.unit_name}</p>
</div>
<p>{version.created_by.unit_name}</p>
</div>
{version.events.length > 0 && referral.validation_state === 1 && (
<div className="space-y-1 mb-2">
Expand All @@ -294,93 +291,98 @@ export const Version: React.FC<VersionProps> = ({
<VersionDocument version={version} />
</div>

{isLastVersion(index) && !referralIsPublished(referral) && (
<div className="flex w-full items-center justify-between">
<div>
{isAuthor(currentUser, version) && (
<div
className="flex space-x-2"
data-testid="update-version-button"
>
<VersionUpdateButton
disabled={isChangeRequested(version)}
disabledText={intl.formatMessage(
messages.updateButtonDisabledText,
)}
icon={
<EditFileIcon
className={
isChangeRequested(version)
? 'fill-grey400'
: 'fill-black'
{isLastVersion(index) &&
!referralIsPublished(referral) &&
!referralIsClosed(referral) && (
<div className="flex w-full items-center justify-between">
<div>
{isAuthor(currentUser, version) && (
<div
className="flex space-x-2"
data-testid="update-version-button"
>
<VersionUpdateButton
disabled={isChangeRequested(version)}
disabledText={intl.formatMessage(
messages.updateButtonDisabledText,
)}
icon={
<EditFileIcon
className={
isChangeRequested(version)
? 'fill-grey400'
: 'fill-black'
}
/>
}
cssClass="btn-gray"
onSuccess={(result) => {
setVersion(result);
}}
onError={(error) => {
if (
error.code === ErrorCodes.FILE_FORMAT_FORBIDDEN
) {
setErrorModalOpen(true);
}
Sentry.captureException(error.errors[0]);
}}
action={'PUT'}
url={urls.versions + version.id + '/'}
>
<FormattedMessage {...messages.replace} />
</VersionUpdateButton>
</div>
)}
</div>
<div className="flex space-x-2">
{isLastVersion(index) &&
!referralIsPublished(referral) &&
!referralIsClosed(referral) &&
referral.validation_state === 1 && (
<>
<ValidationSelect options={options} />
<ValidateModal
versionNumber={versionNumber}
setModalOpen={setValidateModalOpen}
isModalOpen={isValidateModalOpen}
/>
<RequestChangeModal
versionNumber={versionNumber}
setModalOpen={setRequestChangeModalOpen}
isModalOpen={isRequestChangeModalOpen}
/>
<ValidationModal
setValidationModalOpen={setValidationModalOpen}
isValidationModalOpen={isValidationModalOpen}
/>
</>
)}
<IconTextButton
testId="send-report-button"
otherClasses="btn-primary"
icon={<SendIcon className="fill-white" />}
onClick={() => {
if (isChangeRequested(version)) {
return setWarningModalOpen(true);
}
cssClass="btn-gray"
onSuccess={(result) => {
setVersion(result);
}}
onError={(error) => {
if (error.code === ErrorCodes.FILE_FORMAT_FORBIDDEN) {
setErrorModalOpen(true);
}
Sentry.captureException(error.errors[0]);
}}
action={'PUT'}
url={urls.versions + version.id + '/'}
>
<FormattedMessage {...messages.replace} />
</VersionUpdateButton>
</div>
)}
</div>
<div className="flex space-x-2">
{isLastVersion(index) &&
!referralIsPublished(referral) &&
referral.validation_state === 1 && (
<>
<ValidationSelect options={options} />
<ValidateModal
versionNumber={versionNumber}
setModalOpen={setValidateModalOpen}
isModalOpen={isValidateModalOpen}
/>
<RequestChangeModal
versionNumber={versionNumber}
setModalOpen={setRequestChangeModalOpen}
isModalOpen={isRequestChangeModalOpen}
/>
<ValidationModal
setValidationModalOpen={setValidationModalOpen}
isValidationModalOpen={isValidationModalOpen}
/>
</>
)}
<IconTextButton
testId="send-report-button"
otherClasses="btn-primary"
icon={<SendIcon className="fill-white" />}
onClick={() => {
if (isChangeRequested(version)) {
return setWarningModalOpen(true);
}
setModalOpen(true);
setActiveVersion(versionsLength - index);
}}
>
<FormattedMessage {...messages.send} />
</IconTextButton>
<WarningModal
isModalOpen={isWarningModalOpen}
onCancel={() => setWarningModalOpen(false)}
onContinue={() => {
setWarningModalOpen(false);
setModalOpen(true);
}}
/>
setModalOpen(true);
setActiveVersion(versionsLength - index);
}}
>
<FormattedMessage {...messages.send} />
</IconTextButton>
<WarningModal
isModalOpen={isWarningModalOpen}
onCancel={() => setWarningModalOpen(false)}
onContinue={() => {
setWarningModalOpen(false);
setModalOpen(true);
}}
/>
</div>
</div>
</div>
)}
)}
</div>
<SendVersionModal
report={report}
Expand Down
70 changes: 51 additions & 19 deletions src/frontend/js/components/ReferralReport/VersionEventIndicator.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { useContext } from 'react';
import {
defineMessages,
FormattedDate,
Expand All @@ -7,24 +7,34 @@ import {
useIntl,
} from 'react-intl';

import { ReportEvent, ReportEventVerb } from 'types';
import {
Referral,
ReportEvent,
ReportEventState,
ReportEventVerb,
} from 'types';
import { getUserFullname } from 'utils/user';
import { commonMessages } from '../../const/translations';
import { ReferralContext } from '../../data/providers/ReferralProvider';
import { referralIsOpen } from '../../utils/referral';
import { Nullable } from '../../types/utils';

const messages = defineMessages({
[ReportEventVerb.REQUEST_CHANGE]: {
defaultMessage: 'Change requested by { userName } ({ roleName })',
defaultMessage:
'Change requested by { userName } ({ roleName }) - { date } { time }',
description: 'Version request change event indicator message.',
id: 'components.VersionEventIndicator.requestChange',
},
[ReportEventVerb.REQUEST_VALIDATION]: {
defaultMessage:
'{ userName } request validation to { roleName } of { unitName }',
'{ userName } request validation to { roleName } of { unitName } - { date } { time }',
description: 'Version request validation event indicator message.',
id: 'components.VersionEventIndicator.requestValidation',
},
[ReportEventVerb.VERSION_VALIDATED]: {
defaultMessage: 'Validated by { userName } ({ roleName })',
defaultMessage:
'Validated by { userName } ({ roleName }) - { date } { time }',
description: 'Version validated event indicator message.',
id: 'components.VersionEventIndicator.versionValidated',
},
Expand Down Expand Up @@ -64,10 +74,15 @@ export const VersionEventIndicator = ({
}: VersionEventIndicatorProps) => {
let message: React.ReactNode;
const intl = useIntl();
const { referral } = useContext(ReferralContext);

const getStyle = (verb: string) => {
return eventStyle.hasOwnProperty(verb) && isActive
? eventStyle[verb as VersionEventVerb].style
const getStyle = (event: ReportEvent, referral: Nullable<Referral>) => {
return eventStyle.hasOwnProperty(event.verb) &&
isActive &&
referral &&
referralIsOpen(referral) &&
event.state === ReportEventState.ACTIVE
? eventStyle[event.verb as VersionEventVerb].style
: eventStyle[ReportEventVerb.NEUTRAL].style;
};

Expand All @@ -82,6 +97,15 @@ export const VersionEventIndicator = ({
commonMessages[event.metadata.receiver_role],
),
unitName: event.metadata.receiver_unit_name,
date: (
<FormattedDate
year="2-digit"
month="2-digit"
day="2-digit"
value={event.created_at}
/>
),
time: <FormattedTime value={event.created_at} />,
}}
/>
);
Expand All @@ -96,6 +120,15 @@ export const VersionEventIndicator = ({
roleName: intl.formatMessage(
commonMessages[event.metadata.sender_role],
),
date: (
<FormattedDate
year="2-digit"
month="2-digit"
day="2-digit"
value={event.created_at}
/>
),
time: <FormattedTime value={event.created_at} />,
}}
/>
);
Expand All @@ -104,18 +137,17 @@ export const VersionEventIndicator = ({

return (
<div className="flex w-full space-x-1 items-center">
<div className={`w-3 h-1 rounded-full ${getStyle(event.verb)}`}> </div>
<span className="italic text-sm py-0 w-fit">
<div className={`w-3 h-3 rounded-full ${getStyle(event, referral)}`}>
{' '}
</div>
<span
className={` ${
event.state === ReportEventState.OBSOLETE || !referralIsOpen(referral)
? 'italic text-gray-450'
: 'text-black'
} text-sm py-0 w-fit`}
>
{message}
{' le '}
<FormattedDate
year="2-digit"
month="2-digit"
day="2-digit"
value={event.created_at}
/>
{' à '}
<FormattedTime value={event.created_at} />
</span>
</div>
);
Expand Down
Loading

0 comments on commit 7f8cfe5

Please sign in to comment.