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

features: Permits/WorkPermit, Employment/IncomeTax, Employment/WorkContract #78

Conversation

LauriGofore
Copy link
Collaborator

@LauriGofore LauriGofore commented Nov 10, 2023

Uudet kausityöntekijäkokelin datatuotteet ja leiskausmuutokset.

UI:

  • Muutettu jaettua Page komponenttia siten, että se voi vastaanottaa propseina sideNavItems - jos määriteltynä, renderöi sivuleiskaukseen sivunavigaation
  • Sivunavigaatio voi olla kahta eri tyyppiä, multi (suomifi-ui-components SideNavigation, max. 3 level deep) tai single (suomifi-ui-components ServiceNavigation, 1-level deep)
  • Muutettu Profile sivu ja sen alasivut käyttämään sivunavigaatiota.
  • Sivut uusille datatuotteille: /profile/permits, /profile/employment/work-contracts, /profile/employment/income-tax
  • Aiemmin af-mvp puolelle pelkästään luotu sivunavigaatio poistettu (käytettiin info sivulla missä TOS yms.), käytetään nyt jaettua Page komponentin sivunavigaatiota. Näyttää samalta.

Consent:

  • Inspiraationa ja mallina käytetty a-to-f-demon totetusta.
  • Datatuotteen consent-tsekkailu (apps/af-shared/src/lib/api/services/consent.ts) tuotu a-to-f-demosovelluksesta pienin muutoksin:
    • Palauttelee ConsentSituation[] listan, ei ainoastaan yhtä consenttia. Mahdollistetaan useamman hakeminen kerralla.
  • Lisätty useDataSourceConsent hookki, jota käytetään datatuotteen consentin tarkistamiseen, palauttelee ConsentSituation tilan ylläolevasta serviisistä (haetaan listana, mutta hookki palauttelee yhden kappaleen).
    • Tässä sellainen nippelikikka, että jos consent status on consentGranted, tämä huukki/query refetchaa statuksen aina kun ikkuna focusoituu - tän avulla jos käydään revoukkaamassa consent portaalissa ja tullaan takas, ei tarvita manuaalista page refreshia
  • useMultipleDataSourceConsents, sama kun edellä, mutta voidaan hakea useat consentit kerralla. Jos vaikka halutaan näyttää consenttien tila jossain koostetusti, ei välttis käyttöä tälle.
  • apps/af-features/src/pages/profile/components/consent-sentry.tsx, "UI-suoja" jolla esitetään käyttäjälle, että consentti täytyy antaa, ennen kun tietoja voidaan hakea/näyttää.

Uudet datatuotteet (WorkPermits, WorkContracts, IncomeTax):

  • Jokaiselle uudet hookit (react-query), saman tyyppinen toteutus kun aikaisemmissa tuotteissa. Voidaan hakea vain, jos consentin tila tarkistettu (useDataSourceConsent) ja consentti ok eli ConsentSituation.consentStatus === 'consentGranted'
  • Consentin tila tarkistetaan tässä toteutuksessa siis joka kerta kunkin tuotteen sivulle siirryttäessä, ei storetella mitenkään (muuten kuin react-queryn tilassa, kutsu tehdään kuitenkin joka tapauksessa)

Muuta:

  • useClearQueryParams -hookki, käytetään juuressa eli app.page.tsx - tarkistelee löytyykö queryParamseista clear = true, ja jos löytyy, kliinaa kaikki paramsit. Tämä liittyi siihen consent-portaalista takaisin ohjaamiseen (apps/af-shared/src/lib/api/services/consent.ts - directToConsentService).
  • Basic testicaset:
    • permits.page.test.tsx
    • income-tax.page.test.tsx (wip)
    • work-contracts.page.test.tsx (wip)
  • data-hookkien "error formatointi" yhdistelty samanlaiseksi niiltä osin, missä error formatointia käytetään (viety util funkkari jaettuun moduuliin packages/af-shared/src/lib/hooks/utils.ts, 3d0685b, 578afd8, 9a6e058)

@LauriGofore LauriGofore changed the title WIP: integrate page side navigation into Page component: render layou… features: Permits, Employment Contracts, Tax Nov 17, 2023
import CustomHeading from '@shared/components/ui/custom-heading';
import CustomLink from '@shared/components/ui/custom-link';

const SERVICE = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tämä consent-sentry aika kätevä! Nämä palvelujen nimet/käännökset voisi ehkä määritellä siten että tulisi propsien mukanan tähän. Eli sen sijaan että tässä komponentissa määritellään mitä sorsia on mahdollista luvittaa, tulisi se tieto sieltä jostain keskitetystä kohtaa missä muutkin konsenttimäärittelyt, eli läheltä missä on toi enum ConsentDataSource esim.

