Skip to content

Commit 7988372

Browse files
committed
feat: improvements
1 parent 55e19a8 commit 7988372

File tree

8 files changed

+68
-29
lines changed

8 files changed

+68
-29
lines changed

web/components/Account/Application/Place/ApplicationPlaceList.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ const ApplicationPlaceList = ({ applications = [] }: Props) => {
5050
(application) => application?.status === 'preselected',
5151
)
5252

53+
const validatedApplications = applications?.filter(
54+
(application) => application?.status === 'confirmed',
55+
).length
56+
57+
const hasValidatedApplications =
58+
selectedCampaign?.mode === 'preselections' && validatedApplications > 0
59+
5360
const filteredList = useMemo(
5461
() =>
5562
list.filter((application) => {
@@ -139,6 +146,7 @@ const ApplicationPlaceList = ({ applications = [] }: Props) => {
139146
isOpen={isOpen}
140147
onClose={onClose}
141148
application={selectedApplication}
149+
hasValidatedApplications={hasValidatedApplications}
142150
canPreselect={
143151
preselectedApplications?.length <
144152
selectedCampaign?.preselections_max &&

web/components/Account/Application/Place/ApplicationPlaceListItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const ApplicationPlaceListItem = ({ application, onSelect }: Props) => {
4848
</Cell>
4949
{['preselections', 'closed']?.includes(selectedCampaign?.mode) && (
5050
<Cell cursor="default">
51-
<HStack spacing={2}>
51+
<HStack spacing={2} width="100%" justifyContent="flex-end">
5252
<ApplicationCountAlert applicationId={application?.id} onlyIcon />
5353
<ApplicationDownloadButton application={application} />
5454
<Button

web/components/Account/Application/Place/ApplicationsHelpers/ValidatedSelections.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Box, HStack, Text } from '@chakra-ui/react'
2-
import PreselectionsValidated from 'public/assets/img/preselectionsValidated.svg'
32
import { useTranslation } from 'next-i18next'
3+
import PreselectionsValidated from 'public/assets/img/preselectionsValidated.svg'
44

55
const ValidatedSelections = () => {
66
const { t } = useTranslation('application')

web/components/Account/Application/Place/DetailDrawer/ApplicationDetailDrawer.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ const ApplicationDetailDrawer = ({
2626
onClose,
2727
application,
2828
canPreselect,
29+
hasValidatedApplications,
2930
}: {
3031
isOpen: boolean
3132
onClose: () => void
3233
application: Application
3334
canPreselect: boolean
35+
hasValidatedApplications: boolean
3436
}) => {
3537
const { t } = useTranslation('application')
3638
const { id } = application ?? {}
@@ -110,6 +112,7 @@ const ApplicationDetailDrawer = ({
110112
canPreselect={canPreselect}
111113
handleDownload={handleDownload}
112114
isDownloading={isDownloading}
115+
hasValidatedApplications={hasValidatedApplications}
113116
/>
114117
</GridItem>
115118
</Grid>

web/components/Account/Application/Place/DetailDrawer/ApplicationPreselectButton.tsx

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ import { Application } from '~typings/api'
1414
const ApplicationPreselectButton = ({
1515
application,
1616
canPreselect,
17+
hasValidatedApplications,
1718
}: {
1819
application: Application
1920
canPreselect: boolean
21+
hasValidatedApplications: boolean
2022
}) => {
2123
const { t } = useTranslation('application')
2224
const { errorToast, successToast } = useToast()
@@ -82,32 +84,44 @@ const ApplicationPreselectButton = ({
8284
)}
8385

8486
{application?.status === null && (
85-
<Button
86-
isFullWidth
87-
borderRadius={0}
88-
leftIcon={<ApplicationSelected />}
89-
display="flex"
90-
justifyContent={'flex-start'}
91-
p={3}
92-
backgroundColor={'rgba(110, 174, 127, 0.25)'}
93-
color="black"
94-
_hover={{
95-
backgroundColor: 'rgba(110, 174, 127, 0.4)',
96-
}}
97-
_active={{
98-
backgroundColor: 'rgba(110, 174, 127, 0.6)',
99-
}}
100-
height="auto!important"
101-
onClick={() => {
102-
handleStatusChange('preselected')
103-
}}
104-
isDisabled={!canPreselect || application?.status === 'confirmed'}
105-
>
106-
<Text pl={1}>{t('place.detail.preselect')}</Text>
107-
</Button>
87+
<>
88+
<Button
89+
isFullWidth
90+
borderRadius={0}
91+
leftIcon={<ApplicationSelected />}
92+
display="flex"
93+
justifyContent={'flex-start'}
94+
p={3}
95+
backgroundColor={'rgba(110, 174, 127, 0.25)'}
96+
color="black"
97+
_hover={{
98+
backgroundColor: 'rgba(110, 174, 127, 0.4)',
99+
}}
100+
_active={{
101+
backgroundColor: 'rgba(110, 174, 127, 0.6)',
102+
}}
103+
height="auto!important"
104+
onClick={() => {
105+
handleStatusChange('preselected')
106+
}}
107+
isDisabled={
108+
!canPreselect ||
109+
application?.status === 'confirmed' ||
110+
hasValidatedApplications
111+
}
112+
>
113+
<Text pl={1}>{t('place.detail.preselect')}</Text>
114+
</Button>
115+
116+
{!canPreselect && (
117+
<Text pl={1} color="gray.500">
118+
{t('place.preselected_limit_reached')}
119+
</Text>
120+
)}
121+
</>
108122
)}
109123

110-
{application?.status === 'confirmed' && (
124+
{(application?.status === 'confirmed' || hasValidatedApplications) && (
111125
<Box color="gray.500">
112126
<Text as="span">{t('place.detail.confirmed_helper_start')}</Text>
113127
<Text

web/components/Account/Application/Place/DetailDrawer/ApplicationRightPanel.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ const ApplicationRightPanel = ({
1212
canPreselect,
1313
handleDownload,
1414
isDownloading,
15+
hasValidatedApplications,
1516
}: {
1617
application: Application
1718
canPreselect: boolean
1819
handleDownload: () => void
1920
isDownloading?: boolean
21+
hasValidatedApplications: boolean
2022
}) => {
2123
const { t } = useTranslation('application')
2224

@@ -48,6 +50,7 @@ const ApplicationRightPanel = ({
4850
<ApplicationPreselectButton
4951
application={application}
5052
canPreselect={canPreselect}
53+
hasValidatedApplications={hasValidatedApplications}
5154
/>
5255
</VStack>
5356
<ApplicationCountAlert applicationId={application.id} />

web/pages/api/pdfs/campaign/[id].tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ const buildApplicationsSpreadsheet = async (applications: Application[]) => {
6767
'Site web',
6868
'Espace - Candidature',
6969
'Créneau - Candidature',
70+
'Statut - Candidature',
7071
]
7172

7273
const headerRow = worksheet.addRow(headers)
@@ -114,6 +115,7 @@ const buildApplicationsSpreadsheet = async (applications: Application[]) => {
114115
? `${application.disponibility.espace.users_permissions_user.structureName} - ${application.espace.name}`
115116
: '-',
116117
range,
118+
application.status,
117119
])
118120

119121
row.eachCell((cell) => {
@@ -257,6 +259,7 @@ const buildSummarySpreadsheet = async (
257259
`Nom de l'espace`,
258260
`Créneaux proposés`,
259261
withAllApplications ? `Candidatures` : `Sélection finale`,
262+
`Référence candidature`,
260263
`Communication`,
261264
`Contact`,
262265
]
@@ -287,11 +290,16 @@ const buildSummarySpreadsheet = async (
287290
espaceCount++
288291
disponibilityCount++
289292

293+
const counterApplications = applicationsCounter[application.title]
294+
290295
const row = worksheet.addRow([
291296
place.structureName,
292297
espace.name,
293298
disponibility.range,
294-
application.name,
299+
`${application.name}${
300+
counterApplications > 1 ? ` - ${counterApplications}` : ''
301+
}`,
302+
`Ref. ${application.id}`,
295303
'',
296304
application.email,
297305
])
@@ -305,7 +313,9 @@ const buildSummarySpreadsheet = async (
305313
}
306314

307315
applicationCell.value = {
308-
text: application.name,
316+
text: `${application.name}${
317+
counterApplications > 1 ? ` - ${counterApplications}` : ''
318+
}`,
309319
hyperlink: getApplicationLink(application.id),
310320
}
311321

@@ -314,7 +324,7 @@ const buildSummarySpreadsheet = async (
314324
italic: true,
315325
}
316326

317-
if (applicationsCounter[application.title] > 1) {
327+
if (counterApplications > 1) {
318328
applicationCell.fill = {
319329
type: 'pattern',
320330
pattern: 'solid',

web/public/locales/fr/application.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
"no_places": "Aucun de vos espaces ne propose de créneau pour ce dispositif",
7474
"no_applications": "Aucune candidature déposée pour ce créneau pour le moment.",
7575
"no_applications_past": "Aucune candidature n'a été déposée pour ce créneau.",
76+
"preselected_limit_reached": "Vous avez atteint la limite de candidatures à pré-sélectionner, annuler la sélection de l'une de ces candidatures afin de pouvoir sélectionner celle-ci.",
7677
"detail": {
7778
"title": "Candidature n°{{id}}",
7879
"header": {

0 commit comments

Comments
 (0)