From eb0dd4790a4bdb5da630ad91f15ff57c3cb3ac13 Mon Sep 17 00:00:00 2001 From: kksteini <77672665+kksteini@users.noreply.github.com> Date: Wed, 16 Oct 2024 15:39:55 +0000 Subject: [PATCH 1/3] fix(application-plc): Detect user delegation type (#16429) * wip * wip * Small fixes * Conditioned * Fixed messages * Fixed conditionals --- .../application/core/src/lib/fieldBuilders.ts | 1 + .../parliamentary-list-creation.service.ts | 10 +++++++++ .../src/dataProviders/index.ts | 4 ++++ .../src/forms/Done.ts | 21 +++++++++++++++++++ .../src/forms/Prerequisites.ts | 6 ++++++ .../src/lib/createCollectionTemplate.ts | 2 ++ .../src/lib/messages.ts | 14 +++++++++++-- 7 files changed, 56 insertions(+), 2 deletions(-) diff --git a/libs/application/core/src/lib/fieldBuilders.ts b/libs/application/core/src/lib/fieldBuilders.ts index 626f55f49442..31b437fc0c32 100644 --- a/libs/application/core/src/lib/fieldBuilders.ts +++ b/libs/application/core/src/lib/fieldBuilders.ts @@ -524,6 +524,7 @@ export const buildMessageWithLinkButtonField = ( ): MessageWithLinkButtonField => { const { id, title, url, message, buttonTitle, marginBottom, marginTop } = data return { + ...extractCommonFields(data), children: undefined, id, title, diff --git a/libs/application/template-api-modules/src/lib/modules/templates/signature-collection/parliamentary-list-creation/parliamentary-list-creation.service.ts b/libs/application/template-api-modules/src/lib/modules/templates/signature-collection/parliamentary-list-creation/parliamentary-list-creation.service.ts index 57c075173b21..d7d0b55218e5 100644 --- a/libs/application/template-api-modules/src/lib/modules/templates/signature-collection/parliamentary-list-creation/parliamentary-list-creation.service.ts +++ b/libs/application/template-api-modules/src/lib/modules/templates/signature-collection/parliamentary-list-creation/parliamentary-list-creation.service.ts @@ -19,6 +19,7 @@ import { FetchError } from '@island.is/clients/middlewares' import { NationalRegistryClientService } from '@island.is/clients/national-registry-v2' import { isCompany } from 'kennitala' import { coreErrorMessages } from '@island.is/application/core' +import { AuthDelegationType } from '@island.is/shared/types' @Injectable() export class ParliamentaryListCreationService extends BaseTemplateApiService { @@ -84,6 +85,15 @@ export class ParliamentaryListCreationService extends BaseTemplateApiService { return identity } + async delegatedToCompany({ auth }: TemplateApiModuleActionProps) { + const data = { + delegatedToCompany: + auth.delegationType?.includes(AuthDelegationType.ProcurationHolder) ?? + false, + } + return data + } + async submit({ application, auth }: TemplateApiModuleActionProps) { const answers = application.answers as CreateListSchema const parliamentaryCollection = application.externalData diff --git a/libs/application/templates/signature-collection/parliamentary-list-creation/src/dataProviders/index.ts b/libs/application/templates/signature-collection/parliamentary-list-creation/src/dataProviders/index.ts index 5665ad04a8b3..2dae319a6674 100644 --- a/libs/application/templates/signature-collection/parliamentary-list-creation/src/dataProviders/index.ts +++ b/libs/application/templates/signature-collection/parliamentary-list-creation/src/dataProviders/index.ts @@ -14,3 +14,7 @@ export const ParliamentaryIdentityApi = defineTemplateApi({ action: 'parliamentaryIdentity', order: 2, }) + +export const IsDelegatedToCompanyApi = defineTemplateApi({ + action: 'delegatedToCompany', +}) diff --git a/libs/application/templates/signature-collection/parliamentary-list-creation/src/forms/Done.ts b/libs/application/templates/signature-collection/parliamentary-list-creation/src/forms/Done.ts index 267416ed6140..34e003e18e25 100644 --- a/libs/application/templates/signature-collection/parliamentary-list-creation/src/forms/Done.ts +++ b/libs/application/templates/signature-collection/parliamentary-list-creation/src/forms/Done.ts @@ -60,12 +60,33 @@ export const Done: Form = buildForm({ component: 'CopyLink', }), buildMessageWithLinkButtonField({ + condition: (_, externalData) => { + return !( + externalData?.delegatedToCompany.data as { + delegatedToCompany: boolean + } + ).delegatedToCompany + }, id: 'done.goToServicePortal', title: '', url: '/minarsidur/min-gogn/listar/althingis-medmaelasofnun', buttonTitle: m.linkFieldButtonTitle, message: m.linkFieldMessage, }), + buildMessageWithLinkButtonField({ + condition: (_, externalData) => { + return ( + externalData?.delegatedToCompany.data as { + delegatedToCompany: boolean + } + ).delegatedToCompany + }, + id: 'done.goToServicePortalCompany', + title: '', + url: '/minarsidur/fyrirtaeki/listar/althingis-medmaelasofnun', + buttonTitle: m.linkFieldButtonCompanyTitle, + message: m.linkFieldCompanyMessage, + }), ], }), ], diff --git a/libs/application/templates/signature-collection/parliamentary-list-creation/src/forms/Prerequisites.ts b/libs/application/templates/signature-collection/parliamentary-list-creation/src/forms/Prerequisites.ts index cb411d377eb0..d9cbe2b1ba6d 100644 --- a/libs/application/templates/signature-collection/parliamentary-list-creation/src/forms/Prerequisites.ts +++ b/libs/application/templates/signature-collection/parliamentary-list-creation/src/forms/Prerequisites.ts @@ -20,6 +20,7 @@ import { ParliamentaryCollectionApi, CandidateApi, ParliamentaryIdentityApi, + IsDelegatedToCompanyApi, } from '../dataProviders' export const Prerequisites: Form = buildForm({ @@ -90,6 +91,11 @@ export const Prerequisites: Form = buildForm({ title: '', subTitle: '', }), + buildDataProviderItem({ + provider: IsDelegatedToCompanyApi, + title: '', + subTitle: '', + }), ], }), ], diff --git a/libs/application/templates/signature-collection/parliamentary-list-creation/src/lib/createCollectionTemplate.ts b/libs/application/templates/signature-collection/parliamentary-list-creation/src/lib/createCollectionTemplate.ts index ded47fc406ed..08e4f6bfa5c6 100644 --- a/libs/application/templates/signature-collection/parliamentary-list-creation/src/lib/createCollectionTemplate.ts +++ b/libs/application/templates/signature-collection/parliamentary-list-creation/src/lib/createCollectionTemplate.ts @@ -21,6 +21,7 @@ import { ParliamentaryCollectionApi, CandidateApi, ParliamentaryIdentityApi, + IsDelegatedToCompanyApi, } from '../dataProviders' import { AuthDelegationType } from '@island.is/shared/types' @@ -81,6 +82,7 @@ const createListTemplate: ApplicationTemplate< CandidateApi, ParliamentaryCollectionApi, ParliamentaryIdentityApi, + IsDelegatedToCompanyApi, ], }, ], diff --git a/libs/application/templates/signature-collection/parliamentary-list-creation/src/lib/messages.ts b/libs/application/templates/signature-collection/parliamentary-list-creation/src/lib/messages.ts index 3752f9e7ce18..381f05e121a1 100644 --- a/libs/application/templates/signature-collection/parliamentary-list-creation/src/lib/messages.ts +++ b/libs/application/templates/signature-collection/parliamentary-list-creation/src/lib/messages.ts @@ -253,10 +253,20 @@ export const m = defineMessages({ linkFieldMessage: { id: 'plc.application:linkFieldMessage', defaultMessage: - 'Á mínum síðum sést hve mörgum meðmælum hefur verið safnað í hverjum landsfjórðungi.', + 'Á mínum síðum sést hve mörgum meðmælum hefur verið safnað í hverju kjördæmi.', + description: '', + }, + linkFieldButtonCompanyTitle: { + id: 'plc.application:linkFieldButtonCompanyTitle', + defaultMessage: 'Mínar síður (fyrirtæki)', + description: '', + }, + linkFieldCompanyMessage: { + id: 'plc.application:linkFieldCompanyMessage', + defaultMessage: + 'Á mínum síðum fyrirtækja sést hve mörgum meðmælum hefur verið safnað í hverju kjördæmi.', description: '', }, - /* Action Card logs */ logListCreated: { id: 'plc.application:logListCreated', From c612914bf522e24914894915da511882a2a76069 Mon Sep 17 00:00:00 2001 From: Alex Diljar Birkisbur Hellsing <42963845+alexdiljar@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:07:46 +0000 Subject: [PATCH 2/3] feat(signature-collection): user not found handling (#16431) * feat(signature=collection): user not found handling * fix: text update * chore: nx format:write update dirty files --------- Co-authored-by: andes-it Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .../src/lib/signatureCollection.service.ts | 9 +- .../parliamentary-list-signing.service.ts | 59 +++++---- .../src/lib/errors.ts | 18 ++- .../src/lib/signature-collection.service.ts | 123 +++++++++--------- .../signature-collection/src/hooks/index.ts | 8 +- .../signature-collection/src/lib/messages.ts | 12 ++ .../src/screens/shared/SigneeView/index.tsx | 19 ++- 7 files changed, 144 insertions(+), 104 deletions(-) diff --git a/libs/api/domains/signature-collection/src/lib/signatureCollection.service.ts b/libs/api/domains/signature-collection/src/lib/signatureCollection.service.ts index 7ef0f10a9e4b..b714b5f2d10e 100644 --- a/libs/api/domains/signature-collection/src/lib/signatureCollection.service.ts +++ b/libs/api/domains/signature-collection/src/lib/signatureCollection.service.ts @@ -1,8 +1,4 @@ -import { - Injectable, - NotFoundException, - UnauthorizedException, -} from '@nestjs/common' +import { Injectable, NotFoundException } from '@nestjs/common' import { SignatureCollectionSuccess } from './models/success.model' import { SignatureCollection } from './models/collection.model' import { @@ -19,11 +15,8 @@ import { User } from '@island.is/auth-nest-tools' import { SignatureCollectionCancelListsInput } from './dto/cencelLists.input' import { SignatureCollectionIdInput } from './dto/collectionId.input' import { SignatureCollectionAddListsInput } from './dto/addLists.input' -import { SignatureCollectionOwnerInput } from './dto/owner.input' -import { SignatureCollectionListBulkUploadInput } from './dto/bulkUpload.input' import { SignatureCollectionUploadPaperSignatureInput } from './dto/uploadPaperSignature.input' import { SignatureCollectionCanSignFromPaperInput } from './dto/canSignFromPaper.input' -import { SignatureCollectionCandidateIdInput } from './dto/candidateId.input' import { SignatureCollectionCollector } from './models/collector.model' @Injectable() diff --git a/libs/application/template-api-modules/src/lib/modules/templates/signature-collection/parliamentary-list-signing/parliamentary-list-signing.service.ts b/libs/application/template-api-modules/src/lib/modules/templates/signature-collection/parliamentary-list-signing/parliamentary-list-signing.service.ts index 56a9f5dafadd..45116709c2fb 100644 --- a/libs/application/template-api-modules/src/lib/modules/templates/signature-collection/parliamentary-list-signing/parliamentary-list-signing.service.ts +++ b/libs/application/template-api-modules/src/lib/modules/templates/signature-collection/parliamentary-list-signing/parliamentary-list-signing.service.ts @@ -36,34 +36,41 @@ export class ParliamentaryListSigningService extends BaseTemplateApiService { } async canSign({ auth }: TemplateApiModuleActionProps) { - const signee = await this.signatureCollectionClientService.getSignee(auth) - const { canSign, canSignInfo } = signee - if (canSign) { - return signee - } - if (!canSignInfo) { - // canCreateInfo will always be defined if canCreate is false but we need to check for typescript + try { + const signee = await this.signatureCollectionClientService.getSignee(auth) + const { canSign, canSignInfo } = signee + if (canSign) { + return signee + } + if (!canSignInfo) { + // canCreateInfo will always be defined if canCreate is false but we need to check for typescript + throw new TemplateApiError(errorMessages.deniedByService, 400) + } + const errors: ProviderErrorReason[] = canSignInfo?.map((key) => { + switch (key) { + case ReasonKey.UnderAge: + return errorMessages.age + case ReasonKey.NoCitizenship: + return errorMessages.citizenship + case ReasonKey.NotISResidency: + return errorMessages.residency + case ReasonKey.CollectionNotOpen: + return errorMessages.active + case ReasonKey.AlreadySigned: + return errorMessages.signer + case ReasonKey.noInvalidSignature: + return errorMessages.invalidSignature + default: + return errorMessages.deniedByService + } + }) + throw new TemplateApiError(errors, 405) + } catch (error) { + if (error.status === 404) { + throw new TemplateApiError(errorMessages.singeeNotFound, 404) + } throw new TemplateApiError(errorMessages.deniedByService, 400) } - const errors: ProviderErrorReason[] = canSignInfo?.map((key) => { - switch (key) { - case ReasonKey.UnderAge: - return errorMessages.age - case ReasonKey.NoCitizenship: - return errorMessages.citizenship - case ReasonKey.NotISResidency: - return errorMessages.residency - case ReasonKey.CollectionNotOpen: - return errorMessages.active - case ReasonKey.AlreadySigned: - return errorMessages.signer - case ReasonKey.noInvalidSignature: - return errorMessages.invalidSignature - default: - return errorMessages.deniedByService - } - }) - throw new TemplateApiError(errors, 405) } async getList({ auth, application }: TemplateApiModuleActionProps) { diff --git a/libs/application/templates/signature-collection/parliamentary-list-signing/src/lib/errors.ts b/libs/application/templates/signature-collection/parliamentary-list-signing/src/lib/errors.ts index 7d5a583c44d7..365bee598776 100644 --- a/libs/application/templates/signature-collection/parliamentary-list-signing/src/lib/errors.ts +++ b/libs/application/templates/signature-collection/parliamentary-list-signing/src/lib/errors.ts @@ -53,7 +53,7 @@ export const errorMessages = { active: defineMessages({ title: { id: 'pls.application:error.active.title', - defaultMessage: 'Ekki er hægt að mæla með framboði.', + defaultMessage: 'Ekki er hægt að mæla með framboði', description: '', }, summary: { @@ -101,7 +101,7 @@ export const errorMessages = { maxReached: defineMessages({ title: { id: 'pls.application:error.maxReached.title', - defaultMessage: 'Framboð hefur náð hámarksfjölda meðmæla.', + defaultMessage: 'Framboð hefur náð hámarksfjölda meðmæla', description: '', }, summary: { @@ -122,4 +122,18 @@ export const errorMessages = { description: '', }, }), + singeeNotFound: defineMessages({ + title: { + id: 'pls.application:error.singeeNotFound.title', + defaultMessage: + 'Notandi uppfyllir ekki skilyrði til að framkvæma þessa aðgerð', + description: '', + }, + summary: { + id: 'pls.application:error.singeeNotFound.summary', + defaultMessage: + 'Hægt er að hafa samband við Þjóðskrá fyrir nánari upplýsingar.', + description: '', + }, + }), } diff --git a/libs/clients/signature-collection/src/lib/signature-collection.service.ts b/libs/clients/signature-collection/src/lib/signature-collection.service.ts index ba3a8705de67..8e74cf8d434c 100644 --- a/libs/clients/signature-collection/src/lib/signature-collection.service.ts +++ b/libs/clients/signature-collection/src/lib/signature-collection.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common' +import { Injectable, NotFoundException } from '@nestjs/common' import { FrambodApi, FrambodDTO, @@ -10,19 +10,12 @@ import { GetListInput, CreateListInput, ReasonKey, - CanCreateInput, CanSignInput, CreateParliamentaryCandidacyInput, AddListsInput, } from './signature-collection.types' import { Collection } from './types/collection.dto' -import { - List, - SignedList, - getSlug, - mapList, - mapListBase, -} from './types/list.dto' +import { List, SignedList, getSlug, mapListBase } from './types/list.dto' import { Signature, mapSignature } from './types/signature.dto' import { Signee } from './types/user.dto' import { Success, mapReasons } from './types/success.dto' @@ -432,62 +425,68 @@ export class SignatureCollectionClientService { async getSignee(auth: User, nationalId?: string): Promise { const collection = await this.currentCollection() const { id, isPresidential, isActive, areas } = collection - const user = await this.getApiWithAuth( - this.collectionsApi, - auth, - ).medmaelasofnunIDEinsInfoKennitalaGet({ - kennitala: nationalId ?? auth.nationalId, - iD: parseInt(id), - }) - - const candidate = user.frambod ? mapCandidate(user.frambod) : undefined - const activeSignature = user.medmaeli?.find((signature) => signature.valid) - const signatures = user.medmaeli?.map((signature) => - mapSignature(signature), - ) - const ownedLists = - user.medmaelalistar && candidate - ? user.medmaelalistar?.map((list) => mapListBase(list)) - : [] - - const { success: canCreate, reasons: canCreateInfo } = - await this.sharedService.canCreate({ - requirementsMet: user.maFrambod, - canCreateInfo: user.maFrambodInfo, - ownedLists, - isPresidential, - isActive, - areas, + try { + const user = await this.getApiWithAuth( + this.collectionsApi, + auth, + ).medmaelasofnunIDEinsInfoKennitalaGet({ + kennitala: nationalId ?? auth.nationalId, + iD: parseInt(id), }) - const { success: canSign, reasons: canSignInfo } = await this.canSign({ - requirementsMet: user.maKjosa, - canSignInfo: user.maKjosaInfo, - activeSignature, - signatures, - }) + const candidate = user.frambod ? mapCandidate(user.frambod) : undefined + const activeSignature = user.medmaeli?.find( + (signature) => signature.valid, + ) + const signatures = user.medmaeli?.map((signature) => + mapSignature(signature), + ) + const ownedLists = + user.medmaelalistar && candidate + ? user.medmaelalistar?.map((list) => mapListBase(list)) + : [] + + const { success: canCreate, reasons: canCreateInfo } = + await this.sharedService.canCreate({ + requirementsMet: user.maFrambod, + canCreateInfo: user.maFrambodInfo, + ownedLists, + isPresidential, + isActive, + areas, + }) + + const { success: canSign, reasons: canSignInfo } = await this.canSign({ + requirementsMet: user.maKjosa, + canSignInfo: user.maKjosaInfo, + activeSignature, + signatures, + }) - return { - nationalId: user.kennitala ?? '', - name: user.nafn ?? '', - electionName: user.kosningNafn ?? '', - canSign, - canSignInfo, - canCreate, - canCreateInfo, - area: user.svaedi && { - id: user.svaedi?.id?.toString() ?? '', - name: user.svaedi?.nafn?.toString() ?? '', - }, - signatures, - ownedLists, - isOwner: user.medmaelalistar ? user.medmaelalistar?.length > 0 : false, - candidate, - hasPartyBallotLetter: !!user.maFrambodInfo?.medListabokstaf, - partyBallotLetterInfo: { - letter: user.listabokstafur?.stafur ?? '', - name: user.listabokstafur?.frambodNafn ?? '', - }, + return { + nationalId: user.kennitala ?? '', + name: user.nafn ?? '', + electionName: user.kosningNafn ?? '', + canSign, + canSignInfo, + canCreate, + canCreateInfo, + area: user.svaedi && { + id: user.svaedi?.id?.toString() ?? '', + name: user.svaedi?.nafn?.toString() ?? '', + }, + signatures, + ownedLists, + isOwner: user.medmaelalistar ? user.medmaelalistar?.length > 0 : false, + candidate, + hasPartyBallotLetter: !!user.maFrambodInfo?.medListabokstaf, + partyBallotLetterInfo: { + letter: user.listabokstafur?.stafur ?? '', + name: user.listabokstafur?.frambodNafn ?? '', + }, + } + } catch (e) { + throw new NotFoundException('User not found') } } diff --git a/libs/service-portal/signature-collection/src/hooks/index.ts b/libs/service-portal/signature-collection/src/hooks/index.ts index 5dc621198d87..1077cd4d9a18 100644 --- a/libs/service-portal/signature-collection/src/hooks/index.ts +++ b/libs/service-portal/signature-collection/src/hooks/index.ts @@ -79,6 +79,7 @@ export const useGetListsForUser = (collectionId?: string) => { data: getListsForUser, loading: loadingUserLists, refetch: refetchListsForUser, + error: getListsForUserError, } = useQuery<{ signatureCollectionListsForUser?: SignatureCollectionListBase[] }>(GetListsForUser, { @@ -93,7 +94,12 @@ export const useGetListsForUser = (collectionId?: string) => { const listsForUser = (getListsForUser?.signatureCollectionListsForUser as SignatureCollectionListBase[]) ?? [] - return { listsForUser, loadingUserLists, refetchListsForUser } + return { + listsForUser, + loadingUserLists, + refetchListsForUser, + getListsForUserError, + } } export const useGetListsForOwner = (collectionId: string) => { diff --git a/libs/service-portal/signature-collection/src/lib/messages.ts b/libs/service-portal/signature-collection/src/lib/messages.ts index 9863b8441aad..57a0739a439a 100644 --- a/libs/service-portal/signature-collection/src/lib/messages.ts +++ b/libs/service-portal/signature-collection/src/lib/messages.ts @@ -116,6 +116,18 @@ export const m = defineMessages({ }, /* Signee View */ + noUserFound: { + id: 'sp.signatureCollection:noUserFound', + defaultMessage: + 'Þú uppfyllir ekki skilyrði til að taka þátt í meðmælasöfnunum', + description: '', + }, + noUserFoundDescription: { + id: 'sp.signatureCollection:noUserFoundDescription#markdown', + defaultMessage: + 'Ef þú telur þessar upplýsingar rangar, vinsamlegast hafðu samband við Þjóðskrá Íslands.', + description: '', + }, noCollectionIsActive: { id: 'sp.signatureCollection:noCollectionIsActive', defaultMessage: 'Engin söfnun í gangi', diff --git a/libs/service-portal/signature-collection/src/screens/shared/SigneeView/index.tsx b/libs/service-portal/signature-collection/src/screens/shared/SigneeView/index.tsx index 9763a47368b3..55678b091a2f 100644 --- a/libs/service-portal/signature-collection/src/screens/shared/SigneeView/index.tsx +++ b/libs/service-portal/signature-collection/src/screens/shared/SigneeView/index.tsx @@ -23,15 +23,23 @@ const SigneeView = ({ const { userInfo: user } = useAuth() const { formatMessage } = useLocale() const { signedLists, loadingSignedLists } = useGetSignedList() - const { listsForUser, loadingUserLists } = useGetListsForUser( - currentCollection?.id, - ) + const { listsForUser, loadingUserLists, getListsForUserError } = + useGetListsForUser(currentCollection?.id) + + if (getListsForUserError !== undefined) { + return ( + + ) + } return ( {!user?.profile.actor && !loadingSignedLists && !loadingUserLists ? ( - {listsForUser.length === 0 && signedLists.length === 0 && ( + {listsForUser?.length === 0 && signedLists?.length === 0 && ( )} + {/* Signed list */} {/* Other available lists */} - {listsForUser.length > 0 && ( + {listsForUser?.length > 0 && ( {formatMessage(m.mySigneeListsByAreaHeader)} From b9dcef3e2d6667edbc96f90b234702d8efd64a6c Mon Sep 17 00:00:00 2001 From: albinagu <47886428+albinagu@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:24:41 +0000 Subject: [PATCH 3/3] fix(signature-collection): refetch is owner 16.10 (#16432) * fix(signature-collection): refetch is owner after remove last list * tw * tweak * tw * tw --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .../signature-collection/src/lib/messages.ts | 11 ++++++++ .../screens/Parliamentary/OwnerView/index.tsx | 28 +++++++++++++------ .../src/screens/Parliamentary/index.tsx | 3 +- .../src/screens/shared/SignedList/index.tsx | 6 ---- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/libs/service-portal/signature-collection/src/lib/messages.ts b/libs/service-portal/signature-collection/src/lib/messages.ts index 57a0739a439a..cb15d7eb79f4 100644 --- a/libs/service-portal/signature-collection/src/lib/messages.ts +++ b/libs/service-portal/signature-collection/src/lib/messages.ts @@ -202,11 +202,22 @@ export const m = defineMessages({ defaultMessage: 'Þú ert að fara að hætta við söfnun meðmæla. Ertu viss?', description: '', }, + cancelCollectionModalMessageLastList: { + id: 'sp.signatureCollection:cancelCollectionModalMessageLastList', + defaultMessage: + 'Þú ert að fara að hætta við söfnun meðmæla í þessu kjördæmi. Þau meðmæli sem þú hefur nú þegar safnað munu eyðast. Athugaðu að með því að hætta við síðustu söfnun framboðsins verður framboðinu einnig eytt. Ertu viss um að þú viljir hætta við söfnun og eyða framboði?', + description: '', + }, cancelCollectionModalConfirmButton: { id: 'sp.signatureCollection:modalConfirmButton', defaultMessage: 'Já, hætta við', description: '', }, + cancelCollectionModalConfirmButtonLastList: { + id: 'sp.signatureCollection:cancelCollectionModalConfirmButtonLastList', + defaultMessage: 'Já, hætta við söfnun of eyða framboði', + description: '', + }, cancelCollectionModalCancelButton: { id: 'sp.signatureCollection:cancelCollectionModalCancelButton', defaultMessage: 'Nei, hætta við', diff --git a/libs/service-portal/signature-collection/src/screens/Parliamentary/OwnerView/index.tsx b/libs/service-portal/signature-collection/src/screens/Parliamentary/OwnerView/index.tsx index 6d835769fab0..15553cd19fdd 100644 --- a/libs/service-portal/signature-collection/src/screens/Parliamentary/OwnerView/index.tsx +++ b/libs/service-portal/signature-collection/src/screens/Parliamentary/OwnerView/index.tsx @@ -33,10 +33,12 @@ import { formatNationalId } from '@island.is/portals/core' import SignedList from '../../shared/SignedList' const OwnerView = ({ + refetchIsOwner, currentCollection, // list holder is an individual who owns a list or has a delegation of type Procuration Holder isListHolder, }: { + refetchIsOwner: () => void currentCollection: SignatureCollection isListHolder: boolean }) => { @@ -54,6 +56,7 @@ const OwnerView = ({ onCompleted: () => { toast.success(formatMessage(m.cancelCollectionModalToastSuccess)) refetchListsForOwner() + refetchIsOwner() }, onError: () => { toast.error(formatMessage(m.cancelCollectionModalToastError)) @@ -75,10 +78,13 @@ const OwnerView = ({ return ( - - - - + + {formatMessage(m.myListsDescription) + ' '} @@ -164,7 +174,9 @@ const OwnerView = ({ onCancelCollection(list.id) }} buttonTextConfirm={formatMessage( - m.cancelCollectionModalConfirmButton, + listsForOwner.length === 1 + ? m.cancelCollectionModalConfirmButtonLastList + : m.cancelCollectionModalConfirmButton, )} buttonPropsConfirm={{ variant: 'primary', diff --git a/libs/service-portal/signature-collection/src/screens/Parliamentary/index.tsx b/libs/service-portal/signature-collection/src/screens/Parliamentary/index.tsx index 869a33619124..ac82acb3ea19 100644 --- a/libs/service-portal/signature-collection/src/screens/Parliamentary/index.tsx +++ b/libs/service-portal/signature-collection/src/screens/Parliamentary/index.tsx @@ -16,7 +16,7 @@ const SignatureListsParliamentary = () => { useNamespaces('sp.signatureCollection') const { formatMessage } = useLocale() - const { isOwner, loadingIsOwner } = useIsOwner() + const { isOwner, loadingIsOwner, refetchIsOwner } = useIsOwner() const userInfo = useUserInfo() const { currentCollection, loadingCurrentCollection } = useGetCurrentCollection() @@ -34,6 +34,7 @@ const SignatureListsParliamentary = () => { {!currentCollection?.isPresidential ? ( isOwner.success ? ( - {loadingSignedLists && ( - - - - )} {!loadingSignedLists && !!signedLists?.length && (