Copy link
Contributor

@lsipii lsipii Dec 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yksi tapa olisi muuttaa ConsentDataSource enumista objektiksi jossa mukana tarvittavat tunnisteet ja sit nimet, mutta se vaatisi ehkä vähän logiikan muuntelua siellä missä tarvitaan enumin viitteitä.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Toki tavallaan kyl se käy järkeen että tulostettava teksti on lähellä templatea, mutta ehkä noi nimet ovat vähän sellaisia propertyjä kuitenni.

Copy link
Collaborator Author

@LauriGofore LauriGofore Dec 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tästä ajatuksena kokeilin ihan huvikseen vähän kikkailla type-gymnastiikan kautta jotain:

export enum ConsentDataSource {
  WORK_PERMIT = 'dpp://virtual_finland:development@testbed.fi/Permits/WorkPermit_v0.1',
  WORK_CONTRACT = '',
  INCOME_TAX = 'dpp://vero_demo@testbed.fi/Employment/IncomeTax_v0.2',
}

export enum ConsentDataService {
  'dpp://virtual_finland:development@testbed.fi/Permits/WorkPermit_v0.1' = 'Finnish Immigration Service (Migri)',
  '' = '',
  'dpp://vero_demo@testbed.fi/Employment/IncomeTax_v0.2' = 'Finnish Tax Administration (Vero)',
}

type _ensure_keyof_ConsentDataService_equals_ConsentDataSource =
  (typeof ConsentDataService)[ConsentDataSource];

missä _ensure_keyof_ConsentDataService_equals_ConsentDataSource -tyypin tarkoitus on pelkästään heittää compile-erroria, jos avaimet ei mätsää - TS tosin varoittelee, että tyyppiä ei käytetä missään ja se olisi syytä poistaa (vaikka _ prefix nimessä, koitin myös eslintin kautta säätää et varo häviäisi mutta en saanut pois, enkä .tsconfiggiin halunnut koskea).

propsina voisi antaa silloin: ConsentDataService[ConsentDataSource.WORK_PERMIT]

Ihan vaan sellaisena sivujuoneena, että enpä ole aikaisemmin hoksannut että tällä tavalla vois tehdä kanssa type-guardia koodiin, jos halutaan vaikka että enumien value/aivaimet mätsää. 🧐 Mutta ehkä karkaa pienen asian takia jo vähän käsistä, etenkin kun tuon ConsentDataSource enumi itessään vähän heikohko, jos ajattelis että tuo sourcen versio olisi jotenkin dynaaminen ja vaihdettavissa. Tuon serviisin nimen voisi yhtä hyvin tässä kohtaa antaa vain tyhmänä propsina komponentille, joka on yhtä hyvä/huono vs. nykyinen. Varmaan tuo objekti-lähestymistapa voisi olla hyvä ratkaisu isommassa toteutuksessa. :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TS tosin varoittelee, että tyyppiä ei käytetä missään ja se olisi syytä poistaa

Hm niin jos tekisi tuolla tavoin jännän tyyppivartijan niin siltä ei kai voi varoituksia disabloida jos haluaa että vartiointi toimii. Kun jännällä osastolla liikutaan niin menisihän se että ihan exporttaa tyypin, silloinhan ts ei enää tiedä käytetäänkö tyyppiä jossain vai ei. Enumi taitaa olla sillain js:n primitiivityypiiä että ei monimutkaiset rakennelmat oikein typescriptimaailmaan sujahda nätisti, sit taas jos siitä tekisi const-objektin jolla vastaava "api" eli voi käytellä kuin olisi enumi niin se pitäisi kuitenkin erikseen tyypittää ts-magicka/gymastica -syntaksilla vähän hankalasti. Ja siinäpä mennään jo aika sivujuonteille tosiaan :)

This comment has been minimized.

…-ja-kokeillaan-miten-hyvaksytty-kausityolupa-naytettaisiin-mvp-dev-ymparistossa
…alert styling + remove grant permission part from profile entry, change the texts a little bit

This comment has been minimized.

This comment has been minimized.

Copy link

pulumi bot commented Jan 25, 2024

🍹 The Update for virtualfinland/virtual-finland/staging was successful.

Resource Changes

    Name                                                                             Type                              Operation
