Skip to content

Commit

Permalink
Olo forms schema adjustments (#1633)
Browse files Browse the repository at this point in the history
* Create createStringOptionsV2

* Fix passing of displayOptionalLabel in TimePicker

* OLO form adjustments

* Update snapshots

---------

Co-authored-by: Marek Bodinger <marek.bodinger@gmail.com>
  • Loading branch information
MarekBodingerBA and MarekBodinger authored Oct 30, 2024
1 parent c1be727 commit d40ab19
Show file tree
Hide file tree
Showing 41 changed files with 1,116 additions and 679 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ const exampleForm: ExampleForm = {
email: 'olo@test.sk',
vyberSluzby: 'Ručná vykládka a zhodnotenie odpadu podľa integrovaného povolenia',
preferovanyDatumDovozu: '2025-11-08',
fakturacia: {
sposobPlatby: 'Platba kartou',
},
menoPriezvisko: {
meno: 'Jozef',
priezvisko: 'Mrkva',
Expand Down
4 changes: 2 additions & 2 deletions forms-shared/src/example-forms/examples/oloOloTaxiExample.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ const exampleForm: ExampleForm = {
sluzba: {
miestoDodania: 'Holandská 10',
preferovanyDatumOdvozu: '2025-05-05',
preferovanyCasOdvozu: '07:55',
preferovanyCasOdvozu: '07:00 (pondelok - sobota)',
mnozstvoADruhOdpadu: 'Lots of paper.',
suhlasSDarom: true,
suhlasSPlatbou: true,
},
suhlasy: {
suhlas: true,
Expand Down
18 changes: 18 additions & 0 deletions forms-shared/src/generator/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,24 @@ export const createStringOptions = (options: string[], addDefault = true) => {
return result
}

/**
* Create options from a list of objects with titles. For example:
* [{ title: 'Option 1' }, { title: 'Option 2' }] => [{ value: 'Option 1', title: 'Option 1', isDefault: true }, ...]
*/
export const createStringOptionsV2 = <Option extends { title: string }>(
options: Option[],
addDefault = true,
) => {
const result = options.map((option, index) => ({
value: option.title,
...option,
isDefault: index === 0 && addDefault ? true : undefined,
}))

assertUniqueOptions(result)
return result
}

/**
* Create options with camelCase value from a list of strings. For example:
* ['Option 1', 'Option 2'] => [{ value: 'option1', title: 'Option 1', isDefault: true }, ...]
Expand Down
12 changes: 8 additions & 4 deletions forms-shared/src/schemas/olo/docisteniStanovistaZbernychNadob.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,19 @@ export default schema({ title: 'Dočistenie stanovišťa zberných nádob' }, {}
],
),
conditionalFields(createCondition([[['ziadatelTyp'], { const: 'Právnická osoba' }]]), [
input('konatel', { type: 'text', title: 'Konateľ (meno, priezvisko)', required: true }, {}),
input(
'konatel',
{ type: 'text', title: 'Konateľ', required: true },
{ helptextHeader: 'Uveďte meno a priezvisko konateľa' },
),
input(
'zastupeny',
{
type: 'text',
title: 'Zastúpený - na základe splnomocnenia (meno, priezvisko)',
title: 'Zastúpený - na základe splnomocnenia',
required: true,
},
{},
{ helptextHeader: 'Uveďte meno a priezvisko osoby zastupujúcej na základe splnomocnenia' },
),
]),
conditionalFields(
Expand Down Expand Up @@ -164,7 +168,7 @@ export default schema({ title: 'Dočistenie stanovišťa zberných nádob' }, {}
'doplnujuceInfo',
{
title: 'Doplňujúce info',
required: true,
required: false,
},
{
helptextHeader: 'Špecifikujte individuálne požiadavky.',
Expand Down
10 changes: 7 additions & 3 deletions forms-shared/src/schemas/olo/koloTaxi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,19 @@ export default schema({ title: 'KOLO Taxi' }, {}, [
conditionalFields(createCondition([[['platcaDph'], { const: true }]]), [
input('icDph', { type: 'text', title: 'IČ DPH', required: true }, {}),
]),
input('konatel', { type: 'text', title: 'Konateľ (meno, priezvisko)', required: true }, {}),
input(
'konatel',
{ type: 'text', title: 'Konateľ', required: true },
{ helptextHeader: 'Uveďte meno a priezvisko konateľa' },
),
input(
'zastupeny',
{
type: 'text',
title: 'Zastúpený - na základe splnomocnenia (meno, priezvisko)',
title: 'Zastúpený - na základe splnomocnenia',
required: true,
},
{},
{ helptextHeader: 'Uveďte meno a priezvisko osoby zastupujúcej na základe splnomocnenia' },
),
input(
'menoKontaktnejOsoby',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,21 @@ export default schema(
],
),
conditionalFields(createCondition([[['ziadatelTyp'], { const: 'Právnická osoba' }]]), [
input('konatel', { type: 'text', title: 'Konateľ (meno, priezvisko)', required: true }, {}),
input(
'konatel',
{ type: 'text', title: 'Konateľ', required: true },
{ helptextHeader: 'Uveďte meno a priezvisko konateľa' },
),
input(
'zastupeny',
{
type: 'text',
title: 'Zastúpený - na základe splnomocnenia (meno, priezvisko)',
title: 'Zastúpený - na základe splnomocnenia',
required: true,
},
{},
{
helptextHeader: 'Uveďte meno a priezvisko osoby zastupujúcej na základe splnomocnenia',
},
),
]),
conditionalFields(
Expand Down
4 changes: 2 additions & 2 deletions forms-shared/src/schemas/olo/odvozObjemnehoOdpaduValnikom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,14 @@ export default schema({ title: 'Odvoz objemného odpadu valníkom' }, {}, [
conditionalFields(createCondition([[['ziadatelTyp'], { const: 'Právnická osoba' }]]), [
input(
'konatel',
{ type: 'text', title: 'Konateľ (meno, priezvisko)', required: true },
{ type: 'text', title: 'Konateľ', required: true },
{ helptextHeader: 'Uveďte meno a priezvisko konateľa' },
),
input(
'zastupeny',
{
type: 'text',
title: 'Zastúpený - na základe splnomocnenia (meno, priezvisko)',
title: 'Zastúpený - na základe splnomocnenia',
required: true,
},
{ helptextHeader: 'Uveďte meno a priezvisko osoby zastupujúcej na základe splnomocnenia' },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,19 @@ export default schema({ title: 'Odvoz odpadu veľkokapacitným alebo lisovacím
],
),
conditionalFields(createCondition([[['ziadatelTyp'], { const: 'Právnická osoba' }]]), [
input('konatel', { type: 'text', title: 'Konateľ (meno, priezvisko)', required: true }, {}),
input(
'konatel',
{ type: 'text', title: 'Konateľ', required: true },
{ helptextHeader: 'Uveďte meno a priezvisko konateľa' },
),
input(
'zastupeny',
{
type: 'text',
title: 'Zastúpený - na základe splnomocnenia (meno, priezvisko)',
title: 'Zastúpený - na základe splnomocnenia',
required: true,
},
{},
{ helptextHeader: 'Uveďte meno a priezvisko osoby zastupujúcej na základe splnomocnenia' },
),
]),
conditionalFields(
Expand Down Expand Up @@ -121,7 +125,7 @@ export default schema({ title: 'Odvoz odpadu veľkokapacitným alebo lisovacím
input(
'miestoDodania',
{ type: 'text', title: 'Miesto dodania / výkonu služby', required: true },
{ helptextHeader: 'Presná adresa' },
{ helptextHeader: 'Vyplňte vo formáte ulica a číslo' },
),
select(
'druhOdpadu',
Expand Down
20 changes: 13 additions & 7 deletions forms-shared/src/schemas/olo/oloTaxi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import {
object,
radioGroup,
schema,
select,
step,
textArea,
timePicker,
} from '../../generator/functions'
import { sharedAddressField, sharedPhoneNumberField } from '../shared/fields'
import { createStringOptions } from '../../generator/helpers'
Expand Down Expand Up @@ -72,16 +72,22 @@ export default schema(
'Vami zvolený dátum má iba informačný charakter. Objednávku je potrebné podať minimálne 2 pracovné dni pred zvoleným termínom. V prípade, ak vami zvolený termín nebude voľný, budeme vás kontaktovať.',
},
),
timePicker(
select(
'preferovanyCasOdvozu',
{
title: 'Preferovaný čas odvozu',
required: true,
options: createStringOptions(
[
'07:00 (pondelok - sobota)',
'09:00 (pondelok - sobota)',
'11:00 (pondelok - sobota)',
'13:00 (pondelok - piatok)',
],
false,
),
},
{
helptextHeader:
'7:00 (Pon - Sob); 9:00 (Pon - Sob); 11:00 (Pon - Sob); 13:00 (Pon - Pia)',
},
{},
),
textArea(
'mnozstvoADruhOdpadu',
Expand All @@ -94,7 +100,7 @@ export default schema(
},
),
checkbox(
'suhlasSDarom',
'suhlasSPlatbou',
{
title: 'Vyjadrenie súhlasu s platbou',
required: true,
Expand Down
4 changes: 3 additions & 1 deletion forms-shared/src/schemas/olo/podnetyAPochvalyObcanov.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ export default schema({ title: 'Podnety a pochvaly občanov' }, {}, [
title: 'Presná adresa miesta odvozu',
required: true,
},
{},
{
helptextHeader: 'Vyplňte vo formáte ulica a číslo',
},
),
]),
conditionalFields(createCondition([[['kategoriaPodnetu'], { const: 'Pracovníci OLO' }]]), [
Expand Down
96 changes: 52 additions & 44 deletions forms-shared/src/schemas/olo/shared/zevoShared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,15 +89,21 @@ export const getZevoSchema = (type: ZevoType) => [
conditionalFields(createCondition([[['platcaDph'], { const: true }]]), [
input('icDph', { type: 'text', title: 'IČ DPH', required: true }, {}),
]),
input('konatel', { type: 'text', title: 'Konateľ (meno, priezvisko)', required: true }, {}),
input(
'konatel',
{ type: 'text', title: 'Konateľ', required: true },
{ helptextHeader: 'Uveďte meno a priezvisko konateľa' },
),
input(
'zastupeny',
{
type: 'text',
title: 'Zastúpený - na základe splnomocnenia (meno, priezvisko)',
title: 'Zastúpený - na základe splnomocnenia',
required: true,
},
{},
{
helptextHeader: 'Uveďte meno a priezvisko osoby zastupujúcej na základe splnomocnenia',
},
),
input(
'kontaktnaOsoba',
Expand Down Expand Up @@ -160,52 +166,54 @@ export const getZevoSchema = (type: ZevoType) => [
],
)
: null,
object('fakturacia', { required: true }, { objectDisplay: 'boxed', title: 'Fakturácia' }, [
radioGroup(
'sposobPlatby',
{
type: 'string',
title: 'Spôsob platby',
required: true,
options: createStringOptions(['Platba kartou', 'Platba na faktúru']),
},
{ variant: 'boxed', orientations: 'column' },
),
conditionalFields(createCondition([[['sposobPlatby'], { const: 'Platba na faktúru' }]]), [
checkbox(
'elektronickaFaktura',
{
title: 'Súhlasím so zaslaním elektronickej faktúry',
},
{
helptextHeader:
'V prípade vyjadrenia nesúhlasu bude zákazníkovi za zasielanie faktúry poštou účtovaný poplatok 10 € bez DPH. Osobitné ustanovenia o zasielaní faktúry v elektronickej podobe v zmysle bodu 5.9 VOP.',
checkboxLabel: 'Súhlasím so zaslaním elektronickej faktúry',
variant: 'boxed',
},
),
conditionalFields(createCondition([[['elektronickaFaktura'], { const: true }]]), [
input(
'emailPreFaktury',
conditionalFields(
createCondition([
[
['ziadatelTyp'],
{ enum: ['Právnická osoba', 'Právnická osoba s povolením na vstup do ZEVO'] },
],
]),
[
object('fakturacia', { required: true }, { objectDisplay: 'boxed', title: 'Fakturácia' }, [
radioGroup(
'sposobPlatby',
{
type: 'email',
title: 'E-mail pre zasielanie elektronických faktúr',
type: 'string',
title: 'Spôsob platby',
required: true,
options: createStringOptions(['Platba kartou', 'Platba na faktúru']),
},
{},
{ variant: 'boxed', orientations: 'column' },
),
conditionalFields(createCondition([[['sposobPlatby'], { const: 'Platba na faktúru' }]]), [
input('iban', { type: 'ba-iban', title: 'IBAN', required: true }, {}),
checkbox(
'elektronickaFaktura',
{
title: 'Súhlasím so zaslaním elektronickej faktúry',
},
{
helptextHeader:
'V prípade vyjadrenia nesúhlasu bude zákazníkovi za zasielanie faktúry poštou účtovaný poplatok 10 € bez DPH. Osobitné ustanovenia o zasielaní faktúry v elektronickej podobe v zmysle bodu 5.9 VOP.',
checkboxLabel: 'Súhlasím so zaslaním elektronickej faktúry',
variant: 'boxed',
},
),
conditionalFields(createCondition([[['elektronickaFaktura'], { const: true }]]), [
input(
'emailPreFaktury',
{
type: 'email',
title: 'E-mail pre zasielanie elektronických faktúr',
required: true,
},
{},
),
]),
]),
]),
]),
conditionalFields(
createCondition([
[
['ziadatelTyp'],
{ enum: ['Právnická osoba', 'Právnická osoba s povolením na vstup do ZEVO'] },
],
]),
[input('iban', { type: 'ba-iban', title: 'IBAN', required: true }, {})],
),
]),
],
),
]),
type === ZevoType.EnergetickeZhodnotenieOdpaduVZevo
? step('povodcaOdpadu', { title: 'Identifikačné údaje pôvodcu odpadu' }, [
Expand Down
Loading

0 comments on commit d40ab19

Please sign in to comment.