Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(service-portal): owner UI updates + paper signees #16067

Merged
merged 7 commits into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,24 @@ export const unSignList = gql`
}
}
`
export const addConstituency = gql`
mutation SignatureCollectionAddAreas(
$inputAdd: SignatureCollectionAddListsInput!
) {
signatureCollectionAddAreas(input: $inputAdd) {
success
reasons
}
}
`

export const uploadPaperSignature = gql`
mutation SignatureCollectionUploadPaperSignature(
$input: SignatureCollectionUploadPaperSignatureInput!
) {
signatureCollectionUploadPaperSignature(input: $input) {
success
reasons
}
}
`
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export const GetListSignatures = gql`
isDigital
valid
created
pageNumber
}
}
`
Expand All @@ -70,6 +71,7 @@ export const GetSignedList = gql`
collectionId
canUnsign
slug
signedDate
}
}
`
Expand Down Expand Up @@ -155,3 +157,9 @@ export const GetCurrentCollection = gql`
}
}
`

export const GetCanSign = gql`
query Query($input: SignatureCollectionCanSignInput!) {
signatureCollectionCanSign(input: $input)
}
`
17 changes: 17 additions & 0 deletions libs/service-portal/signature-collection/src/hooks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
GetSignedList,
GetListsForOwner,
GetCurrentCollection,
GetCanSign,
} from './graphql/queries'
import {
SignatureCollectionListBase,
Expand Down Expand Up @@ -147,3 +148,19 @@ export const useGetCurrentCollection = () => {
refetchCurrentCollection,
}
}

export const useGetCanSign = (signeeId: string, isValidId: boolean) => {
const { data: getCanSignData, loading: loadingCanSign } = useQuery(
GetCanSign,
{
variables: {
input: {
signeeNationalId: signeeId,
},
},
skip: !signeeId || signeeId.length !== 10 || !isValidId,
},
)
const canSign = getCanSignData?.signatureCollectionCanSign ?? false
return { canSign, loadingCanSign }
}
10 changes: 0 additions & 10 deletions libs/service-portal/signature-collection/src/lib/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,3 @@ export const CollectionType = {
Presidential: 'Forsetakosningar',
Parliamentary: 'Alþingiskosningar',
}

// will be fetched later on
export const constituencies = [
'Norðvesturkjördæmi',
'Norðausturkjördæmi',
'Suðurkjördæmi',
'Suðvesturkjördæmi',
'Reykjavíkurkjördæmi suður',
'Reykjavíkurkjördæmi norður',
]
113 changes: 73 additions & 40 deletions libs/service-portal/signature-collection/src/lib/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export const m = defineMessages({
},
copyLinkDescription: {
id: 'sp.signatureCollection:copyLinkDescription',
defaultMessage: 'Hér getur þú afritað hlekk á þitt framboð til að deila.',
defaultMessage: 'Hér getur þú afritað hlekk á þitt framboð til að deila',
description: '',
},
copyLinkSuccess: {
Expand Down Expand Up @@ -99,6 +99,11 @@ export const m = defineMessages({
defaultMessage: 'Meðmæli lesin inn',
description: '',
},
digitalSignature: {
id: 'sp.signatureCollection:digitalSignature',
defaultMessage: 'Skrifað undir: ',
description: '',
},
signatureIsInvalid: {
id: 'sp.signatureCollection:signatureIsInvalid',
defaultMessage: 'Ógilt meðmæli',
Expand Down Expand Up @@ -181,7 +186,12 @@ export const m = defineMessages({
},
cancelCollectionModalConfirmButton: {
id: 'sp.signatureCollection:modalConfirmButton',
defaultMessage: 'Já, hætta við söfnun meðmæla',
defaultMessage: 'Já, hætta við',
description: '',
},
cancelCollectionModalCancelButton: {
id: 'sp.signatureCollection:cancelCollectionModalCancelButton',
defaultMessage: 'Nei, hætta við',
description: '',
},
cancelCollectionModalToastError: {
Expand Down Expand Up @@ -256,6 +266,61 @@ export const m = defineMessages({
defaultMessage: 'Heimilisfang',
description: '',
},
paperSigneesHeader: {
id: 'sp.signatureCollection:paperSigneesHeader',
defaultMessage: 'Skrá meðmæli af blaði',
description: '',
},
paperSigneesClearButton: {
id: 'sp.signatureCollection:paperSigneesClearButton',
defaultMessage: 'Hreinsa',
description: '',
},
paperNumber: {
id: 'sp.signatureCollection:paperNumber',
defaultMessage: 'Blaðsíðunúmer',
description: '',
},
paperSigneeName: {
id: 'sp.signatureCollection:paperSigneeName',
defaultMessage: 'Nafn meðmælanda',
description: '',
},
signPaperSigneeButton: {
id: 'sp.signatureCollection:signPaperSigneeButton',
defaultMessage: 'Skrá meðmæli á lista',
description: '',
},
paperSigneeTypoTitle: {
id: 'sp.signatureCollection:paperSigneeTypoTitle',
defaultMessage: 'Kennitala ekki á réttu formi',
description: '',
},
paperSigneeTypoMessage: {
id: 'sp.signatureCollection:paperSigneeTypoMessage',
defaultMessage: 'Vinsamlegast athugið kennitöluna og reynið aftur',
description: '',
},
paperSigneeCantSignTitle: {
id: 'sp.signatureCollection:paperSigneeCantSignTitle',
defaultMessage: 'Ekki er hægt að skrá meðmæli',
description: '',
},
paperSigneeCantSignMessage: {
id: 'sp.signatureCollection:paperSigneeCantSign',
defaultMessage: 'Kennitala uppfyllir ekki skilyrði fyrir að skrá meðmæli',
description: '',
},
paperSigneeSuccess: {
id: 'sp.signatureCollection:paperSigneeSuccess',
defaultMessage: 'Meðmæli skráð',
description: '',
},
paperSigneeError: {
id: 'sp.signatureCollection:paperSigneeError',
defaultMessage: 'Ekki tókst að skrá meðmæli',
description: '',
},

/* Parliamentary */
parliamentaryElectionsTitle: {
Expand All @@ -279,16 +344,6 @@ export const m = defineMessages({
defaultMessage:
'Þjóðskrá Íslands hefur umsjón með gögnum um meðmælasöfnun.',
},
managers: {
id: 'sp.signatureCollection:managers',
defaultMessage: 'Ábyrgðaraðilar',
description: '',
},
addManager: {
id: 'sp.signatureCollection:addManager',
defaultMessage: 'Bæta við ábyrgðaraðila',
description: '',
},
supervisors: {
id: 'sp.signatureCollection:supervisors',
defaultMessage: 'Umsjónaraðilar',
Expand All @@ -299,11 +354,6 @@ export const m = defineMessages({
defaultMessage: 'Bæta við',
description: '',
},
addSupervisor: {
id: 'sp.signatureCollection:addSupervisor',
defaultMessage: 'Bæta við umsjónaraðila',
description: '',
},
personName: {
id: 'sp.signatureCollection:personName',
defaultMessage: 'Nafn',
Expand Down Expand Up @@ -340,31 +390,14 @@ export const m = defineMessages({
'Veldu viðeigandi kjördæmi sem þú vilt stofna meðmælendasöfnun í.',
description: '',
},
addConstituencyAlertInfo: {
id: 'sp.signatureCollection:addConstituencyAlertInfo',
defaultMessage:
'Athugið að skrá þarf viðeigandi ábyrgðar-/umsjónaraðila á yfirlitssíðu fyrir ný kjördæmi.',
description: '',
},
deleteManager: {
id: 'sp.signatureCollection:deleteManager',
defaultMessage: 'Eyða umsjónaraðila',
description: '',
},
deleteManagerDescription: {
id: 'sp.signatureCollection:deleteManagerDescription',
defaultMessage:
'Þú ert að fara að taka Nafna Nafnason af lista yfir umsjónaraðila. Ertu viss um að þú viljir halda áfram?',
description: '',
},
delete: {
id: 'sp.signatureCollection:delete',
defaultMessage: 'Eyða',
addConstituencySuccess: {
id: 'sp.signatureCollection:addConstituencySuccess',
defaultMessage: 'Kjördæmi bætt við',
description: '',
},
save: {
id: 'sp.signatureCollection:save',
defaultMessage: 'Vista',
addConstituencyError: {
id: 'sp.signatureCollection:addConstituencyError',
defaultMessage: 'Ekki tókst að bæta við kjördæmi',
description: '',
},
})
Original file line number Diff line number Diff line change
@@ -1,26 +1,63 @@
import { useState } from 'react'
import { Box, Button, Text, Checkbox } from '@island.is/island-ui/core'
import { Box, Button, Text, Checkbox, toast } from '@island.is/island-ui/core'
import { Modal } from '@island.is/service-portal/core'
import { useLocale } from '@island.is/localization'
import { m } from '../../../../lib/messages'
import { constituencies } from '../../../../lib/constants'
import { SignatureCollectionList } from '@island.is/api/schema'
import {
SignatureCollection,
SignatureCollectionArea,
SignatureCollectionList,
} from '@island.is/api/schema'
import { addConstituency } from '../../../../hooks/graphql/mutations'
import { useMutation } from '@apollo/client'

const AddConstituencyModal = ({
lists,
collection,
candidateId,
refetch,
}: {
lists: SignatureCollectionList[]
collection: SignatureCollection
candidateId: string
refetch: () => void
}) => {
const { formatMessage } = useLocale()
const listTitles = lists.map((l) => l.title)
const filteredConstituencies = constituencies.filter(
(c) => !listTitles.some((title) => title.includes(c)),
)
const currentConstituencies = lists.map(
(l) => l.area,
) as SignatureCollectionArea[]
const filteredConstituencies = collection.areas.filter(
(cc) => !currentConstituencies.some((c) => cc.name === c.name),
) as SignatureCollectionArea[]

const [modalIsOpen, setModalIsOpen] = useState(false)
const [selectedConstituencies, setSelectedConstituencies] = useState<
string[]
>([])

const [addNewConstituency, { loading }] = useMutation(addConstituency, {
onCompleted: () => {
setModalIsOpen(false)
refetch()
toast.success(formatMessage(m.addConstituencySuccess))
},
onError: () => {
toast.error(formatMessage(m.addConstituencyError))
},
})

const onAddConstituency = async () => {
addNewConstituency({
variables: {
inputAdd: {
collectionId: collection?.id,
areaIds: selectedConstituencies,
candidateId: candidateId,
},
},
})
}

return (
<Box>
<Button
Expand Down Expand Up @@ -50,30 +87,34 @@ const AddConstituencyModal = ({
{formatMessage(m.addConstituencyDescription)}
</Text>
{filteredConstituencies.map((constituency) => (
<Box key={constituency} marginBottom={3}>
<Box key={constituency.id} marginBottom={3}>
<Checkbox
large
backgroundColor="blue"
label={constituency}
value={constituency}
checked={selectedConstituencies.includes(constituency)}
label={constituency.name}
value={constituency.id}
checked={selectedConstituencies.includes(constituency.id)}
onChange={(e) => {
if (e.target.checked) {
setSelectedConstituencies([
...selectedConstituencies,
constituency,
constituency.id,
])
} else {
setSelectedConstituencies(
selectedConstituencies.filter((c) => c !== constituency),
selectedConstituencies.filter(
(c) => c !== constituency.id,
),
)
}
}}
/>
</Box>
))}
<Box display="flex" justifyContent="center" marginTop={7}>
<Button>{formatMessage(m.add)}</Button>
<Button onClick={() => onAddConstituency()} loading={loading}>
{formatMessage(m.add)}
</Button>
</Box>
</Box>
</Modal>
Expand Down
Loading