+   _next/static/chunks/webpack-dd8799696f8e29a6.js                                  aws:s3/bucketObject:BucketObject  create
-   _next/static/chunks/pages/company/search-193a9836fce362a3.js                     aws:s3/bucketObject:BucketObject  delete
~   index.html                                                                       aws:s3/bucketObject:BucketObject  update
~   profile/employment/income-tax.html                                               aws:s3/bucketObject:BucketObject  update
~   company/search.html                                                              aws:s3/bucketObject:BucketObject  update
~   404.html                                                                         aws:s3/bucketObject:BucketObject  update
+   _next/static/cSJiGi8v988bBZ_HC4Tc1/_ssgManifest.js                               aws:s3/bucketObject:BucketObject  create
~   profile/employment/work-contracts.html                                           aws:s3/bucketObject:BucketObject  update
+   _next/static/chunks/pages/profile-590190f3a469e6ba.js                            aws:s3/bucketObject:BucketObject  create
~   company/edit/[nationalIdentifier]/signatory-rights.html                          aws:s3/bucketObject:BucketObject  update
~   profile/personal-profile.html                                                    aws:s3/bucketObject:BucketObject  update
~   company/establishment/signatory-rights.html                                      aws:s3/bucketObject:BucketObject  update
+   _next/static/cSJiGi8v988bBZ_HC4Tc1/_buildManifest.js                             aws:s3/bucketObject:BucketObject  create
+   _next/static/chunks/pages/company/search-b825716db20423c6.js                     aws:s3/bucketObject:BucketObject  create
-   _next/static/css/f46bfe87cd796d16.css                                            aws:s3/bucketObject:BucketObject  delete
+   _next/static/chunks/7336-fc26a5b8ecc8ebc3.js                                     aws:s3/bucketObject:BucketObject  create
-   _next/static/EDJf5VvDtjda93n5pYdr1/_ssgManifest.js                               aws:s3/bucketObject:BucketObject  delete
~   company.html                                                                     aws:s3/bucketObject:BucketObject  update
+   _next/static/css/8bdd71bcdd1eca63.css                                            aws:s3/bucketObject:BucketObject  create
-   _next/static/EDJf5VvDtjda93n5pYdr1/_buildManifest.js                             aws:s3/bucketObject:BucketObject  delete
~   company/establishment/beneficial-owners.html                                     aws:s3/bucketObject:BucketObject  update
~   profile/permits.html                                                             aws:s3/bucketObject:BucketObject  update
-   _next/static/chunks/pages/profile-546e83648a20bb49.js                            aws:s3/bucketObject:BucketObject  delete
~   company/establishment.html                                                       aws:s3/bucketObject:BucketObject  update
~   profile/employment.html                                                          aws:s3/bucketObject:BucketObject  update
~   auth.html                                                                        aws:s3/bucketObject:BucketObject  update
~   company/establishment/details.html                                               aws:s3/bucketObject:BucketObject  update
~   profile/working-profile.html                                                     aws:s3/bucketObject:BucketObject  update
-   _next/static/chunks/pages/profile/employment/work-contracts-0001b215d5d3c30f.js  aws:s3/bucketObject:BucketObject  delete
+   _next/static/chunks/pages/profile/employment/work-contracts-13ba7fa99600381f.js  aws:s3/bucketObject:BucketObject  create
~   company/edit.html                                                                aws:s3/bucketObject:BucketObject  update
~   profile.html                                                                     aws:s3/bucketObject:BucketObject  update
~   company/edit/[nationalIdentifier]/beneficial-owners.html                         aws:s3/bucketObject:BucketObject  update
-   _next/static/chunks/webpack-497978463cbf13c8.js                                  aws:s3/bucketObject:BucketObject  delete
-   _next/static/chunks/7336-0f55eb1136a494c5.js                                     aws:s3/bucketObject:BucketObject  delete
~   company/edit/[nationalIdentifier].html                                           aws:s3/bucketObject:BucketObject  update
~   company/edit/[nationalIdentifier]/details.html                                   aws:s3/bucketObject:BucketObject  update

Copy link
Contributor

@lsipii lsipii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tämä taisi olla valmista syötäväksi ja jo käytössä staging-tasolla!

@LauriGofore
Copy link
Collaborator Author

Tämä taisi olla valmista syötäväksi ja jo käytössä staging-tasolla!

Kylläpä vain!

@LauriGofore LauriGofore merged commit fc69487 into main Jan 30, 2024
2 checks passed
@LauriGofore LauriGofore deleted the VFD-331-suunnitellaan-ja-kokeillaan-miten-hyvaksytty-kausityolupa-naytettaisiin-mvp-dev-ymparistossa branch January 30, 2024 08:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants