From 366ad39eac3cbb26681cc334f8ca7100e61bec48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Mar 2022 17:04:09 +0000 Subject: [PATCH 01/49] chore(deps): bump follow-redirects from 1.14.7 to 1.14.9 Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.9. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.9) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 197 ++++++++++++++++++++++++------------------------------ 1 file changed, 89 insertions(+), 108 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1c5aa78e4..550425e64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3008,17 +3008,7 @@ ansi-regex@^2.0.0: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: +ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -3535,7 +3525,7 @@ body-parser@1.19.0, body-parser@^1.19.0: raw-body "2.4.0" type-is "~1.6.17" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -3621,15 +3611,16 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@4.14.2: - version "4.14.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" - integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== +browserslist@4.16.5: + version "4.16.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae" + integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A== dependencies: - caniuse-lite "^1.0.30001125" - electron-to-chromium "^1.3.564" - escalade "^3.0.2" - node-releases "^1.1.61" + caniuse-lite "^1.0.30001214" + colorette "^1.2.2" + electron-to-chromium "^1.3.719" + escalade "^3.1.1" + node-releases "^1.1.71" browserslist@^4.0.0, browserslist@^4.12.2, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.3, browserslist@^4.16.6, browserslist@^4.16.8: version "4.16.8" @@ -3779,11 +3770,16 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001251, caniuse-lite@^1.0.30001252: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001251, caniuse-lite@^1.0.30001252: version "1.0.30001252" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz" integrity sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw== +caniuse-lite@^1.0.30001214: + version "1.0.30001317" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz#0548fb28fd5bc259a70b8c1ffdbe598037666a1b" + integrity sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ== + ccount@^1.0.0, ccount@^1.0.3: version "1.1.0" resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" @@ -4915,13 +4911,6 @@ domelementtype@^2.0.1, domelementtype@^2.2.0: resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - domhandler@^4.0.0, domhandler@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz" @@ -4937,15 +4926,6 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.0.0: - version "2.4.4" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz" - integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: version "2.7.0" resolved "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz" @@ -4982,7 +4962,12 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.811: +electron-to-chromium@^1.3.719: + version "1.4.86" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz#90fe4a9787f48d6522957213408e08a8126b2ebc" + integrity sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w== + +electron-to-chromium@^1.3.811: version "1.3.820" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.820.tgz" integrity sha512-5cFwDmo2yzEA9hn55KZ9+cX/b6DSFvpKz8Hb2fiDmriXWB+DBoXKXmncQwNRFBBTlUdsvPHCoy594OoMLAO0Tg== @@ -5220,7 +5205,7 @@ es6-weak-map@^2.0.3: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -escalade@^3.0.2, escalade@^3.1.1: +escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== @@ -5952,9 +5937,9 @@ flatted@^3.1.0: integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.14.7" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" - integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== + version "1.14.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" + integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== for-in@^1.0.2: version "1.0.2" @@ -7227,17 +7212,7 @@ html_codesniffer@~2.4.1: resolved "https://registry.npmjs.org/html_codesniffer/-/html_codesniffer-2.4.1.tgz" integrity sha512-7g4Z8+7agJFi7XJGu2r0onIqA7ig9b26vFEvUE6DgtFJlJzy1ELYEKzzd5Xwam4xjHiHQ/w8yHO7KTGNcXnwzg== -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - -htmlparser2@^6.1.0: +htmlparser2@^6.0.0, htmlparser2@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== @@ -7352,10 +7327,10 @@ image-q@^1.1.1: resolved "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz" integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY= -immer@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" - integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== +immer@9.0.6: + version "9.0.6" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" + integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" @@ -7760,6 +7735,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-promise@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" @@ -9072,6 +9052,11 @@ nanoid@^3.1.23: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== +nanoid@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" @@ -9170,12 +9155,7 @@ node-eta@^0.9.0: resolved "https://registry.npmjs.org/node-eta/-/node-eta-0.9.0.tgz" integrity sha1-n7CwmbzSoCGUDmA8ZCVNwAPZp6g= -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-fetch@^2.5.0, node-fetch@^2.6.1, node-fetch@~2.6.0: +node-fetch@2.6.7, node-fetch@^2.5.0, node-fetch@^2.6.1, node-fetch@~2.6.0: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -9187,7 +9167,12 @@ node-object-hash@^2.3.9: resolved "https://registry.npmjs.org/node-object-hash/-/node-object-hash-2.3.10.tgz" integrity sha512-jY5dPJzw6NHd/KPSfPKJ+IHoFS81/tJ43r34ZeNMXGzCOM8jwQDCD12HYayKIB6MuznrnqIYy2e891NA2g0ibA== -node-releases@^1.1.61, node-releases@^1.1.75: +node-releases@^1.1.71: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== + +node-releases@^1.1.75: version "1.1.75" resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz" integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== @@ -9266,14 +9251,7 @@ npmlog@^4.0.1: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^1.0.1, nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.0: +nth-check@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== @@ -9317,10 +9295,10 @@ object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-path@0.11.5: - version "0.11.5" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a" - integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg== +object-path@0.11.8: + version "0.11.8" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" + integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== object-visit@^1.0.0: version "1.0.1" @@ -9872,10 +9850,10 @@ physical-cpu-count@^2.0.0: resolved "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz" integrity sha1-GN4vl+S/epVRrXURlCtUlverpmA= -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" @@ -10227,14 +10205,6 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^7.0.27: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - postcss@^8.2.15, postcss@^8.2.9, postcss@^8.3.5: version "8.3.6" resolved "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz" @@ -10244,6 +10214,15 @@ postcss@^8.2.15, postcss@^8.2.9, postcss@^8.3.5: nanoid "^3.1.23" source-map-js "^0.6.2" +postcss@^8.3.11: + version "8.4.12" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" + integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== + dependencies: + nanoid "^3.3.1" + picocolors "^1.0.0" + source-map-js "^1.0.2" + potrace@^2.1.8: version "2.1.8" resolved "https://registry.npmjs.org/potrace/-/potrace-2.1.8.tgz" @@ -11251,15 +11230,17 @@ safe-regex@^1.1.0: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sanitize-html@^1.27.5: - version "1.27.5" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.27.5.tgz#6c8149462adb23e360e1bb71cc0bae7f08c823c7" - integrity sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A== +sanitize-html@^2.3.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.7.0.tgz#e106205b468aca932e2f9baf241f24660d34e279" + integrity sha512-jfQelabOn5voO7FAfnQF7v+jsA6z9zC/O4ec0z3E35XPEtHYJT/OdUziVWlKW4irCr2kXaQAyXTXDHWAibg1tA== dependencies: - htmlparser2 "^4.1.0" - lodash "^4.17.15" + deepmerge "^4.2.2" + escape-string-regexp "^4.0.0" + htmlparser2 "^6.0.0" + is-plain-object "^5.0.0" parse-srcset "^1.0.2" - postcss "^8.2.13" + postcss "^8.3.11" sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" @@ -11615,6 +11596,11 @@ source-map-js@^0.6.2: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" @@ -12322,10 +12308,10 @@ trim-trailing-lines@^1.0.0: resolved "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz" integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= +trim@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.3.tgz#05243a47a3a4113e6b49367880a9cca59697a20b" + integrity sha512-h82ywcYhHK7veeelXrCScdH7HkWfbIT1D/CgYO+nmDarz3SGNssVBMws6jU16Ga60AJCRAvPV6w6RLuNerQqjg== trough@^1.0.0: version "1.0.5" @@ -13151,10 +13137,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@7.4.5: - version "7.4.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== +ws@7.4.6, ws@~7.4.2: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== "ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.3.0: version "7.5.3" @@ -13168,11 +13154,6 @@ ws@^6.1.0: dependencies: async-limiter "~1.0.0" -ws@~7.4.2: - version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz" From fee157cbf466772136b4dd572c5bcf20a7311915 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Mar 2022 17:04:14 +0000 Subject: [PATCH 02/49] chore(deps): bump simple-get from 3.1.0 to 3.1.1 Bumps [simple-get](https://github.com/feross/simple-get) from 3.1.0 to 3.1.1. - [Release notes](https://github.com/feross/simple-get/releases) - [Commits](https://github.com/feross/simple-get/compare/v3.1.0...v3.1.1) --- updated-dependencies: - dependency-name: simple-get dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yarn.lock b/yarn.lock index 550425e64..dbde712f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4634,7 +4634,7 @@ decompress-response@^3.3.0: decompress-response@^4.2.0: version "4.2.1" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== dependencies: mimic-response "^2.0.0" @@ -8932,7 +8932,7 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: mimic-response@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== mimic-response@^3.1.0: @@ -11454,13 +11454,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^3.0.3, simple-get@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== dependencies: decompress-response "^4.2.0" once "^1.3.1" @@ -13124,7 +13124,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^3.0.0: From 735d5243d37cc38e93ca2bbd97135ce823aec26a Mon Sep 17 00:00:00 2001 From: Alessandro Sebastiani Date: Wed, 30 Mar 2022 10:05:02 +0200 Subject: [PATCH 03/49] chore: update digital identities metadata chore: replace metadata signed correctly --- static/saml2/metadata.xml | 118 ++++++++++++++++---------------- static/saml2/metadata_cie.xml | 122 ++++++++++++++++------------------ 2 files changed, 115 insertions(+), 125 deletions(-) diff --git a/static/saml2/metadata.xml b/static/saml2/metadata.xml index 6200525ec..621c10a79 100644 --- a/static/saml2/metadata.xml +++ b/static/saml2/metadata.xml @@ -1,72 +1,72 @@ - - 0CbLxaQlse8yT0wM2YYmrKleLn1749hrLP50DteR+CQ=EDMXrlbxfbbMPYPc2eN4Brrid33MoLbZY2N9yZb2KVGEuaSN0ypcpStjjnsNF5PoMEbBeRMaQ6ga -BIL/fictmXnB0XhDRfl3HIt0aKIpzLmFGAlMpUP5JCtoa5DOgwfZISCw2xO+gPduLf9dz95N0Hk3 -y92ZOcsarVIiyWxfs9j8EjPBcQAbJQocAlNTtSMcfMWN9SC9jqhOuSUswYJv9t3s64ctDuarQ9jf -2Z9o75v1FKRqFPdplxmH9ed9w2x2EudhKy1v5NjAS5meEsZ5yqce3vdMSfzvK0+AyAROhVLTSQRo -/Uai7vUZw4OSTh3vfuCkmlvqPzFzwt8dbzeqtQ==iZGdwPDnzERbOB0gr4Nu2g1I4JKrY3POukpKyHkkH9TBVtzetH61txFqySWyUdxqGWl81R4fVXp4 -PwMfGsN6bBnDcryxF3LJjTw74MTOe246ww78m4hRCpPHj5MECWzP6O/tfiG5zTj/uQsEpvuaDWxL -4hEIOaBouOBPX6Ae0YIIn9TItXhnuFp6GHzxsbxbjwnemK2bc/n7SG8jOfTmdZWkzkBetTmpsU9q -ExM4NT2aalsX5kSya4pbaNLLwWCS/nfdSkGL4dMplybi/SxukADAy4e8zYnDIwJ0dXkL0cK+tLs3 -4t6x/Q8YmUBokGD8gjBI1mDaWE3uGfSCMW46DQ==AQABMIIErDCCA5SgAwIBAgIOAX6QauxqAAAAACHks4gwDQYJKoZIhvcNAQELBQAwgZAxKDAmBgNVBAMM -H1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAyMl8xNTI5MjQxGDAWBgNVBAsMDzAwRDV0MDAwMDAwOGdQ -QjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNV -BAgMAkNBMQwwCgYDVQQGEwNVU0EwHhcNMjIwMTI1MDg0NzEzWhcNMjMwMTI1MDAwMDAwWjCBkDEo -MCYGA1UEAwwfU2VsZlNpZ25lZENlcnRfMTBKYW4yMDIyXzE1MjkyNDEYMBYGA1UECwwPMDBENXQw -MDAwMDA4Z1BCMRcwFQYDVQQKDA5TYWxlc2ZvcmNlLmNvbTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj -bzELMAkGA1UECAwCQ0ExDDAKBgNVBAYTA1VTQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAImRncDw58xEWzgdIK+DbtoNSOCSq2NzzrpKSsh5JB/UwVbc3rR+tbcRasklslHcahlpfNUe -H1V6eD8DHxrDemwZw3K8sRdyyY08O+DEzntuOsMO/JuIUQqTx4+TBAlsz+jv7X4huc04/7kLBKb7 -mg1sS+IRCDmgaLjgT1+gHtGCCJ/UyLV4Z7haehh88bG8W48J3pitm3P5+0hvIzn05nWVpM5AXrU5 -qbFPahMTODU9mmpbF+ZEsmuKW2jSy8Fgkv533UpBi+HTKZcm4v0sbpAAwMuHvM2JwyMCdHV5C9HC -vrS7N+Lesf0PGJlAaJBg/IIwSNZg2lhN7hn0gjFuOg0CAwEAAaOCAQAwgf0wHQYDVR0OBBYEFAro -1rZ4rN48m5APZ3yMH6bCLw0aMA8GA1UdEwEB/wQFMAMBAf8wgcoGA1UdIwSBwjCBv4AUCujWtnis -3jybkA9nfIwfpsIvDRqhgZakgZMwgZAxKDAmBgNVBAMMH1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAy -Ml8xNTI5MjQxGDAWBgNVBAsMDzAwRDV0MDAwMDAwOGdQQjEXMBUGA1UECgwOU2FsZXNmb3JjZS5j -b20xFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0GCDgF+ -kGrsagAAAAAh5LOIMA0GCSqGSIb3DQEBCwUAA4IBAQAkDxQQkcdYALB9e8mrh9FApbaD5jlsXdaV -GCHUUpba/JA1Y1Z+ZCXibohD5U2/wAfsB6Mvh7IDzsfsyVvBAlbwfswmkIuRVbMVx9Bv7pmz1cv7 -j79FottSm95obVoPZW1JZyzBAz1DbnrCZ47OjKIVtA6L+nI1ZA33E2lbLIv/YdT+ZLAQJD/0aCZ4 -/vodDhRy/GiVSj3GjLQQFTr4JrrqgDSALNZoiphPhsyaLN5rkEuwPSqp6afD6zphnxO101MeBOnD -kjxK4XhMdP45vTLs+ePdq9G1k0paaJdg8hzNdDPmKwEEneiuu2RTa/s2lfvsmUA0jK8Ey0MwKJ5x -k0tx + + qhJzbT9afBruvp6E1vxcyJxgUhgC3kO0uOBjemR8Uws=mpdu6urj2dV/bOcj5zzVkWC0+WTe1F+R8ARj3m9aaUFNhFKRFaf8gSwdk48cf9aFLzLZsNKUBzaH +NOePcNWGZ+TQxv9SJi/NfDmOjcM2WRlOVxFO0iGsPRTn4jNwGJrkvMvoNT/db8NhSmLwsgWX5Jr1 +l07TmfgjU57qxr5Rcnt7mYJltH77TLyp3fjWQTdKi+hVeAe0RYnpdBAYsx7JNyRtesd8lhPoU1at +YQqNZq9D/UekJTrpeRaGMLMbRx/sH9CPMD1hmQVSPXFM1NiOJhLQojPd4t/hKGknv/ro+jUpzNp+ +NVU8eg9TOYw1g8gDP2h9dCpiv0yDKh9G/L7NVA==vMlhee8E2u7Q9sGsxo+1SeJCMIaKCx1RvVLocI7BJ20mUyFmIrTSaWXvP80y+47EtDvm55kZ+CNt +xpzokOLsozcst1Xpr7GCA51p2pSYY+xMCXvfhaQwYE1NbmyOdiwsyZ83bwZfC7DoWRmPxcm6wT6n +WVMnMyFVq5VeXHY6Jb/YrI7gb41Wv58a5KTcbBkBLJdJu+mzjoRU6TdV0GCq3COx6Gc/82mqDWdL +eQQHOV3R7u6wkqtAZUqucW5SfnpdsV2tcZlZ0FyB5CCeEmG/4hA/OocNFAbBZyOHAOnIoonQ0n+D +9nptNgEvhPXb6+WZArDklZHBVjaAOL/aKXuEDQ==AQABMIIErDCCA5SgAwIBAgIOAX/aSMCfAAAAAA+hguowDQYJKoZIhvcNAQELBQAwgZAxKDAmBgNVBAMM +H1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAyMl8xNTI5MjQxGDAWBgNVBAsMDzAwRDdRMDAwMDAxTnZz +UjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNV +BAgMAkNBMQwwCgYDVQQGEwNVU0EwHhcNMjIwMzMwMTAwNDM1WhcNMjMwMzMwMDAwMDAwWjCBkDEo +MCYGA1UEAwwfU2VsZlNpZ25lZENlcnRfMTBKYW4yMDIyXzE1MjkyNDEYMBYGA1UECwwPMDBEN1Ew +MDAwMDFOdnNSMRcwFQYDVQQKDA5TYWxlc2ZvcmNlLmNvbTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj +bzELMAkGA1UECAwCQ0ExDDAKBgNVBAYTA1VTQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALzJYXnvBNru0PbBrMaPtUniQjCGigsdUb1S6HCOwSdtJlMhZiK00mll7z/NMvuOxLQ75ueZ +Gfgjbcac6JDi7KM3LLdV6a+xggOdadqUmGPsTAl734WkMGBNTW5sjnYsLMmfN28GXwuw6FkZj8XJ +usE+p1lTJzMhVauVXlx2OiW/2KyO4G+NVr+fGuSk3GwZASyXSbvps46EVOk3VdBgqtwjsehnP/Np +qg1nS3kEBzld0e7usJKrQGVKrnFuUn56XbFdrXGZWdBcgeQgnhJhv+IQPzqHDRQGwWcjhwDpyKKJ +0NJ/g/Z6bTYBL4T12+vlmQKw5JWRwVY2gDi/2il7hA0CAwEAAaOCAQAwgf0wHQYDVR0OBBYEFCna +sYA0f0C+9a8dpFTr/+sRV7uCMA8GA1UdEwEB/wQFMAMBAf8wgcoGA1UdIwSBwjCBv4AUKdqxgDR/ +QL71rx2kVOv/6xFXu4KhgZakgZMwgZAxKDAmBgNVBAMMH1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAy +Ml8xNTI5MjQxGDAWBgNVBAsMDzAwRDdRMDAwMDAxTnZzUjEXMBUGA1UECgwOU2FsZXNmb3JjZS5j +b20xFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0GCDgF/ +2kjAnwAAAAAPoYLqMA0GCSqGSIb3DQEBCwUAA4IBAQAz6Mi71J9LqstrD/HJtOH4jdXdF9VuhHiv +ZUgPjjHRR/KtFLM6+ZNjFXBw7qg0YE4tiTpldhPZcuAPHA24PAyiEs4l3GnS7yg/RzK2fRfyScSP +KJ4qJPurXMuMdpuUs8ycyuHOF5y3wlVaNi3ibFadEH62xsjxfLs2x3IVh70Scx4xg1onT3JKl63x +qrjZkWTCFwayjDB71q4oN0s0mVmsALTqs3umofHp94CKb6r02YYQVvw9mN1SFq24/pF+NCHHuHY0 +m0yhqBFV9yCaEc+jwUTbulqPrJYP7tzmTJVyEunP91j49HohxIxFxOx65iIb8R7LpNx98w8pSXca +RfPb - MIIErDCCA5SgAwIBAgIOAX6QauxqAAAAACHks4gwDQYJKoZIhvcNAQELBQAwgZAx + MIIErDCCA5SgAwIBAgIOAX/aSMCfAAAAAA+hguowDQYJKoZIhvcNAQELBQAwgZAx KDAmBgNVBAMMH1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAyMl8xNTI5MjQxGDAWBgNV -BAsMDzAwRDV0MDAwMDAwOGdQQjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAU +BAsMDzAwRDdRMDAwMDAxTnZzUjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAU BgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0Ew -HhcNMjIwMTI1MDg0NzEzWhcNMjMwMTI1MDAwMDAwWjCBkDEoMCYGA1UEAwwfU2Vs -ZlNpZ25lZENlcnRfMTBKYW4yMDIyXzE1MjkyNDEYMBYGA1UECwwPMDBENXQwMDAw -MDA4Z1BCMRcwFQYDVQQKDA5TYWxlc2ZvcmNlLmNvbTEWMBQGA1UEBwwNU2FuIEZy +HhcNMjIwMzMwMTAwNDM1WhcNMjMwMzMwMDAwMDAwWjCBkDEoMCYGA1UEAwwfU2Vs +ZlNpZ25lZENlcnRfMTBKYW4yMDIyXzE1MjkyNDEYMBYGA1UECwwPMDBEN1EwMDAw +MDFOdnNSMRcwFQYDVQQKDA5TYWxlc2ZvcmNlLmNvbTEWMBQGA1UEBwwNU2FuIEZy YW5jaXNjbzELMAkGA1UECAwCQ0ExDDAKBgNVBAYTA1VTQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAImRncDw58xEWzgdIK+DbtoNSOCSq2NzzrpKSsh5 -JB/UwVbc3rR+tbcRasklslHcahlpfNUeH1V6eD8DHxrDemwZw3K8sRdyyY08O+DE -zntuOsMO/JuIUQqTx4+TBAlsz+jv7X4huc04/7kLBKb7mg1sS+IRCDmgaLjgT1+g -HtGCCJ/UyLV4Z7haehh88bG8W48J3pitm3P5+0hvIzn05nWVpM5AXrU5qbFPahMT -ODU9mmpbF+ZEsmuKW2jSy8Fgkv533UpBi+HTKZcm4v0sbpAAwMuHvM2JwyMCdHV5 -C9HCvrS7N+Lesf0PGJlAaJBg/IIwSNZg2lhN7hn0gjFuOg0CAwEAAaOCAQAwgf0w -HQYDVR0OBBYEFAro1rZ4rN48m5APZ3yMH6bCLw0aMA8GA1UdEwEB/wQFMAMBAf8w -gcoGA1UdIwSBwjCBv4AUCujWtnis3jybkA9nfIwfpsIvDRqhgZakgZMwgZAxKDAm +AQEBBQADggEPADCCAQoCggEBALzJYXnvBNru0PbBrMaPtUniQjCGigsdUb1S6HCO +wSdtJlMhZiK00mll7z/NMvuOxLQ75ueZGfgjbcac6JDi7KM3LLdV6a+xggOdadqU +mGPsTAl734WkMGBNTW5sjnYsLMmfN28GXwuw6FkZj8XJusE+p1lTJzMhVauVXlx2 +OiW/2KyO4G+NVr+fGuSk3GwZASyXSbvps46EVOk3VdBgqtwjsehnP/Npqg1nS3kE +Bzld0e7usJKrQGVKrnFuUn56XbFdrXGZWdBcgeQgnhJhv+IQPzqHDRQGwWcjhwDp +yKKJ0NJ/g/Z6bTYBL4T12+vlmQKw5JWRwVY2gDi/2il7hA0CAwEAAaOCAQAwgf0w +HQYDVR0OBBYEFCnasYA0f0C+9a8dpFTr/+sRV7uCMA8GA1UdEwEB/wQFMAMBAf8w +gcoGA1UdIwSBwjCBv4AUKdqxgDR/QL71rx2kVOv/6xFXu4KhgZakgZMwgZAxKDAm BgNVBAMMH1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAyMl8xNTI5MjQxGDAWBgNVBAsM -DzAwRDV0MDAwMDAwOGdQQjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNV -BAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0GCDgF+ -kGrsagAAAAAh5LOIMA0GCSqGSIb3DQEBCwUAA4IBAQAkDxQQkcdYALB9e8mrh9FA -pbaD5jlsXdaVGCHUUpba/JA1Y1Z+ZCXibohD5U2/wAfsB6Mvh7IDzsfsyVvBAlbw -fswmkIuRVbMVx9Bv7pmz1cv7j79FottSm95obVoPZW1JZyzBAz1DbnrCZ47OjKIV -tA6L+nI1ZA33E2lbLIv/YdT+ZLAQJD/0aCZ4/vodDhRy/GiVSj3GjLQQFTr4Jrrq -gDSALNZoiphPhsyaLN5rkEuwPSqp6afD6zphnxO101MeBOnDkjxK4XhMdP45vTLs -+ePdq9G1k0paaJdg8hzNdDPmKwEEneiuu2RTa/s2lfvsmUA0jK8Ey0MwKJ5xk0tx +DzAwRDdRMDAwMDAxTnZzUjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNV +BAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0GCDgF/ +2kjAnwAAAAAPoYLqMA0GCSqGSIb3DQEBCwUAA4IBAQAz6Mi71J9LqstrD/HJtOH4 +jdXdF9VuhHivZUgPjjHRR/KtFLM6+ZNjFXBw7qg0YE4tiTpldhPZcuAPHA24PAyi +Es4l3GnS7yg/RzK2fRfyScSPKJ4qJPurXMuMdpuUs8ycyuHOF5y3wlVaNi3ibFad +EH62xsjxfLs2x3IVh70Scx4xg1onT3JKl63xqrjZkWTCFwayjDB71q4oN0s0mVms +ALTqs3umofHp94CKb6r02YYQVvw9mN1SFq24/pF+NCHHuHY0m0yhqBFV9yCaEc+j +wUTbulqPrJYP7tzmTJVyEunP91j49HohxIxFxOx65iIb8R7LpNx98w8pSXcaRfPb - - - - + + + + urn:oasis:names:tc:SAML:2.0:nameid-format:transient - - + + MITD @@ -80,7 +80,7 @@ gDSALNZoiphPhsyaLN5rkEuwPSqp6afD6zphnxO101MeBOnDkjxK4XhMdP45vTLs - + MITD Portal diff --git a/static/saml2/metadata_cie.xml b/static/saml2/metadata_cie.xml index e23a184bf..4d01737bc 100644 --- a/static/saml2/metadata_cie.xml +++ b/static/saml2/metadata_cie.xml @@ -1,75 +1,72 @@ - - buqXTRqFV0iMUyIu8YhDfqYvsEGF1Je9G8QraSUd/dc=iYI+OJL3wJnoCD39A4rYDGCblOGWspy7pUFF2vW4Ah1FBf8D8JavhOVoleCT/bCmHcdpnouKimy9 -+dlKJBMgWgChcwRL7ov2FqE5UQnLTrwR6LVkx6CJ3aG4vUUjU5c+3XTxit5odold0un7FlNB8wyH -KZFXO5DBNXgisxE/yGjhp9gbBQR55iN/MJfyULDAysRf64irk0W4BwDvxPFIVzQAaX1LajXegOKs -/3aOHYDDZP/hTOxAuSjrQZg04swG1TXOwywgH/LRj4jqYKkjiDvqLMwh8jxE0QcfQiHttrZ2Q537 -I3RNUjX11iE77YXnPbinfC3cGpZuL7iQ7L9BNw==t5yyPD0I5UsE7/PhkYfMAqe1odBIXUfa5OU072HxrW6BeAeJlhikfXW8lgDfsQCweFS4vn/4W0qF -3R6QmJF1SxJK9UzLX2+ft1xGFf7cagUxeL0GBTcI5yBhjmFPUec9urYRRjq9kWBfnIYrncj2So/+ -wNrdmnQiIPq8M9+ygFYAOL2yCVRYwZ3pZNwmv9LjUMwlMycKxx3f24cnj3biMFvLM2SADt50VpWD -IsFQN5FwZfgAWyMJVOG+j3zNemiNYQ6kJVn/cCx+WtVRtollNva2JbLm8Po4Kp8PZW3/+W+e8Fjf -ZCyydUvNidcU0IKBJQmLB7MoH4/Lx+k97j9nSQ==AQABMIIErDCCA5SgAwIBAgIOAX8hIWCDAAAAAHhthEIwDQYJKoZIhvcNAQELBQAwgZAxKDAmBgNVBAMM -H1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAyMl8xNTI5MjQxGDAWBgNVBAsMDzAwRDNOMDAwMDAwOGxT -ejEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNV -BAgMAkNBMQwwCgYDVQQGEwNVU0EwHhcNMjIwMjIyMTExMTQ5WhcNMjMwMjIyMDAwMDAwWjCBkDEo -MCYGA1UEAwwfU2VsZlNpZ25lZENlcnRfMTBKYW4yMDIyXzE1MjkyNDEYMBYGA1UECwwPMDBEM04w -MDAwMDA4bFN6MRcwFQYDVQQKDA5TYWxlc2ZvcmNlLmNvbTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj + + +Lc5u5UqfLfTsiMHGRlqcYp35bST5EinNWenBzR77dE=YGexAf0azvtgvVhRNnSwiFmM0/egPGSjzURYUha6y+hNRohjvCOuyCicHkVWi2HN7mLnHvhEdWS6 +ETanIur71B3NTns8cbqbxzoV+1/oo/V/dIVH3J5FDeDr2LPr/Khkzv2r/w+my9Pd6Y9PZhHjROqT +TYrdF56KQJkC5PCC1M09BDo6dcF+ZTkNNSQzfmuJJfLA4b28XzPzJUNau1kO+IDKgZGdzZiW7Zsq +oK2QZZg6abrsF2cH0gK2DEj29cQRaD8iJ4aiXno9eAUQmVK4kRHBmCIakciwGOR0DPWWSIA+ARD7 +ekOGdmKF4f1BYVO7n4nYS3OpiPM+OptrDy35Nw==vMlhee8E2u7Q9sGsxo+1SeJCMIaKCx1RvVLocI7BJ20mUyFmIrTSaWXvP80y+47EtDvm55kZ+CNt +xpzokOLsozcst1Xpr7GCA51p2pSYY+xMCXvfhaQwYE1NbmyOdiwsyZ83bwZfC7DoWRmPxcm6wT6n +WVMnMyFVq5VeXHY6Jb/YrI7gb41Wv58a5KTcbBkBLJdJu+mzjoRU6TdV0GCq3COx6Gc/82mqDWdL +eQQHOV3R7u6wkqtAZUqucW5SfnpdsV2tcZlZ0FyB5CCeEmG/4hA/OocNFAbBZyOHAOnIoonQ0n+D +9nptNgEvhPXb6+WZArDklZHBVjaAOL/aKXuEDQ==AQABMIIErDCCA5SgAwIBAgIOAX/aSMCfAAAAAA+hguowDQYJKoZIhvcNAQELBQAwgZAxKDAmBgNVBAMM +H1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAyMl8xNTI5MjQxGDAWBgNVBAsMDzAwRDdRMDAwMDAxTnZz +UjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNV +BAgMAkNBMQwwCgYDVQQGEwNVU0EwHhcNMjIwMzMwMTAwNDM1WhcNMjMwMzMwMDAwMDAwWjCBkDEo +MCYGA1UEAwwfU2VsZlNpZ25lZENlcnRfMTBKYW4yMDIyXzE1MjkyNDEYMBYGA1UECwwPMDBEN1Ew +MDAwMDFOdnNSMRcwFQYDVQQKDA5TYWxlc2ZvcmNlLmNvbTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj bzELMAkGA1UECAwCQ0ExDDAKBgNVBAYTA1VTQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALecsjw9COVLBO/z4ZGHzAKntaHQSF1H2uTlNO9h8a1ugXgHiZYYpH11vJYA37EAsHhUuL5/ -+FtKhd0ekJiRdUsSSvVMy19vn7dcRhX+3GoFMXi9BgU3COcgYY5hT1HnPbq2EUY6vZFgX5yGK53I -9kqP/sDa3Zp0IiD6vDPfsoBWADi9sglUWMGd6WTcJr/S41DMJTMnCscd39uHJ4924jBbyzNkgA7e -dFaVgyLBUDeRcGX4AFsjCVThvo98zXpojWEOpCVZ/3AsflrVUbaJZTb2tiWy5vD6OCqfD2Vt//lv -nvBY32QssnVLzYnXFNCCgSUJiwezKB+Py8fpPe4/Z0kCAwEAAaOCAQAwgf0wHQYDVR0OBBYEFG6H -MLaJntU3gV8F3Vw0PIjsEzImMA8GA1UdEwEB/wQFMAMBAf8wgcoGA1UdIwSBwjCBv4AUbocwtome -1TeBXwXdXDQ8iOwTMiahgZakgZMwgZAxKDAmBgNVBAMMH1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAy -Ml8xNTI5MjQxGDAWBgNVBAsMDzAwRDNOMDAwMDAwOGxTejEXMBUGA1UECgwOU2FsZXNmb3JjZS5j +ggEBALzJYXnvBNru0PbBrMaPtUniQjCGigsdUb1S6HCOwSdtJlMhZiK00mll7z/NMvuOxLQ75ueZ +Gfgjbcac6JDi7KM3LLdV6a+xggOdadqUmGPsTAl734WkMGBNTW5sjnYsLMmfN28GXwuw6FkZj8XJ +usE+p1lTJzMhVauVXlx2OiW/2KyO4G+NVr+fGuSk3GwZASyXSbvps46EVOk3VdBgqtwjsehnP/Np +qg1nS3kEBzld0e7usJKrQGVKrnFuUn56XbFdrXGZWdBcgeQgnhJhv+IQPzqHDRQGwWcjhwDpyKKJ +0NJ/g/Z6bTYBL4T12+vlmQKw5JWRwVY2gDi/2il7hA0CAwEAAaOCAQAwgf0wHQYDVR0OBBYEFCna +sYA0f0C+9a8dpFTr/+sRV7uCMA8GA1UdEwEB/wQFMAMBAf8wgcoGA1UdIwSBwjCBv4AUKdqxgDR/ +QL71rx2kVOv/6xFXu4KhgZakgZMwgZAxKDAmBgNVBAMMH1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAy +Ml8xNTI5MjQxGDAWBgNVBAsMDzAwRDdRMDAwMDAxTnZzUjEXMBUGA1UECgwOU2FsZXNmb3JjZS5j b20xFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0GCDgF/ -ISFggwAAAAB4bYRCMA0GCSqGSIb3DQEBCwUAA4IBAQBnKcU+NXE/CWkXPE55m9aZcyiyOLbcol3D -JM/0KazNxzO/eKNikogHc4l8Stqm5k1seYqmsS7RKxIf+tLhOV+OHN7EzGYOD15U1TVdAyssTrX9 -yIaTyU6+ap49bQD1aztftF0dP2mmW+rJ5VmWNG8sJkgRMD1xMChJIbKjcDtAEFAUkQURlYDxJC+J -Y5d27HvonKVEp7sXjnv20Ft7XpmSrMLE/6ZyNfP/apAuOAUIxDReYUjfYR4aBlcc37MFvL57JYzP -MLpB0G9eZE6XhkfenxguHhdS/3W6txEA/23HRAp4XR7pKMAaAiujwd7fDG+62wGORWqxabC24rVr -tNhK +2kjAnwAAAAAPoYLqMA0GCSqGSIb3DQEBCwUAA4IBAQAz6Mi71J9LqstrD/HJtOH4jdXdF9VuhHiv +ZUgPjjHRR/KtFLM6+ZNjFXBw7qg0YE4tiTpldhPZcuAPHA24PAyiEs4l3GnS7yg/RzK2fRfyScSP +KJ4qJPurXMuMdpuUs8ycyuHOF5y3wlVaNi3ibFadEH62xsjxfLs2x3IVh70Scx4xg1onT3JKl63x +qrjZkWTCFwayjDB71q4oN0s0mVmsALTqs3umofHp94CKb6r02YYQVvw9mN1SFq24/pF+NCHHuHY0 +m0yhqBFV9yCaEc+jwUTbulqPrJYP7tzmTJVyEunP91j49HohxIxFxOx65iIb8R7LpNx98w8pSXca +RfPb - MIIErDCCA5SgAwIBAgIOAX8hIWCDAAAAAHhthEIwDQYJKoZIhvcNAQELBQAwgZAx + MIIErDCCA5SgAwIBAgIOAX/aSMCfAAAAAA+hguowDQYJKoZIhvcNAQELBQAwgZAx KDAmBgNVBAMMH1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAyMl8xNTI5MjQxGDAWBgNV -BAsMDzAwRDNOMDAwMDAwOGxTejEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAU +BAsMDzAwRDdRMDAwMDAxTnZzUjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAU BgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0Ew -HhcNMjIwMjIyMTExMTQ5WhcNMjMwMjIyMDAwMDAwWjCBkDEoMCYGA1UEAwwfU2Vs -ZlNpZ25lZENlcnRfMTBKYW4yMDIyXzE1MjkyNDEYMBYGA1UECwwPMDBEM04wMDAw -MDA4bFN6MRcwFQYDVQQKDA5TYWxlc2ZvcmNlLmNvbTEWMBQGA1UEBwwNU2FuIEZy +HhcNMjIwMzMwMTAwNDM1WhcNMjMwMzMwMDAwMDAwWjCBkDEoMCYGA1UEAwwfU2Vs +ZlNpZ25lZENlcnRfMTBKYW4yMDIyXzE1MjkyNDEYMBYGA1UECwwPMDBEN1EwMDAw +MDFOdnNSMRcwFQYDVQQKDA5TYWxlc2ZvcmNlLmNvbTEWMBQGA1UEBwwNU2FuIEZy YW5jaXNjbzELMAkGA1UECAwCQ0ExDDAKBgNVBAYTA1VTQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBALecsjw9COVLBO/z4ZGHzAKntaHQSF1H2uTlNO9h -8a1ugXgHiZYYpH11vJYA37EAsHhUuL5/+FtKhd0ekJiRdUsSSvVMy19vn7dcRhX+ -3GoFMXi9BgU3COcgYY5hT1HnPbq2EUY6vZFgX5yGK53I9kqP/sDa3Zp0IiD6vDPf -soBWADi9sglUWMGd6WTcJr/S41DMJTMnCscd39uHJ4924jBbyzNkgA7edFaVgyLB -UDeRcGX4AFsjCVThvo98zXpojWEOpCVZ/3AsflrVUbaJZTb2tiWy5vD6OCqfD2Vt -//lvnvBY32QssnVLzYnXFNCCgSUJiwezKB+Py8fpPe4/Z0kCAwEAAaOCAQAwgf0w -HQYDVR0OBBYEFG6HMLaJntU3gV8F3Vw0PIjsEzImMA8GA1UdEwEB/wQFMAMBAf8w -gcoGA1UdIwSBwjCBv4AUbocwtome1TeBXwXdXDQ8iOwTMiahgZakgZMwgZAxKDAm +AQEBBQADggEPADCCAQoCggEBALzJYXnvBNru0PbBrMaPtUniQjCGigsdUb1S6HCO +wSdtJlMhZiK00mll7z/NMvuOxLQ75ueZGfgjbcac6JDi7KM3LLdV6a+xggOdadqU +mGPsTAl734WkMGBNTW5sjnYsLMmfN28GXwuw6FkZj8XJusE+p1lTJzMhVauVXlx2 +OiW/2KyO4G+NVr+fGuSk3GwZASyXSbvps46EVOk3VdBgqtwjsehnP/Npqg1nS3kE +Bzld0e7usJKrQGVKrnFuUn56XbFdrXGZWdBcgeQgnhJhv+IQPzqHDRQGwWcjhwDp +yKKJ0NJ/g/Z6bTYBL4T12+vlmQKw5JWRwVY2gDi/2il7hA0CAwEAAaOCAQAwgf0w +HQYDVR0OBBYEFCnasYA0f0C+9a8dpFTr/+sRV7uCMA8GA1UdEwEB/wQFMAMBAf8w +gcoGA1UdIwSBwjCBv4AUKdqxgDR/QL71rx2kVOv/6xFXu4KhgZakgZMwgZAxKDAm BgNVBAMMH1NlbGZTaWduZWRDZXJ0XzEwSmFuMjAyMl8xNTI5MjQxGDAWBgNVBAsM -DzAwRDNOMDAwMDAwOGxTejEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNV +DzAwRDdRMDAwMDAxTnZzUjEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNV BAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0GCDgF/ -ISFggwAAAAB4bYRCMA0GCSqGSIb3DQEBCwUAA4IBAQBnKcU+NXE/CWkXPE55m9aZ -cyiyOLbcol3DJM/0KazNxzO/eKNikogHc4l8Stqm5k1seYqmsS7RKxIf+tLhOV+O -HN7EzGYOD15U1TVdAyssTrX9yIaTyU6+ap49bQD1aztftF0dP2mmW+rJ5VmWNG8s -JkgRMD1xMChJIbKjcDtAEFAUkQURlYDxJC+JY5d27HvonKVEp7sXjnv20Ft7XpmS -rMLE/6ZyNfP/apAuOAUIxDReYUjfYR4aBlcc37MFvL57JYzPMLpB0G9eZE6Xhkfe -nxguHhdS/3W6txEA/23HRAp4XR7pKMAaAiujwd7fDG+62wGORWqxabC24rVrtNhK +2kjAnwAAAAAPoYLqMA0GCSqGSIb3DQEBCwUAA4IBAQAz6Mi71J9LqstrD/HJtOH4 +jdXdF9VuhHivZUgPjjHRR/KtFLM6+ZNjFXBw7qg0YE4tiTpldhPZcuAPHA24PAyi +Es4l3GnS7yg/RzK2fRfyScSPKJ4qJPurXMuMdpuUs8ycyuHOF5y3wlVaNi3ibFad +EH62xsjxfLs2x3IVh70Scx4xg1onT3JKl63xqrjZkWTCFwayjDB71q4oN0s0mVms +ALTqs3umofHp94CKb6r02YYQVvw9mN1SFq24/pF+NCHHuHY0m0yhqBFV9yCaEc+j +wUTbulqPrJYP7tzmTJVyEunP91j49HohxIxFxOx65iIb8R7LpNx98w8pSXcaRfPb - - - - - - + + + + urn:oasis:names:tc:SAML:2.0:nameid-format:transient - - - + + MITD @@ -77,19 +74,12 @@ nxguHhdS/3W6txEA/23HRAp4XR7pKMAaAiujwd7fDG+62wGORWqxabC24rVrtNhK - + MITD Portal - - - MITD Portal VFP - - - - From 1e4b8cf65c7b73a43bcb9faa788acacd98342e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:19:28 +0100 Subject: [PATCH 04/49] feat: assistenza form (#318) * fix * progress * WIP * WIP * message-form progress * assistenza page progress * fix captcha * assistenza WIP * top assistenza page * added notify * message progress * fix package * fix package * assistenza fix event * fix * fix pa11y * fix lint * fix colors * fix graphics * fix lint * fixed url * fix seo * fix breadcrumb * page assistenza labels added * code clean and fixes * removed script tag * fix graphics * fix graphics Co-authored-by: emnlpstr Co-authored-by: RIDP9CT --- contents/assistenza/assistenza.yml | 1 + contents/errorsLabels.yml | 2 + contents/opportunity-page/opportunity.yml | 58 +- contents/seo.yml | 5 +- package.json | 1 + src/components/Breadcrumb.jsx | 52 +- src/components/modal/ModalMessage.jsx | 6 +- src/layouts/AssistenzaPage.jsx | 722 ++++++++++++++++++++++ src/pages/supporto/assistenza.jsx | 5 + static/assets/assistenza.svg | 29 + yarn.lock | 113 +++- 11 files changed, 940 insertions(+), 54 deletions(-) create mode 100644 contents/assistenza/assistenza.yml create mode 100644 contents/errorsLabels.yml create mode 100644 src/layouts/AssistenzaPage.jsx create mode 100644 src/pages/supporto/assistenza.jsx create mode 100644 static/assets/assistenza.svg diff --git a/contents/assistenza/assistenza.yml b/contents/assistenza/assistenza.yml new file mode 100644 index 000000000..72a5c1a25 --- /dev/null +++ b/contents/assistenza/assistenza.yml @@ -0,0 +1 @@ +breadcrumb: Assistenza \ No newline at end of file diff --git a/contents/errorsLabels.yml b/contents/errorsLabels.yml new file mode 100644 index 000000000..ef556472f --- /dev/null +++ b/contents/errorsLabels.yml @@ -0,0 +1,2 @@ +errors: + errorMatch: "Il valore inserito non è valido" \ No newline at end of file diff --git a/contents/opportunity-page/opportunity.yml b/contents/opportunity-page/opportunity.yml index 9cccbed2d..d245732ac 100644 --- a/contents/opportunity-page/opportunity.yml +++ b/contents/opportunity-page/opportunity.yml @@ -413,6 +413,52 @@ modal: label: Fornitore IT - value: other label: Altro + selectArgument: + - value: Accesso al portale + label: Accesso al portale + - value: Iscrizione alla newsletter + label: Iscrizione alla newsletter + - value: Misure + label: Misure + - value: Avvisi + label: Avvisi + - value: Enti beneficiari + label: Enti beneficiari + - value: Spese ammissibili + label: Spese ammissibili + - value: Generale + label: Generale + selectMeasure: + - value: Tutte + label: Tutte + - value: 1.1 Infrastrutture digitali + label: 1.1 Infrastrutture digitali + - value: 1.2 Abilitazione e facilitazione migrazione al Cloud + label: 1.2 Abilitazione e facilitazione migrazione al Cloud + - value: 1.3.1 Piattaforma Digitale Nazionale Dati + label: 1.3.1 Piattaforma Digitale Nazionale Dati + - value: 1.3.2 Sportello Digitale Unico + label: 1.3.2 Sportello Digitale Unico + - value: 1.4.1 Esperienza dei servizi pubblici + label: 1.4.1 Esperienza dei servizi pubblici + - value: 1.4.2 Accessibilità + label: 1.4.2 Accessibilità + - value: 1.4.3 Adozione PagoPA e app IO + label: 1.4.3 Adozione PagoPA e app IO + - value: 1.4.4 Adozione identità digitale + label: 1.4.4 Adozione identità digitale + - value: 1.4.5 Digitalizzazione degli avvisi pubblici + label: 1.4.5 Digitalizzazione degli avvisi pubblici + - value: 1.4.6 MaaS + label: 1.4.6 MaaS + - value: 1.5 Cybersecurity + label: 1.5 Cybersecurity + - value: 1.6 Digitalizzazione grandi amministrazioni centrali + label: 1.6 Digitalizzazione grandi amministrazioni centrali + - value: 1.7.1 Servizio civile digitale + label: 1.7.1 Servizio civile digitale + - value: 1.7.2 Centri di facilitazione digitale + label: 1.7.2 Centri di facilitazione digitale selectInQuanto: - value: dirigente-administration label: Dirigente dell’amministrazione @@ -441,9 +487,10 @@ modal: updatesInfo: Lascia i tuoi contatti per ricevere materiali e
informazioni
sulle novità e gli avvisi di Italia digitale 2026 mandatoryAdvise: I campi con * sono obbligatori requiredLabel: Questo campo è richiesto - emailLabel: EMAIL* + emailLabel: Email* emailValidationLabel: Per favore inserisci un'indirizzo email valido. - representLabel: RAPPRESENTO* + argumentLabel: Argomento* + measureLabel: Misura* selectPlaceholder: Scegli una voce dall’elenco enteValidationLabel: Per favore inserisci una denominazione ente valida. enteTypeLabel: TIPO DI ENTE/STRUTTURA* @@ -452,9 +499,14 @@ modal: directContactLabel: CONTATTO DIRETTO directContactInfo: Un Team dedicato è a tua disposizione per ricevere
chiarimenti
sugli investimenti o approfondire alcuni temi addMessageLabel: Voglio aggiungere un messaggio + nameLabel: Nome richiedente:* + objectLabel: Oggetto* messageSelectLabel: ARGOMENTO MESSAGGIO - messageLabel: TESTO MESSAGGIO + descriptionLabel: Testo messaggio* + telLabel: "Contatto telefonico" radioGroupLabel: DICHIARO + representLabel: RAPPRESENTO* + messageLabel: TESTO MESSAGGIO comunicationRadio: Acconsento a essere contattato per comunicazioni specifiche* privacyRadio: Ho letto e compreso privacyRadioLinkLabel: l’informativa privacy diff --git a/contents/seo.yml b/contents/seo.yml index a732b3458..150cd5f46 100644 --- a/contents/seo.yml +++ b/contents/seo.yml @@ -33,7 +33,10 @@ unsubscribePage: description: Annulla la tua email per ricevere agli aggiornamenti dalla piattaforma PA Digitale 2026 projectsSolutionPage: title: Presentazione progetti - PA digitale 2026 - description: Per le misure con una platea ristrettadi beneficiari (fino a 1.000 PA), è previstauna modalità di accesso attraversola presentazione di progetti, sempre ispirata ai principi della semplicità e della riduzione degli oneri amministrativi. + description: Per le misure con una platea ristrettadi beneficiari (fino a 1.000 PA), è previstauna modalità di accesso attraversola presentazione di progetti, sempre ispirata ai principi della semplicità e della riduzione degli oneri amministrativi. +assistenzaPage: + title: Assistenza - PA digitale 2026 + description: Un team dedicato è a tua disposizione per chiarire dubbi e approfondire temi di interesse. Compila il modulo sottostante e invia la richiesta. standardSolutionPage: title: Soluzioni standard - PA digitale 2026 description: Per le misure con una platea ampia di beneficiari (oltre 1.000 PA), è prevista una modalità di accesso per soluzioni standard. Un percorso semplificato e guidato che va dalla richiesta dei finanziamenti all'erogazione dei fondi. diff --git a/package.json b/package.json index 2d62511ea..adf1f89dd 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "prop-types": "^15.7.2", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-google-recaptcha": "^2.1.0", "react-google-recaptcha-v3": "^1.9.7", "react-helmet": "^6.1.0", "react-hook-form": "^7.17.1", diff --git a/src/components/Breadcrumb.jsx b/src/components/Breadcrumb.jsx index ba9141e2b..781a7e41f 100644 --- a/src/components/Breadcrumb.jsx +++ b/src/components/Breadcrumb.jsx @@ -1,31 +1,41 @@ import React from 'react'; import { Link } from 'gatsby'; import PropTypes from 'prop-types'; +import { createUseStyles } from 'react-jss'; import labels from '../../contents/labels.yml'; -export const Breadcrumb = ({ currentPage }) => ( -
-
-
- +const useStyles = createUseStyles({ + breadcrumb: { + paddingTop: '1.563rem', + }, +}); + +export const Breadcrumb = ({ currentPage }) => { + const classes = useStyles(); + return ( +
+
+
+ +
-
-); + ); +}; Breadcrumb.propTypes = { currentPage: PropTypes.string.isRequired, diff --git a/src/components/modal/ModalMessage.jsx b/src/components/modal/ModalMessage.jsx index 05a1b1b26..24eae697b 100644 --- a/src/components/modal/ModalMessage.jsx +++ b/src/components/modal/ModalMessage.jsx @@ -571,14 +571,14 @@ export const ModalMessage = () => { - + spinner
- */}
diff --git a/src/layouts/AssistenzaPage.jsx b/src/layouts/AssistenzaPage.jsx new file mode 100644 index 000000000..d1c814cb6 --- /dev/null +++ b/src/layouts/AssistenzaPage.jsx @@ -0,0 +1,722 @@ +/* eslint-disable react/no-unescaped-entities */ +/* eslint-disable sonarjs/no-duplicate-string */ +/* eslint-disable react-hooks/exhaustive-deps */ +/* eslint-disable sonarjs/no-all-duplicated-branches */ +/* eslint-disable sonarjs/no-identical-functions */ +/* eslint-disable sonarjs/cognitive-complexity */ +/* eslint-disable max-lines-per-function */ +/* eslint-disable arrow-body-style */ +import React, { useState, useEffect } from 'react'; +import { createUseStyles } from 'react-jss'; +import { announce } from '@react-aria/live-announcer'; +import { Row, Col, Input, Breadcrumb, BreadcrumbItem } from 'design-react-kit'; +import Select from 'react-select'; +import ReCAPTCHA from 'react-google-recaptcha'; +import content from '../../contents/opportunity-page/opportunity.yml'; +import notificationsLabel from '../../contents/notifications.yml'; +import errorsLabels from '../../contents/errorsLabels.yml'; +import links from '../../contents/links.yml'; +const { privacy } = links.internalLinks; +import seo from '../../contents/seo.yml'; +import { SEO } from '../components/SEO'; + +const { title: seoTitle, description: seoDescription } = seo.assistenzaPage; +const { successMessage: successLabels } = notificationsLabel; +const { errors } = errorsLabels; + +const useStyles = createUseStyles({ + modalUpdatesContainer: { + '&.modal-dialog': { + maxWidth: '90%', + '@media (max-width: 991px)': { + maxWidth: '100%', + margin: '0', + }, + }, + '&.modal-dialog .modal-content .modal-header': { + padding: '0', + marginBottom: '0.444rem', + }, + '&.modal-dialog .modal-content .modal-body': { + padding: '0', + marginTop: '2.667rem', + }, + '& .modal-content': { + padding: '4.444rem 5.556rem', + '@media (max-width: 991px)': { + padding: '3.778rem 0.833rem 4.444rem', + }, + }, + '&.modal-dialog .modal-content .modal-header .modal-title': { + fontSize: '1.333rem', + fontWeight: '700', + color: '#33485C', + maxWidth: '70%', + '@media (max-width: 991px)': { + maxWidth: '100%', + }, + }, + }, + close: { + '@media (max-width: 991px)': { + position: 'absolute', + top: '0.556rem', + right: '-0.5rem', + }, + '&:focus': { + outline: '2px solid #ff9900', + boxShadow: 'none', + }, + '&.btn': { + background: 'none', + boxShadow: 'none', + }, + '&.btn:hover': { + background: 'none', + }, + '&.btn.btn-secondary:active': { + background: 'none', + boxShadow: 'none', + }, + '&.btn span': { + fontSize: '0.778rem', + color: '#0066CC', + fontWeight: '600', + marginRight: '1.333rem', + '@media (max-width: 991px)': { + fontSize: '0.875rem', + }, + }, + }, + modalSubtitle: { + fontSize: '1rem', + color: '#33485C', + }, + formMessage: { + padding: '0 0 50px 0', + '& p': { + fontSize: '0.889rem', + color: '#33485C', + fontWeight: '400', + }, + '& [class$="-control"]': { + border: 'none', + borderBottom: '1px solid #5c6f82', + borderRadius: '0', + boxShadow: 'none', + }, + '& [class$="-ValueContainer"]': { + fontSize: '0.889rem', + color: '#808080', + }, + '& [class$="-indicatorSeparator"]': { + display: 'none', + }, + '& [class$="-menu"]': { + margin: '0', + border: 'none', + boxShadow: '0px 0px 80px rgba(0, 43, 85, 0.1)', + borderTopLeftRadius: '0', + borderTopRightRadius: '0', + borderBottomLeftRadius: '4px', + borderBottomRightRadius: '4px', + }, + '& [class$="-MenuList"]': { + padding: '0', + + '& [class$="-option"]': { + fontSize: '0.889rem', + color: '#0066CC', + background: '#fff', + }, + }, + '& [class$="-indicatorContainer"] svg': { + fill: '#33485C', + }, + '& [class$="-singleValue"]': { + fontSize: '0.889rem', + fontWeight: '700', + color: '#17324d', + }, + '& [class$="-placeholder"]': { + color: '#737374', + }, + '& .select.is-invalid [class$="-control"]': { + borderColor: '#F83E5A', + }, + '& .select.focused': { + borderColor: '#f90', + boxShadow: '0 0 0 2px #f90', + outline: '0', + }, + '& .form-check': { + borderBottom: '1px solid #e6e6e6', + padding: '1.111rem 0.444rem', + }, + '& .form-check .form-check-label': { + fontSize: '0.889rem', + fontWeight: '600', + color: '#17324D', + }, + '& .form-group': { + margin: '0', + }, + '& .form-group label': { + color: '#17324d', + textTransform: 'uppercase', + }, + '& .form-group input[type="text"]': { + fontSize: '0.889rem', + '&:focus': { + border: '2px solid #f90', + boxShadow: '0 0 0 2px #f90', + outline: '0', + }, + }, + '& .form-group input[type="text"].is-invalid': { + borderBottom: 'solid 2px #F83E5A', + }, + '& .invalid-feedback': { + color: '#F83E5A !important', + }, + '& small.error-label': { + fontSize: '0.778rem', + color: '#F83E5A', + padding: '0 0.444rem', + fontWeight: '400', + position: 'absolute', + }, + }, + modalLabel: { + fontSize: '0.778rem', + color: '#33485C', + fontWeight: '600', + }, + maxLengthLabel: { + fontSize: '0.778rem', + color: '#737374', + marginLeft: '0.444rem', + }, + selectLabel: { + fontSize: '0.778rem', + fontWeight: '600', + color: '#17324d', + padding: '0 0.563rem', + textTransform: 'uppercase', + marginBottom: '0', + }, + notification: { + composes: 'notification with-icon dismissable', + zIndex: '9999', + display: 'block', + opacity: '0', + visibility: 'hidden', + transition: '.3s ease', + bottom: 'unset', + top: '16px', + left: '50%', + transform: 'translateX(-50%)', + '&.show': { + opacity: '1', + visibility: 'visible', + transition: '.3s ease', + }, + '&.with-icon.success': { + borderColor: '#00CF86', + }, + }, + modalFooterLabel: { + composes: 'mb-3', + fontSize: '0.889rem', + }, + spinner: { + composes: 'spinner hidden ml-3', + maxHeight: '2.667rem', + '&.hidden': { + display: 'none', + }, + }, + titleUpdate: { + fontSize: '3rem', + fontWeight: '700', + color: '#33485C', + '@media (max-width: 991px)': { + fontSize: '2.25rem', + }, + }, + subtitleUpdate: { + fontSize: '1.333rem', + color: '#33485C', + lineHeight: '28px', + '@media (max-width: 991px)': { + fontSize: '1.125rem', + }, + }, + mandatory: { + fontSize: '1rem', + marginTop: '6.25rem', + '@media (min-width: 991px)': { + marginTop: '6.25rem', + }, + }, + heroImg: { + '@media (max-width: 991px)': { + width: '64%', + }, + }, + breadcrumb: { + paddingTop: '1.563rem', + '& .breadcrumb': { + paddingTop: '0', + }, + '@media (min-width: 991px)': { + marginLeft: '0.722rem', + }, + }, + breadcrumbItem: { + '& a': { + color: '#5B6F82', + fontWeight: '700', + textDecoration: 'underline', + }, + }, + breadcrumbItemActive: { + '& a': { + color: '#5B6F82', + textDecoration: 'none', + }, + }, +}); + +export const AssistenzaPage = () => { + const textareaMaxLength = 300; + const [textareaDescriptionState, setTextareaDescriptionState] = useState('not-active'); + const [formFilled, setFormFilled] = useState(false); + + const [optionSelected, setOptionSelected] = useState(); + + useEffect(() => { + setOptionSelected(new Event('selected')); + }, []); + + useEffect(() => { + const form = document.querySelector('#assistance-form'); + const inputArr = form.querySelectorAll('[required]:not(select)'); + const selectArr = form.querySelectorAll('select[required]'); + let noInputValue = true; + let noSelectValue = true; + + const inputHandler = () => { + noInputValue = Array.prototype.slice.call(inputArr).find((input) => { + return input.checkValidity() === false; + }); + noInputValue ? (noInputValue = true) : (noInputValue = false); + inputArr.forEach((input) => { + if (input.checkValidity()) { + input.classList.remove('is-invalid'); + const formGroup = input.closest('.form-group'); + const errorLabel = formGroup.querySelector('small'); + if (errorLabel) { + errorLabel.classList.remove('error-label'); + errorLabel.innerHTML = ''; + } + } + }); + setFormFilled(!noInputValue && !noSelectValue); + }; + + const selectHandler = () => { + noSelectValue = Array.prototype.slice.call(selectArr).find((select) => { + return select.value === ''; + }); + noSelectValue ? (noSelectValue = false) : (noSelectValue = true); + setFormFilled(!noInputValue && !noSelectValue); + }; + + inputArr.forEach((input) => { + input.addEventListener('input', inputHandler); + }); + selectArr.forEach((select) => { + select.addEventListener('selected', selectHandler); + }); + }, []); + + const textareaFocusHandler = () => { + setTextareaDescriptionState('active'); + }; + + const textareaFocusOutHandler = (event) => { + const currentTextarea = event.target; + if (currentTextarea.value === '') { + setTextareaDescriptionState(''); + } + }; + + const textareaInputHandler = (event) => { + const currentTextarea = event.target; + const currentContainer = currentTextarea.closest('.form-group'); + const number = currentContainer.querySelector('.max-length-number'); + number.innerHTML = textareaMaxLength - parseInt(event.target.value.length, 10); + announce('Numero di caratteri rimanenti: ' + number.innerHTML); + }; + + const classes = useStyles(); + + const onChangeCaptcha = (value) => { + if (value !== null || value.trim() !== '') { + const elems = JSON.parse(document.getElementsByName('captcha_settings')[0].value); + elems['ts'] = JSON.stringify(new Date().getTime()); + document.getElementsByName('captcha_settings')[0].value = JSON.stringify(elems); + document.getElementsByName('submit')[0].disabled = false; + } + }; + + const handleArgument = (element) => { + const argumentInput = document.querySelector('#argument-select-input'); + const selectWrapper = argumentInput.closest('.select-wrapper'); + const hiddenSelect = selectWrapper.querySelector('select'); + hiddenSelect.value = element.value; + hiddenSelect.dispatchEvent(optionSelected); + }; + + const handleMeasure = (element) => { + const measureInput = document.querySelector('#measure-select-input'); + const selectWrapper = measureInput.closest('.select-wrapper'); + const hiddenSelect = selectWrapper.querySelector('select'); + hiddenSelect.value = element.value; + hiddenSelect.dispatchEvent(optionSelected); + }; + + const customInvalid = (event) => { + event.preventDefault(); + const currentTarget = event.target; + const currentValue = currentTarget.value; + if (currentValue !== '') { + const currentPattern = currentTarget.getAttribute('pattern'); + const currentType = currentTarget.getAttribute('type'); + if (currentType === 'email') { + const inputContainer = currentTarget.closest('.form-group'); + const errorLabel = inputContainer.querySelector('small'); + errorLabel.classList.add('error-label'); + errorLabel.innerHTML = emailValidationLabel; + currentTarget.classList.add('is-invalid'); + } + if (currentPattern) { + const patternRegExp = new RegExp(currentPattern); + if (patternRegExp.test(currentValue)) { + return; + } else { + const inputContainer = currentTarget.closest('.form-group'); + const errorLabel = inputContainer.querySelector('small'); + errorLabel.classList.add('error-label'); + errorLabel.innerHTML = errorMatch; + currentTarget.classList.add('is-invalid'); + } + } + } + }; + + const formHandler = () => { + const notificationElement = document.querySelector('.notification'); + const titleElement = notificationElement.querySelector('h5'); + const descriptionElement = notificationElement.querySelector('p'); + notificationElement.classList.add('show'); + notificationElement.classList.add('success'); + + titleElement.innerHTML = `${successLabels.icon} ${successLabels.title}`; + descriptionElement.innerHTML = successLabels.description; + + setTimeout(() => { + notificationElement.classList.remove('show'); + }, 5000); + }; + + const { + selectArgument, + selectMeasure, + emailValidationLabel, + emailLabel, + argumentLabel, + measureLabel, + selectPlaceholder, + telLabel, + descriptionLabel, + objectLabel, + sendButtonLabel, + } = content.modal; + + const { errorMatch } = errors; + + return ( + <> + +
+ + + + + Home + + + + Supporto + + + + Assistenza + + + + +
+
+ + + +
Assistenza
+
+ Un team dedicato è a tua disposizione per chiarire dubbi e approfondire temi di interesse. Compila il + modulo sottostante e invia la richiesta. +
+ + + + +
+ + +
I campi con * sono obbligatori
+ +
+ + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + +
+ + + + + + + +
+ +
+ + + + + + + +
+ + + + {textareaMaxLength} caratteri a disposizione + +
+ +
+ + + + + + + + +
+

+ Cliccando su INVIA dichiaro di aver letto e compreso{' '} + + l'informativa privacy + +

+
+ +
+
+
+ + +
+
+ + ); +}; diff --git a/src/pages/supporto/assistenza.jsx b/src/pages/supporto/assistenza.jsx new file mode 100644 index 000000000..bc5608bd4 --- /dev/null +++ b/src/pages/supporto/assistenza.jsx @@ -0,0 +1,5 @@ +import React from 'react'; +import { AssistenzaPage } from '../../layouts/AssistenzaPage'; + +const Page = (location) => ; +export default Page; diff --git a/static/assets/assistenza.svg b/static/assets/assistenza.svg new file mode 100644 index 000000000..d26695e52 --- /dev/null +++ b/static/assets/assistenza.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/yarn.lock b/yarn.lock index dbde712f9..01d2f119e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1645,7 +1645,7 @@ sync-fetch "0.3.0" tslib "~2.2.0" valid-url "1.0.9" - ws "7.4.6" + ws "7.4.5" "@graphql-tools/utils@8.0.2": version "8.0.2" @@ -3008,7 +3008,17 @@ ansi-regex@^2.0.0: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -3775,7 +3785,7 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001251, caniuse-lite@^1.0.30001252: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz" integrity sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw== -caniuse-lite@^1.0.30001214: +caniuse-lite@^1.0.30001125: version "1.0.30001317" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz#0548fb28fd5bc259a70b8c1ffdbe598037666a1b" integrity sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ== @@ -4347,7 +4357,7 @@ cross-fetch@3.1.4: resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz" integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== dependencies: - node-fetch "2.6.7" + node-fetch "2.6.1" cross-spawn@7.0.3, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" @@ -4437,7 +4447,7 @@ css-select@^2.0.0: boolbase "^1.0.0" css-what "^3.2.1" domutils "^1.7.0" - nth-check "^2.0.1" + nth-check "^1.0.2" css-select@^4.1.3: version "4.1.3" @@ -4448,7 +4458,7 @@ css-select@^4.1.3: css-what "^5.0.0" domhandler "^4.2.0" domutils "^2.6.0" - nth-check "^2.0.1" + nth-check "^2.0.0" css-selector-parser@^1.0.0, css-selector-parser@^1.1.0: version "1.4.1" @@ -4911,6 +4921,13 @@ domelementtype@^2.0.1, domelementtype@^2.2.0: resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== +domhandler@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + domhandler@^4.0.0, domhandler@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz" @@ -4926,6 +4943,15 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" +domutils@^2.0.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: version "2.7.0" resolved "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz" @@ -4962,10 +4988,10 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.719: - version "1.4.86" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz#90fe4a9787f48d6522957213408e08a8126b2ebc" - integrity sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w== +electron-to-chromium@^1.3.564: + version "1.4.87" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.87.tgz#1aeacfa50b2fbf3ecf50a78fbebd8f259d4fe208" + integrity sha512-EXXTtDHFUKdFVkCnhauU7Xp8wmFC1ZG6GK9a1BeI2vvNhy61IwfNPo/CRexhf7mh4ajxAHJPind62BzpzVUeuQ== electron-to-chromium@^1.3.811: version "1.3.820" @@ -6416,7 +6442,7 @@ gatsby-transformer-remark@^3.2.0: remark-retext "^3.1.3" remark-stringify "6.0.4" retext-english "^3.0.4" - sanitize-html "^2.3.2" + sanitize-html "^1.27.5" underscore.string "^3.3.5" unified "^6.2.0" unist-util-remove-position "^1.1.4" @@ -6888,7 +6914,7 @@ graphql-compose@~7.25.0: integrity sha512-TPXTe1BoQkMjp/MH93yA0SQo8PiXxJAv6Eo6K/+kpJELM9l2jZnd5PCduweuXFcKv+nH973wn/VYzYKDMQ9YoQ== dependencies: graphql-type-json "0.3.2" - object-path "0.11.8" + object-path "0.11.5" graphql-config@^3.0.2: version "3.4.1" @@ -7212,7 +7238,17 @@ html_codesniffer@~2.4.1: resolved "https://registry.npmjs.org/html_codesniffer/-/html_codesniffer-2.4.1.tgz" integrity sha512-7g4Z8+7agJFi7XJGu2r0onIqA7ig9b26vFEvUE6DgtFJlJzy1ELYEKzzd5Xwam4xjHiHQ/w8yHO7KTGNcXnwzg== -htmlparser2@^6.0.0, htmlparser2@^6.1.0: +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + +htmlparser2@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== @@ -8661,7 +8697,7 @@ mdast-util-to-hast@^3.0.4: detab "^2.0.0" mdast-util-definitions "^1.2.0" mdurl "^1.0.1" - trim "0.0.3" + trim "0.0.1" trim-lines "^1.0.0" unist-builder "^1.0.1" unist-util-generated "^1.1.0" @@ -9167,7 +9203,7 @@ node-object-hash@^2.3.9: resolved "https://registry.npmjs.org/node-object-hash/-/node-object-hash-2.3.10.tgz" integrity sha512-jY5dPJzw6NHd/KPSfPKJ+IHoFS81/tJ43r34ZeNMXGzCOM8jwQDCD12HYayKIB6MuznrnqIYy2e891NA2g0ibA== -node-releases@^1.1.71: +node-releases@^1.1.61: version "1.1.77" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== @@ -10339,6 +10375,15 @@ prompts@^2.3.2: kleur "^3.0.3" sisteransi "^1.0.5" +prop-types@^15.5.0: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz" @@ -10521,6 +10566,14 @@ rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-async-script@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-async-script/-/react-async-script-1.2.0.tgz#ab9412a26f0b83f5e2e00de1d2befc9400834b21" + integrity sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q== + dependencies: + hoist-non-react-statics "^3.3.0" + prop-types "^15.5.0" + react-dev-utils@^11.0.3: version "11.0.4" resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz" @@ -10528,7 +10581,7 @@ react-dev-utils@^11.0.3: dependencies: "@babel/code-frame" "7.10.4" address "1.1.2" - browserslist "4.16.5" + browserslist "4.14.2" chalk "2.4.2" cross-spawn "7.0.3" detect-port-alt "1.1.6" @@ -10539,7 +10592,7 @@ react-dev-utils@^11.0.3: global-modules "2.0.0" globby "11.0.1" gzip-size "5.1.1" - immer "9.0.6" + immer "8.0.1" is-root "2.1.0" loader-utils "2.0.0" open "^7.0.2" @@ -10582,6 +10635,14 @@ react-google-recaptcha-v3@^1.9.7: dependencies: hoist-non-react-statics "^3.3.2" +react-google-recaptcha@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-google-recaptcha/-/react-google-recaptcha-2.1.0.tgz#9f6f4954ce49c1dedabc2c532347321d892d0a16" + integrity sha512-K9jr7e0CWFigi8KxC3WPvNqZZ47df2RrMAta6KmRoE4RUi7Ys6NmNjytpXpg4HI/svmQJLKR+PncEPaNJ98DqQ== + dependencies: + prop-types "^15.5.0" + react-async-script "^1.1.1" + react-helmet@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz" @@ -10604,7 +10665,7 @@ react-input-autosize@^3.0.0: dependencies: prop-types "^15.5.8" -react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -10968,7 +11029,7 @@ remark-parse@^6.0.0, remark-parse@^6.0.3: parse-entities "^1.1.0" repeat-string "^1.5.4" state-toggle "^1.0.0" - trim "0.0.3" + trim "0.0.1" trim-trailing-lines "^1.0.0" unherit "^1.0.4" unist-util-remove-position "^1.0.0" @@ -11240,7 +11301,7 @@ sanitize-html@^2.3.2: htmlparser2 "^6.0.0" is-plain-object "^5.0.0" parse-srcset "^1.0.2" - postcss "^8.3.11" + postcss "^7.0.27" sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" @@ -11890,28 +11951,28 @@ strip-ansi@6.0.0, strip-ansi@^6.0.0: resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: - ansi-regex "^5.0.1" + ansi-regex "^5.0.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: - ansi-regex "^5.0.1" + ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: - ansi-regex "^5.0.1" + ansi-regex "^3.0.0" strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - ansi-regex "^5.0.1" + ansi-regex "^4.1.0" strip-bom-string@^1.0.0: version "1.0.0" @@ -12631,7 +12692,7 @@ unist-util-select@^1.5.0: dependencies: css-selector-parser "^1.1.0" debug "^2.2.0" - nth-check "^2.0.1" + nth-check "^1.0.1" unist-util-select@^3.0.4: version "3.0.4" @@ -12640,7 +12701,7 @@ unist-util-select@^3.0.4: dependencies: css-selector-parser "^1.0.0" not "^0.1.0" - nth-check "^2.0.1" + nth-check "^2.0.0" unist-util-is "^4.0.0" zwitch "^1.0.0" From 8f4cd8b3320812e0bbcfff5ebf0d5e73aa6d1875 Mon Sep 17 00:00:00 2001 From: Fladiir Date: Mon, 21 Mar 2022 15:20:53 +0100 Subject: [PATCH 05/49] feat: page updates (#319) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * page updates * pa11y fix * pa11y fix * fix lint * remove comment block Co-authored-by: RIDP9CT Co-authored-by: lollomag <“lorenzo.cadente@accenture.com”> Co-authored-by: lollomag <“lorenzo.cadente@yahoo.it”> Co-authored-by: emnlpstr --- src/layouts/UpdatesPage.jsx | 577 +++++++++++++++++++++++++++++++++ src/pages/updates.jsx | 5 + static/assets/updates-icon.svg | 23 ++ 3 files changed, 605 insertions(+) create mode 100644 src/layouts/UpdatesPage.jsx create mode 100644 src/pages/updates.jsx create mode 100644 static/assets/updates-icon.svg diff --git a/src/layouts/UpdatesPage.jsx b/src/layouts/UpdatesPage.jsx new file mode 100644 index 000000000..c0f31dacc --- /dev/null +++ b/src/layouts/UpdatesPage.jsx @@ -0,0 +1,577 @@ +/* eslint-disable react/no-unescaped-entities */ +/* eslint-disable max-lines-per-function */ +/* eslint-disable sonarjs/cognitive-complexity */ +import React, { useState, useEffect } from 'react'; +// import PropTypes from 'prop-types'; +import { useForm, Controller } from 'react-hook-form'; +import { createUseStyles } from 'react-jss'; +import { Row, Col, Button, Input } from 'design-react-kit'; +import Select from 'react-select'; +import { announce } from '@react-aria/live-announcer'; +import { graphql, useStaticQuery } from 'gatsby'; +import seo from '../../contents/seo.yml'; +import { SEO } from '../components/SEO'; +import content from '../../contents/opportunity-page/opportunity.yml'; +import links from '../../contents/links.yml'; +import notificationsLabel from '../../contents/notifications.yml'; + +const { success: successLabels, error: errorLabels, errorAddress: errorAddressLabel } = notificationsLabel; +const { title: seoTitle, description: seoDescription } = seo.supportPage; +const { privacy } = links.internalLinks; + +const useStyles = createUseStyles({ + modalUpdatesContainer: { + '&.modal-dialog': { + maxWidth: '90%', + '@media (max-width: 991px)': { + maxWidth: '100%', + margin: '0', + }, + }, + '&.modal-dialog .modal-content .modal-header': { + padding: '0', + marginBottom: '0.444rem', + }, + '&.modal-dialog .modal-content .modal-body': { + padding: '0', + marginTop: '2.667rem', + }, + '& .modal-content': { + padding: '4.444rem 5.556rem', + '@media (max-width: 991px)': { + padding: '3.778rem 0.833rem 4.444rem', + }, + }, + '&.modal-dialog .modal-content .modal-header .modal-title': { + fontSize: '1.333rem', + fontWeight: '700', + color: '#33485C', + maxWidth: '70%', + '@media (max-width: 991px)': { + maxWidth: '100%', + }, + }, + }, + close: { + '@media (max-width: 991px)': { + position: 'absolute', + top: '0.556rem', + right: '-0.5rem', + }, + '&:focus': { + outline: '2px solid #ff9900', + boxShadow: 'none', + }, + '&.btn': { + background: 'none', + boxShadow: 'none', + }, + '&.btn:hover': { + background: 'none', + }, + '&.btn.btn-secondary:active': { + background: 'none', + boxShadow: 'none', + }, + '&.btn span': { + fontSize: '0.778rem', + color: '#0066CC', + fontWeight: '600', + marginRight: '1.333rem', + '@media (max-width: 991px)': { + fontSize: '0.875rem', + }, + }, + }, + formBody: { + padding: '0', + marginBottom: '50px', + '& p': { + fontSize: '0.889rem', + color: '#33485C', + fontWeight: '400', + }, + '& [class$="-control"]': { + border: 'none', + borderBottom: '2px solid #5c6f82', + borderRadius: '0', + boxShadow: 'none', + }, + '& [class$="-ValueContainer"]': { + paddingLeft: '1.333rem', + fontSize: '0.889rem', + color: '#808080', + }, + '& [class$="-placeholder"]': { + color: '#767676', + }, + '& [class$="-indicatorSeparator"]': { + display: 'none', + }, + '& [class$="-menu"]': { + margin: '0', + border: 'none', + boxShadow: '0px 0px 80px rgba(0, 43, 85, 0.1)', + borderTopLeftRadius: '0', + borderTopRightRadius: '0', + borderBottomLeftRadius: '4px', + borderBottomRightRadius: '4px', + }, + '& [class$="-MenuList"]': { + padding: '0', + + '& [class$="-option"]': { + fontSize: '0.889rem', + color: '#0066CC', + background: '#fff', + }, + }, + '& [class$="-indicatorContainer"] svg': { + fill: '#33485C', + }, + '& [class$="-singleValue"]': { + fontSize: '0.889rem', + fontWeight: '700', + color: '#000', + }, + '& .select.is-invalid [class$="-control"]': { + borderColor: '#F83E5A', + }, + '& .select.focused': { + borderColor: '#f90', + boxShadow: '0 0 0 2px #f90', + outline: '0', + }, + '& .form-check': { + borderBottom: '1px solid #e6e6e6', + padding: '1.111rem 0.444rem', + }, + '& .form-check .form-check-label': { + fontSize: '0.889rem', + fontWeight: '600', + color: '#17324D', + }, + '& .form-group': { + margin: '0', + }, + '& .form-group input[type="text"]': { + paddingLeft: '1.333rem', + fontSize: '0.889rem', + '&:focus': { + border: '2px solid #f90', + boxShadow: '0 0 0 2px #f90', + outline: '0', + }, + }, + '& .form-group input[type="text"].is-invalid': { + borderBottom: 'solid 2px #F83E5A', + }, + '& .invalid-feedback': { + color: '#F83E5A !important', + }, + }, + enteContainer: { + '&.hidden': { + display: 'none', + }, + }, + errorLabel: { + fontSize: '0.778rem', + color: '#F83E5A', + padding: '0 0.444rem', + fontWeight: '400', + }, + selectLabel: { + fontSize: '0.778rem', + fontWeight: '600', + color: '#33485C', + }, + notification: { + composes: 'notification with-icon dismissable', + zIndex: '9999', + display: 'block', + opacity: '0', + visibility: 'hidden', + transition: '.3s ease', + bottom: 'unset', + top: '16px', + left: '50%', + transform: 'translateX(-50%)', + '&.show': { + opacity: '1', + visibility: 'visible', + transition: '.3s ease', + }, + '&.with-icon.success': { + borderColor: '#00CF86', + }, + }, + formFooterLabel: { + composes: 'mb-3', + fontSize: '0.889rem', + color: '#000', + }, + spinner: { + composes: 'spinner hidden ml-3', + maxHeight: '2.667rem', + '&.hidden': { + display: 'none', + }, + }, + titleUpdate: { + fontSize: '48px', + fontWeight: '700', + color: '#33485C', + }, + subtitleUpdate: { + fontSize: '24px', + color: '#33485C', + lineHeight: '28px', + }, +}); + +const query = graphql` + query { + site { + siteMetadata { + apiUrl + } + } + } +`; + +export const UpdatesPage = () => { + const [selectValue] = useState(null); + const [enteState] = useState(''); + const { + site: { + siteMetadata: { apiUrl }, + }, + } = useStaticQuery(query); + + const { + control, + handleSubmit, + formState: { errors }, + } = useForm(); + + const classes = useStyles(); + + useEffect(() => {}, [selectValue]); + + const onSubmit = async (data, event) => { + console.log(data); + Object.keys(data).map(function (key) { + if (data[key] === undefined) { + delete data[key]; + } + if (key === 'enteSelect' || key === 'representative' || key === 'messageSelect') { + data[key] = data[key]?.value; + } + }); + + const spinner = document.querySelector('.spinner'); + spinner.classList.remove('hidden'); + + const notificationElement = document.querySelector('.notification'); + const titleElement = notificationElement.querySelector('h5'); + const descriptionElement = notificationElement.querySelector('p'); + const modalCloseBtn = event.target.closest('.modal-content').querySelector('.modal-header .btn'); + + const closeNotification = notificationElement.querySelector('.notification-close'); + + const closeNotificationHandler = (event) => { + event.target.closest('.notification').classList.remove('show'); + closeNotification.removeEventListener('click', closeNotificationHandler); + }; + closeNotification.addEventListener('click', closeNotificationHandler); + + fetch(`${apiUrl}/users`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }) + .then(async (response) => { + const data = await response.json(); + const status = response.status; + setTimeout(() => { + if (status >= 200 && status <= 299) { + modalCloseBtn.click(); + notificationElement.classList.add('show'); + notificationElement.classList.add('success'); + + titleElement.innerHTML = `${successLabels.icon} ${successLabels.title}`; + descriptionElement.innerHTML = successLabels.description; + announce('Inviato con successo'); + setTimeout(() => { + notificationElement.classList.remove('show'); + }, 5000); + } else { + notificationElement.classList.add('show'); + notificationElement.classList.add('error'); + announce("Errore nell'invio"); + if (data.message.includes('already exists')) { + titleElement.innerHTML = `${errorLabels.icon} ${errorAddressLabel.title}`; + descriptionElement.innerHTML = errorAddressLabel.description; + } else { + titleElement.innerHTML = `${errorLabels.icon} ${errorLabels.title}`; + descriptionElement.innerHTML = errorLabels.description; + } + } + }, 500); + }) + .catch((error) => { + console.log(error); + }) + .then(() => { + spinner.classList.add('hidden'); + announce('Invio in corso'); + }); + }; + + const onError = async (data) => { + console.log('error', data); + }; + + useEffect(() => { + announce('Pagina caricata ' + content.name); + }, []); + + const { + selectRepresent, + selectInQuanto, + mandatoryAdvise, + requiredLabel, + emailValidationLabel, + emailLabel, + representLabel, + selectPlaceholder, + enteValidationLabel, + enteTypeLabel, + enteNameLabel, + inQuantoLabel, + sendButtonLabel, + } = content.modal; + return ( + <> + +
+

{content.name}

+
+
+
+
+
+ + + +
Ricevi Aggiornamenti
+
+ Ricevi materiali e informazioni sulle novità e gli avvisi di Italia digitale 2026. +
+ + + + +
+
+ + +

+ +
+ + + ( + <> + + + {errors.address && errors.address.message} + + + )} + /> + + + + ( + + + {errors.enteType && errors.enteType.message} + + + )} + /> + + +
+ + + ( + <> + + + {errors.ente && errors.ente.message} + + + )} + /> + + +
+ + + + ( + @@ -555,8 +547,6 @@ export const AssistenzaPage = () => { placeholder={selectPlaceholder} aria-label={selectPlaceholder} aria-describedby="mandatory-label" - /* aria-invalid={errors.representative && 'true'} - aria-labelledby={errors.representative && 'error-represent'} */ className={`select`} /> {

Cliccando su INVIA dichiaro di aver letto e compreso{' '} - l'informativa privacy + l'informativa privacy

diff --git a/src/layouts/UpdatesPage.jsx b/src/layouts/UpdatesPage.jsx index dafe3d25e..5f4ded1bb 100644 --- a/src/layouts/UpdatesPage.jsx +++ b/src/layouts/UpdatesPage.jsx @@ -2,7 +2,6 @@ /* eslint-disable max-lines-per-function */ /* eslint-disable sonarjs/cognitive-complexity */ import React, { useState, useEffect } from 'react'; -// import PropTypes from 'prop-types'; import { useForm, Controller } from 'react-hook-form'; import { createUseStyles } from 'react-jss'; import { Row, Col, Button, Input } from 'design-react-kit'; @@ -281,7 +280,7 @@ export const UpdatesPage = () => { useEffect(() => {}, [selectValue]); - const onSubmit = async (data, event) => { + const onSubmit = async (data) => { console.log(data); Object.keys(data).map(function (key) { if (data[key] === undefined) { @@ -298,7 +297,6 @@ export const UpdatesPage = () => { const notificationElement = document.querySelector('.notification'); const titleElement = notificationElement.querySelector('h5'); const descriptionElement = notificationElement.querySelector('p'); - const modalCloseBtn = event.target.closest('.modal-content').querySelector('.modal-header .btn'); const closeNotification = notificationElement.querySelector('.notification-close'); @@ -320,7 +318,6 @@ export const UpdatesPage = () => { const status = response.status; setTimeout(() => { if (status >= 200 && status <= 299) { - modalCloseBtn.click(); notificationElement.classList.add('show'); notificationElement.classList.add('success'); From ebb441a7d15a1564e360987a09bff6e47f881a2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Tue, 22 Mar 2022 22:03:43 +0100 Subject: [PATCH 12/49] fix: links in support pages (#327) * fix links * fix lint Co-authored-by: emnlpstr --- contents/home-page/home.yml | 4 +-- src/layouts/IndexPage.jsx | 15 ++--------- src/layouts/faq/SupportSection.jsx | 26 +++---------------- src/layouts/support/Assistance.jsx | 16 +++--------- .../ricevi-aggiornamenti.jsx} | 2 +- 5 files changed, 13 insertions(+), 50 deletions(-) rename src/pages/{updates.jsx => supporto/ricevi-aggiornamenti.jsx} (66%) diff --git a/contents/home-page/home.yml b/contents/home-page/home.yml index 377f749d0..3670f284b 100644 --- a/contents/home-page/home.yml +++ b/contents/home-page/home.yml @@ -138,10 +138,10 @@ support: cards: - title: Domande frequenti description: Scopri i dettagli dell’iniziativa e le informazioni chiave sulle opportunità del PNRR - isModal: false + link: /supporto/faq - title: Contatti description: Compila il modulo per inviarci i tuoi suggerimenti o per avere chiarimenti sull’iniziativa - isModal: true + link: /supporto/ricevi-aggiornamenti heroMain: category: 'le misure del pnrr' title: Il punto di accesso alle risorse per la transizione digitale della PA diff --git a/src/layouts/IndexPage.jsx b/src/layouts/IndexPage.jsx index 215fc9add..949217fe2 100644 --- a/src/layouts/IndexPage.jsx +++ b/src/layouts/IndexPage.jsx @@ -1,4 +1,4 @@ -import React, { useContext, useEffect } from 'react'; +import React, { useEffect } from 'react'; import { createUseStyles } from 'react-jss'; import { announce } from '@react-aria/live-announcer'; import { @@ -20,7 +20,6 @@ import { HomeCarousel } from '../components/carousel/HomeCarousel'; import { SEO } from '../components/SEO'; import seo from '../../contents/seo.yml'; import labels from '../../contents/labels.yml'; -import { GlobalStateContext } from '../context/globalContext'; import { SupportSection } from './faq/SupportSection'; import { OpportunitySection } from './home/OpportunitySection'; @@ -47,7 +46,6 @@ const useStyles = createUseStyles({ export const IndexPage = () => { const classes = useStyles(); - const [, dispatch] = useContext(GlobalStateContext); useEffect(() => { announce('Pagina caricata ' + name); @@ -101,16 +99,7 @@ export const IndexPage = () => { titleId="home-italia-digitale" /> - { - dispatch({ - type: 'SET:TOGGLE_MODAL_MESSAGE', - }); - }} - /> + ); }; diff --git a/src/layouts/faq/SupportSection.jsx b/src/layouts/faq/SupportSection.jsx index 17034d61e..97cd96efc 100644 --- a/src/layouts/faq/SupportSection.jsx +++ b/src/layouts/faq/SupportSection.jsx @@ -109,7 +109,7 @@ const useStyles = createUseStyles({ export const SupportSection = (props) => { const classes = useStyles(); - const { title, supportList, buttonLabel, handleToggle } = props; + const { title, supportList, buttonLabel } = props; return ( <>
@@ -128,25 +128,8 @@ export const SupportSection = (props) => { {supportList.map((card) => ( - {card.isModal ? ( -
- - - - {card.title} - - {card.description} - - -
- ) : ( - + { + @@ -156,7 +139,7 @@ export const SupportSection = (props) => { - )} + } ))}
@@ -185,5 +168,4 @@ SupportSection.propTypes = { title: PropTypes.string, supportList: PropTypes.array, buttonLabel: PropTypes.string, - handleToggle: PropTypes.func, }; diff --git a/src/layouts/support/Assistance.jsx b/src/layouts/support/Assistance.jsx index 0221709f4..c4167fa16 100644 --- a/src/layouts/support/Assistance.jsx +++ b/src/layouts/support/Assistance.jsx @@ -1,14 +1,13 @@ /* eslint-disable prettier/prettier */ -import React, { useContext } from 'react'; +import React from 'react'; import { createUseStyles } from 'react-jss'; -import { Button } from 'design-react-kit'; +import { Link } from 'gatsby'; import { HeroTitle } from '../../components/hero/HeroTitle'; import { HeroBody } from '../../components/hero/HeroBody'; import { HeroCtaContainer } from '../../components/hero/HeroCtaContainer'; import { HeroGraphic } from '../../components/hero/HeroGraphic'; import { Hero } from '../../components/hero/Hero'; import content from '../../../contents/support-page/support.yml'; -import { GlobalStateContext } from '../../context/globalContext'; const { heroAssistance: { title, body, btnText }, @@ -37,7 +36,6 @@ const useStyle = createUseStyles({ export const Assistance = () => { const classes = useStyle(); - const [, dispatch] = useContext(GlobalStateContext); return ( @@ -47,15 +45,9 @@ export const Assistance = () => { - +
diff --git a/src/pages/updates.jsx b/src/pages/supporto/ricevi-aggiornamenti.jsx similarity index 66% rename from src/pages/updates.jsx rename to src/pages/supporto/ricevi-aggiornamenti.jsx index 7d5050fd2..35f736664 100644 --- a/src/pages/updates.jsx +++ b/src/pages/supporto/ricevi-aggiornamenti.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { UpdatesPage } from '../layouts/UpdatesPage'; +import { UpdatesPage } from '../../layouts/UpdatesPage'; const Page = () => ; export default Page; From e59cdc24b50f0b8be63ff507040b0d0b5b59552f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Wed, 23 Mar 2022 09:20:27 +0100 Subject: [PATCH 13/49] chore: refactor notices section (#295) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP * WIP * WIP * WIP * remove user and password * change json * add comment * change home components * clean code * clean code * fix errors and fetch news * fix pa11y errors * fix pa11y errors * fix lint errors * removed comment block * fix url fetch api Co-authored-by: lollomag <“lorenzo.cadente@yahoo.it”> Co-authored-by: emnlpstr --- contents/home-page/home.yml | 48 ++++- src/components/carousel/Carousel.jsx | 42 ++++- src/components/carousel/NoticesCarousel.jsx | 175 ++++++++++++++++++ src/components/hero/HeroImage.jsx | 46 ++++- src/layouts/Header.jsx | 53 ++++++ src/layouts/IndexPage.jsx | 86 +++++---- .../assets/Classificazione_Dati_e_Servizi.svg | 84 +++++++++ static/assets/home-candidature.svg | 118 ++++++++++++ static/assets/icona-home-banner.svg | 82 ++++++++ 9 files changed, 684 insertions(+), 50 deletions(-) create mode 100644 src/components/carousel/NoticesCarousel.jsx create mode 100644 static/assets/Classificazione_Dati_e_Servizi.svg create mode 100644 static/assets/home-candidature.svg create mode 100644 static/assets/icona-home-banner.svg diff --git a/contents/home-page/home.yml b/contents/home-page/home.yml index 3670f284b..5268b3b7d 100644 --- a/contents/home-page/home.yml +++ b/contents/home-page/home.yml @@ -1,5 +1,11 @@ name: Homepage - PA digitale 2026 headerTitle: Dipartimento per la trasformazione digitale +heroMainBanner: + title: Entra in PA digitale 2026 + body: PA digitale 2026 è il punto di accesso alle risorse per la transizione digitale.Accedi alla piattaforma e attiva il profilo della tua PA. Scopri come candidare la tua amministrazione agli avvisi e richiedere i fondi. + firstButtonLabel: SCOPRI DI PIù + firstButtonAriaLabel: Scopri di più (Collegamento esterno - Apre su nuova scheda) + linkTo: https://innovazione.gov.it/dipartimento/focus/italia-digitale-2026/ heroDigital: title: Italia digitale 2026 body: Il 27% delle risorse totali del PNRR è dedicato alla crescita digitale del Paese. Italia digitale 2026 è la strategia promossa dal Ministro per l'innovazione tecnologica e la transizione digitale all’interno del PNRR @@ -7,12 +13,17 @@ heroDigital: firstButtonAriaLabel: VAI AL SITO Italia digitale 2026 (Collegamento esterno - Apre su nuova scheda) linkTo: https://innovazione.gov.it/dipartimento/focus/italia-digitale-2026/ heroPnrr: - category: COME FUNZIONA PA digitale 2026 - title: Come accedere alle misure del PNRR - body: PA digitale 2026 è la piattaforma per accedere alle risorse dedicate alla transizione digitale e assistere le amministrazioni nel percorso verso Italia digitale 2026 + category: Classificazione + title: Classificazione dati
e servizi + body: La classificazione dati e servizi digitali deve essere effettuata da tutte le PA ed è necessaria per avviare il processo di migrazione al cloud. + firstButtonLabel: SCOPRI DI PIÙ + firstButtonAriaLabel: Scopri di più (Collegamento esterno - Apre su nuova scheda) +heroClassificazione: + category: CANDIDATURE + title: Candida la tua PA agli avvisi dedicati + body: Partecipa agli avvisi per richiedere i finanziamenti e avviare il processo di transizione digitale. firstButtonLabel: SCOPRI DI PIÙ - firstButtonAriaLabel: Scopri di più su come accedere alle opportunità del PNRR - secondButtonLabel: VEDI I BENEFICIARI + firstButtonAriaLabel: Scopri di più (Collegamento esterno - Apre su nuova scheda) heroContribute: category: Come contribuire title: Partecipa al cambiamento, contribuisci a Identità Digitale! @@ -37,6 +48,33 @@ contributions: alt: GitHub logo title: GitHub heroCarouselNewsTitle: Notizie e aggiornamenti +noticesCarouselTitle: Avvisi pubblici +noticesCarouselArchive: +- dataFine: '2022-02-28' + titolo: Comuni capoluogo di Città metropolitane hanno presentato progetti + codiceBando: a015t0000029a6uAAA + dataInizio: '2022-02-07' + nomeDellaMisura: 1.2 Abilitazione e facilitazione migrazione al Cloud +- dataFine: '2022-02-28' + titolo: Test report + codiceBando: a017Y00000QN2NjQAL + dataInizio: '2022-02-22' + nomeDellaMisura: 1.4.4 Adozione identità digitale +- dataFine: '2022-02-28' + titolo: 1.4.3 Adozione PagoPA e AppIO + codiceBando: a015t0000028X0CAAU + dataInizio: '2022-02-23' + nomeDellaMisura: Test report +- dataFine: '2022-02-28' + Titolo: SDM + codiceBando: a017Y00000QN8zlQAD + dataInizio: '2022-02-19' + nomeDellaMisura: 1.2 Abilitazione e facilitazione migrazione al Cloud +- dataFine: '2022-03-08' + titolo: Avviso 3 + codiceBando: a015t0000029bipAAA + dataInizio: '2022-02-08' + nomeDellaMisura: 1.2 Abilitazione e facilitazione migrazione al Cloud opportunity: title: Le misure cards: diff --git a/src/components/carousel/Carousel.jsx b/src/components/carousel/Carousel.jsx index 0dca8d732..37b1ad4c4 100644 --- a/src/components/carousel/Carousel.jsx +++ b/src/components/carousel/Carousel.jsx @@ -70,14 +70,14 @@ const useStyles = createUseStyles({ }, }, heroCarouselTitle: { - color: '#fff', + color: '#33485C', fontSize: '1.556rem', + fontWeight: '600', whiteSpace: 'nowrap', - backgroundColor: '#0066CC', }, newsUpdateSection: { backgroundColor: '#fff', - padding: '1.111rem 0 4rem', + padding: '6rem 0 4rem', '& .swiper': { margin: '0 -1.111rem', '@media (max-width: 992px)': { @@ -102,6 +102,25 @@ const useStyles = createUseStyles({ textDecoration: 'none', marginTop: 'auto', }, + titleLink: { + fontSize: '1rem', + color: '#33485C', + fontWeight: '600', + textDecoration: 'none', + '&:hover': { + textDecoration: 'underline', + }, + '& .source': { + display: 'flex', + alignItems: 'center', + '@media (max-width: 992px)': { + marginTop: '0.5rem', + }, + }, + '& img': { + marginLeft: '0.5rem', + }, + }, }); // const carousel = React.createRef(); @@ -137,11 +156,24 @@ export const HeroCarousel = ({ content, title }) => {
{title ? ( - + + + +
+ Scopri tutto su innovazione.gov.it + +
+
+
) : ( '' @@ -156,7 +188,7 @@ export const HeroCarousel = ({ content, title }) => { }} pagination title={title} - id="news-carousel" + idCarousel="news-carousel" />
diff --git a/src/components/carousel/NoticesCarousel.jsx b/src/components/carousel/NoticesCarousel.jsx new file mode 100644 index 000000000..29afb88c3 --- /dev/null +++ b/src/components/carousel/NoticesCarousel.jsx @@ -0,0 +1,175 @@ +import React from 'react'; +import { createUseStyles } from 'react-jss'; +import { Row, Col, Card, CardBody, CardTitle } from 'design-react-kit'; +import PropTypes from 'prop-types'; +import { DesktopSwiper } from '../DesktopSwiper'; +import { ExternalLink } from '../ExternalLink'; + +const useStyles = createUseStyles({ + heroCards: { + composes: 'card-bg rounded', + height: '100%', + border: '0.5px solid #979797', + boxShadow: '0px 0px 80px rgba(0, 43, 85, 0.05)', + '&.card.card-bg': { + borderRight: '0.5px solid #979797', + '@media (max-width: 992px)': { + marginLeft: '0', + }, + }, + '& .card-body': { + // boxShadow: '0px 0px 20px rgb(0 43 85 / 4%);', + display: 'flex', + flexDirection: 'column', + '& .category': { + fontSize: '0.778rem', + fontWeight: '600', + color: '#33485C', + marginBottom: '1rem', + textTransform: 'uppercase', + }, + '& .card-text': { + color: '#33485C', + fontSize: '1rem', + fontFamily: 'Titillium Web', + fontWeight: '400', + lineHeight: '1.24', + marginBottom: '1.125rem', + '@media (min-width: 992px)': { + marginBottom: '0.778rem', + fontSize: '0.889rem', + lineHeight: '1.44', + }, + }, + '& .source': { + color: '#33485C', + fontSize: '1rem', + fontWeight: '600', + lineHeight: '1.24', + display: 'inline-flex', + alignItems: 'center', + '@media (min-width: 992px)': { + fontSize: '0.889rem', + lineHeight: '1.44', + }, + '& img': { + marginLeft: '0.278rem', + }, + }, + }, + '&.card:after': { + content: 'none', + }, + }, + noticesCarouselTitle: { + color: '#33485C', + fontSize: '1.556rem', + whiteSpace: 'nowrap', + fontWeight: '600', + margin: 0, + }, + noticesSection: { + backgroundColor: '#fff', + padding: '3rem 0 4rem', + '& .swiper': { + margin: '0 -1.111rem', + '@media (max-width: 992px)': { + margin: '0', + }, + }, + '& .swiper-wrapper': { + padding: '1rem 1.667rem 1.667rem', + margin: '0 -1.667rem -1.667rem', + '@media (max-width: 992px)': { + margin: '0 -1.667rem -1.667rem', + }, + }, + '& .swiper-slider': { + padding: '1.111rem', + }, + '& .swiper-pagination.swiper-pagination-bullets .swiper-pagination-bullet': { + margin: '0 0.889rem', + }, + }, + noticeLabel: { + fontSize: '0.778rem', + fontWeight: '400', + lineHeight: '1.444rem', + marginBottom: '1.389rem', + }, + dueDate: { + fontSize: '0.778rem', + fontWeight: '700', + lineHeight: '1.444rem', + }, + dueDateDigit: { + fontSize: '0.833rem', + fontWeight: '400', + }, + noticeInfo: { + fontSize: '1.111', + fontWeight: '700', + lineHeight: '1.444rem', + color: '#06c', + }, +}); +// const carousel = React.createRef(); + +export const NoticesCarousel = ({ content, title }) => { + const classes = useStyles(); + const records = content; + const slides = records.map((element) => ( + <> + + + + + CANDIDATURE Fino al {element.dataFine} + + + {element.nomeDellaMisura} + +

{element.titolo}

+
+
+
+ + )); + + return ( + <> +
+
+ {title ? ( + + + + + + ) : ( + '' + )} + +
+
+ + ); +}; + +NoticesCarousel.propTypes = { + content: PropTypes.array.isRequired, + title: PropTypes.string, +}; diff --git a/src/components/hero/HeroImage.jsx b/src/components/hero/HeroImage.jsx index 8ea70746d..e8e81f66c 100644 --- a/src/components/hero/HeroImage.jsx +++ b/src/components/hero/HeroImage.jsx @@ -28,6 +28,12 @@ const useStyles = createUseStyles({ color: ['var(--white)', '!important'], }, }, + heroSectionDark: { + backgroundColor: '#0066CC', + }, + heroSectionLight: { + backgroundColor: '#F0F6FC', + }, heroTitle: { composes: 'hero-title', color: '#33485C', @@ -44,6 +50,11 @@ const useStyles = createUseStyles({ }, }, }, + outlineBtn: { + backgroundColor: '#fff', + border: '1px solid #06c', + color: '#06c', + }, heroImage: { composes: 'row align-items-center', '@media (min-width: 768px)': { @@ -92,12 +103,31 @@ const useStyles = createUseStyles({ width: '220px', }, }, + '&.hero-main .hero-title': { + fontSize: '2.222rem', + color: '#fff', + }, + '&.hero-main .hero-body': { + color: '#fff', + }, + '&.hero-main .btn': { + backgroundColor: '#fff', + color: '#0066CC', + fontWeight: 'bold', + '&:hover': { + color: '#004d99', + }, + }, }, }); export const HeroImage = ({ ctaContainer, smallText, + mainHero, + dark, + light, + outlineBtn, category, title, body, @@ -115,8 +145,12 @@ export const HeroImage = ({ const [, dispatch] = useContext(GlobalStateContext); return ( - -
+ +
{category ? : ''} @@ -127,7 +161,9 @@ export const HeroImage = ({ {firstInternal ? ( @@ -188,4 +224,8 @@ HeroImage.propTypes = { imageUrl: PropTypes.string, imageAlt: PropTypes.string, heroTitleId: PropTypes.string, + mainHero: PropTypes.bool, + dark: PropTypes.bool, + light: PropTypes.bool, + outlineBtn: PropTypes.bool, }; diff --git a/src/layouts/Header.jsx b/src/layouts/Header.jsx index ff00a50c8..eba09d71f 100644 --- a/src/layouts/Header.jsx +++ b/src/layouts/Header.jsx @@ -81,6 +81,25 @@ const useStyle = createUseStyles({ }, topListLink: { composes: 'border-0 p-0 mr-0', + '& .list-item': { + display: 'inline-flex', + alignItems: 'center', + }, + '& .list-item-link': { + display: 'inline-flex', + padding: '0', + alignItems: 'center', + '& img': { + maxHeight: '32px', + '&.eu-logo': { + marginLeft: '32px', + }, + '&.user-logo': { + maxHeight: '24px', + marginRight: '10px', + }, + }, + }, }, headerCenterWrapper: { height: 'auto', @@ -319,7 +338,36 @@ const SlimHeader = () => { aria-label="Italia domani - PNRR (Collegamento esterno - Apre su nuova scheda)" > {externalLinks.pnrr.label} + + {externalLinks.eu.label} + + {/* */} + + {externalLinks.eu.label} + Accedi + + {/* */}
@@ -430,6 +478,11 @@ const NavHeader = () => { {internalLinks.opportunity.label} + + + Gli avvisi + + { const classes = useStyles(); + const [newsList, setNewsList] = useState([]); + useEffect(() => { - announce('Pagina caricata ' + name); + (async () => { + try { + await fetch(`https://github.com/teamdigitale/padigitale2026-opendata`) + .then((res) => res.json()) + .then((data) => { + setNewsList(data.windows); + }); + } catch (error) { + console.log(error); + } + })(); }, []); return ( <> @@ -60,45 +66,51 @@ export const IndexPage = () => {

{name}

- - - + - + ); diff --git a/static/assets/Classificazione_Dati_e_Servizi.svg b/static/assets/Classificazione_Dati_e_Servizi.svg new file mode 100644 index 000000000..a0244a375 --- /dev/null +++ b/static/assets/Classificazione_Dati_e_Servizi.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/home-candidature.svg b/static/assets/home-candidature.svg new file mode 100644 index 000000000..5445eb204 --- /dev/null +++ b/static/assets/home-candidature.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/icona-home-banner.svg b/static/assets/icona-home-banner.svg new file mode 100644 index 000000000..85606e9a7 --- /dev/null +++ b/static/assets/icona-home-banner.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 47d4d614e4ace109697f811ba136413f82ebc93d Mon Sep 17 00:00:00 2001 From: Fladiir Date: Wed, 23 Mar 2022 16:25:25 +0100 Subject: [PATCH 14/49] chore: footer links (#329) Co-authored-by: RIDP9CT --- src/layouts/Footer.jsx | 54 +++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/src/layouts/Footer.jsx b/src/layouts/Footer.jsx index 4847d2b29..226003776 100644 --- a/src/layouts/Footer.jsx +++ b/src/layouts/Footer.jsx @@ -51,7 +51,7 @@ const useStyle = createUseStyles({ composes: 'it-footer-small-prints py-4', backgroundColor: '#01254C', '& a': { - color: '#27D1D6', + color: '#fff', }, }, seeMore: { @@ -67,6 +67,9 @@ const useStyle = createUseStyles({ '@media (min-width: 1200px)': { marginTop: '0', }, + '&:not(:last-child)': { + marginBottom: '20px', + }, }, departmentLogo: { display: 'block', @@ -102,6 +105,7 @@ const useStyle = createUseStyles({ listItem: { composes: 'list-inline-item', display: 'inline-flex', + color: '#fff', '@media (max-width: 767px)': { flexDirection: 'column', '&+.list-inline-item': { @@ -181,24 +185,40 @@ const MainFooter = () => { {dipartimento.label}
-
+
{activeItem === 'come-funziona' ? ( - - Scopri l'iniziativa - + <> + + Scopri l'iniziativa + + + Ricevi aggiornamenti + + + L'iniziativa + + ) : ( - - dispatch({ - type: 'SET:HOW_SECTION_ID', - payload: { howId: 'attori-coinvolti' }, - }) - } - > - Scopri l'iniziativa - + <> + + dispatch({ + type: 'SET:HOW_SECTION_ID', + payload: { howId: 'attori-coinvolti' }, + }) + } + > + Ricevi aggiornamenti + + + Scopri l'iniziativa + + + L'iniziativa + + )}
From d8f8db0a7dc00ee0e29dd8ee8a3160ff4f615620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Thu, 24 Mar 2022 15:38:05 +0100 Subject: [PATCH 15/49] fix: UI minor adjustments (#330) * WIP * fix ui progress * fix url * fix lint Co-authored-by: emnlpstr --- contents/come-funziona/come-funziona.yml | 6 +- .../come-partecipare/come-partecipare.yml | 4 +- contents/faq-page/faq.yml | 6 +- contents/home-page/home.yml | 24 ++-- contents/links.yml | 8 +- contents/opportunity-page/opportunity.yml | 2 +- src/components/AccordionButtonFull.jsx | 40 ++++-- src/components/Breadcrumb.jsx | 25 ++-- src/components/HeroVideo.jsx | 2 +- src/components/TimelineVerticalCards.jsx | 4 +- src/components/carousel/Carousel.jsx | 1 + src/components/carousel/HomeCarousel.jsx | 2 +- src/components/carousel/NoticesCarousel.jsx | 10 +- src/components/carousel/Timeline.jsx | 8 +- src/components/hero/HeroHowItWorks.jsx | 44 ++++-- src/components/hero/HeroHowToDo.jsx | 46 +++--- src/components/hero/HeroImageBackground.jsx | 38 +++-- src/components/modal/ModalUpdatesButton.jsx | 38 +++-- src/layouts/AssistenzaPage.jsx | 37 +++-- src/layouts/ComeFunzionaPage.jsx | 2 + src/layouts/ComeParteciparePage.jsx | 4 +- src/layouts/CreaProfiloPage.jsx | 64 ++++----- src/layouts/FaqPage.jsx | 8 +- src/layouts/Footer.jsx | 55 ++----- src/layouts/Header.jsx | 136 +++++++++--------- src/layouts/IndexPage.jsx | 11 +- src/layouts/UpdatesPage.jsx | 44 ++++-- src/layouts/come-fare/KeypointSection.jsx | 45 ++++-- src/layouts/come-fare/Keypoints.jsx | 18 ++- src/layouts/come-funziona/Beneficiaries.jsx | 6 +- src/layouts/come-funziona/Involved.jsx | 2 +- src/layouts/faq/SupportSection.jsx | 5 + src/pages/come-partecipare.jsx | 15 +- .../{supporto => }/ricevi-aggiornamenti.jsx | 2 +- static/assets/inner_shadow.png | Bin 0 -> 262 bytes 35 files changed, 438 insertions(+), 324 deletions(-) rename src/pages/{supporto => }/ricevi-aggiornamenti.jsx (66%) create mode 100644 static/assets/inner_shadow.png diff --git a/contents/come-funziona/come-funziona.yml b/contents/come-funziona/come-funziona.yml index 732db512c..86cb86d14 100644 --- a/contents/come-funziona/come-funziona.yml +++ b/contents/come-funziona/come-funziona.yml @@ -22,8 +22,6 @@ beneficiaries: items: - linkLabel: 'Comuni' filterId: 'comuni' - - linkLabel: 'Città metropolitane' - filterId: 'citta-metropolitane' - linkLabel: 'Enti regionali' filterId: 'enti-regionali' - linkLabel: 'Province' @@ -52,7 +50,7 @@ beneficiaries: - icon: '/assets/icone-beneficiari/pa-centrali.svg' name: 'Pubbliche Amministrazioni Centrali' items: - - linkLabel: 'Pubbliche Amministrazioni centrali' + - linkLabel: 'Pubbliche Amministrazioni Centrali' filterId: 'pa-centrali' - icon: '/assets/icone-beneficiari/asl.svg' name: 'Salute' @@ -96,7 +94,7 @@ timeline: text: L’Unione Europea approva un piano da €750 miliardi che ha l'obiettivo di rilanciare l'economia europea dopo la pandemia di COVID-19 e di renderla più verde e digitale. - id: 2 active: false - time: MAGGIO 2021 + time: Aprile 2021 title: ITALIA DOMANI text: Il Governo italiano presenta “Italia Domani”, il Piano Nazionale di Ripresa e Resilienza (PNRR). Grazie all’integrazione di un Fondo Complementare, il totale degli investimenti previsti è di €222,1 miliardi. - id: 3 diff --git a/contents/come-partecipare/come-partecipare.yml b/contents/come-partecipare/come-partecipare.yml index a81b14e32..d09334577 100644 --- a/contents/come-partecipare/come-partecipare.yml +++ b/contents/come-partecipare/come-partecipare.yml @@ -19,10 +19,12 @@ keypoints: image: 'keypoint-3.svg' title: 'Classificare dati e servizi' desc: 'Per abilitare il processo di migrazione delle PA al cloud.' + transparent: true - number: "04" image: 'keypoint-4.svg' title: 'Realizzare progetti' desc: 'Per risolvere dubbi o problemi riguardo la piattaforma e le candidature.' + transparent: true sectionFirst: number: '01' title: 'Attivare la tua PA' @@ -55,7 +57,7 @@ sectionThird: lBlue: true sectionFourth: number: '04' - title: 'Realizzare i progetti' + title: 'Ricevere assistenza' text: La piattaforma PA digitale 2026 permette di candidare le PA agli avvisi pubblici e di gestire le attività attraverso l’area riservata.

Qualsiasi dubbio o problema si possa riscontrare, è possibile trovare le risposte alle domande più comuni e chiedere assistenza dedicata. button: true image: 'kp-section-4.svg' diff --git a/contents/faq-page/faq.yml b/contents/faq-page/faq.yml index 83aa24e8b..3e9c79d5c 100644 --- a/contents/faq-page/faq.yml +++ b/contents/faq-page/faq.yml @@ -131,7 +131,7 @@ support: tag: Supporto title: Non hai trovato le risposte che cerchi? Vuoi inviare suggerimenti o ricevere supporto? cards: - - title: Contatti - description: Compila il modulo per inviarci i tuoi suggerimenti o per avere chiarimenti sull'iniziativa - isModal: true + - title: Assistenza + description: Compila il modulo per richiedere chiarimenti e approfondire temi di interesse. + link: /supporto/assistenza diff --git a/contents/home-page/home.yml b/contents/home-page/home.yml index 5268b3b7d..d071723d7 100644 --- a/contents/home-page/home.yml +++ b/contents/home-page/home.yml @@ -2,7 +2,7 @@ name: Homepage - PA digitale 2026 headerTitle: Dipartimento per la trasformazione digitale heroMainBanner: title: Entra in PA digitale 2026 - body: PA digitale 2026 è il punto di accesso alle risorse per la transizione digitale.Accedi alla piattaforma e attiva il profilo della tua PA. Scopri come candidare la tua amministrazione agli avvisi e richiedere i fondi. + body: PA digitale 2026 è il punto di accesso alle risorse per la transizione digitale. Accedi alla piattaforma e attiva il profilo della tua PA. Scopri come candidare la tua amministrazione agli avvisi e richiedere i fondi. firstButtonLabel: SCOPRI DI PIù firstButtonAriaLabel: Scopri di più (Collegamento esterno - Apre su nuova scheda) linkTo: https://innovazione.gov.it/dipartimento/focus/italia-digitale-2026/ @@ -13,15 +13,15 @@ heroDigital: firstButtonAriaLabel: VAI AL SITO Italia digitale 2026 (Collegamento esterno - Apre su nuova scheda) linkTo: https://innovazione.gov.it/dipartimento/focus/italia-digitale-2026/ heroPnrr: - category: Classificazione - title: Classificazione dati
e servizi - body: La classificazione dati e servizi digitali deve essere effettuata da tutte le PA ed è necessaria per avviare il processo di migrazione al cloud. + category: Candidature + title: Candida la tua PA agli avvisi dedicati + body: Partecipa agli avvisi per richiedere i finanziamenti e avviare il processo di transizione digitale. firstButtonLabel: SCOPRI DI PIÙ firstButtonAriaLabel: Scopri di più (Collegamento esterno - Apre su nuova scheda) heroClassificazione: - category: CANDIDATURE - title: Candida la tua PA agli avvisi dedicati - body: Partecipa agli avvisi per richiedere i finanziamenti e avviare il processo di transizione digitale. + category: Classificazione + title: Classificazione dati e servizi + body: La classificazione dati e servizi digitali deve essere effettuata da tutte le PA ed è necessaria per avviare il processo di migrazione al cloud. firstButtonLabel: SCOPRI DI PIÙ firstButtonAriaLabel: Scopri di più (Collegamento esterno - Apre su nuova scheda) heroContribute: @@ -171,15 +171,15 @@ heroCarouselNews: linkTo: 'https://innovazione.gov.it/notizie/articoli/servizio-civile-digitale-al-via-il-nuovo-avviso-per-gli-enti/' support: tag: Supporto - title: Scrivici per chiarimenti o per contribuire con le tue idee al progetto + title: Consulta le domande frequenti o scrivici per ricevere assistenza buttonLabel: scopri di più cards: - title: Domande frequenti - description: Scopri i dettagli dell’iniziativa e le informazioni chiave sulle opportunità del PNRR + description: Scopri i dettagli dell’iniziativa e consulta le risposte alle domande più frequenti. link: /supporto/faq - - title: Contatti - description: Compila il modulo per inviarci i tuoi suggerimenti o per avere chiarimenti sull’iniziativa - link: /supporto/ricevi-aggiornamenti + - title: Assistenza + description: Compila il modulo per richiedere chiarimenti e approfondire temi di interesse. + link: /supporto/assistenza heroMain: category: 'le misure del pnrr' title: Il punto di accesso alle risorse per la transizione digitale della PA diff --git a/contents/links.yml b/contents/links.yml index 2540c0885..8a2a063aa 100644 --- a/contents/links.yml +++ b/contents/links.yml @@ -27,10 +27,6 @@ internalLinks: linkTo: '/avvisi' label: Avvisi linkTop: '#mainTop' - comePartecipare: - linkTo: '/come-partecipare' - label: Come partecipare - linkTop: '#mainTop' updates: linkTo: '/updates' label: Ricevi aggiornamenti @@ -84,9 +80,9 @@ externalLinks: linkTo: https://github.com/italia/ ariaLabel: 'GitHub Italia (link esterno)' dipartimento: - label: Dipartimento per la Trasformazione Digitale + label: Dipartimento per la trasformazione digitale linkTo: https://innovazione.gov.it - ariaLabel: 'Dipartimento per la Trasformazione Digitale (Collegamento esterno - Apre su nuova scheda)' + ariaLabel: 'Dipartimento per la trasformazione digitale (Collegamento esterno - Apre su nuova scheda)' ministeroMitd: label: "Ministero per l'innovazione tecnologica e la transizione digitale" linkTo: 'https://innovazione.gov.it/' diff --git a/contents/opportunity-page/opportunity.yml b/contents/opportunity-page/opportunity.yml index 8cce6bacf..9f39b9bd8 100644 --- a/contents/opportunity-page/opportunity.yml +++ b/contents/opportunity-page/opportunity.yml @@ -474,7 +474,7 @@ modal: updatesInfo: Lascia i tuoi contatti per ricevere materiali e
informazioni
sulle novità e gli avvisi di Italia digitale 2026 mandatoryAdvise: I campi con * sono obbligatori requiredLabel: Questo campo è richiesto - emailLabel: Email* + emailLabel: EMAIL* emailValidationLabel: Per favore inserisci un'indirizzo email valido. argumentLabel: Argomento* measureLabel: Misura* diff --git a/src/components/AccordionButtonFull.jsx b/src/components/AccordionButtonFull.jsx index 2a9f1d609..ce84c88df 100644 --- a/src/components/AccordionButtonFull.jsx +++ b/src/components/AccordionButtonFull.jsx @@ -29,6 +29,9 @@ const useStyles = createUseStyles({ display: 'flex', justifyContent: 'space-between', padding: '1.333rem 0.778rem', + '@media (max-width: 768px)': { + padding: '1.333rem 1.778rem', + }, flexDirection: 'column', alignItems: 'center', '@media (min-width: 992px)': { @@ -47,7 +50,7 @@ const useStyles = createUseStyles({ fontWeight: 'normal', }, '@media (min-width: 992px)': { - maxWidth: '70%', + maxWidth: '80%', fontSize: '1.778rem', paddingBottom: '0.833rem', }, @@ -57,7 +60,6 @@ const useStyles = createUseStyles({ display: 'flex', alignItems: 'baseline', flexBasis: '100%', - marginTop: '-1.111rem', }, '& .tag-title': { textTransform: 'uppercase', @@ -98,7 +100,10 @@ const useStyles = createUseStyles({ fontSize: '3.111rem', lineHeight: '1.15', textAlign: 'center', - marginBottom: '0.889rem', + marginBottom: '1.889rem', + '@media (max-width: 992px)': { + marginTop: '0.889rem', + }, '& span': { display: 'block', fontSize: '0.889rem', @@ -122,8 +127,11 @@ const useStyles = createUseStyles({ padding: '1.333rem 0.778rem', display: 'flex', flexDirection: 'column', + '@media (max-width: 768px)': { + padding: '1.333rem 1.778rem', + }, '@media (min-width: 992px)': { - padding: '0.444rem 2.222rem 1.778rem', + padding: '0.444rem 9.222rem 1.778rem 2.222rem', }, '& .description': { '@media (min-width: 992px)': { @@ -154,13 +162,15 @@ const useStyles = createUseStyles({ textDecoration: 'none', display: 'inline-flex', alignItems: 'center', - fontSize: '0.778rem', + fontSize: '16px', + '@media (max-width: 767px)': { + width: '100%', + textAlign: 'center', + justifyContent: 'center', + }, '& img': { marginLeft: '0.444rem', }, - '&:hover': { - textDecoration: 'underline', - }, }, }, button: { @@ -187,6 +197,7 @@ const useStyles = createUseStyles({ backgroundImage: 'url(/assets/chevron-up-white.svg)', '&:hover, &:focus': { backgroundImage: 'url(/assets/chevron-up-white.svg)', + zIndex: '2', }, }, '@media (max-width: 991px)': { @@ -218,6 +229,11 @@ const useStyles = createUseStyles({ }, description: { marginBottom: '1rem', + fontWeight: '400', + fontSize: '16px', + '& strong': { + fontSize: '18px', + }, }, stalls: { marginBottom: '1rem', @@ -226,8 +242,6 @@ const useStyles = createUseStyles({ composes: 'info-row', fontSize: '0.778rem', lineHeight: '1.4', - letterSpacing: '0.5px', - textTransform: 'uppercase', display: 'flex', alignItems: 'baseline', '& + .info-row': { @@ -237,14 +251,12 @@ const useStyles = createUseStyles({ flexBasis: '9.4rem', flexShrink: '0', marginRight: '1rem', + textTransform: 'uppercase', }, '& .value-info': { fontSize: '0.88rem', fontWeight: 600, lineHeight: '1.25', - '&.access': { - color: '#06c', - }, '&.updates': { fontWeight: 'normal', lineHeight: '1.5', @@ -309,7 +321,7 @@ export const AccordionButtonFull = (props) => { > -
+

Platea potenziale {stalls} diff --git a/src/components/Breadcrumb.jsx b/src/components/Breadcrumb.jsx index 781a7e41f..cb4b9ad87 100644 --- a/src/components/Breadcrumb.jsx +++ b/src/components/Breadcrumb.jsx @@ -6,28 +6,37 @@ import labels from '../../contents/labels.yml'; const useStyles = createUseStyles({ breadcrumb: { - paddingTop: '1.563rem', + padding: '1.563rem 0 0', + '& .breadcrumb': { + padding: '0.75rem 0', + }, + '& .bradcrumb-item a': { + fontWeight: '600', + fontSize: '1.125rem', + '&.active': { + fontWeight: '400', + fontSize: '1.125rem', + }, + }, }, }); export const Breadcrumb = ({ currentPage }) => { const classes = useStyles(); return ( -
+
diff --git a/src/components/HeroVideo.jsx b/src/components/HeroVideo.jsx index d1ed1054e..544e04d3e 100644 --- a/src/components/HeroVideo.jsx +++ b/src/components/HeroVideo.jsx @@ -10,7 +10,7 @@ const useStyle = createUseStyles({ minHeight: '412px', '@media (max-width: 991px)': { flexDirection: 'column', - padding: '82px 0', + padding: '40px 0', }, }, info: { diff --git a/src/components/TimelineVerticalCards.jsx b/src/components/TimelineVerticalCards.jsx index 1a34c81af..a86ec4dcc 100644 --- a/src/components/TimelineVerticalCards.jsx +++ b/src/components/TimelineVerticalCards.jsx @@ -10,7 +10,7 @@ const useStyle = createUseStyles({ timelineVertical: { composes: 'timeline-vertical', position: 'relative', - paddingBottom: '4.556rem', + paddingBottom: '40px', }, scrollIndicator: { position: 'absolute', @@ -259,7 +259,7 @@ export const TimelineVerticalCards = ({ item }) => { return ( <>
- +
diff --git a/src/components/carousel/Carousel.jsx b/src/components/carousel/Carousel.jsx index 37b1ad4c4..b6daf711f 100644 --- a/src/components/carousel/Carousel.jsx +++ b/src/components/carousel/Carousel.jsx @@ -80,6 +80,7 @@ const useStyles = createUseStyles({ padding: '6rem 0 4rem', '& .swiper': { margin: '0 -1.111rem', + paddingTop: '20px', '@media (max-width: 992px)': { margin: '0', }, diff --git a/src/components/carousel/HomeCarousel.jsx b/src/components/carousel/HomeCarousel.jsx index 7ef388f2a..cc9341c85 100644 --- a/src/components/carousel/HomeCarousel.jsx +++ b/src/components/carousel/HomeCarousel.jsx @@ -113,7 +113,7 @@ const useStyles = createUseStyles({ padding: '0 1.667rem 1.667rem', margin: '0 -1.667rem -1.667rem', '@media (max-width: 992px)': { - margin: '0 -1.667rem -1.667rem', + margin: '20px -1.667rem -1.667rem', }, }, '& .swiper-wrapper .swiper-slider': { diff --git a/src/components/carousel/NoticesCarousel.jsx b/src/components/carousel/NoticesCarousel.jsx index 29afb88c3..13cc99cf6 100644 --- a/src/components/carousel/NoticesCarousel.jsx +++ b/src/components/carousel/NoticesCarousel.jsx @@ -2,6 +2,7 @@ import React from 'react'; import { createUseStyles } from 'react-jss'; import { Row, Col, Card, CardBody, CardTitle } from 'design-react-kit'; import PropTypes from 'prop-types'; +import { Link } from 'gatsby'; import { DesktopSwiper } from '../DesktopSwiper'; import { ExternalLink } from '../ExternalLink'; @@ -9,10 +10,8 @@ const useStyles = createUseStyles({ heroCards: { composes: 'card-bg rounded', height: '100%', - border: '0.5px solid #979797', boxShadow: '0px 0px 80px rgba(0, 43, 85, 0.05)', '&.card.card-bg': { - borderRight: '0.5px solid #979797', '@media (max-width: 992px)': { marginLeft: '0', }, @@ -96,11 +95,13 @@ const useStyles = createUseStyles({ fontWeight: '400', lineHeight: '1.444rem', marginBottom: '1.389rem', + color: '#5A768A', }, dueDate: { fontSize: '0.778rem', fontWeight: '700', lineHeight: '1.444rem', + color: '#5A768A', }, dueDateDigit: { fontSize: '0.833rem', @@ -163,6 +164,11 @@ export const NoticesCarousel = ({ content, title }) => { title={title} idCarousel="notices-carousel" /> +
+ + scopri tutti + +
diff --git a/src/components/carousel/Timeline.jsx b/src/components/carousel/Timeline.jsx index 666b12854..587022358 100644 --- a/src/components/carousel/Timeline.jsx +++ b/src/components/carousel/Timeline.jsx @@ -6,10 +6,10 @@ import { DesktopSwiper } from '../DesktopSwiper'; const useStyles = createUseStyles({ timelineSection: { - padding: '3.125rem 0 4.5rem 0', + padding: '0 0 4.5rem 0', overflow: 'hidden', '@media (min-width: 992px)': { - padding: '5.333rem 0 2.5rem 0', + padding: '0 0 2.5rem 0', }, '& .swiper': { margin: '0 -1.111rem', @@ -79,7 +79,6 @@ const useStyles = createUseStyles({ }, timelineCard: { marginTop: '1.875rem', - maxWidth: '15.278rem', '@media (min-width: 992px)': { marginTop: '1.667rem', maxWidth: '17.188rem', @@ -222,6 +221,9 @@ export const Timeline = ({ content }) => { slides={slides} breakpoints={{ slidesPerView: 1, + 768: { + slidesPerView: 2, + }, 992: { slidesPerView: 3, }, diff --git a/src/components/hero/HeroHowItWorks.jsx b/src/components/hero/HeroHowItWorks.jsx index 756ae6077..237bde260 100644 --- a/src/components/hero/HeroHowItWorks.jsx +++ b/src/components/hero/HeroHowItWorks.jsx @@ -14,7 +14,7 @@ const useStyles = createUseStyles({ '@media (min-width: 992px)': { position: 'absolute', right: '122px', - top: '95px', + top: '54px', maxWidth: '350px', }, '@media (min-width: 1200px)': { @@ -26,13 +26,21 @@ const useStyles = createUseStyles({ }, }, heroTitle: { - composes: 'no_doc', - fontSize: '2.222rem', - '@media (max-width: 992px)': { - display: 'flex', - justifyContent: 'center', - fontSize: '1.778rem', - textAlign: 'center', + fontSize: '2.5rem', + fontWeight: '700', + color: '#33485C', + lineHeight: '48px', + marginBottom: '30px', + '@media (max-width: 991px)': { + fontSize: '2.25rem', + }, + }, + heroSubtitle: { + fontSize: '24px', + color: '#33485C', + lineHeight: '1.5', + '@media (max-width: 991px)': { + fontSize: '1.125rem', }, }, contentWrapper: { @@ -43,12 +51,15 @@ const useStyles = createUseStyles({ composes: 'it-hero-wrapper', position: 'relative', display: 'flex', + '&.it-hero-wrapper': { + alignItems: 'flex-start', + }, '&.it-hero-wrapper .it-hero-text-wrapper': { '@media (min-width: 992px)': { - padding: '5.333rem 0 3.889rem', + padding: '0', }, '@media (max-width: 991px)': { - padding: '5.333rem 0 3.889rem', + padding: '0 0 3.889rem', }, }, '&.overlap': { @@ -56,7 +67,7 @@ const useStyles = createUseStyles({ paddingBottom: '4rem', }, '&.bg-white': { - backgroundColor: '#fff', + backgroundColor: 'transparent !important', '& .it-hero-text-wrapper.bg-white span, h1, h2, h3, p': { color: '#33485C', }, @@ -94,6 +105,9 @@ const useStyles = createUseStyles({ '@media (min-width: 992px)': { marginRight: '2.611rem', }, + '@media (max-width: 991px)': { + textAlign: 'center', + }, }, buttonContainer: { composes: 'it-btn-container', @@ -152,7 +166,7 @@ const useStyles = createUseStyles({ }, listTitle: { composes: 'mb-3', - fontSize: '0.778rem', + fontSize: '0.889rem', color: '#33485C', fontWeight: '600', marginBottom: '0.889rem', @@ -166,7 +180,7 @@ const useStyles = createUseStyles({ composes: 'list-item', textAlign: 'left', color: '#0066CC', - fontWeight: '600', + fontWeight: '400', marginBottom: '1rem', textDecoration: 'none', '@media (max-width: 991px)': { @@ -195,14 +209,14 @@ export const HeroHowItWorks = ({ title, body, image, list }) => {
- +
- +
{list diff --git a/src/components/hero/HeroHowToDo.jsx b/src/components/hero/HeroHowToDo.jsx index ec19f7926..9d1b9d8e1 100644 --- a/src/components/hero/HeroHowToDo.jsx +++ b/src/components/hero/HeroHowToDo.jsx @@ -13,17 +13,17 @@ const useStyles = createUseStyles({ '@media (min-width: 992px)': { position: 'absolute', right: '0', - top: '250px', + top: '160px', maxWidth: '530px', }, '@media (min-width: 1200px)': { - top: '130px', + top: '48px', maxWidth: '700px', }, }, heroTitle: { composes: 'no_doc', - fontSize: '2.222rem', + fontSize: '2.5rem', '@media (max-width: 992px)': { display: 'flex', justifyContent: 'center', @@ -40,9 +40,13 @@ const useStyles = createUseStyles({ composes: 'it-hero-wrapper', position: 'relative', display: 'flex', + alignItems: 'flex-start', + '&.it-hero-wrapper': { + minHeight: 'unset', + }, '&.it-hero-wrapper .it-hero-text-wrapper': { '@media (min-width: 992px)': { - padding: '5.333rem 0 5.625rem', + padding: '48px 0 80px', }, '@media (max-width: 991px)': { padding: '3.75rem 0 3.75rem', @@ -91,6 +95,9 @@ const useStyles = createUseStyles({ '@media (min-width: 992px)': { marginRight: '2.611rem', }, + '& p': { + lineHeight: '1.5', + }, }, buttonContainer: { composes: 'it-btn-container', @@ -177,15 +184,22 @@ const useStyles = createUseStyles({ }, }, breadWhite: { + paddingTop: '1.563rem', '& a': { color: 'white', }, + '& .breadcrumb': { + padding: '0.75rem 0', + }, '& .breadcrumb-item': { textDecoration: 'underline', - fontWeight: '700', + fontWeight: '600', '&.active': { textDecoration: 'none', fontWeight: '400', + '& a': { + textDecoration: 'none', + }, '&::before': { color: 'white', fontWeight: '700', @@ -201,7 +215,7 @@ export const HeroHowToDo = ({ title, body, image, imageMob }) => { return (
- + @@ -214,17 +228,15 @@ export const HeroHowToDo = ({ title, body, image, imageMob }) => {
- - -
- - -
- - - - -
+ +
+ + +
+ + + +
diff --git a/src/components/hero/HeroImageBackground.jsx b/src/components/hero/HeroImageBackground.jsx index 40057ffa4..fb8ceae6b 100644 --- a/src/components/hero/HeroImageBackground.jsx +++ b/src/components/hero/HeroImageBackground.jsx @@ -2,6 +2,7 @@ import React from 'react'; import { createUseStyles } from 'react-jss'; import PropTypes from 'prop-types'; import { Row, Col, Hero } from 'design-react-kit'; +import { Breadcrumb } from '../Breadcrumb'; import { HeroTitle } from './HeroTitle'; import { HeroBackground } from './HeroBackground'; import { HeroButton } from './HeroButton'; @@ -19,34 +20,42 @@ const useStyles = createUseStyles({ }, }, heroTitle: { - composes: 'no_doc title-hero', - fontSize: '2.222rem', - '@media (max-width: 992px)': { - display: 'flex', - justifyContent: 'center', - fontSize: '1.778rem', + fontSize: '2.5rem', + fontWeight: '700', + color: '#33485C', + lineHeight: '48px', + marginBottom: '30px', + '@media (max-width: 991px)': { + fontSize: '2.25rem', textAlign: 'center', + display: 'block', + }, + }, + heroSubtitle: { + fontSize: '24px', + color: '#33485C', + lineHeight: '1.5', + '@media (max-width: 991px)': { + fontSize: '1.125rem', }, }, contentWrapper: { composes: 'it-hero-text-wrapper', paddingLeft: '0 !important', zIndex: 2, - '@media (max-width: 992px)': { - marginBottom: '4rem', - }, }, heroWrapper: { composes: 'it-hero-wrapper', position: 'relative', display: 'flex', padding: '0 0 2rem', + marginTop: '-101px', '&:not(.overlap)': { minHeight: 'auto', '& .container .it-hero-text-wrapper': { - padding: '5rem 0', + padding: '150px 0 5rem', '@media (max-width: 992px)': { - padding: '4rem 0 1rem', + paddingBottom: '0', }, '& .title-hero': { fontSize: '2.5rem', @@ -72,7 +81,7 @@ const useStyles = createUseStyles({ paddingBottom: '5rem', }, '&.bg-white': { - backgroundColor: '#fff', + backgroundColor: 'transparent !important', '& .it-hero-text-wrapper.bg-white span, h1, h2, h3, p': { color: '#33485C', }, @@ -165,14 +174,15 @@ export const HeroImageBackground = ({ const classes = useStyles(); return ( +
-
+
- +
{noButton ? ( '' diff --git a/src/components/modal/ModalUpdatesButton.jsx b/src/components/modal/ModalUpdatesButton.jsx index 1844e18c4..c1c499e90 100644 --- a/src/components/modal/ModalUpdatesButton.jsx +++ b/src/components/modal/ModalUpdatesButton.jsx @@ -1,12 +1,13 @@ import React from 'react'; import PropTypes from 'prop-types'; import { createUseStyles } from 'react-jss'; -import { Container, Row, Col, Button } from 'design-react-kit'; +import { Container, Row, Col } from 'design-react-kit'; +import { Link } from 'gatsby'; const useStyles = createUseStyles({ modalButtonContainer: { border: '1px solid #0066CC', - padding: '0.5rem 5.556rem', + padding: '1.5rem 1.5rem', display: 'flex', justifyContent: 'space-between', alignItems: 'center', @@ -15,15 +16,23 @@ const useStyles = createUseStyles({ fontSize: '1.333rem', fontWeight: '700', color: '#33485C', - maxWidth: '60%', + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, '& .btn': { - padding: '0.444rem 0.889rem', whiteSpace: 'nowrap', + '@media (max-width: 991px)': { + marginTop: '20px', + }, + '@media (max-width: 767px)': { + width: '100%', + }, }, '@media (max-width: 991px)': { flexDirection: 'column', padding: '0.889rem 1.333rem', + alignItems: 'flex-start', '& p': { maxWidth: '100%', marginBottom: '1rem', @@ -34,9 +43,14 @@ const useStyles = createUseStyles({ fontSize: '1.556rem', fontWeight: '600', color: '#33485C', + lineHeight: '1.556rem', '@media (max-width: 992px)': { textAlign: 'center', }, + '@media (max-width: 767px)': { + display: 'block', + textAlign: 'center', + }, }, buttonInfo: { fontSize: '0.889rem', @@ -44,6 +58,9 @@ const useStyles = createUseStyles({ color: '#33485C', '@media (max-width: 992px)': { display: 'block', + }, + '@media (max-width: 767px)': { + display: 'block', textAlign: 'center', }, }, @@ -55,7 +72,7 @@ const useStyles = createUseStyles({ }, }); -export const ModalUpdatesButton = ({ label, buttonLabel, hasTitle, handleToggle }) => { +export const ModalUpdatesButton = ({ label, buttonLabel, hasTitle }) => { const classes = useStyles(); return ( @@ -64,7 +81,7 @@ export const ModalUpdatesButton = ({ label, buttonLabel, hasTitle, handleToggle - Le misure + Le misure @@ -84,14 +101,13 @@ export const ModalUpdatesButton = ({ label, buttonLabel, hasTitle, handleToggle

{label}

- +
diff --git a/src/layouts/AssistenzaPage.jsx b/src/layouts/AssistenzaPage.jsx index f8456da8a..223949f9f 100644 --- a/src/layouts/AssistenzaPage.jsx +++ b/src/layouts/AssistenzaPage.jsx @@ -87,7 +87,6 @@ const useStyles = createUseStyles({ color: '#33485C', }, formMessage: { - padding: '0 0 50px 0', '& p': { fontSize: '0.889rem', color: '#33485C', @@ -231,9 +230,11 @@ const useStyles = createUseStyles({ }, }, titleUpdate: { - fontSize: '3rem', + fontSize: '2.5rem', fontWeight: '700', color: '#33485C', + lineHeight: '48px', + marginBottom: '30px', '@media (max-width: 991px)': { fontSize: '2.25rem', }, @@ -241,7 +242,7 @@ const useStyles = createUseStyles({ subtitleUpdate: { fontSize: '1.333rem', color: '#33485C', - lineHeight: '28px', + lineHeight: '1.5', '@media (max-width: 991px)': { fontSize: '1.125rem', }, @@ -254,30 +255,44 @@ const useStyles = createUseStyles({ }, }, heroImg: { + maxWidth: '100%', '@media (max-width: 991px)': { width: '64%', }, }, breadcrumb: { - paddingTop: '1.563rem', + padding: '1.563rem 0 0', '& .breadcrumb': { - paddingTop: '0', - }, - '@media (min-width: 991px)': { - marginLeft: '0.722rem', + padding: '0.75rem 0', }, }, breadcrumbItem: { '& a': { color: '#5B6F82', - fontWeight: '700', + fontWeight: '600', textDecoration: 'underline', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, breadcrumbItemActive: { '& a': { color: '#5B6F82', textDecoration: 'none', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', + }, + }, + submitContainer: { + marginBottom: '12.5rem', + '@media (max-width: 991px)': { + marginBottom: '6rem', }, }, }); @@ -443,7 +458,7 @@ export const AssistenzaPage = () => { return ( <> -
+
@@ -663,7 +678,7 @@ export const AssistenzaPage = () => { l'informativa privacy

-
+
diff --git a/src/layouts/ComeFunzionaPage.jsx b/src/layouts/ComeFunzionaPage.jsx index 457cee7d8..cc2214309 100644 --- a/src/layouts/ComeFunzionaPage.jsx +++ b/src/layouts/ComeFunzionaPage.jsx @@ -7,6 +7,7 @@ import { ProjectsCards } from '../components/ProjectsCards'; import { HeroHowItWorks } from '../components/hero/HeroHowItWorks'; import seo from '../../contents/seo.yml'; import { GlobalStateContext } from '../context/globalContext'; +import { Breadcrumb } from '../components/Breadcrumb'; import { Involved } from './come-funziona/Involved'; import { Beneficiaries } from './come-funziona/Beneficiaries'; @@ -37,6 +38,7 @@ export const ComeFunzionaPage = () => { return ( <> +

{content.name}

diff --git a/src/layouts/ComeParteciparePage.jsx b/src/layouts/ComeParteciparePage.jsx index dae621c1e..767177482 100644 --- a/src/layouts/ComeParteciparePage.jsx +++ b/src/layouts/ComeParteciparePage.jsx @@ -25,7 +25,7 @@ export const ComeParteciparePage = () => ( - - + {/* + */} ); diff --git a/src/layouts/CreaProfiloPage.jsx b/src/layouts/CreaProfiloPage.jsx index 653342e35..472a7905e 100644 --- a/src/layouts/CreaProfiloPage.jsx +++ b/src/layouts/CreaProfiloPage.jsx @@ -20,22 +20,32 @@ const { sidebar, verticalTimeline } = content; const useStyles = createUseStyles({ breadcrumb: { - '@media (min-width: 991px)': { - marginLeft: '0.722rem', - marginBottom: '90px', + padding: '1.563rem 0 0', + '& .breadcrumb': { + padding: '0.75rem 0', }, }, breadcrumbItem: { '& a': { - color: '#06c', - fontWeight: '700', + color: '#5B6F82', + fontWeight: '600', textDecoration: 'underline', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, breadcrumbItemActive: { '& a': { color: '#5B6F82', textDecoration: 'none', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, navigationContainer: { @@ -112,19 +122,20 @@ const useStyles = createUseStyles({ color: '#33485C', lineHeight: '48px', marginBottom: '30px', - '@media (max-width: 425px)': { - fontSize: '2.375rem', + '@media (max-width: 991px)': { + fontSize: '2.25rem', }, }, subtitleUpdate: { - fontSize: '24px', + fontSize: '1.333rem', color: '#33485C', - lineHeight: '30px', - '@media (max-width: 425px)': { - fontSize: '1.25rem', + lineHeight: '1.5', + '@media (max-width: 991px)': { + fontSize: '1.125rem', }, }, heroImg: { + maxWidth: '100%', '@media (max-width: 425px)': { maxWidth: '80%', }, @@ -147,29 +158,6 @@ export const CreaProfiloPage = () => { announce('Pagina caricata ' + faq.name); }, []); - // const handleChange = (event) => { - // setInputValue(event.target.value); - // if (event.target.value.length >= 3) { - // if (isMobile && filterId !== 'all') { - // setQuestions(getQuestionsMobile(getNewQuestions(event.target.value))); - // } else { - // setQuestions(getNewQuestions(event.target.value)); - // } - // } else { - // if (isMobile) { - // filterId !== 'all' ? setQuestions(getQuestionsMobile(faq.questions)) : setQuestions(faq.questions); - // } else { - // setQuestions(faq.questions); - // } - // } - // setquestNum(countQuestions()); - // if (questions.length === 0) { - // announce('Nessun risultato'); - // } else { - // announce('Numero di FAQ in pagina aggiornato'); - // } - // }; - useEffect(() => { if (!isMobile) { setInputValue(''); @@ -183,7 +171,7 @@ export const CreaProfiloPage = () => {

{faq.name}

-
+
@@ -202,9 +190,9 @@ export const CreaProfiloPage = () => { - + -

Crea il profilo della tua PA: identità digitale e dati IPA

+

Attiva il profilo della tua PA: identità digitale e dati IPA

Per partecipare agli avvisi è necessario che il{' '} rappresentante legale di un'amministrazione presente su IPA (Indice dei domini digitali @@ -231,7 +219,7 @@ export const CreaProfiloPage = () => { {/* */}
-

Crea il profilo della tua amministrazione

+

Attiva il profilo della tua amministrazione

Il processo di attivazione della PA prevede quattro passaggi:

diff --git a/src/layouts/FaqPage.jsx b/src/layouts/FaqPage.jsx index 1f5dfe5a0..89f35f41d 100644 --- a/src/layouts/FaqPage.jsx +++ b/src/layouts/FaqPage.jsx @@ -236,13 +236,7 @@ export const FaqPage = () => {
- { - dispatch({ type: 'SET:TOGGLE_MODAL_MESSAGE' }); - }} - /> + ); }; diff --git a/src/layouts/Footer.jsx b/src/layouts/Footer.jsx index 226003776..0a99f03ad 100644 --- a/src/layouts/Footer.jsx +++ b/src/layouts/Footer.jsx @@ -1,9 +1,8 @@ -import React, { useContext } from 'react'; +import React from 'react'; import { Link } from 'gatsby'; import { createUseStyles } from 'react-jss'; import links from '../../contents/links.yml'; import { ExternalLink } from '../components/ExternalLink'; -import { GlobalStateContext } from '../context/globalContext'; const { internalLinks: { privacy, noteLegali }, @@ -20,18 +19,20 @@ const useStyle = createUseStyles({ '@media (min-width: 992px)': { display: 'flex', flexDirection: 'column', - alignItems: 'center', + alignItems: 'flex-start', padding: [40, 0], }, '@media (min-width: 1200px)': { justifyContent: 'space-between', flexDirection: 'row', + alignItems: 'center', }, '& .logos': { display: 'flex', flexDirection: 'column', alignItems: 'flex-start', '@media (min-width: 992px)': { + alignItems: 'center', flexDirection: 'row', }, '@media (max-width: 767px)': { @@ -68,7 +69,7 @@ const useStyle = createUseStyles({ marginTop: '0', }, '&:not(:last-child)': { - marginBottom: '20px', + marginBottom: '15px', }, }, departmentLogo: { @@ -81,7 +82,7 @@ const useStyle = createUseStyles({ display: 'inline-block', margin: 0, maxHeight: '2.5rem', - marginLeft: '2.5rem', + marginLeft: '1.5rem', marginRight: '1.2rem', paddingLeft: '1.5rem', borderLeft: '1px solid #E6E9F2', @@ -130,7 +131,7 @@ const SlimFooter = () => { return (
-
+
  • @@ -159,7 +160,6 @@ const SlimFooter = () => { const MainFooter = () => { const classes = useStyle(); - const [{ activeItem }, dispatch] = useContext(GlobalStateContext); return (
    @@ -185,41 +185,12 @@ const MainFooter = () => { {dipartimento.label}
    -
    - {activeItem === 'come-funziona' ? ( - <> - - Scopri l'iniziativa - - - Ricevi aggiornamenti - - - L'iniziativa - - - ) : ( - <> - - dispatch({ - type: 'SET:HOW_SECTION_ID', - payload: { howId: 'attori-coinvolti' }, - }) - } - > - Ricevi aggiornamenti - - - Scopri l'iniziativa - - - L'iniziativa - - - )} +
    + <> + + Ricevi aggiornamenti + +
diff --git a/src/layouts/Header.jsx b/src/layouts/Header.jsx index eba09d71f..297882b82 100644 --- a/src/layouts/Header.jsx +++ b/src/layouts/Header.jsx @@ -80,10 +80,14 @@ const useStyle = createUseStyles({ }, }, topListLink: { - composes: 'border-0 p-0 mr-0', + composes: 'border-0 p-0 mr-0 my-0', '& .list-item': { display: 'inline-flex', alignItems: 'center', + padding: '5px 24px', + '@media (max-width: 991px)': { + padding: '5px 0', + }, }, '& .list-item-link': { display: 'inline-flex', @@ -106,14 +110,22 @@ const useStyle = createUseStyles({ padding: [16, 0], '& .it-header-center-content-wrapper .it-brand-wrapper a .icon': { '&.site-logo': { - width: '3rem', - height: '3rem', + width: '60px', + height: '60px', }, '&.repubblica-logo': { width: '3.556rem', height: '4rem', + marginRight: '15px', }, }, + '&.it-header-center-wrapper .it-header-center-content-wrapper': { + alignItems: 'flex-start', + }, + }, + headerCenter: { + display: 'flex', + flexDirection: 'column', }, offCanvasWrapper: { padding: [13, 24], @@ -121,23 +133,18 @@ const useStyle = createUseStyles({ alignItems: 'center', marginBottom: 16, position: 'relative', - '&:before': { - content: '""', - position: 'absolute', - left: '24px', - bottom: '0', - width: '65px', - height: '1px', - backgroundColor: '#0066CC', - }, '@media (min-width: 992px)': { display: 'none', }, }, offCanvasTitle: { - marginLeft: 8, textDecoration: 'none', fontWeight: '700', + '& .icon': { + marginRight: '15px', + width: '39px', + height: '39px', + }, }, navbarNav: { width: '100%', @@ -180,7 +187,7 @@ const useStyle = createUseStyles({ }, noShadow: { composes: 'shadow-none', - top: '30%', + top: '27%', }, menuWrapper: { composes: 'menu-wrapper', @@ -219,7 +226,11 @@ const useStyle = createUseStyles({ padding: '0', backgroundColor: 'transparent', boxShadow: 'none', - marginRight: '1.2rem', + display: 'flex', + alignItems: 'center', + '& a': { + paddingRight: '5px', + }, '&:focus, &:hover': { color: '#0066CC', backgroundColor: 'transparent', @@ -235,12 +246,27 @@ const useStyle = createUseStyles({ cursor: 'pointer', }, mainHeader: { + boxShadow: '0 20px 30px 5px rgb(0 0 0 / 5%)', '& .it-header-slim-wrapper-content': { padding: '0', }, + dropShadow: '0 20px 30px 5px rgb(0 0 0 / 5%)', '& .it-header-center-content-wrapper': { padding: '0', }, + '& .it-header-wrapper .it-nav-wrapper .it-header-navbar-wrapper': { + top: '27%', + }, + '& .it-header-slim-wrapper': { + '@media (max-width: 991px)': { + padding: '10px 0', + }, + }, + '& .it-header-slim-wrapper .it-header-slim-wrapper-content': { + '@media (max-width: 991px)': { + alignItems: 'flex-start', + }, + }, }, login: { marginLeft: '1.38rem', @@ -251,6 +277,7 @@ const useStyle = createUseStyles({ height: '100%', '@media (max-width: 992px)': { backgroundColor: 'transparent', + padding: '0', }, '&:hover': { '& span': { @@ -261,9 +288,12 @@ const useStyle = createUseStyles({ marginRight: '0.555rem', '&.mobile': { display: 'none', + marginTop: '5px', + height: '24px', }, '@media (max-width: 992px)': { display: 'none', + margin: '0', '&.mobile': { display: 'block', }, @@ -279,6 +309,20 @@ const useStyle = createUseStyles({ }, }, }, + headerLabel: { + composes: 'd-inline-flex flex-column font-weight-bold mt-15 d-lg-none', + marginTop: '15px', + '& .title-link': { + color: '#06c', + fontSize: '1.22222rem', + lineHeight: '1.25', + }, + '& .subtitle-link': { + color: '#06c', + fontSize: '1.11111rem', + fontWeight: '400', + }, + }, }); const SlimHeader = () => { @@ -290,7 +334,7 @@ const SlimHeader = () => { }; return ( - + { aria-label="Italia domani - PNRR (Collegamento esterno - Apre su nuova scheda)" > {externalLinks.pnrr.label} - - {externalLinks.eu.label} - - {/* */} - - {externalLinks.eu.label} - Accedi - - {/* */}
@@ -400,7 +415,7 @@ const CenterHeader = () => { const classes = useStyle(); return ( - +
@@ -415,6 +430,10 @@ const CenterHeader = () => {
+
+ PA digitale 2026 + Le risorse per una PA protagonista della transazione digitale +
); @@ -434,7 +453,7 @@ const NavHeader = () => { megamenu /* aria-label={ariaLabel.menu} */ aria-labelledby="menu-principale" - className="px-0" + className="px-2" id="menu-principale-anchor" tabIndex="-1" > @@ -483,19 +502,10 @@ const NavHeader = () => { Gli avvisi - - - {internalLinks.notices.label} - - {internalLinks.howToPartecipate.label} @@ -510,18 +520,6 @@ const NavHeader = () => { {internalLinks.support.label} - {/* - - */}
diff --git a/src/layouts/IndexPage.jsx b/src/layouts/IndexPage.jsx index 6d07eebf3..55a628184 100644 --- a/src/layouts/IndexPage.jsx +++ b/src/layouts/IndexPage.jsx @@ -4,6 +4,7 @@ import { name, heroMainBanner, heroPnrr, + heroClassificazione, heroCarouselNews, heroCarouselNewsTitle, noticesCarouselTitle, @@ -99,16 +100,16 @@ export const IndexPage = () => { diff --git a/src/layouts/UpdatesPage.jsx b/src/layouts/UpdatesPage.jsx index 5f4ded1bb..b6d314cd0 100644 --- a/src/layouts/UpdatesPage.jsx +++ b/src/layouts/UpdatesPage.jsx @@ -13,6 +13,7 @@ import { SEO } from '../components/SEO'; import content from '../../contents/opportunity-page/opportunity.yml'; import links from '../../contents/links.yml'; import notificationsLabel from '../../contents/notifications.yml'; +import { Breadcrumb } from '../components/Breadcrumb'; const { success: successLabels, error: errorLabels, errorAddress: errorAddressLabel } = notificationsLabel; const { title: seoTitle, description: seoDescription } = seo.supportPage; @@ -216,7 +217,6 @@ const useStyles = createUseStyles({ formFooterLabel: { composes: 'mb-3', fontSize: '0.889rem', - color: '#000', }, spinner: { composes: 'spinner hidden ml-3', @@ -231,16 +231,16 @@ const useStyles = createUseStyles({ color: '#33485C', lineHeight: '48px', marginBottom: '30px', - '@media (max-width: 425px)': { - fontSize: '2.375rem', + '@media (max-width: 991px)': { + fontSize: '2.25rem', }, }, subtitleUpdate: { fontSize: '24px', color: '#33485C', - lineHeight: '30px', - '@media (max-width: 425px)': { - fontSize: '1.25rem', + lineHeight: '1.5', + '@media (max-width: 991px)': { + fontSize: '1.125rem', }, }, submitContainer: { @@ -249,6 +249,18 @@ const useStyles = createUseStyles({ marginBottom: '6rem', }, }, + heroImg: { + '@media (max-width: 991px)': { + width: '64%', + }, + }, + mandatory: { + fontSize: '1rem', + marginTop: '6.25rem', + '@media (min-width: 991px)': { + marginTop: '6.25rem', + }, + }, }); const query = graphql` @@ -376,6 +388,7 @@ export const UpdatesPage = () => { return ( <> +

{content.name}

@@ -385,20 +398,29 @@ export const UpdatesPage = () => {
- +
Ricevi aggiornamenti
Ricevi materiali e informazioni sulle novità e gli avvisi di Italia digitale 2026.
- - + +
- + -

+
diff --git a/src/layouts/come-fare/KeypointSection.jsx b/src/layouts/come-fare/KeypointSection.jsx index 997466842..a17389c02 100644 --- a/src/layouts/come-fare/KeypointSection.jsx +++ b/src/layouts/come-fare/KeypointSection.jsx @@ -2,7 +2,8 @@ /* eslint-disable max-lines-per-function */ import React from 'react'; import { createUseStyles } from 'react-jss'; -import { Container, Row, Col, Button } from 'design-react-kit'; +import { Link } from 'gatsby'; +import { Container, Row, Col } from 'design-react-kit'; import PropTypes from 'prop-types'; const useStyle = createUseStyles({ @@ -34,7 +35,7 @@ const useStyle = createUseStyles({ paragraph: { color: '#33485C', fontSize: '1.111rem', - lineHeight: '30px', + lineHeight: '1.5', marginBottom: '30px', '@media(min-width: 992px)': { fontSize: '1.333rem', @@ -91,6 +92,11 @@ const useStyle = createUseStyles({ paddingBottom: '3.75rem', }, }, + btnSection: { + '@media (max-width: 767px)': { + width: '100%', + }, + }, }); export const KeypointSection = (props) => { @@ -118,7 +124,7 @@ export const KeypointSection = (props) => { {!reverse ? ( @@ -129,9 +135,14 @@ export const KeypointSection = (props) => {

{button ? ( - + ) : ( '' )} @@ -169,9 +180,13 @@ export const KeypointSection = (props) => {

{button ? ( - + ) : ( '' )} @@ -203,9 +218,13 @@ export const KeypointSection = (props) => {

{button ? ( - + ) : ( '' )} @@ -273,9 +292,13 @@ export const KeypointSection = (props) => {

{button ? ( - + ) : ( '' )} diff --git a/src/layouts/come-fare/Keypoints.jsx b/src/layouts/come-fare/Keypoints.jsx index 9cc7c3177..eefd2f9e2 100644 --- a/src/layouts/come-fare/Keypoints.jsx +++ b/src/layouts/come-fare/Keypoints.jsx @@ -115,6 +115,9 @@ const useStyle = createUseStyles({ keypointsBg: { backgroundColor: '#F0F6FC', }, + cardTransparent: { + opacity: '0.5', + }, }); export const Keypoints = (props) => { @@ -124,11 +127,7 @@ export const Keypoints = (props) => { return ( <>
- + @@ -144,7 +143,14 @@ export const Keypoints = (props) => { {list ? list.map((listItem, index, array) => ( - +
{listItem.number}.
{listItem.title}
{listItem.desc}
diff --git a/src/layouts/come-funziona/Beneficiaries.jsx b/src/layouts/come-funziona/Beneficiaries.jsx index 3022d4e44..6635beb72 100644 --- a/src/layouts/come-funziona/Beneficiaries.jsx +++ b/src/layouts/come-funziona/Beneficiaries.jsx @@ -62,7 +62,7 @@ const useStyle = createUseStyles({ }, '& p': { fontSize: '1.25rem', - fontWeight: '600', + fontWeight: '400', lineHeight: '1', marginBottom: '0', '@media (min-width: 768px)': { @@ -84,8 +84,8 @@ export const Beneficiaries = (props) => { return ( <> - - + + diff --git a/src/layouts/come-funziona/Involved.jsx b/src/layouts/come-funziona/Involved.jsx index 269db1329..73a0831cb 100644 --- a/src/layouts/come-funziona/Involved.jsx +++ b/src/layouts/come-funziona/Involved.jsx @@ -88,7 +88,7 @@ export const Involved = (props) => {
- +

{category}

{title} diff --git a/src/layouts/faq/SupportSection.jsx b/src/layouts/faq/SupportSection.jsx index 97cd96efc..2c153c71b 100644 --- a/src/layouts/faq/SupportSection.jsx +++ b/src/layouts/faq/SupportSection.jsx @@ -14,6 +14,11 @@ const useStyles = createUseStyles({ boxShadow: 'none', }, }, + '& .btn': { + '@media (max-width: 767px)': { + width: '100%', + }, + }, }, tag: { fontSize: '0.888rem', diff --git a/src/pages/come-partecipare.jsx b/src/pages/come-partecipare.jsx index c569ecd8c..1d8abef1f 100644 --- a/src/pages/come-partecipare.jsx +++ b/src/pages/come-partecipare.jsx @@ -1,5 +1,16 @@ -import React from 'react'; +import React, { useEffect, useContext } from 'react'; +import { GlobalStateContext } from '../context/globalContext'; import { ComeParteciparePage } from '../layouts/ComeParteciparePage'; -const Page = () => ; +const Page = () => { + const [, dispatch] = useContext(GlobalStateContext); + + useEffect(() => { + dispatch({ type: 'SET:ACTIVE_HEADER', payload: { activeItem: 'come-partecipare' } }); + return () => { + dispatch({ type: 'SET:ACTIVE_HEADER' }); + }; + }, [dispatch]); + return ; +}; export default Page; diff --git a/src/pages/supporto/ricevi-aggiornamenti.jsx b/src/pages/ricevi-aggiornamenti.jsx similarity index 66% rename from src/pages/supporto/ricevi-aggiornamenti.jsx rename to src/pages/ricevi-aggiornamenti.jsx index 35f736664..7d5050fd2 100644 --- a/src/pages/supporto/ricevi-aggiornamenti.jsx +++ b/src/pages/ricevi-aggiornamenti.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { UpdatesPage } from '../../layouts/UpdatesPage'; +import { UpdatesPage } from '../layouts/UpdatesPage'; const Page = () => ; export default Page; diff --git a/static/assets/inner_shadow.png b/static/assets/inner_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7879dcc700431a4709611fb2df88604e95ba4d GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI}!3HGf{@&OH5-1LGcVbv~PUa<$R#s$o9wh>67{Nnf(K&rsg#W93K z*0tZ7&qa}kx%p>F_5bLg0JX@91c!i#CZA(YS!?S%I@TGq2>A6F-kTbHUuGib?&JT%g#9_vC?X9%^Wjna7ta)YO Date: Thu, 24 Mar 2022 15:38:47 +0100 Subject: [PATCH 16/49] fix: assistenza page (#331) * assistenza page fix * fix lint Co-authored-by: emnlpstr --- contents/opportunity-page/opportunity.yml | 39 ----------------- src/layouts/AssistenzaPage.jsx | 51 ----------------------- src/pages/supporto/assistenza.jsx | 15 ++++++- 3 files changed, 13 insertions(+), 92 deletions(-) diff --git a/contents/opportunity-page/opportunity.yml b/contents/opportunity-page/opportunity.yml index 9f39b9bd8..f2957aa23 100644 --- a/contents/opportunity-page/opportunity.yml +++ b/contents/opportunity-page/opportunity.yml @@ -405,47 +405,8 @@ modal: label: Accesso al portale - value: Iscrizione alla newsletter label: Iscrizione alla newsletter - - value: Misure - label: Misure - - value: Avvisi - label: Avvisi - - value: Enti beneficiari - label: Enti beneficiari - - value: Spese ammissibili - label: Spese ammissibili - value: Generale label: Generale - selectMeasure: - - value: Tutte - label: Tutte - - value: 1.1 Infrastrutture digitali - label: 1.1 Infrastrutture digitali - - value: 1.2 Abilitazione e facilitazione migrazione al Cloud - label: 1.2 Abilitazione e facilitazione migrazione al Cloud - - value: 1.3.1 Piattaforma Digitale Nazionale Dati - label: 1.3.1 Piattaforma Digitale Nazionale Dati - - value: 1.3.2 Sportello Digitale Unico - label: 1.3.2 Sportello Digitale Unico - - value: 1.4.1 Esperienza dei servizi pubblici - label: 1.4.1 Esperienza dei servizi pubblici - - value: 1.4.2 Accessibilità - label: 1.4.2 Accessibilità - - value: 1.4.3 Adozione PagoPA e app IO - label: 1.4.3 Adozione PagoPA e app IO - - value: 1.4.4 Adozione identità digitale - label: 1.4.4 Adozione identità digitale - - value: 1.4.5 Digitalizzazione degli avvisi pubblici - label: 1.4.5 Digitalizzazione degli avvisi pubblici - - value: 1.4.6 MaaS - label: 1.4.6 MaaS - - value: 1.5 Cybersecurity - label: 1.5 Cybersecurity - - value: 1.6 Digitalizzazione grandi amministrazioni centrali - label: 1.6 Digitalizzazione grandi amministrazioni centrali - - value: 1.7.1 Servizio civile digitale - label: 1.7.1 Servizio civile digitale - - value: 1.7.2 Centri di facilitazione digitale - label: 1.7.2 Centri di facilitazione digitale selectInQuanto: - value: dirigente-administration label: Dirigente dell’amministrazione diff --git a/src/layouts/AssistenzaPage.jsx b/src/layouts/AssistenzaPage.jsx index 223949f9f..15c463352 100644 --- a/src/layouts/AssistenzaPage.jsx +++ b/src/layouts/AssistenzaPage.jsx @@ -387,14 +387,6 @@ export const AssistenzaPage = () => { hiddenSelect.dispatchEvent(optionSelected); }; - const handleMeasure = (element) => { - const measureInput = document.querySelector('#measure-select-input'); - const selectWrapper = measureInput.closest('.select-wrapper'); - const hiddenSelect = selectWrapper.querySelector('select'); - hiddenSelect.value = element.value; - hiddenSelect.dispatchEvent(optionSelected); - }; - const customInvalid = (event) => { event.preventDefault(); const currentTarget = event.target; @@ -441,11 +433,9 @@ export const AssistenzaPage = () => { const { selectArgument, - selectMeasure, emailValidationLabel, emailLabel, argumentLabel, - measureLabel, selectPlaceholder, telLabel, descriptionLabel, @@ -574,51 +564,10 @@ export const AssistenzaPage = () => { > - - - -

- -
- - - - - - - -
-
diff --git a/src/pages/supporto/assistenza.jsx b/src/pages/supporto/assistenza.jsx index bc5608bd4..2f643dca1 100644 --- a/src/pages/supporto/assistenza.jsx +++ b/src/pages/supporto/assistenza.jsx @@ -1,5 +1,16 @@ -import React from 'react'; +import React, { useEffect, useContext } from 'react'; import { AssistenzaPage } from '../../layouts/AssistenzaPage'; +import { GlobalStateContext } from '../../context/globalContext'; -const Page = (location) => ; +const Page = (location) => { + const [, dispatch] = useContext(GlobalStateContext); + + useEffect(() => { + dispatch({ type: 'SET:ACTIVE_HEADER', payload: { activeItem: 'supporto' } }); + return () => { + dispatch({ type: 'SET:ACTIVE_HEADER' }); + }; + }, [dispatch]); + return ; +}; export default Page; From 5162b36396b2d7db6cb602c74579f48789f13ea6 Mon Sep 17 00:00:00 2001 From: Fladiir Date: Thu, 24 Mar 2022 18:27:41 +0100 Subject: [PATCH 17/49] fix: wrong link (#332) * fix * captcha fix Co-authored-by: RIDP9CT --- src/components/hero/HeroHowItWorks.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/hero/HeroHowItWorks.jsx b/src/components/hero/HeroHowItWorks.jsx index 237bde260..07ddb52ed 100644 --- a/src/components/hero/HeroHowItWorks.jsx +++ b/src/components/hero/HeroHowItWorks.jsx @@ -227,7 +227,7 @@ export const HeroHowItWorks = ({ title, body, image, list }) => { {listItem.items.map((item) => ( scrollIntoView(item.anchor)} className={classes.listItem} > From 9bb496887f8bb65bb467736b9b1d75ff7e1caec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Thu, 24 Mar 2022 18:28:36 +0100 Subject: [PATCH 18/49] feat: add external links to protected area (#333) * fix external links * fix external links Co-authored-by: emnlpstr --- src/layouts/Header.jsx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/layouts/Header.jsx b/src/layouts/Header.jsx index 297882b82..6d047b2dd 100644 --- a/src/layouts/Header.jsx +++ b/src/layouts/Header.jsx @@ -395,17 +395,15 @@ const SlimHeader = () => { > {externalLinks.eu.label} - {externalLinks.eu.label} {externalLinks.eu.label} Accedi - + ); @@ -498,9 +496,12 @@ const NavHeader = () => { - + Gli avvisi - + Date: Thu, 24 Mar 2022 18:29:59 +0100 Subject: [PATCH 19/49] feat: candida pa page (#334) * canda-pa * candida pa page * fixed link to page come-partecipare * fix captcha Co-authored-by: RIDP9CT --- contents/candida-pa/candida-pa.yml | 44 ++++ .../come-partecipare/come-partecipare.yml | 2 + contents/seo.yml | 4 + src/layouts/CandidaPaPage.jsx | 237 ++++++++++++++++++ src/layouts/come-fare/KeypointSection.jsx | 9 +- src/pages/come-partecipare/candida-pa.jsx | 5 + static/assets/candida-pa.svg | 118 +++++++++ static/assets/cerca-avvisi.svg | 12 + static/assets/configura-pacchetto.svg | 24 ++ static/assets/invia-candidatura.svg | 23 ++ static/assets/notifiche.svg | 16 ++ 11 files changed, 490 insertions(+), 4 deletions(-) create mode 100644 contents/candida-pa/candida-pa.yml create mode 100644 src/layouts/CandidaPaPage.jsx create mode 100644 src/pages/come-partecipare/candida-pa.jsx create mode 100644 static/assets/candida-pa.svg create mode 100644 static/assets/cerca-avvisi.svg create mode 100644 static/assets/configura-pacchetto.svg create mode 100644 static/assets/invia-candidatura.svg create mode 100644 static/assets/notifiche.svg diff --git a/contents/candida-pa/candida-pa.yml b/contents/candida-pa/candida-pa.yml new file mode 100644 index 000000000..ac6a66992 --- /dev/null +++ b/contents/candida-pa/candida-pa.yml @@ -0,0 +1,44 @@ +name: FAQ - PA digitale 2026 +hero: + title: Domande frequenti + subtitle: Esplora le risposte alle domande più frequenti o fai una ricerca per parola chiave +sidebar: + - sectionTitle: 1. Cerca gli avvisi dedicati + sectionId: digital-identity + sectionActive: true + - sectionTitle: 2. Configura pacchetto + sectionId: select-administration + sectionActive: false + - sectionTitle: 3. Verifica e invia documento + sectionId: verify-data + sectionActive: false + - sectionTitle: 4. Resta sempre aggiornato + sectionId: confirm-subscription + sectionActive: false + - sectionTitle: Guarda il video dedicato + sectionId: watch-video + sectionActive: false + - sectionTitle: Per approfondire + sectionId: to-read-more + sectionActive: false +verticalTimeline: + - index: 0 + title: 'Cerca gli avvisi per la tua PA' + icon: '/assets/cerca-avvisi.svg' + headerParagraph: "All'interno della pagina “Gli avvisi pubblici” puoi identificare gli avvisi più idonei per la tua PA, filtrandoli in base a misura, beneficiari e stato dell'avviso." + sectionId: 'digital-identity' + - index: 1 + title: 'Configura il pacchetto' + icon: '/assets/configura-pacchetto.svg' + headerParagraph: 'Una volta identificato l’avviso di interesse, segui la configurazione guidata per definire il pacchetto sulla base delle esigenze della tua PA: puoi selezionare servizi e modalità implementative, e creare il documento di candidatura.' + sectionId: 'select-administration' + - index: 2 + title: 'Invia candidatura' + icon: '/assets/invia-candidatura.svg' + headerParagraph: 'In questa fase puoi visualizzare i dettagli del documento di candidatura che hai creato ed effettuare eventuali modifiche. Una volta firmato digitalmente potrai inviarlo attraverso la piattaforma per completare la candidatura.' + sectionId: 'verify-data' + - index: 3 + title: 'Ricevi aggiornamenti' + icon: '/assets/notifiche.svg' + headerParagraph: 'All’interno dell’area riservata puoi controllare lo stato della tua candidatura e ricevere le notifiche dedicate all’avanzamento della pratica digitale.' + sectionId: 'confirm-subscription' \ No newline at end of file diff --git a/contents/come-partecipare/come-partecipare.yml b/contents/come-partecipare/come-partecipare.yml index d09334577..a13e0b0cf 100644 --- a/contents/come-partecipare/come-partecipare.yml +++ b/contents/come-partecipare/come-partecipare.yml @@ -30,6 +30,7 @@ sectionFirst: title: 'Attivare la tua PA' text: 'L’attivazione del profilo della PA è il primo passaggio per partecipare agli avvisi pubblici e richiedere i finanziamenti per avviare il processo di transizione digitale.

Il rappresentante legale, o un suo incaricato, può accedere alla piattaforma grazie a SPID o CIE e, attraverso un percorso guidato, completare il processo di attivazione.' button: true + linkTo: "crea-profilo" image: 'kp-section-1.svg' bottomSection: false BottomImage1: 'bottom-1-1.svg' @@ -41,6 +42,7 @@ sectionSecond: title: 'Candidare una PA agli avvisi' text: In base alla tipologia e agli obiettivi della PA, è possibile identificare gli avvisi pubblici più idonei ad avviare il processo di transizione digitale.

Una volta identificato l'avviso, è possibile candidare una PA attraverso un processo guidato, che permette di comporre il documento di candidatura e inviarlo tramite la piattaforma. button: true + linkTo: "candida-pa" image: 'kp-section-2.svg' reverse: true bottomSection: false diff --git a/contents/seo.yml b/contents/seo.yml index c3cdd3357..2b92380d0 100644 --- a/contents/seo.yml +++ b/contents/seo.yml @@ -46,4 +46,8 @@ standardSolutionPage: creaProfiloPage: title: Crea profilo - PA digitale 2026 description: Per partecipare agli avvisi è necessario che il rappresentante legale di un'amministrazione presente su IPA (Indice dei domini digitali della Pubblica Amministrazione), o una persona incaricata, avvii la procedura di attivazione della PA sulla piattaforma. +candidaPaPage: + title: Candida PA - PA digitale 2026 + description: Per partecipare agli avvisi è necessario che il rappresentante legale di un'amministrazione presente su IPA (Indice dei domini digitali della Pubblica Amministrazione), o una persona incaricata, avvii la procedura di attivazione della PA sulla piattaforma. + diff --git a/src/layouts/CandidaPaPage.jsx b/src/layouts/CandidaPaPage.jsx new file mode 100644 index 000000000..0c4345ea8 --- /dev/null +++ b/src/layouts/CandidaPaPage.jsx @@ -0,0 +1,237 @@ +/* eslint-disable react/no-unescaped-entities */ +/* eslint-disable react-hooks/exhaustive-deps */ +/* eslint-disable no-undef */ +import React, { useState, useEffect } from 'react'; +import { Breadcrumb, BreadcrumbItem, Container, Row, Col } from 'design-react-kit'; +import { createUseStyles } from 'react-jss'; +import { announce } from '@react-aria/live-announcer'; +import faq from '../../contents/faq-page/faq.yml'; +import { SEO } from '../components/SEO'; +import seo from '../../contents/seo.yml'; +import content from '../../contents/candida-pa/candida-pa.yml'; +import { TimelineVerticalCards } from '../components/TimelineVerticalCards'; +import { HeroVideo } from '../components/HeroVideo'; +/* import { Totop } from '../components/Totop'; */ +import { SideNavigationAccordion } from './sideNavigationAccordion'; + +const { title: seoTitle, description: seoDescription } = seo.candidaPaPage; + +const { sidebar, verticalTimeline } = content; + +const useStyles = createUseStyles({ + breadcrumb: { + '@media (min-width: 991px)': { + marginLeft: '0.722rem', + marginBottom: '90px', + }, + }, + breadcrumbItem: { + '& a': { + color: '#06c', + fontWeight: '700', + textDecoration: 'underline', + }, + }, + breadcrumbItemActive: { + '& a': { + color: '#5B6F82', + textDecoration: 'none', + }, + }, + navigationContainer: { + borderTop: '1px solid #A9B9C3', + display: 'flex', + '@media (max-width: 991px)': { + flexDirection: 'column', + border: 'none', + }, + '& .content-container': { + '@media (min-width: 992px)': { + borderLeft: '1px solid #d9dadb', + }, + }, + }, + noResults: { + textAlign: 'center', + color: '#33485C', + margin: '0.833rem 0', + }, + inputContainer: { + position: 'relative', + '& .reset-btn': { + background: 'transparent', + border: '0', + position: 'absolute', + top: '15px', + right: '10px', + backgroundImage: 'url("../assets/close-black.svg")', + backgroundRepeat: 'no-repeat', + width: '1.1rem', + height: '1.1rem', + }, + }, + inputWrap: { + backgroundImage: 'url("../assets/icon-search.svg")', + '&:focus': { + outline: '2px solid #ff9900', + }, + }, + contentTitle: { + fontSize: '1.688rem', + fontWeight: '700', + }, + contentParagraph: { + fontSize: '1.125rem', + }, + cardReadMore: { + boxShadow: '0px 2px 20px rgba(0, 0, 0, 0.1)', + display: 'flex', + flexDirection: 'column', + padding: '20px 30px 20px 55px', + position: 'relative', + textDecoration: 'none', + }, + clip: { + position: 'absolute', + top: '24px', + left: '30px', + }, + cardTitle: { + fontWeight: '600', + color: '#0066CC', + fontSize: '1.125rem', + }, + cardInfo: { + fontWeight: '400', + fontSize: '0.875rem', + color: '#33485C', + }, + titleUpdate: { + fontSize: '2.5rem', + fontWeight: '700', + color: '#33485C', + lineHeight: '48px', + marginBottom: '30px', + '@media (max-width: 425px)': { + fontSize: '2.375rem', + }, + }, + subtitleUpdate: { + fontSize: '24px', + color: '#33485C', + lineHeight: '30px', + '@media (max-width: 425px)': { + fontSize: '1.25rem', + }, + }, + heroImg: { + '@media (max-width: 425px)': { + maxWidth: '80%', + }, + }, +}); + +// eslint-disable-next-line sonarjs/cognitive-complexity +export const CandidaPaPage = () => { + const classes = useStyles(); + const [inputValue, setInputValue] = useState(''); + const [questions, setQuestions] = useState(faq.questions); + const [isMobile, setIsMobile] = useState(); + // const [, dispatch] = useContext(GlobalStateContext); + + useEffect(() => { + setIsMobile(window.innerWidth < 992); + window.addEventListener('resize', () => { + setIsMobile(window.innerWidth < 992); + }); + announce('Pagina caricata ' + faq.name); + }, []); + + useEffect(() => { + if (!isMobile) { + setInputValue(''); + setQuestions(faq.questions); + } + }, [isMobile]); + + return ( + <> + +
+

{faq.name}

+
+
+ + + + + + Home + + + + Come partecipare + + + + Candida una PA agli avvisi + + + + + + +

Candida la tua PA agli avvisi per la transizione digitale

+
+ Per candidare la tua amministrazione agli avvisi pubblici e{' '} + richiedere i finanziamenti segui la configurazione guidata per comporre e inviare il + documento di candidatura: potrai seguire lo stato di avanzamento della pratica in area riservata. +
+ + + + +
+
+

+ Sezione domande frequenti +

+ +
+ {/* */} + +
+

Candida la tua amministrazione agli avvisi

+

+ Il processo di candidatura agli avvisi pubblici prevede quattro passaggi: +

+
+
+ + +
+

Per approfondire

+ + + + + Banda ultra larga + Scarica il PDF (3.7MB) + + + +
+
+
+
+
+
+ + ); +}; diff --git a/src/layouts/come-fare/KeypointSection.jsx b/src/layouts/come-fare/KeypointSection.jsx index a17389c02..7f45790e4 100644 --- a/src/layouts/come-fare/KeypointSection.jsx +++ b/src/layouts/come-fare/KeypointSection.jsx @@ -115,6 +115,7 @@ export const KeypointSection = (props) => { BottomImage2, BottomLinkLabel1, BottomLinkLabel2, + linkTo, } = props.item; return ( @@ -136,7 +137,7 @@ export const KeypointSection = (props) => {

{button ? ( {

{button ? ( @@ -219,7 +220,7 @@ export const KeypointSection = (props) => {

{button ? ( @@ -293,7 +294,7 @@ export const KeypointSection = (props) => {

{button ? ( diff --git a/src/pages/come-partecipare/candida-pa.jsx b/src/pages/come-partecipare/candida-pa.jsx new file mode 100644 index 000000000..f25b483fb --- /dev/null +++ b/src/pages/come-partecipare/candida-pa.jsx @@ -0,0 +1,5 @@ +import React from 'react'; +import { CandidaPaPage } from '../../layouts/CandidaPaPage'; + +const Page = (location) => ; +export default Page; diff --git a/static/assets/candida-pa.svg b/static/assets/candida-pa.svg new file mode 100644 index 000000000..4f690824a --- /dev/null +++ b/static/assets/candida-pa.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/cerca-avvisi.svg b/static/assets/cerca-avvisi.svg new file mode 100644 index 000000000..0e47241d5 --- /dev/null +++ b/static/assets/cerca-avvisi.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/assets/configura-pacchetto.svg b/static/assets/configura-pacchetto.svg new file mode 100644 index 000000000..ab48a3154 --- /dev/null +++ b/static/assets/configura-pacchetto.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/invia-candidatura.svg b/static/assets/invia-candidatura.svg new file mode 100644 index 000000000..e4598bfbd --- /dev/null +++ b/static/assets/invia-candidatura.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/notifiche.svg b/static/assets/notifiche.svg new file mode 100644 index 000000000..e71f3ab89 --- /dev/null +++ b/static/assets/notifiche.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + From 774f7a58682fb5ee5c1462a4fa85b5ae86c89aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Mon, 28 Mar 2022 10:11:12 +0200 Subject: [PATCH 20/49] fix: ui, breadcrumbs and links (#336) * progress * progress * fix ui and links * fix graphics * fix lint * fix lint * fix hero margin * fix hero solutions * fix breadcrumb url Co-authored-by: emnlpstr --- contents/candida-pa/candida-pa.yml | 6 - contents/come-funziona/come-funziona.yml | 4 +- .../come-partecipare/come-partecipare.yml | 4 +- contents/crea-profilo/crea-profilo.yml | 3 - contents/faq-page/faq.yml | 19 +- contents/links.yml | 6 +- contents/opportunity-page/opportunity.yml | 28 +-- src/components/ProjectsCards.jsx | 12 +- src/components/TimelineVertical.jsx | 17 +- src/components/TimelineVerticalCards.jsx | 2 +- src/components/carousel/Carousel.jsx | 6 +- src/components/carousel/HomeCarousel.jsx | 2 +- src/components/carousel/NoticesCarousel.jsx | 17 +- src/components/hero/Hero.jsx | 4 +- src/components/hero/HeroBody.jsx | 10 +- src/components/hero/HeroCtaContainer.jsx | 4 +- src/components/hero/HeroGraphic.jsx | 5 - src/components/hero/HeroHowItWorks.jsx | 6 + src/components/hero/HeroHowToDo.jsx | 2 +- src/components/hero/HeroImage.jsx | 28 ++- src/components/hero/HeroSolutions.jsx | 162 ++++++++++++++++++ src/components/modal/ModalUpdatesButton.jsx | 2 +- src/layouts/AssistenzaPage.jsx | 10 +- src/layouts/CandidaPaPage.jsx | 44 +++-- src/layouts/ComeFunzionaPage.jsx | 2 +- src/layouts/CreaProfiloPage.jsx | 19 +- src/layouts/FaqPage.jsx | 5 +- src/layouts/Header.jsx | 12 +- src/layouts/IndexPage.jsx | 35 +--- src/layouts/IniziativaPage.jsx | 59 +++++++ src/layouts/SolutionProjects.jsx | 37 ++-- src/layouts/SolutionStandard.jsx | 39 +++-- src/layouts/SupportPage.jsx | 2 +- src/layouts/UpdatesPage.jsx | 10 +- src/layouts/come-fare/KeypointSection.jsx | 8 +- src/layouts/faq/QuestionSection.jsx | 49 ++---- src/layouts/faq/SideNavigation.jsx | 4 +- src/layouts/faq/SupportSection.jsx | 10 +- src/layouts/sideNavigationAccordion.jsx | 2 +- src/layouts/support/Assistance.jsx | 38 +++- src/layouts/support/Banner.jsx | 6 +- src/layouts/support/FAQPreview.jsx | 21 ++- src/layouts/support/Hero.jsx | 85 +++++++-- .../presentazione-progetti.jsx | 0 .../soluzioni-standard.jsx | 0 static/assets/come-fare/assistenza.svg | 29 ++++ 46 files changed, 636 insertions(+), 239 deletions(-) create mode 100644 src/components/hero/HeroSolutions.jsx create mode 100644 src/layouts/IniziativaPage.jsx rename src/pages/{come-funziona => iniziativa}/presentazione-progetti.jsx (100%) rename src/pages/{come-funziona => iniziativa}/soluzioni-standard.jsx (100%) create mode 100644 static/assets/come-fare/assistenza.svg diff --git a/contents/candida-pa/candida-pa.yml b/contents/candida-pa/candida-pa.yml index ac6a66992..c0a7b05ef 100644 --- a/contents/candida-pa/candida-pa.yml +++ b/contents/candida-pa/candida-pa.yml @@ -15,12 +15,6 @@ sidebar: - sectionTitle: 4. Resta sempre aggiornato sectionId: confirm-subscription sectionActive: false - - sectionTitle: Guarda il video dedicato - sectionId: watch-video - sectionActive: false - - sectionTitle: Per approfondire - sectionId: to-read-more - sectionActive: false verticalTimeline: - index: 0 title: 'Cerca gli avvisi per la tua PA' diff --git a/contents/come-funziona/come-funziona.yml b/contents/come-funziona/come-funziona.yml index 86cb86d14..793175876 100644 --- a/contents/come-funziona/come-funziona.yml +++ b/contents/come-funziona/come-funziona.yml @@ -14,7 +14,7 @@ hero: - item: Beneficiari anchor: beneficiari beneficiaries: - category: I Beneficiari + category: Beneficiari title: La digitalizzazione a misura di territorio categories: - icon: '/assets/icone-beneficiari/regioni.svg' @@ -84,7 +84,7 @@ involved: image: '/assets/consip-logo.svg' text: Consip è la centrale acquisti della Pubblica Amministrazione. Per il PNRR mette a disposizione strumenti per agevolare la realizzazione degli interventi, semplificando il processo di acquisto delle PA attraverso contratti quadro o piattaforme per la negoziazione. timeline: - category: "Il Calendario" + category: "Calendario" title: "Le fasi per la transizione digitale della PA" cards: - id: 1 diff --git a/contents/come-partecipare/come-partecipare.yml b/contents/come-partecipare/come-partecipare.yml index a13e0b0cf..e0a8c0fd1 100644 --- a/contents/come-partecipare/come-partecipare.yml +++ b/contents/come-partecipare/come-partecipare.yml @@ -22,7 +22,7 @@ keypoints: transparent: true - number: "04" image: 'keypoint-4.svg' - title: 'Realizzare progetti' + title: 'Ricevere assistenza' desc: 'Per risolvere dubbi o problemi riguardo la piattaforma e le candidature.' transparent: true sectionFirst: @@ -62,5 +62,5 @@ sectionFourth: title: 'Ricevere assistenza' text: La piattaforma PA digitale 2026 permette di candidare le PA agli avvisi pubblici e di gestire le attività attraverso l’area riservata.

Qualsiasi dubbio o problema si possa riscontrare, è possibile trovare le risposte alle domande più comuni e chiedere assistenza dedicata. button: true - image: 'kp-section-4.svg' + image: 'assistenza.svg' reverse: true \ No newline at end of file diff --git a/contents/crea-profilo/crea-profilo.yml b/contents/crea-profilo/crea-profilo.yml index df3720171..12969684d 100644 --- a/contents/crea-profilo/crea-profilo.yml +++ b/contents/crea-profilo/crea-profilo.yml @@ -18,9 +18,6 @@ sidebar: - sectionTitle: Guarda il video dedicato sectionId: watch-video sectionActive: false - - sectionTitle: Per approfondire - sectionId: to-read-more - sectionActive: false verticalTimeline: - index: 0 title: 'Accedi tramite identità digitale' diff --git a/contents/faq-page/faq.yml b/contents/faq-page/faq.yml index 3e9c79d5c..7cda43ee7 100644 --- a/contents/faq-page/faq.yml +++ b/contents/faq-page/faq.yml @@ -73,7 +73,9 @@ questions:
  • 1.7.2 Centri di facilitazione digitale (135 mln) - Ampliare l’esperienza dei "Centri di facilitazione digitale", punti di accesso fisici, solitamente situati in biblioteche, scuole e centri sociali, che forniscono ai cittadini formazione sia di persona che online sulle competenze digitali al fine di supportare l’inclusione digitale
  • - title: Dove posso trovare informazioni su tutti gli investimenti di Italia domani, il Piano nazionale di ripresa e resilienza? - content: Per tutte le informazioni sugli investimenti di Italia domani, il Piano nazionale di ripresa e resilienza dell’Italia, è possibile visitare il sito ufficiale del Governo https://italiadomani.gov.it/ + content: Per tutte le informazioni sugli investimenti di Italia domani, il Piano nazionale di ripresa e resilienza dell’Italia, è possibile visitare il sito ufficiale del Governo + linkLabel: Vai al sito Italia domani + link: 'https://italiadomani.gov.it/' - title: Richiesta dei fondi description: I bandi e gli avvisi degli investimenti di Italia digitale 2026 e tutte le indicazioni necessarie per scoprire le opportunità e candidarsi sectionId: richiesta-fondi @@ -84,7 +86,7 @@ questions: - title: Quando saranno pubblicati gli avvisi? content: La pubblicazione dei primi avvisi è prevista per la primavera del 2022. - title: Come posso fare richiesta di accesso ai fondi? - content: A seconda della tipologia di misura e di PA, sarà possibile accedere alle risorse o attraverso delle soluzioni standard o attraverso la presentazione di progetti. + content: A seconda della tipologia di misura e di PA, sarà possibile accedere alle risorse o attraverso delle soluzioni standard o attraverso la presentazione di progetti. - title: Come funzionano gli avvisi a soluzioni standard? content: "Per le misure con una platea ampia di beneficiari (oltre 1.000 PA), è prevista una modalità di accesso per soluzioni standard. Un percorso semplificato e guidato che va dalla richiesta dei finanziamenti all’erogazione dei fondi. Le soluzioni standard hanno 3 caratteristiche principali:
    1. Soluzioni standard: ogni PA, in base a tipologia e dimensione, potrà accedere alle misure attraverso soluzioni standard, ciascuna con un valore economico predefinito. Non sarà necessario scrivere e presentare progetti per ricevere finanziamenti;
    2. Registrazione unica: per semplificare l’accesso ai fondi del PNRR le amministrazioni potranno accedere - con un’unica registrazione - a più misure, richiedendo, per esempio, sia finanziamenti per la migrazione al cloud che per il miglioramento dei siti web;
    3. Per obiettivi: per semplificare l’erogazione delle risorse, i contributi saranno riconosciuti alle amministrazioni sulla base del raggiungimento di specifici obiettivi predefiniti. Il processo di rendicontazione sarà quindi alleggerito, e non sarà necessario rendicontare le singole spese effettuate per ottenere i fondi.
    " - title: Come funzionano gli avvisi per cui è necessario presentare un progetto? @@ -101,8 +103,8 @@ questions: content: In attesa della pubblicazione degli avvisi, è possibile richiedere di rimanere aggiornati. Lasciando i tuoi contatti verrai anche notificato su tutte le novità, le iniziative e su eventuali attività informative pensate per agevolare la conoscenza e la futura partecipazione agli avvisi. - title: È possibile richiedere supporto? content: Sì, il sito prevede un modulo di contatto per richiedere assistenza e porre domande. Lasciando i propri contatti e selezionando l’argomento della richiesta, è possibile inviare un messaggio. Sarete poi ricontattati via mail dallo staff dedicato. - modalBtn: Rimani aggiornato - ariaLabel: testo aria label + updates: Rimani aggiornato + ariaLabel: Vai alla pagina per ricevere aggiornamenti - title: Erogazione delle risorse description: Le indicazioni pratiche per ricevere chiarimenti e aggiornamenti sectionId: erogazione @@ -119,13 +121,12 @@ questions: description: Le indicazioni pratiche per risolvere le problematiche tecniche ricorrenti sectionId: supporto-tecnico accordions: - - title: "Non ho ricevuto l'email di verifica: come posso finalizzare l’iscrizione agli aggiornamenti di PA Digitale 2026?" + - title: "Non ho ricevuto l'email di verifica: come posso finalizzare l’iscrizione agli aggiornamenti di PA digitale 2026?" content: "Se non trovi l’email che contiene il link per verificare l’indirizzo di posta sul quale vuoi ricevere gli aggiornamenti della piattaforma, ti consigliamo di:
    • controllare che l’email non si trovi nelle cartelle “spam”, “posta indesiderata”, “cestino”;
    • assicurarti di cercare l’email nell’account di posta elettronica che hai indicato nel modulo di iscrizione;
    • se non hai ricevuto alcuna email, scrivici tramite il modulo di supporto.
    " - linkLabel: Scrivici - link: 'https://padigitale2026.gov.it/supporto' - ariaLabel: Vai al modulo di supporto + assistance: Scrivici + ariaLabel: Vai alla pagina di assistenza - title: Come posso annullare la mia iscrizione agli aggiornamenti? - content: Se desideri interrompere la ricezione di comunicazioni e aggiornamenti da PA Digitale 2026, usa il link “Annulla iscrizione” presente nella sezione finale di ogni email. + content: Se desideri interrompere la ricezione di comunicazioni e aggiornamenti da PA digitale 2026, usa il link “Annulla iscrizione” presente nella sezione finale di ogni email. noResults: Nessun risultato trovato support: tag: Supporto diff --git a/contents/links.yml b/contents/links.yml index 8a2a063aa..80dc1340f 100644 --- a/contents/links.yml +++ b/contents/links.yml @@ -8,7 +8,7 @@ internalLinks: label: Misure linkTop: '/#mainTop' howitworks: - linkTo: '/come-funziona' + linkTo: '/iniziativa' label: L'iniziativa linkTop: '#mainTop' notices: @@ -91,6 +91,10 @@ externalLinks: linkTo: https://ec.europa.eu/info/index_it ariaLabel: 'Unione Europea (Collegamento esterno - Apre su nuova scheda)' label: 'Unione Europea' + accedi: + linkTo: https://dev1-padigitale2026.cs128.force.com/padigitale2026/sis_SpidPage + ariaLabel: "Accedi all'area privata" + label: 'Accedi' repubblica: linkTo: https://www.governo.it/ ariaLabel: 'Governo Italiano (Collegamento esterno - Apre su nuova scheda)' diff --git a/contents/opportunity-page/opportunity.yml b/contents/opportunity-page/opportunity.yml index f2957aa23..d0eb0a22d 100644 --- a/contents/opportunity-page/opportunity.yml +++ b/contents/opportunity-page/opportunity.yml @@ -66,7 +66,7 @@ beneficiaries:
  • avere significativi risparmi della spesa pubblica nella gestione dei data center che possono essere reinvestiti nello sviluppo di nuovi servizi.
  • stalls: '280 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto updates: Il 28 gennaio 2022 è stato pubblicato il bando per la realizzazione del Polo Strategico Nazionale (PSN). La proposta per la creazione del Polo, su cui si basa la gara, è stata individuata dal Dipartimento per la trasformazione digitale a dicembre 2021 secondo il modello di partenariato pubblico privato. La procedura è affidata a Difesa Servizi S.p.A., società in house del Ministero della Difesa, in qualità di centrale di committenza. @@ -94,7 +94,7 @@ beneficiaries:
  • la migrazione al cloud prevede un miglioramento dell’efficienza energetica delle infrastrutture della PA e maggiore sostenibilità ambientale grazie alla dismissione dei data center meno efficienti.
  • stalls: '16,600 enti' - solutionType: '/come-funziona/soluzioni-standard' + solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni Standard moreInfoLink: '#' @@ -123,7 +123,7 @@ beneficiaries:

    Vantaggi per la PA

    Per fornire servizi digitali a cittadini e imprese, gli enti devono scambiarsi informazioni in modo efficiente e sicuro. La Piattaforma semplifica questo scambio permettendo agli enti pubblici di accedere alle informazioni in possesso di altri enti: in questo modo la Pubblica Amministrazione non chiederà al cittadino o all’impresa dati già in suo possesso, applicando il principio Once Only.

    stalls: '170 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto moreInfoLink: '#' @@ -150,7 +150,7 @@ beneficiaries: label: 'Enti per il diritto allo studio, agenzie, consorzi' description: Facilitare l’implementazione dello “Sportello Digitale Unico” (Single Digital Gateway), ovvero supportare l’attuazione del regolamento europeo che ha l’obiettivo di uniformare l’accesso ai servizi digitali in tutto i Paesi membri dell'UE. stalls: '230 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto updates: Il Dipartimento per la trasformazione digitale ha siglato un accordo di collaborazione con AgID, in quanto soggetto attuatore, per l’implementazione della misure. La Corte dei Conti ha registrato l’accordo rendendolo pienamente operativo. Per tutti gli aggiornamenti visita la sezione dedicata del sito AgID. @@ -175,7 +175,7 @@ beneficiaries:
  • risparmio di risorse, automatizzando e riusando soluzioni già collaudate, chiavi in mano.
  • stalls: '16,500 enti' - solutionType: '/come-funziona/soluzioni-standard' + solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni standard moreInfoLink: '#' @@ -203,7 +203,7 @@ beneficiaries:
  • implementazione di tecnologie assistive necessarie alle postazioni di lavoro dei lavoratori con disabilità.
  • stalls: '55 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto updates: Il Dipartimento per la trasformazione digitale ha siglato un accordo di collaborazione con AgID, in quanto soggetto attuatore, per l’implementazione della misure. La Corte dei Conti ha registrato l’accordo rendendolo pienamente operativo. Per tutti gli aggiornamenti visita la sezione dedicata del sito AgID. @@ -239,7 +239,7 @@ beneficiaries:

    pagoPA consente alle Pubbliche Amministrazioni di gestire gli incassi in modo centralizzato ed efficiente, offrendo sistemi automatici di rendicontazione e riconciliazione con un significativo risparmio in termini di risorse, tempi e costi e assicurando un servizio migliore ai cittadini.

    IO permette alle diverse PA, locali o nazionali, di raccogliere tutti i servizi, le comunicazioni e i relativi documenti in un unico luogo e di interfacciarsi in modo semplice, rapido e sicuro con i cittadini.

    stalls: '17,500 enti' - solutionType: '/come-funziona/soluzioni-standard' + solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni Standard moreInfoLink: '#' @@ -279,7 +279,7 @@ beneficiaries:

    Le soluzioni di identità digitale SPID e CIE consentono alle amministrazioni di abbandonare i diversi sistemi di autenticazione gestiti localmente, permettendo di risparmiare risorse (in termini di lavoro e costo necessari per il rilascio e la manutenzione delle credenziali) ed offrire un accesso sicuro e veloce ed omogeneo ai servizi online su tutto il territorio nazionale.

    Con ANPR le amministrazioni potranno dialogare in maniera efficiente tra di loro, avendo  a disposizione un punto di riferimento unico di dati e informazioni anagrafiche, dal quale poter reperire informazioni certe e sicure per poter erogare servizi integrati e più efficienti per i cittadini. Per la Pubblica Amministrazione significa guadagnare in efficienza superando le precedenti frammentazioni, ottimizzare le risorse, semplificare e automatizzare le operazioni relative ai servizi anagrafici, consultare o estrarre dati, monitorare le attività ed effettuare analisi e statistiche

    stalls: '10,300 enti' - solutionType: '/come-funziona/soluzioni-standard' + solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni Standard moreInfoLink: '#' @@ -298,7 +298,7 @@ beneficiaries:

    Vantaggi per la PA

    Accedere a un sistema di notifica digitale permetterà alla PA di abbattere le spese vive legate all’attuale processo di notifica (stampa cartacea e spedizione degli atti), anche in caso di inadempimento da parte del cittadino. La certezza delle notifiche, inoltre, consente di ridurre una cospicua parte del contenzioso e i relativi costi di gestione.

    stalls: '7,900 enti' - solutionType: '/come-funziona/soluzioni-standard' + solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni standard moreInfoLink: '#' @@ -317,7 +317,7 @@ beneficiaries:

    L'utilizzo di soluzioni di Mobility as a Service (MaaS) miglioreranno i sistemi di trasporto, ridurranno il traffico urbano, gli incidenti stradali e, grazie ad un minore utilizzo dell’auto privata, vi sarà un’importante diminuzione dei consumi energetici, delle emissioni e dell’inquinamento. 

    La PA potrà quindi raggiungere obiettivi di sostenibilità economica, ambientale e sociale per l’intera collettività.

    stalls: '10 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto updates: L’avviso pubblico del 22 novembre 2021 ha portato alla selezione di Milano, Napoli e Roma come città capofila per il progetto Mobility as a Service for Italy. Nei prossimi mesi sarà pubblicato un nuovo bando per ampliare l’iniziativa. @@ -338,7 +338,7 @@ beneficiaries:
  • abilitare una gestione e un monitoraggio efficienti del rischio informatico.
  • stalls: '6 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto updates: La Corte dei Conte ha registrato l'accordo tra il Dipartimento per la trasformazione digitale e l'Agenzia per la cybersicurezza, rendendo l'Agenzia soggetto attuatore della misura. Per tutti gli aggiornamenti visita la pagina dedicata sul sito dell'Agenzia. @@ -352,7 +352,7 @@ beneficiaries: label: PA Centrali description: Digitalizzare le grandi amministrazioni centrali, a partire dai processi fondamentali per semplificare l’erogazione di servizi al cittadino, aumentando allo stesso tempo l'efficienza dell’apparato pubblico. stalls: '7 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto updates: Il Dipartimento per la trasformazione digitale ha stretto accordi di collaborazione con tutte le grandi amministrazioni coinvolte dalla misura: INPS, Ministero della Giustizia, INAIL, Ministero dell’Interno, Ministero delle Difesa, Guardia di Finanza e Consiglio di Stato. Gli accordi sono stati registrati dalla Corte dei Conti, dando ufficialmente il via all’implementazione delle singole iniziative. Per maggiori informazioni visita innovazione.gov.it. @@ -369,7 +369,7 @@ beneficiaries:

    Vantaggi per la PA

    Una cittadinanza in grado di utilizzare consapevolmente le possibilità offerte dalle tecnologie digitali consente all’amministrazione di pubblica di erogare servizi anche in modalità digitale, migliorando quindi la qualità dell’offerta e il rapporto tra cittadini e istituzioni.

    stalls: '100 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto updates: Il Dipartimento per la trasformazione digitale della Presidenza del Consiglio dei ministri, ha individuato il Dipartimento per le politiche giovanili e il Servizio Civile Universale quale Soggetto attuatore della misura. Il 26 gennaio il Dipartimento ha quindi pubblicato il primo avviso pubblico per gli enti. @@ -388,7 +388,7 @@ beneficiaries:

    Vantaggi per la PA

    L’iniziativa consentirà di sviluppare e potenziare le capacità digitali anche in un’amministrazione pubblica, incluse le scuole, in modo da abilitare l’evoluzione del servizio seguendo le esigenze della cittadinanza e offrire un servizio di assistenza rivolto anche alle categorie svantaggiate.

    stalls: '21 enti' - solutionType: '/come-funziona/presentazione-progetti' + solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto moreInfoLink: '#' diff --git a/src/components/ProjectsCards.jsx b/src/components/ProjectsCards.jsx index d25ae6802..40f13ec6e 100644 --- a/src/components/ProjectsCards.jsx +++ b/src/components/ProjectsCards.jsx @@ -88,6 +88,9 @@ const useStyles = createUseStyles({ marginBottom: '1.667rem', paddingRight: '0', }, + '@media (max-width: 767px)': { + maxWidth: '100%', + }, }, cardFooter: { '@media (max-width: 992px)': { @@ -95,6 +98,11 @@ const useStyles = createUseStyles({ width: '100%', justifyContent: 'center', }, + '& .btn': { + '@media (max-width: 767px)': { + width: '100%', + }, + }, }, columnCard: { composes: 'column-card', @@ -132,7 +140,7 @@ export const ProjectsCards = (item) => {
    - + {projectsCardsItem.buttonLabelLeft}
    @@ -149,7 +157,7 @@ export const ProjectsCards = (item) => {
    - + {projectsCardsItem.buttonLabelRight}
    diff --git a/src/components/TimelineVertical.jsx b/src/components/TimelineVertical.jsx index 02cd13365..d39887123 100644 --- a/src/components/TimelineVertical.jsx +++ b/src/components/TimelineVertical.jsx @@ -24,6 +24,9 @@ const useStyle = createUseStyles({ top: '0', height: 'calc(100% - 72px)', }, + '@media (max-width: 767px)': { + left: '17px', + }, }, scrollIndicatorActive: { composes: 'scroll-indicator-active', @@ -40,6 +43,12 @@ const useStyle = createUseStyles({ '@media (max-width: 992px)': { marginLeft: '4.444rem', }, + '@media (max-width: 767px)': { + marginLeft: '3.444rem', + }, + '&:last-child': { + marginBottom: '0', + }, }, timelineNumber: { composes: 'timeline-number', @@ -60,8 +69,8 @@ const useStyle = createUseStyles({ top: '0', left: '-66px', }, - '@media (max-width: 574px)': { - left: '-57px', + '@media (max-width: 767px)': { + left: '-55px', }, '&.active': { background: '#0066CC', @@ -245,8 +254,8 @@ export const TimelineVertical = ({ item }) => { return ( <> -
    - +
    +
    diff --git a/src/components/TimelineVerticalCards.jsx b/src/components/TimelineVerticalCards.jsx index a86ec4dcc..72a1a2f16 100644 --- a/src/components/TimelineVerticalCards.jsx +++ b/src/components/TimelineVerticalCards.jsx @@ -17,7 +17,7 @@ const useStyle = createUseStyles({ top: '0', left: '-40px', width: '4px', - height: 'calc(100% - 100px)', + height: 'calc(100% - 60px)', background: '#C5E1F9', display: 'none', '@media (max-width: 992px)': { diff --git a/src/components/carousel/Carousel.jsx b/src/components/carousel/Carousel.jsx index b6daf711f..a9ffa1a1a 100644 --- a/src/components/carousel/Carousel.jsx +++ b/src/components/carousel/Carousel.jsx @@ -28,7 +28,7 @@ const useStyles = createUseStyles({ '& h4.card-title': { color: '#0066CC', fontSize: '1.125rem', - fontWeight: 'bold', + fontWeight: '600', lineHeight: '1.26', '@media (min-width: 992px)': { minHeight: '2.889rem', @@ -77,7 +77,7 @@ const useStyles = createUseStyles({ }, newsUpdateSection: { backgroundColor: '#fff', - padding: '6rem 0 4rem', + padding: '5.556rem 0', '& .swiper': { margin: '0 -1.111rem', paddingTop: '20px', @@ -154,7 +154,7 @@ export const HeroCarousel = ({ content, title }) => { return ( <>
    -
    +
    {title ? ( diff --git a/src/components/carousel/HomeCarousel.jsx b/src/components/carousel/HomeCarousel.jsx index cc9341c85..22ecac453 100644 --- a/src/components/carousel/HomeCarousel.jsx +++ b/src/components/carousel/HomeCarousel.jsx @@ -41,7 +41,7 @@ const useStyles = createUseStyles({ '& h4.card-title': { color: '#0066CC', fontSize: '1.778rem', - fontWeight: 'bold', + fontWeight: '600', lineHeight: '1.43', marginBottom: '0.889rem', '@media (min-width: 992px)': { diff --git a/src/components/carousel/NoticesCarousel.jsx b/src/components/carousel/NoticesCarousel.jsx index 13cc99cf6..ce4f2bfd8 100644 --- a/src/components/carousel/NoticesCarousel.jsx +++ b/src/components/carousel/NoticesCarousel.jsx @@ -66,10 +66,13 @@ const useStyles = createUseStyles({ whiteSpace: 'nowrap', fontWeight: '600', margin: 0, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, noticesSection: { backgroundColor: '#fff', - padding: '3rem 0 4rem', + padding: '5.556rem 0', '& .swiper': { margin: '0 -1.111rem', '@media (max-width: 992px)': { @@ -89,6 +92,11 @@ const useStyles = createUseStyles({ '& .swiper-pagination.swiper-pagination-bullets .swiper-pagination-bullet': { margin: '0 0.889rem', }, + '& .btn': { + '@media (max-width: 767px)': { + width: '100%', + }, + }, }, noticeLabel: { fontSize: '0.778rem', @@ -140,7 +148,7 @@ export const NoticesCarousel = ({ content, title }) => { return ( <>
    -
    +
    {title ? ( @@ -165,7 +173,10 @@ export const NoticesCarousel = ({ content, title }) => { idCarousel="notices-carousel" />
    - + scopri tutti
    diff --git a/src/components/hero/Hero.jsx b/src/components/hero/Hero.jsx index 69423fc0b..bd7cb67e2 100644 --- a/src/components/hero/Hero.jsx +++ b/src/components/hero/Hero.jsx @@ -20,8 +20,8 @@ export const Hero = ({ className ); const containerClass = classNames('container', { - 'py-xl-5': yPaddingXLScreen, - 'px-3 px-md-0': xPadding, + 'py-3': yPaddingXLScreen, + 'px-3': xPadding, }); return (
    diff --git a/src/components/hero/HeroBody.jsx b/src/components/hero/HeroBody.jsx index 02d22b636..51fbd7977 100644 --- a/src/components/hero/HeroBody.jsx +++ b/src/components/hero/HeroBody.jsx @@ -5,10 +5,14 @@ import PropTypes from 'prop-types'; const useStyles = createUseStyles({ body: { color: '#33485C', - fontSize: '1rem', - fontFamily: 'Titillium Web', + fontSize: '1.5rem', + lineHeight: '1.5', '@media (min-width: 992px)': { - maxWidth: '26.667rem', + fontSize: '1.333rem', + }, + '@media (max-width: 767px)': { + textAlign: 'center', + display: 'block', }, }, }); diff --git a/src/components/hero/HeroCtaContainer.jsx b/src/components/hero/HeroCtaContainer.jsx index 07c40401a..51288e978 100644 --- a/src/components/hero/HeroCtaContainer.jsx +++ b/src/components/hero/HeroCtaContainer.jsx @@ -2,7 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; export const HeroCtaContainer = ({ children }) => ( -
    {children}
    +
    + {children} +
    ); HeroCtaContainer.propTypes = { diff --git a/src/components/hero/HeroGraphic.jsx b/src/components/hero/HeroGraphic.jsx index a688ff936..319d3e8f9 100644 --- a/src/components/hero/HeroGraphic.jsx +++ b/src/components/hero/HeroGraphic.jsx @@ -4,11 +4,6 @@ import PropTypes from 'prop-types'; const useStyles = createUseStyles({ heroGraphic: {}, - '@media (max-width: 992px)': { - heroGraphic: { - order: -1, - }, - }, }); export const HeroGraphic = ({ className = '', children }) => { diff --git a/src/components/hero/HeroHowItWorks.jsx b/src/components/hero/HeroHowItWorks.jsx index 07ddb52ed..dad3142a3 100644 --- a/src/components/hero/HeroHowItWorks.jsx +++ b/src/components/hero/HeroHowItWorks.jsx @@ -21,6 +21,12 @@ const useStyles = createUseStyles({ maxWidth: '450px', right: '155px', }, + '@media (min-width: 1441px) and (max-width: 1680px)': { + right: '280px', + }, + '@media (min-width: 1700px)': { + right: '385px', + }, '@media (max-width: 991px)': { width: '80%', }, diff --git a/src/components/hero/HeroHowToDo.jsx b/src/components/hero/HeroHowToDo.jsx index 9d1b9d8e1..b59d996c7 100644 --- a/src/components/hero/HeroHowToDo.jsx +++ b/src/components/hero/HeroHowToDo.jsx @@ -228,7 +228,7 @@ export const HeroHowToDo = ({ title, body, image, imageMob }) => {
    - +
    diff --git a/src/components/hero/HeroImage.jsx b/src/components/hero/HeroImage.jsx index e8e81f66c..2d3c776a1 100644 --- a/src/components/hero/HeroImage.jsx +++ b/src/components/hero/HeroImage.jsx @@ -51,14 +51,13 @@ const useStyles = createUseStyles({ }, }, outlineBtn: { - backgroundColor: '#fff', + backgroundColor: 'transparent', border: '1px solid #06c', color: '#06c', }, heroImage: { composes: 'row align-items-center', '@media (min-width: 768px)': { - flexWrap: 'nowrap !important', '& .hero-graphic-img': { order: 2, }, @@ -81,8 +80,11 @@ const useStyles = createUseStyles({ }, }, '& .graphic-image': { + '@media (max-width: 991px)': { + maxWidth: '50%', + }, '@media (max-width: 767px)': { - maxWidth: '15.6rem', + maxWidth: '80%', margin: '0 auto 2.5rem', }, }, @@ -113,10 +115,18 @@ const useStyles = createUseStyles({ '&.hero-main .btn': { backgroundColor: '#fff', color: '#0066CC', - fontWeight: 'bold', + fontWeight: '600', '&:hover': { color: '#004d99', }, + '@media (max-width: 767px)': { + width: '100%', + }, + }, + '& .btn': { + '@media (max-width: 767px)': { + width: '100%', + }, }, }, }); @@ -151,7 +161,7 @@ export const HeroImage = ({ className={`${dark ? classes.heroSectionDark : ''} ${light ? classes.heroSectionLight : ''}`} >
    -
    +
    {category ? : ''} @@ -161,7 +171,7 @@ export const HeroImage = ({ {firstInternal ? ( {firstButtonLabel} @@ -181,7 +191,7 @@ export const HeroImage = ({ {secondButtonLabel ? ( dispatch({ @@ -200,7 +210,7 @@ export const HeroImage = ({ '' )}
    - + {imageAlt}
    diff --git a/src/components/hero/HeroSolutions.jsx b/src/components/hero/HeroSolutions.jsx new file mode 100644 index 000000000..de4883f42 --- /dev/null +++ b/src/components/hero/HeroSolutions.jsx @@ -0,0 +1,162 @@ +import React from 'react'; +import { createUseStyles } from 'react-jss'; +import { Row, Col, Hero, Container } from 'design-react-kit'; +import PropTypes from 'prop-types'; +import { HeroTitle } from './HeroTitle'; +import { HeroBackground } from './HeroBackground'; +import { HeroParagraph } from './HeroParagraph'; + +const useStyles = createUseStyles({ + heroImg: { + position: 'relative', + width: '100%', + '@media (min-width: 992px)': { + position: 'absolute', + right: '122px', + top: '54px', + maxWidth: '300px', + }, + '@media (min-width: 1200px)': { + maxWidth: '300px', + right: '260px', + }, + '@media (max-width: 1200px)': { + top: '94px', + }, + '@media (min-width: 1700px)': { + right: '385px', + }, + '@media (min-width: 1441px) and (max-width: 1680px)': { + right: '380px', + }, + '@media (max-width: 991px)': { + width: '60%', + top: '0', + }, + '@media (max-width: 767px)': { + width: '80%', + }, + }, + heroTitle: { + fontSize: '2.5rem', + fontWeight: '700', + color: '#33485C', + lineHeight: '48px', + marginBottom: '30px', + '@media (max-width: 991px)': { + fontSize: '2.25rem', + }, + }, + heroSubtitle: { + fontSize: '24px', + color: '#33485C', + lineHeight: '1.5', + '@media (max-width: 991px)': { + fontSize: '1.125rem', + }, + }, + contentWrapper: { + composes: 'it-hero-text-wrapper', + display: 'flex', + }, + heroWrapper: { + composes: 'it-hero-wrapper', + position: 'relative', + display: 'flex', + '&.it-hero-wrapper': { + alignItems: 'flex-start', + minHeight: 'unset', + }, + '&.it-hero-wrapper .it-hero-text-wrapper': { + '@media (min-width: 992px)': { + padding: '0', + }, + '@media (max-width: 991px)': { + padding: '0 0 3.889rem', + }, + }, + '&.overlap': { + marginBottom: '-7rem', + paddingBottom: '4rem', + }, + '&.bg-white': { + backgroundColor: 'transparent !important', + '& .it-hero-text-wrapper.bg-white span, h1, h2, h3, p': { + color: '#33485C', + }, + '& .it-hero-text-wrapper.bg-white span.list-item': { + fontSize: '1rem', + fontWeight: '600', + color: '#0066CC', + marginBottom: '0.889rem', + '&:last-child': { + marginBottom: '0', + }, + }, + }, + '&.bg-blue': { + backgroundColor: '#0066CC', + '& .bg-blue': { + color: '#fff', + }, + }, + '&.bg-blue .btn': { + color: '#0066CC', + }, + '& .container .it-hero-text-wrapper p': { + fontFamily: 'Titillium Web,Geneva,Tahoma,sans-serif', + fontSize: '1.333rem', + '@media (max-width: 992px)': { + fontSize: '1.25rem', + }, + }, + '& .container .it-hero-text-wrapper .btn': { + fontSize: '1rem', + }, + }, + textWrapper: { + '@media (min-width: 992px)': { + marginRight: '2.611rem', + }, + '@media (max-width: 991px)': { + textAlign: 'center', + }, + }, +}); + +export const HeroSolutions = ({ title, body, image }) => { + const classes = useStyles(); + + return ( + +
    + + + +
    + + +
    + + +
    + + + + +
    +
    + +
    +
    +
    + +
    + ); +}; + +HeroSolutions.propTypes = { + title: PropTypes.string, + body: PropTypes.string, + image: PropTypes.string, +}; diff --git a/src/components/modal/ModalUpdatesButton.jsx b/src/components/modal/ModalUpdatesButton.jsx index c1c499e90..220979e4e 100644 --- a/src/components/modal/ModalUpdatesButton.jsx +++ b/src/components/modal/ModalUpdatesButton.jsx @@ -103,7 +103,7 @@ export const ModalUpdatesButton = ({ label, buttonLabel, hasTitle }) => {

    {buttonLabel} diff --git a/src/layouts/AssistenzaPage.jsx b/src/layouts/AssistenzaPage.jsx index 15c463352..a762fdafe 100644 --- a/src/layouts/AssistenzaPage.jsx +++ b/src/layouts/AssistenzaPage.jsx @@ -238,6 +238,9 @@ const useStyles = createUseStyles({ '@media (max-width: 991px)': { fontSize: '2.25rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, subtitleUpdate: { fontSize: '1.333rem', @@ -246,6 +249,9 @@ const useStyles = createUseStyles({ '@media (max-width: 991px)': { fontSize: '1.125rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, mandatory: { fontSize: '1rem', @@ -257,7 +263,7 @@ const useStyles = createUseStyles({ heroImg: { maxWidth: '100%', '@media (max-width: 991px)': { - width: '64%', + width: '80%', }, }, breadcrumb: { @@ -481,7 +487,7 @@ export const AssistenzaPage = () => { xs={12} md={6} lg={3} - className="offset-lg-2 d-flex justify-content-sm-end justify-content-lg-center mt-5 mt-md-0" + className="offset-lg-2 d-flex justify-content-center justify-content-sm-end justify-content-lg-center mt-5 mt-md-0" > diff --git a/src/layouts/CandidaPaPage.jsx b/src/layouts/CandidaPaPage.jsx index 0c4345ea8..6e9d3f637 100644 --- a/src/layouts/CandidaPaPage.jsx +++ b/src/layouts/CandidaPaPage.jsx @@ -10,7 +10,6 @@ import { SEO } from '../components/SEO'; import seo from '../../contents/seo.yml'; import content from '../../contents/candida-pa/candida-pa.yml'; import { TimelineVerticalCards } from '../components/TimelineVerticalCards'; -import { HeroVideo } from '../components/HeroVideo'; /* import { Totop } from '../components/Totop'; */ import { SideNavigationAccordion } from './sideNavigationAccordion'; @@ -20,22 +19,32 @@ const { sidebar, verticalTimeline } = content; const useStyles = createUseStyles({ breadcrumb: { - '@media (min-width: 991px)': { - marginLeft: '0.722rem', - marginBottom: '90px', + padding: '1.563rem 0 0', + '& .breadcrumb': { + padding: '0.75rem 0', }, }, breadcrumbItem: { '& a': { - color: '#06c', - fontWeight: '700', + color: '#5B6F82', + fontWeight: '600', textDecoration: 'underline', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, breadcrumbItemActive: { '& a': { color: '#5B6F82', textDecoration: 'none', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, navigationContainer: { @@ -89,7 +98,6 @@ const useStyles = createUseStyles({ flexDirection: 'column', padding: '20px 30px 20px 55px', position: 'relative', - textDecoration: 'none', }, clip: { position: 'absolute', @@ -115,6 +123,9 @@ const useStyles = createUseStyles({ '@media (max-width: 425px)': { fontSize: '2.375rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, subtitleUpdate: { fontSize: '24px', @@ -123,6 +134,9 @@ const useStyles = createUseStyles({ '@media (max-width: 425px)': { fontSize: '1.25rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, heroImg: { '@media (max-width: 425px)': { @@ -160,26 +174,26 @@ export const CandidaPaPage = () => {

    {faq.name}

    -
    +
    - Home + Home - Come partecipare + Come partecipare - Candida una PA agli avvisi + Candida la tua PA agli avvisi per la transizione digitale - +

    Candida la tua PA agli avvisi per la transizione digitale

    @@ -214,12 +228,12 @@ export const CandidaPaPage = () => {
    - + {/*

    Per approfondire

    - + Banda ultra larga Scarica il PDF (3.7MB) @@ -227,7 +241,7 @@ export const CandidaPaPage = () => {
    -
    +
    */}
    diff --git a/src/layouts/ComeFunzionaPage.jsx b/src/layouts/ComeFunzionaPage.jsx index cc2214309..f4826a51d 100644 --- a/src/layouts/ComeFunzionaPage.jsx +++ b/src/layouts/ComeFunzionaPage.jsx @@ -52,7 +52,7 @@ export const ComeFunzionaPage = () => { /> - + ); diff --git a/src/layouts/CreaProfiloPage.jsx b/src/layouts/CreaProfiloPage.jsx index 472a7905e..338fa644b 100644 --- a/src/layouts/CreaProfiloPage.jsx +++ b/src/layouts/CreaProfiloPage.jsx @@ -99,7 +99,6 @@ const useStyles = createUseStyles({ flexDirection: 'column', padding: '20px 30px 20px 55px', position: 'relative', - textDecoration: 'none', }, clip: { position: 'absolute', @@ -125,6 +124,9 @@ const useStyles = createUseStyles({ '@media (max-width: 991px)': { fontSize: '2.25rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, subtitleUpdate: { fontSize: '1.333rem', @@ -133,6 +135,9 @@ const useStyles = createUseStyles({ '@media (max-width: 991px)': { fontSize: '1.125rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, heroImg: { maxWidth: '100%', @@ -177,15 +182,15 @@ export const CreaProfiloPage = () => { - Home + Home - Come partecipare + Come partecipare - Crea il profilo della tua PA + Attiva il profilo della tua PA: identità digitale e dati IPA @@ -238,12 +243,12 @@ export const CreaProfiloPage = () => {
    - + {/*

    Per approfondire

    - + Banda ultra larga Scarica il PDF (3.7MB) @@ -251,7 +256,7 @@ export const CreaProfiloPage = () => {
    -
    +
    */}
    diff --git a/src/layouts/FaqPage.jsx b/src/layouts/FaqPage.jsx index 89f35f41d..48aa43db0 100644 --- a/src/layouts/FaqPage.jsx +++ b/src/layouts/FaqPage.jsx @@ -36,6 +36,9 @@ const useStyles = createUseStyles({ width: '1.1rem', height: '1.1rem', }, + '& label': { + fontWeight: '400', + }, }, inputWrap: { backgroundImage: 'url("../assets/icon-search.svg")', @@ -167,7 +170,7 @@ export const FaqPage = () => {

    {faq.name}

    - +

    diff --git a/src/layouts/Header.jsx b/src/layouts/Header.jsx index 6d047b2dd..f4bf235ce 100644 --- a/src/layouts/Header.jsx +++ b/src/layouts/Header.jsx @@ -395,14 +395,10 @@ const SlimHeader = () => { > {externalLinks.eu.label} - + {externalLinks.eu.label} {externalLinks.eu.label} - Accedi + {externalLinks.accedi.label} @@ -430,7 +426,7 @@ const CenterHeader = () => {

    PA digitale 2026 - Le risorse per una PA protagonista della transazione digitale + Le risorse per una PA protagonista della transizione digitale
    @@ -500,7 +496,7 @@ const NavHeader = () => { to="https://dev1-padigitale2026.cs128.force.com/padigitale2026/Pa_digitale2026_avvisi" className="nav-link" > - Gli avvisi + Avvisi diff --git a/src/layouts/IndexPage.jsx b/src/layouts/IndexPage.jsx index 55a628184..780aa6ce2 100644 --- a/src/layouts/IndexPage.jsx +++ b/src/layouts/IndexPage.jsx @@ -1,5 +1,4 @@ import React, { useEffect, useState } from 'react'; -import { createUseStyles } from 'react-jss'; import { name, heroMainBanner, @@ -14,34 +13,12 @@ import { HeroImage } from '../components/hero/HeroImage'; import { HeroCarousel } from '../components/carousel/Carousel'; import { SEO } from '../components/SEO'; import seo from '../../contents/seo.yml'; -import labels from '../../contents/labels.yml'; import { NoticesCarousel } from '../components/carousel/NoticesCarousel'; import { SupportSection } from './faq/SupportSection'; const { title: seoTitle, description: seoDescription } = seo.homePage; -const { headerTitle, headerSubtitle } = labels; - -const useStyles = createUseStyles({ - mobileTitle: { - composes: 'px-3', - '@media (min-width: 992px)': { - display: 'none', - }, - '& .title': { - fontSize: '1.25rem', - color: '#0066CC', - fontWeight: 'bold', - }, - '& .description': { - fontSize: '1.25rem', - color: '#0066CC', - }, - }, -}); export const IndexPage = () => { - const classes = useStyles(); - const [newsList, setNewsList] = useState([]); useEffect(() => { @@ -60,10 +37,6 @@ export const IndexPage = () => { return ( <> -
    -

    {headerTitle}

    -

    {headerSubtitle}

    -

    {name}

    @@ -76,7 +49,7 @@ export const IndexPage = () => { imageUrl="/assets/icona-home-banner.svg" imageAlt="" firstInternal={true} - firstButtonHref="/come-funziona" + firstButtonHref="/iniziativa" firstButtonLabel={heroMainBanner.firstButtonLabel} firstButtonAriaLabel={heroMainBanner.firstButtonAriaLabel} heroTitleId="home-hero-title" @@ -90,9 +63,8 @@ export const IndexPage = () => { body={heroPnrr.body} imageUrl="/assets/home-candidature.svg" imageAlt="" - outlineBtn={true} firstInternal={true} - firstButtonHref="/come-funziona" + firstButtonHref="/come-partecipare/candida-pa" firstButtonLabel={heroPnrr.firstButtonLabel} firstButtonAriaLabel={heroPnrr.firstButtonAriaLabel} heroTitleId="home-hero-title-candidature" @@ -105,9 +77,8 @@ export const IndexPage = () => { body={heroClassificazione.body} imageUrl="/assets/Classificazione_Dati_e_Servizi.svg" imageAlt="" - outlineBtn={true} firstInternal={true} - firstButtonHref="/come-funziona" + firstButtonHref="/iniziativa" firstButtonLabel={heroClassificazione.firstButtonLabel} firstButtonAriaLabel={heroClassificazione.firstButtonAriaLabel} heroTitleId="home-hero-title-classificazione" diff --git a/src/layouts/IniziativaPage.jsx b/src/layouts/IniziativaPage.jsx new file mode 100644 index 000000000..4faac44d1 --- /dev/null +++ b/src/layouts/IniziativaPage.jsx @@ -0,0 +1,59 @@ +import React, { useEffect, useContext } from 'react'; +import { announce } from '@react-aria/live-announcer'; +import content from '../../contents/iniziativa/iniziativa.yml'; +import { SEO } from '../components/SEO'; +import { Timeline } from '../components/carousel/Timeline'; +import { ProjectsCards } from '../components/ProjectsCards'; +import { HeroHowItWorks } from '../components/hero/HeroHowItWorks'; +import seo from '../../contents/seo.yml'; +import { GlobalStateContext } from '../context/globalContext'; +import { Breadcrumb } from '../components/Breadcrumb'; +import { Involved } from './iniziativa/Involved'; +import { Beneficiaries } from './iniziativa/Beneficiaries'; + +const { title: seoTitle, description: seoDescription } = seo.IniziativaPage; + +export const IniziativaPage = () => { + const [{ howId }, dispatch] = useContext(GlobalStateContext); + + useEffect(() => { + if (howId) { + const element = document.querySelector('#' + howId); + if (element) { + const elDistanceToTop = window.pageYOffset + element.getBoundingClientRect().top; + window.scrollTo(0, elDistanceToTop); + element.setAttribute('tabindex', '-1'); + element.focus(); + return () => { + dispatch({ type: 'SET:HOW_SECTION_ID' }); + }; + } + } + }, [howId, dispatch]); + + useEffect(() => { + announce('Pagina caricata ' + content.name); + }, []); + + return ( + <> + + +
    +

    {content.name}

    +
    + + + + + + + ); +}; diff --git a/src/layouts/SolutionProjects.jsx b/src/layouts/SolutionProjects.jsx index 26814eee7..50692889e 100644 --- a/src/layouts/SolutionProjects.jsx +++ b/src/layouts/SolutionProjects.jsx @@ -6,7 +6,7 @@ import contentHowItWorks from '../../contents/come-funziona/come-funziona.yml'; import { SEO } from '../components/SEO'; import seo from '../../contents/seo.yml'; import { GlobalStateContext } from '../context/globalContext'; -import { HeroImage } from '../components/hero/HeroImage'; +import { HeroSolutions } from '../components/hero/HeroSolutions'; import { TimelineVertical } from '../components/TimelineVertical'; import { ProjectsCards } from '../components/ProjectsCards'; @@ -14,21 +14,32 @@ const { title: seoTitle, description: seoDescription } = seo.projectsSolutionPag const useStyles = createUseStyles({ breadcrumb: { - '@media (min-width: 991px)': { - marginLeft: '0.722rem', + padding: '1.563rem 0 0', + '& .breadcrumb': { + padding: '0.75rem 0', }, }, breadcrumbItem: { '& a': { color: '#5B6F82', - fontWeight: '700', + fontWeight: '600', textDecoration: 'underline', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, breadcrumbItemActive: { '& a': { color: '#5B6F82', textDecoration: 'none', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, }); @@ -54,27 +65,31 @@ export const SolutionProjects = () => { <>

    {seoTitle}

    -
    + - diff --git a/src/layouts/SolutionStandard.jsx b/src/layouts/SolutionStandard.jsx index c3ce72c30..95678861d 100644 --- a/src/layouts/SolutionStandard.jsx +++ b/src/layouts/SolutionStandard.jsx @@ -6,7 +6,7 @@ import { SEO } from '../components/SEO'; import seo from '../../contents/seo.yml'; import contentHowItWorks from '../../contents/come-funziona/come-funziona.yml'; import { GlobalStateContext } from '../context/globalContext'; -import { HeroImage } from '../components/hero/HeroImage'; +import { HeroSolutions } from '../components/hero/HeroSolutions'; import { TimelineVertical } from '../components/TimelineVertical'; import { ProjectsCards } from '../components/ProjectsCards'; @@ -14,21 +14,32 @@ const { title: seoTitle, description: seoDescription } = seo.standardSolutionPag const useStyles = createUseStyles({ breadcrumb: { - '@media (min-width: 991px)': { - marginLeft: '0.722rem', + padding: '1.563rem 0 0', + '& .breadcrumb': { + padding: '0.75rem 0', }, }, breadcrumbItem: { '& a': { color: '#5B6F82', - fontWeight: '700', + fontWeight: '600', textDecoration: 'underline', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, breadcrumbItemActive: { '& a': { color: '#5B6F82', textDecoration: 'none', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', }, }, }); @@ -43,7 +54,7 @@ export const SolutionStandard = () => { useEffect(() => { dispatch({ type: 'SET:ACTIVE_HEADER', - payload: { activeItem: 'come-funziona' }, + payload: { activeItem: 'iniziativa' }, }); return () => { dispatch({ type: 'SET:ACTIVE_HEADER' }); @@ -54,27 +65,31 @@ export const SolutionStandard = () => { <>

    {seoTitle}

    -
    + - diff --git a/src/layouts/SupportPage.jsx b/src/layouts/SupportPage.jsx index 3d6c08629..ae6b36ab5 100644 --- a/src/layouts/SupportPage.jsx +++ b/src/layouts/SupportPage.jsx @@ -25,7 +25,7 @@ export const SupportPage = () => {

    {content.name}

    - + diff --git a/src/layouts/UpdatesPage.jsx b/src/layouts/UpdatesPage.jsx index b6d314cd0..1927fedbf 100644 --- a/src/layouts/UpdatesPage.jsx +++ b/src/layouts/UpdatesPage.jsx @@ -234,6 +234,9 @@ const useStyles = createUseStyles({ '@media (max-width: 991px)': { fontSize: '2.25rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, subtitleUpdate: { fontSize: '24px', @@ -242,6 +245,9 @@ const useStyles = createUseStyles({ '@media (max-width: 991px)': { fontSize: '1.125rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + }, }, submitContainer: { marginBottom: '12.5rem', @@ -251,7 +257,7 @@ const useStyles = createUseStyles({ }, heroImg: { '@media (max-width: 991px)': { - width: '64%', + width: '80%', }, }, mandatory: { @@ -408,7 +414,7 @@ export const UpdatesPage = () => { xs={12} md={6} lg={3} - className="offset-lg-2 d-flex justify-content-sm-end justify-content-lg-center mt-5 mt-md-0" + className="offset-lg-2 d-flex justify-content-center justify-content-sm-end justify-content-lg-center mt-5 mt-md-0" > diff --git a/src/layouts/come-fare/KeypointSection.jsx b/src/layouts/come-fare/KeypointSection.jsx index 7f45790e4..1d29fe137 100644 --- a/src/layouts/come-fare/KeypointSection.jsx +++ b/src/layouts/come-fare/KeypointSection.jsx @@ -139,7 +139,7 @@ export const KeypointSection = (props) => { SCOPRI DI PIÚ @@ -183,7 +183,7 @@ export const KeypointSection = (props) => { {button ? ( SCOPRI DI PIÚ @@ -221,7 +221,7 @@ export const KeypointSection = (props) => { {button ? ( SCOPRI DI PIÚ @@ -295,7 +295,7 @@ export const KeypointSection = (props) => { {button ? ( SCOPRI DI PIÚ diff --git a/src/layouts/faq/QuestionSection.jsx b/src/layouts/faq/QuestionSection.jsx index c74ef7852..da77d2dee 100644 --- a/src/layouts/faq/QuestionSection.jsx +++ b/src/layouts/faq/QuestionSection.jsx @@ -1,8 +1,9 @@ /* eslint-disable sonarjs/no-duplicate-string */ import React, { useState, useEffect, useContext } from 'react'; -import { Accordion, AccordionHeader, AccordionBody, Button } from 'design-react-kit'; +import { Accordion, AccordionHeader, AccordionBody } from 'design-react-kit'; import { createUseStyles } from 'react-jss'; import PropTypes from 'prop-types'; +import { Link } from 'gatsby'; import { GlobalStateContext } from '../../context/globalContext'; import { ExternalLink } from '../../components/ExternalLink'; @@ -56,7 +57,7 @@ const useStyles = createUseStyles({ linkAccordion: { marginTop: '2.222rem', '& a': { - fontWeight: 'bold', + fontWeight: '600', textDecoration: 'none', display: 'flex', alignItems: 'center', @@ -68,34 +69,15 @@ const useStyles = createUseStyles({ }, modalLink: { marginTop: '2.222rem', - '&.btn-secondary': { - backgroundColor: 'transparent', - border: 'none', - boxShadow: 'unset', - color: '#06c', - padding: '0', - display: 'inline-flex', - alignItems: 'center', - fontSize: '1rem', - fontWeight: 'bold', - - '&:hover': { - color: '#004080', - }, - '&:not(:disabled):not(.disabled):active': { - backgroundColor: 'transparent', - border: 'none', - boxShadow: 'unset', - color: '#004080', - }, - }, + fontWeight: '600', + textDecoration: 'none', + display: 'block', }, }); export const QuestionSection = (props) => { const classes = useStyles(); const { title, accordions, sectionId } = props.item; - const { handleToggle } = props; const { inputText } = props; const [indexIsOpen, setIndexIsOpen] = useState(-1); @@ -161,7 +143,7 @@ export const QuestionSection = (props) => { return ( <>
    -

    +

    {title}

    @@ -185,11 +167,17 @@ export const QuestionSection = (props) => {
    )} - {accordion.modalBtn ? ( - + {accordion.updates ? ( + + {accordion.updates} + + ) : ( + '' + )} + {accordion.assistance ? ( + + {accordion.assistance} + ) : ( '' )} @@ -205,5 +193,4 @@ export const QuestionSection = (props) => { QuestionSection.propTypes = { item: PropTypes.object.isRequired, inputText: PropTypes.string, - handleToggle: PropTypes.func, }; diff --git a/src/layouts/faq/SideNavigation.jsx b/src/layouts/faq/SideNavigation.jsx index ed9976aec..34fcab049 100644 --- a/src/layouts/faq/SideNavigation.jsx +++ b/src/layouts/faq/SideNavigation.jsx @@ -54,7 +54,7 @@ const useStyles = createUseStyles({ padding: '0.111rem 0.555rem', borderRadius: '0.888rem', whiteSpace: 'nowrap', - border: '1px solid #0073E6', + border: '1px solid #06c', '&.disabled': { color: '#DAE3EC', border: '1px solid #DAE3EC', @@ -62,7 +62,7 @@ const useStyles = createUseStyles({ }, '& span': { marginRight: '0', - color: '#0073E6', + color: '#06c', textDecoration: 'none', fontWeight: '600', }, diff --git a/src/layouts/faq/SupportSection.jsx b/src/layouts/faq/SupportSection.jsx index 2c153c71b..bfa3b07b4 100644 --- a/src/layouts/faq/SupportSection.jsx +++ b/src/layouts/faq/SupportSection.jsx @@ -6,7 +6,7 @@ import { Link } from 'gatsby'; const useStyles = createUseStyles({ layout: { - composes: 'offset-lg-1 px-3', + composes: 'offset-lg-1 pl-0', '& a': { '&:focus': { // eslint-disable-next-line sonarjs/no-duplicate-string @@ -110,6 +110,10 @@ const useStyles = createUseStyles({ }, }, }, + sectionMuted: { + background: '#f2f7fc', + padding: '5.556rem 0', + }, }); export const SupportSection = (props) => { @@ -117,11 +121,11 @@ export const SupportSection = (props) => { const { title, supportList, buttonLabel } = props; return ( <> -
    +

    Supporto

    -
    +

    Supporto

    diff --git a/src/layouts/sideNavigationAccordion.jsx b/src/layouts/sideNavigationAccordion.jsx index bebc5e1e4..7b4997ba3 100644 --- a/src/layouts/sideNavigationAccordion.jsx +++ b/src/layouts/sideNavigationAccordion.jsx @@ -46,7 +46,7 @@ const useStyles = createUseStyles({ paddingLeft: '0', '& span': { marginRight: '0', - color: '#0073E6', + color: '#06c', textDecoration: 'none', fontWeight: '400', fontSize: '0.833rem', diff --git a/src/layouts/support/Assistance.jsx b/src/layouts/support/Assistance.jsx index c4167fa16..b5b5c3641 100644 --- a/src/layouts/support/Assistance.jsx +++ b/src/layouts/support/Assistance.jsx @@ -19,18 +19,40 @@ const useStyle = createUseStyles({ }, heroTitle: { color: '#33485C', - fontSize: '1.333rem', - fontWeight: '700', + fontSize: '1.556rem', + fontWeight: '600', '@media (min-width: 992px)': { fontSize: '1.778rem', }, + '@media (max-width: 767px)': { + textAlign: 'center', + display: 'block', + }, }, heroBtn: { textTransform: 'uppercase', marginTop: '1.5rem', - '@media (min-width: 992px)': { - marginTop: '2.667rem', + '@media (max-width: 991px)': { + marginRight: 'auto', + }, + '@media (min-width: 991px)': { + marginRight: 'auto', }, + '@media (max-width: 767px)': { + width: '100%', + }, + }, + heroGraphic: { + '& img': { + width: '100%', + maxWidth: '370px', + '@media (max-width: 991px)': { + maxWidth: '310px', + }, + '@media (max-width: 767px)': { + width: '80%', + }, + } }, }); @@ -39,9 +61,9 @@ export const Assistance = () => { return ( - -
    -
    + +
    +
    @@ -50,7 +72,7 @@ export const Assistance = () => {
    - + {
    - +
    diff --git a/src/layouts/support/FAQPreview.jsx b/src/layouts/support/FAQPreview.jsx index 191a55732..87618ae96 100644 --- a/src/layouts/support/FAQPreview.jsx +++ b/src/layouts/support/FAQPreview.jsx @@ -31,17 +31,13 @@ const useStyle = createUseStyles({ justifyContent: 'space-between', }, '& h4.card-title': { - color: '#0066CC', - fontWeight: 'bold', - fontSize: '1.556rem', - lineHeight: '1.4', - marginBottom: '0.889rem', - '@media (min-width: 992px)': { - fontSize: '1.333rem', - lineHeight: '1.32', - fontWeight: 'normal', - minHeight: '5.333rem', - marginBottom: '2.222rem', + fontSize: '1.333rem', + lineHeight: '1.32', + fontWeight: 'normal', + minHeight: '5.333rem', + marginBottom: '2.222rem', + '@media (max-width: 991px)': { + minHeight: 'unset', }, }, '& .card-text': { @@ -74,6 +70,9 @@ const useStyle = createUseStyles({ }, '& .btn': { textTransform: 'uppercase', + '@media (max-width: 767px)': { + width: '100%', + }, }, }, linkCard: { diff --git a/src/layouts/support/Hero.jsx b/src/layouts/support/Hero.jsx index e1e4e2029..03f4b7036 100644 --- a/src/layouts/support/Hero.jsx +++ b/src/layouts/support/Hero.jsx @@ -2,45 +2,107 @@ import React from 'react'; import { createUseStyles } from 'react-jss'; import PropTypes from 'prop-types'; +import { Breadcrumb, BreadcrumbItem } from 'design-react-kit'; const useStyle = createUseStyles({ + breadcrumb: { + padding: '1.563rem 0 0', + '& .breadcrumb': { + padding: '0.75rem 0', + }, + }, + breadcrumbItem: { + '& a': { + color: '#5B6F82', + fontWeight: '600', + textDecoration: 'underline', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', + }, + }, + breadcrumbItemActive: { + '& a': { + color: '#5B6F82', + textDecoration: 'none', + fontSize: '18px', + }, + '&::before': { + fontWeight: '600', + color: '#33485C', + }, + }, supportHero: { composes: 'it-hero-wrapper', minHeight: 'auto', backgroundColor: '#F0F6FC', + '&.it-hero-wrapper .it-hero-text-wrapper': { + paddingTop: '48px', + }, '& .it-hero-text-wrapper': { paddingRight: '0', paddingLeft: '0', '& .no_toc': { + fontSize: '2.5rem', + fontWeight: '700', color: '#33485C', - fontSize: '2.222rem', - fontWeight: 'bold', - letterSpacing: '-1.3px', - '@media (min-width: 992px)': { - fontSize: '2.667rem', + lineHeight: '48px', + marginBottom: '30px', + '@media (max-width: 991px)': { + fontSize: '2.25rem', + textAlign: 'center', }, }, '& .support-hero-description': { + fontSize: '24px', color: '#33485C', - fontSize: '1.111rem', - fontFamily: 'Titillium Web', - '@media (min-width: 992px)': { - fontSize: '1.333rem', + lineHeight: '1.5', + '@media (max-width: 991px)': { + fontSize: '1.125rem', + textAlign: 'center', }, }, }, }, }); -export const HeroSupport = ({ title, subtitle }) => { +export const HeroSupport = ({ title, subtitle, isFaq }) => { const classes = useStyle(); return ( <>
    + + {isFaq ? + + + Home + + + + Supporto + + + FAQ + + + : + + + + Home + + + + Supporto + + + }
    -
    +

    {title}

    { HeroSupport.propTypes = { title: PropTypes.string, subtitle: PropTypes.string, + isFaq: PropTypes.bool, }; \ No newline at end of file diff --git a/src/pages/come-funziona/presentazione-progetti.jsx b/src/pages/iniziativa/presentazione-progetti.jsx similarity index 100% rename from src/pages/come-funziona/presentazione-progetti.jsx rename to src/pages/iniziativa/presentazione-progetti.jsx diff --git a/src/pages/come-funziona/soluzioni-standard.jsx b/src/pages/iniziativa/soluzioni-standard.jsx similarity index 100% rename from src/pages/come-funziona/soluzioni-standard.jsx rename to src/pages/iniziativa/soluzioni-standard.jsx diff --git a/static/assets/come-fare/assistenza.svg b/static/assets/come-fare/assistenza.svg new file mode 100644 index 000000000..d26695e52 --- /dev/null +++ b/static/assets/come-fare/assistenza.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1f269861e0ea7c0fa751f8d1ca9cd0f0ba315a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Mon, 28 Mar 2022 10:33:05 +0200 Subject: [PATCH 21/49] fix: form assistenza (#337) * fix form assistenza * change devo to collaudo * fix candida page Co-authored-by: emnlpstr --- src/layouts/AssistenzaPage.jsx | 2 +- src/layouts/Header.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layouts/AssistenzaPage.jsx b/src/layouts/AssistenzaPage.jsx index a762fdafe..951481de3 100644 --- a/src/layouts/AssistenzaPage.jsx +++ b/src/layouts/AssistenzaPage.jsx @@ -343,7 +343,7 @@ export const AssistenzaPage = () => { const selectHandler = () => { noSelectValue = Array.prototype.slice.call(selectArr).find((select) => select.value === ''); - noSelectValue ? (noSelectValue = false) : (noSelectValue = true); + noSelectValue ? (noSelectValue = true) : (noSelectValue = false); setFormFilled(!noInputValue && !noSelectValue); }; diff --git a/src/layouts/Header.jsx b/src/layouts/Header.jsx index f4bf235ce..2b9e6414a 100644 --- a/src/layouts/Header.jsx +++ b/src/layouts/Header.jsx @@ -493,7 +493,7 @@ const NavHeader = () => { Avvisi From 8d354d79eaa06e13ec02fd69ba8d0d8319301848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Tue, 29 Mar 2022 09:52:24 +0200 Subject: [PATCH 22/49] fix: UI and assistenza form along with come-funziona rename (#338) * progress * fix * added input field * fix * fix * fix lint * fixed Co-authored-by: emnlpstr --- contents/candida-pa/candida-pa.yml | 6 +-- .../come-partecipare/come-partecipare.yml | 19 +++------ contents/home-page/home.yml | 4 +- .../iniziativa.yml} | 4 +- .../soluzione-progetti.yml | 4 +- .../soluzione-standard.yml | 4 +- contents/links.yml | 2 +- contents/seo.yml | 2 +- src/components/Breadcrumb.jsx | 5 ++- src/components/HeroVideo.jsx | 4 +- src/components/hero/HeroHowToDo.jsx | 2 +- src/components/hero/HeroImage.jsx | 2 +- src/components/hero/HeroImageBackground.jsx | 7 ++-- src/components/modal/ModalUpdatesButton.jsx | 3 +- src/layouts/AssistenzaPage.jsx | 39 +++++++++++-------- src/layouts/ComeFunzionaPage.jsx | 6 +-- src/layouts/ComeParteciparePage.jsx | 4 +- src/layouts/CreaProfiloPage.jsx | 5 ++- src/layouts/Footer.jsx | 4 +- src/layouts/SolutionProjects.jsx | 6 +-- src/layouts/SolutionStandard.jsx | 4 +- src/layouts/come-fare/KeypointSection.jsx | 10 ----- src/layouts/come-fare/Keypoints.jsx | 13 ++++--- .../Beneficiaries.jsx | 0 .../Involved.jsx | 0 src/pages/come-partecipare/candida-pa.jsx | 15 ++++++- src/pages/come-partecipare/crea-profilo.jsx | 15 ++++++- 27 files changed, 103 insertions(+), 86 deletions(-) rename contents/{come-funziona/come-funziona.yml => iniziativa/iniziativa.yml} (99%) rename contents/{come-funziona => iniziativa}/soluzione-progetti.yml (98%) rename contents/{come-funziona => iniziativa}/soluzione-standard.yml (98%) rename src/layouts/{come-funziona => iniziativa}/Beneficiaries.jsx (100%) rename src/layouts/{come-funziona => iniziativa}/Involved.jsx (100%) diff --git a/contents/candida-pa/candida-pa.yml b/contents/candida-pa/candida-pa.yml index c0a7b05ef..d1410683a 100644 --- a/contents/candida-pa/candida-pa.yml +++ b/contents/candida-pa/candida-pa.yml @@ -24,12 +24,12 @@ verticalTimeline: - index: 1 title: 'Configura il pacchetto' icon: '/assets/configura-pacchetto.svg' - headerParagraph: 'Una volta identificato l’avviso di interesse, segui la configurazione guidata per definire il pacchetto sulla base delle esigenze della tua PA: puoi selezionare servizi e modalità implementative, e creare il documento di candidatura.' + headerParagraph: 'Una volta identificato l’avviso di interesse, segui la configurazione guidata per definire il pacchetto sulla base delle esigenze della tua PA: puoi selezionare servizi e modalità implementative, e creare la domanda di partecipazione.' sectionId: 'select-administration' - index: 2 - title: 'Invia candidatura' + title: 'Invia la domanda di partecipazione' icon: '/assets/invia-candidatura.svg' - headerParagraph: 'In questa fase puoi visualizzare i dettagli del documento di candidatura che hai creato ed effettuare eventuali modifiche. Una volta firmato digitalmente potrai inviarlo attraverso la piattaforma per completare la candidatura.' + headerParagraph: 'In questa fase puoi visualizzare i dettagli della domanda di partecipazione che hai creato ed effettuare eventuali modifiche. Una volta firmato digitalmente potrai inviarlo attraverso la piattaforma per completare la candidatura.' sectionId: 'verify-data' - index: 3 title: 'Ricevi aggiornamenti' diff --git a/contents/come-partecipare/come-partecipare.yml b/contents/come-partecipare/come-partecipare.yml index e0a8c0fd1..8b7836521 100644 --- a/contents/come-partecipare/come-partecipare.yml +++ b/contents/come-partecipare/come-partecipare.yml @@ -8,23 +8,17 @@ keypoints: title: 'Come fare per' list: - number: "01" - image: 'keypoint-1.svg' + image: 'computer-2.svg' title: 'Attivare la tua PA' desc: 'Per partecipare agli avvisi pubblici e richiedere i finanziamenti' - number: "02" - image: 'keypoint-2.svg' - title: 'Candidare una PA agli avvisi' - desc: 'Attraverso la creazione e l’invio del documento di candidatura.' - - number: "03" - image: 'keypoint-3.svg' - title: 'Classificare dati e servizi' - desc: 'Per abilitare il processo di migrazione delle PA al cloud.' - transparent: true - - number: "04" - image: 'keypoint-4.svg' + image: 'icon-chat.svg' title: 'Ricevere assistenza' desc: 'Per risolvere dubbi o problemi riguardo la piattaforma e le candidature.' - transparent: true + - number: "03" + image: 'invia-candidatura.svg' + title: 'Candidare una PA agli avvisi' + desc: 'Attraverso la creazione e l’invio del documento di candidatura.' sectionFirst: number: '01' title: 'Attivare la tua PA' @@ -44,7 +38,6 @@ sectionSecond: button: true linkTo: "candida-pa" image: 'kp-section-2.svg' - reverse: true bottomSection: false BottomImage1: 'bottom-1-1.svg' BottomImage2: 'bottom-1-2.svg' diff --git a/contents/home-page/home.yml b/contents/home-page/home.yml index d071723d7..1ec38ae59 100644 --- a/contents/home-page/home.yml +++ b/contents/home-page/home.yml @@ -200,7 +200,7 @@ homeCarousel: imageMobile: 'home-carousel-mobile-2.svg' button: 'scopri di più' buttonAriaLabel: 'Scopri di più su domande frequenti e contatti' - linkTo: '/come-funziona' + linkTo: '/iniziativa' - id: 3 title: Fase 3, avviare i progetti description: 'Dall’estate del 2022 le amministrazioni potranno avviare i primi progetti: un team dedicato fornirà alle PA assistenza tecnica nell’implementazione delle iniziative; un sistema di rendicontazione online organizzato per obiettivi semplificherà il percorso delle amministrazioni.' @@ -208,4 +208,4 @@ homeCarousel: imageMobile: 'home-carousel-mobile-3.svg' button: 'scopri di più' buttonAriaLabel: 'Scopri di più su domande frequenti e contatti' - linkTo: '/come-funziona' + linkTo: '/iniziativa' diff --git a/contents/come-funziona/come-funziona.yml b/contents/iniziativa/iniziativa.yml similarity index 99% rename from contents/come-funziona/come-funziona.yml rename to contents/iniziativa/iniziativa.yml index 793175876..d91120d04 100644 --- a/contents/come-funziona/come-funziona.yml +++ b/contents/iniziativa/iniziativa.yml @@ -1,5 +1,5 @@ -title: Come funziona - PA digitale 2026 -name: Come Funziona - PA digitale 2026 +title: L'iniziativa - PA digitale 2026 +name: L'iniziativa - PA digitale 2026 hero: title: "PA digitale 2026: scopri l'iniziativa" body: Candida la tua amministrazione agli avvisi pubblici per richiedere le risorse e avviare il processo di transizione digitale. diff --git a/contents/come-funziona/soluzione-progetti.yml b/contents/iniziativa/soluzione-progetti.yml similarity index 98% rename from contents/come-funziona/soluzione-progetti.yml rename to contents/iniziativa/soluzione-progetti.yml index fd5cda472..7e7650035 100644 --- a/contents/come-funziona/soluzione-progetti.yml +++ b/contents/iniziativa/soluzione-progetti.yml @@ -1,5 +1,5 @@ -title: Come funziona - PA digitale 2026 -name: Come Funziona - PA digitale 2026 +title: L'iniziativa - PA digitale 2026 +name: L'iniziativa - PA digitale 2026 hero: title: 'Presentazione progetti' body: Per le misure con una platea ristretta di beneficiari (fino a 1.000 PA), è prevista una modalità di accesso attraverso la presentazione di progetti, sempre ispirata ai principi della semplicità e della riduzione degli oneri amministrativi. diff --git a/contents/come-funziona/soluzione-standard.yml b/contents/iniziativa/soluzione-standard.yml similarity index 98% rename from contents/come-funziona/soluzione-standard.yml rename to contents/iniziativa/soluzione-standard.yml index 8818ca5b6..922f3f3d9 100644 --- a/contents/come-funziona/soluzione-standard.yml +++ b/contents/iniziativa/soluzione-standard.yml @@ -1,5 +1,5 @@ -title: Come funziona - PA digitale 2026 -name: Come Funziona - PA digitale 2026 +title: L'iniziativa - PA digitale 2026 +name: L'iniziativa - PA digitale 2026 hero: title: "Soluzioni standard" body: Per le misure con una platea ampia di beneficiari (oltre 1.000 PA), è prevista una modalità di accesso per soluzioni standard. Un percorso semplificato e guidato che va dalla richiesta dei finanziamenti all'erogazione dei fondi. diff --git a/contents/links.yml b/contents/links.yml index 80dc1340f..c7d4dc3ba 100644 --- a/contents/links.yml +++ b/contents/links.yml @@ -80,7 +80,7 @@ externalLinks: linkTo: https://github.com/italia/ ariaLabel: 'GitHub Italia (link esterno)' dipartimento: - label: Dipartimento per la trasformazione digitale + label: Dipartimento per la Trasformazione Digitale linkTo: https://innovazione.gov.it ariaLabel: 'Dipartimento per la trasformazione digitale (Collegamento esterno - Apre su nuova scheda)' ministeroMitd: diff --git a/contents/seo.yml b/contents/seo.yml index 2b92380d0..d8819c6d1 100644 --- a/contents/seo.yml +++ b/contents/seo.yml @@ -17,7 +17,7 @@ opportunityPage: title: Le Misure del PNRR per la Transizione Digitale - PA digitale 2026 description: Scopri le misure del PNRR dedicate alla digitalizzazione della Pubblica Amministrazione italiana su PA Digitale 2026 comeFunzionaPage: - title: Come Funziona - PA digitale 2026 + title: L'iniziativa - PA digitale 2026 description: Scopri le modalità per accedere ai fondi del PNRR per la digitalizzazione della Pubblica Amministrazione attraverso la piattaforma PA Digitale 2026 comeParteciparePage: title: Come Partecipare - PA digitale 2026 diff --git a/src/components/Breadcrumb.jsx b/src/components/Breadcrumb.jsx index cb4b9ad87..168fae557 100644 --- a/src/components/Breadcrumb.jsx +++ b/src/components/Breadcrumb.jsx @@ -21,10 +21,10 @@ const useStyles = createUseStyles({ }, }); -export const Breadcrumb = ({ currentPage }) => { +export const Breadcrumb = ({ currentPage, noContainer }) => { const classes = useStyles(); return ( -

    +
    - -

    - Ti raccomandiamo quindi di verificare fin da subito l’accuratezza delle informazioni presenti su{' '} - - IPA - - . -

    -
    -
    - -
    - {/* -
    -

    Per approfondire

    - - - - - Banda ultra larga - Scarica il PDF (3.7MB) - - - -
    -
    */}
    diff --git a/src/layouts/faq/SupportSection.jsx b/src/layouts/faq/SupportSection.jsx index 696cf5ab2..3168e216f 100644 --- a/src/layouts/faq/SupportSection.jsx +++ b/src/layouts/faq/SupportSection.jsx @@ -83,7 +83,7 @@ const useStyles = createUseStyles({ cursor: 'pointer', '&:hover': { '&.card.card-teaser': { - '& h5.card-title': { + '& .card-title': { textDecoration: 'underline', }, }, diff --git a/src/layouts/support/FAQPreview.jsx b/src/layouts/support/FAQPreview.jsx index 9f52f0b03..c5f88d2bf 100644 --- a/src/layouts/support/FAQPreview.jsx +++ b/src/layouts/support/FAQPreview.jsx @@ -97,7 +97,7 @@ export const FAQPreview = () => { const cards = faqSection.faqPreviewCards.map((card) => ( - dispatch({ type: 'SET:FAQ_ID', payload: { faqId: card.faqId } })} className={classes.linkCard} ariaLabel={card.ariaLabel}> + dispatch({ type: 'SET:FAQ_ID', payload: { faqId: card.faqId } })} className={classes.linkCard} ariaLabel={card.ariaLabel}> {card.title} @@ -114,7 +114,7 @@ export const FAQPreview = () => {
    {cards}
    - + {faqSection.buttonLabel}
    diff --git a/src/layouts/support/Hero.jsx b/src/layouts/support/Hero.jsx index 8c6bee7c3..2c3382f7a 100644 --- a/src/layouts/support/Hero.jsx +++ b/src/layouts/support/Hero.jsx @@ -89,7 +89,7 @@ export const HeroSupport = ({ title, subtitle, isFaq }) => { Supporto - Domande frequenti + Domande frequenti : diff --git a/src/pages/supporto/domande-frequenti.jsx b/src/pages/supporto/domande-frequenti.jsx new file mode 100644 index 000000000..707e5a877 --- /dev/null +++ b/src/pages/supporto/domande-frequenti.jsx @@ -0,0 +1,16 @@ +import React, { useEffect, useContext } from 'react'; +import { FaqPage } from '../../layouts/FaqPage'; +import { GlobalStateContext } from '../../context/globalContext'; + +const Page = () => { + const [, dispatch] = useContext(GlobalStateContext); + + useEffect(() => { + dispatch({ type: 'SET:ACTIVE_HEADER', payload: { activeItem: 'supporto' } }); + return () => { + dispatch({ type: 'SET:ACTIVE_HEADER' }); + }; + }, [dispatch]); + return ; +}; +export default Page; diff --git a/src/pages/supporto/faq.jsx b/src/pages/supporto/faq.jsx index 707e5a877..dda113132 100644 --- a/src/pages/supporto/faq.jsx +++ b/src/pages/supporto/faq.jsx @@ -1,16 +1,9 @@ -import React, { useEffect, useContext } from 'react'; -import { FaqPage } from '../../layouts/FaqPage'; -import { GlobalStateContext } from '../../context/globalContext'; - +import React, { useEffect } from 'react'; +import { navigate } from 'gatsby'; const Page = () => { - const [, dispatch] = useContext(GlobalStateContext); - useEffect(() => { - dispatch({ type: 'SET:ACTIVE_HEADER', payload: { activeItem: 'supporto' } }); - return () => { - dispatch({ type: 'SET:ACTIVE_HEADER' }); - }; - }, [dispatch]); - return ; + navigate('/supporto/domande-frequenti'); + }, []); + return <>; }; export default Page; From 41821d1d2718bc1de48583a1da463fcbc83e9115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Fri, 1 Apr 2022 14:21:13 +0200 Subject: [PATCH 34/49] fix: faq text (#355) Co-authored-by: emnlpstr --- contents/faq-page/faq.yml | 4 ++-- contents/support-page/support.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contents/faq-page/faq.yml b/contents/faq-page/faq.yml index 73e12618f..c5e51b9cc 100644 --- a/contents/faq-page/faq.yml +++ b/contents/faq-page/faq.yml @@ -24,7 +24,7 @@ questions: sectionId: generali accordions: - title: Cos'è Next Generation EU? - content: Next Generation EU (NGEU) è un piano Next da €750 miliardi di Euro che ha l'obiettivo di rilanciare l'economia europea dopo la pandemia di COVID-19 e di renderla più verde e digitale. + content: Next Generation EU (NGEU) è un piano Next da €750 miliardi che ha l'obiettivo di rilanciare l'economia europea dopo la pandemia di COVID-19 e di renderla più verde e digitale. linkLabel: Vai al sito Next Generation EU dell'Unione Europea link: 'https://europa.eu/next-generation-eu/index_it' ariaLabel: Vai al sito Next Generation EU dell'Unione Europea (Collegamento esterno - Apre su nuova scheda) @@ -121,7 +121,7 @@ questions: - title: "Il sistema non consente di caricare la domanda di finanziamento. Come si può procedere per inviare la candidatura?" content: È necessario controllare che:
    • il file caricato sia in formato P7M;
    • il file caricato corrisponda all’ultima versione scaricata;
    • sia presente la firma digitale;
    • la firma digitale sia quella del rappresentante legale.
    - title: "Come viene calcolato l'importo totale del finanziamento?" - content: Il calcolo dell'importo totale del finanziamento varia a seconda dell'avviso appartenente alla misura. Ogni misura ha un calcolo diverso. Per approfondire il calcolo dell'importo totale del finanziamento si rimanda alle FAQ di dettaglio della misura di interesse.
    • Misura 1.2
    • Misura 1.4.1
    • Misura 1.4.3
    • Misura 1.4.4
    • Misura 1.4.5
    + content: Il calcolo dell'importo totale del finanziamento varia a seconda dell'avviso appartenente alla misura. Ogni misura ha un calcolo diverso. Per approfondire il calcolo dell'importo totale del finanziamento si rimanda alle FAQ di dettaglio della misura di interesse.
    • Misura 1.2;
    • Misura 1.4.1;
    • Misura 1.4.3;
    • Misura 1.4.4;
    • Misura 1.4.5.
    - title: "Cosa succede se non viene rispettato il calendario scadenze/cronoprogramma?" content: Se non vengono completate le attività necessarie previste nel calendario scadenze/cronoprogramma, il finanziamento concesso viene revocato. - title: "Come ci si dota di dispositivo di firma digitale?" diff --git a/contents/support-page/support.yml b/contents/support-page/support.yml index 831d7937d..05f6a2040 100644 --- a/contents/support-page/support.yml +++ b/contents/support-page/support.yml @@ -8,7 +8,7 @@ faqSection: faqPreviewCards: - id: 1 title: Chi può accedere a PA digitale 2026? - text: Next Generation EU (NGEU) è un piano Next da €750 miliardi di Euro che ha l'obiettivo di rilanciare l'economia europea dopo la pandemia di COVID-19 e di renderla più verde e digitale. + text: Il rappresentante legale dell'amministrazione, o una persona incaricata ad agire per suo conto, può accedere con SPID/CIE alla piattaforma. Durante la procedura di primo accesso alla piattaforma, è necessario selezionare e attivare il profilo della PA di riferimento. faqId: faq-1 ariaLabel: Vai alla faq Chi può accedere a PA digitale 2026? - id: 2 From 984dcd9acf7acce8818631b2e5590b97c8e19ff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Fri, 1 Apr 2022 17:10:14 +0200 Subject: [PATCH 35/49] fix: image hero on misure and breadcrumbs (#357) Co-authored-by: emnlpstr --- src/layouts/AssistenzaPage.jsx | 2 +- src/layouts/CandidaPaPage.jsx | 2 +- src/layouts/CreaProfiloPage.jsx | 2 +- src/layouts/OpportunityPage.jsx | 2 +- src/layouts/RiceviAssistenzaPage.jsx | 2 +- src/layouts/support/Hero.jsx | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/layouts/AssistenzaPage.jsx b/src/layouts/AssistenzaPage.jsx index 43d06476f..7e40ae10f 100644 --- a/src/layouts/AssistenzaPage.jsx +++ b/src/layouts/AssistenzaPage.jsx @@ -526,7 +526,7 @@ export const AssistenzaPage = () => { - Assistenza + Assistenza diff --git a/src/layouts/CandidaPaPage.jsx b/src/layouts/CandidaPaPage.jsx index d0dfbf705..cb31f1df6 100644 --- a/src/layouts/CandidaPaPage.jsx +++ b/src/layouts/CandidaPaPage.jsx @@ -188,7 +188,7 @@ export const CandidaPaPage = () => { - Candida la tua PA agli avvisi per la transizione digitale + Candida la tua PA agli avvisi per la transizione digitale diff --git a/src/layouts/CreaProfiloPage.jsx b/src/layouts/CreaProfiloPage.jsx index e9c845a6e..1843b031b 100644 --- a/src/layouts/CreaProfiloPage.jsx +++ b/src/layouts/CreaProfiloPage.jsx @@ -190,7 +190,7 @@ export const CreaProfiloPage = () => { - Attiva il profilo della tua PA: identità digitale e dati IPA + Attiva il profilo della tua PA: identità digitale e dati IPA diff --git a/src/layouts/OpportunityPage.jsx b/src/layouts/OpportunityPage.jsx index 9bb7cdc73..fec055749 100644 --- a/src/layouts/OpportunityPage.jsx +++ b/src/layouts/OpportunityPage.jsx @@ -46,7 +46,7 @@ export const OpportunityPage = (props) => { diff --git a/src/layouts/RiceviAssistenzaPage.jsx b/src/layouts/RiceviAssistenzaPage.jsx index f4b4db709..b807dbd9d 100644 --- a/src/layouts/RiceviAssistenzaPage.jsx +++ b/src/layouts/RiceviAssistenzaPage.jsx @@ -189,7 +189,7 @@ export const RiceviAssistenzaPage = () => { - Trova le risposte alle tue domande o ricevi assistenza + Trova le risposte alle tue domande o ricevi assistenza diff --git a/src/layouts/support/Hero.jsx b/src/layouts/support/Hero.jsx index 2c3382f7a..1b90f5a1c 100644 --- a/src/layouts/support/Hero.jsx +++ b/src/layouts/support/Hero.jsx @@ -89,7 +89,7 @@ export const HeroSupport = ({ title, subtitle, isFaq }) => { Supporto - Domande frequenti + Domande frequenti : @@ -100,7 +100,7 @@ export const HeroSupport = ({ title, subtitle, isFaq }) => { - Supporto + Supporto } From 707e41231e144a5461a213df167061894f87a1f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Fri, 1 Apr 2022 19:45:37 +0200 Subject: [PATCH 36/49] fix: keep-in-touch form (#358) * fixed form * fixed focus on select * fix lint * fix video and breadcrumbs Co-authored-by: emnlpstr --- src/components/Breadcrumb.jsx | 2 +- src/components/HeroVideo.jsx | 10 ++-- src/layouts/AssistenzaPage.jsx | 38 +++++++++++---- src/layouts/UpdatesPage.jsx | 85 +++++++++++++++++++++++++--------- 4 files changed, 96 insertions(+), 39 deletions(-) diff --git a/src/components/Breadcrumb.jsx b/src/components/Breadcrumb.jsx index 986c6c5d8..38e89da75 100644 --- a/src/components/Breadcrumb.jsx +++ b/src/components/Breadcrumb.jsx @@ -40,7 +40,7 @@ export const Breadcrumb = ({ currentPage, noContainer }) => {
  • - {currentPage} + {currentPage}
  • diff --git a/src/components/HeroVideo.jsx b/src/components/HeroVideo.jsx index 21f733fb8..9ea273b5d 100644 --- a/src/components/HeroVideo.jsx +++ b/src/components/HeroVideo.jsx @@ -65,13 +65,13 @@ export const HeroVideo = () => {
    diff --git a/src/layouts/AssistenzaPage.jsx b/src/layouts/AssistenzaPage.jsx index 7e40ae10f..4a2e8ead2 100644 --- a/src/layouts/AssistenzaPage.jsx +++ b/src/layouts/AssistenzaPage.jsx @@ -337,8 +337,25 @@ export const AssistenzaPage = () => { const [optionSelected, setOptionSelected] = useState(); + const setFocusStyleOnSelect = () => { + const selectInputArr = document.querySelectorAll('#assistance-form .select input'); + selectInputArr.forEach((input) => { + const selectFocusHandler = () => { + const currentSelect = input.closest('.select'); + currentSelect.classList.add('focused'); + }; + const selectFocusOutHandler = () => { + const currentSelect = input.closest('.select'); + currentSelect.classList.remove('focused'); + }; + input.addEventListener('focus', selectFocusHandler); + input.addEventListener('focusout', selectFocusOutHandler); + }); + }; + useEffect(() => { setOptionSelected(new Event('selected')); + setFocusStyleOnSelect(); }, []); useEffect(() => { @@ -467,8 +484,6 @@ export const AssistenzaPage = () => { }; const formHandler = (event) => { - event.target.reset(); - window.grecaptcha.reset(); const notificationElement = document.querySelector('.notification'); const titleElement = notificationElement.querySelector('h5'); const descriptionElement = notificationElement.querySelector('p'); @@ -476,12 +491,16 @@ export const AssistenzaPage = () => { notificationElement.classList.add('success'); titleElement.innerHTML = `${successLabels.icon} ${successLabels.title}`; descriptionElement.innerHTML = successLabels.description; - const selectArr = document.querySelectorAll('.select-wrapper [class$="-singleValue"]'); - selectArr.forEach((singleValue) => (singleValue.innerHTML = '')); - setFormFilled(false); - const submitBtn = document.querySelector('#assistance-form input[type="submit"]'); - submitBtn.disabled = true; + setTimeout(() => { + event.target.reset(); + window.grecaptcha.reset(); + const selectArr = document.querySelectorAll('.select-wrapper [class$="-singleValue"]'); + selectArr.forEach((singleValue) => (singleValue.innerHTML = '')); + setFormFilled(false); + const submitBtn = document.querySelector('#assistance-form input[type="submit"]'); + submitBtn.disabled = true; + }, 500); setTimeout(() => { notificationElement.classList.remove('show'); }, 5000); @@ -680,10 +699,9 @@ export const AssistenzaPage = () => {
    - - + + - diff --git a/src/layouts/UpdatesPage.jsx b/src/layouts/UpdatesPage.jsx index b8b4c9443..33fcb7a29 100644 --- a/src/layouts/UpdatesPage.jsx +++ b/src/layouts/UpdatesPage.jsx @@ -1,3 +1,4 @@ +/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable sonarjs/no-identical-functions */ /* eslint-disable react/no-unescaped-entities */ /* eslint-disable max-lines-per-function */ @@ -284,9 +285,10 @@ const query = graphql` `; export const UpdatesPage = () => { - const [selectValue, setSelectValue] = useState(false); + const [selectValue] = useState(false); + const [inasmuchValue, setInasmuchValue] = useState(false); const [inputValue, setInputValue] = useState(false); - const [enteState] = useState(''); + const [enteState, setEnteState] = useState(''); const [formValidate, setFormValidate] = useState(false); const { @@ -303,22 +305,67 @@ export const UpdatesPage = () => { const classes = useStyles(); + const setListenersToSelectOptions = () => { + const representSelectOptions = document.querySelector('#represent-select'); + const config = { childList: true, subtree: true }; + const setObserver = (mutationsList) => { + for (const mutation of mutationsList) { + if (mutation.type === 'childList') { + let value = representSelectOptions.querySelector('div[class*="singleValue"]'); + value ? (value = value.innerHTML) : (value = ''); + let valueSelected = selectRepresent.find((valueObj) => { + if (value === valueObj.label) { + return valueObj; + } + }); + valueSelected = valueSelected?.value; + setEnteState(valueSelected); + } + } + }; + const observer = new MutationObserver(setObserver); + observer.observe(representSelectOptions, config); + }; + + const setFocusStyleOnSelect = () => { + const selectInputArr = document.querySelectorAll('#updates-form .select input'); + selectInputArr.forEach((input) => { + const selectFocusHandler = () => { + const currentSelect = input.closest('.select'); + currentSelect.classList.add('focused'); + }; + const selectFocusOutHandler = () => { + const currentSelect = input.closest('.select'); + currentSelect.classList.remove('focused'); + }; + input.addEventListener('focus', selectFocusHandler); + input.addEventListener('focusout', selectFocusOutHandler); + }); + }; + useEffect(() => { const inputArr = document.querySelectorAll('#updates-form [data-form="true"]'); const inputHandler = () => { const currentInputArr = document.querySelectorAll('#updates-form [data-form="true"]'); - const inputValue = Array.prototype.slice.call(currentInputArr).every((input) => input.value !== ''); - console.log('every', inputValue); + const visibleInput = Array.prototype.slice.call(currentInputArr).filter((input) => { + const hidden = input.closest('.hidden'); + if (!hidden) { + return input; + } + }); + const inputValue = Array.prototype.slice.call(visibleInput).every((input) => input.value !== ''); if (inputValue) { setInputValue(true); } }; + setListenersToSelectOptions(); + setFocusStyleOnSelect(); inputArr.forEach((input) => { input.addEventListener('input', inputHandler); }); - }, []); + }, [setListenersToSelectOptions]); const onSubmit = async (data) => { console.log(data); @@ -390,10 +437,6 @@ export const UpdatesPage = () => { }); }; - const onFocus = (event) => { - console.log(event.target); - }; - const onError = async (data) => { console.log('error', data); }; @@ -402,18 +445,14 @@ export const UpdatesPage = () => { announce('Pagina caricata ' + content.name); }, []); - const onChangeSelectHandler = (e) => { - if (e.value !== '') { - setSelectValue(true); - } else { - setSelectValue(false); - } + const inQuantoHandler = (e) => { + setInasmuchValue(e.value); }; useEffect(() => { + console.log(inputValue); inputValue && selectValue ? setFormValidate(true) : setFormValidate(false); - console.log('formValidate', formValidate); - }, [selectValue, inputValue, formValidate]); + }, [selectValue, inputValue, formValidate, inasmuchValue]); const { selectRepresent, @@ -492,7 +531,7 @@ export const UpdatesPage = () => { id="address" aria-required="true" data-form="true" - autocomplete="email" + autoComplete="email" {...field} className="mb-0" /> @@ -516,8 +555,7 @@ export const UpdatesPage = () => { value={value} id="represent-select" inputId="represent-select-input" - onChange={(onChangeSelect, onChangeSelectHandler)} - onFocus={onFocus} + onChange={onChangeSelect} options={selectRepresent} placeholder={selectPlaceholder} aria-label={selectPlaceholder} @@ -561,6 +599,7 @@ export const UpdatesPage = () => { aria-invalid={errors.enteType && 'true'} {...field} id="enteType" + data-form="true" /> {errors.enteType && errors.enteType.message} @@ -628,14 +667,14 @@ export const UpdatesPage = () => { value={value} id="enteSelect" inputId="enteSelect-input" - onChange={onChangeSelect} + onChange={(onChangeSelect, inQuantoHandler)} options={selectInQuanto} aria-describedby="mandatory-label" placeholder={selectPlaceholder} aria-label={selectPlaceholder} aria-invalid={errors.enteSelect && 'true'} aria-labelledby={errors.enteSelect && 'error-enteSelect'} - className={`${errors.enteSelect && 'select is-invalid'}`} + className={`select ${errors.enteSelect && 'select is-invalid'}`} /> )} /> @@ -655,7 +694,7 @@ export const UpdatesPage = () => {

    - From 26d448dbf5b4b6d1106921c7554b7700772e7405 Mon Sep 17 00:00:00 2001 From: Fladiir Date: Fri, 1 Apr 2022 19:48:07 +0200 Subject: [PATCH 37/49] feat: modalita hero (#356) * hero mode added * refactor * fix page path Co-authored-by: RIDP9CT --- contents/iniziativa/soluzione-progetti.yml | 7 + contents/iniziativa/soluzione-standard.yml | 7 + src/components/hero/HeroMode.jsx | 233 +++++++++++++++++++++ src/layouts/SolutionProjects.jsx | 20 +- src/layouts/SolutionStandard.jsx | 20 +- static/assets/Presentazione_Progetti.svg | 83 ++++++++ static/assets/Soluzioni_Standard.svg | 43 ++++ 7 files changed, 403 insertions(+), 10 deletions(-) create mode 100644 src/components/hero/HeroMode.jsx create mode 100644 static/assets/Presentazione_Progetti.svg create mode 100644 static/assets/Soluzioni_Standard.svg diff --git a/contents/iniziativa/soluzione-progetti.yml b/contents/iniziativa/soluzione-progetti.yml index 7e7650035..df8a26778 100644 --- a/contents/iniziativa/soluzione-progetti.yml +++ b/contents/iniziativa/soluzione-progetti.yml @@ -34,3 +34,10 @@ verticalTimeline: bodyParagraphl: "Le amministrazioni dovranno implementare, con il proprio personale o attraverso l’acquisto di servizi e forniture, il progetto in tutte le sue componenti effettuando le spese previste per la realizzazione delle attività: impegno delle risorse, svolgimento delle procedure di gara per l’acquisizione di lavori/servizi/forniture a seconda della tipologia di progetto, esecuzione dei pagamenti ai fornitori" littleTitler: 'RENDICONTAZIONE ED EROGAZIONE DEI FONDI' bodyParagraphr: "L’erogazione dei contributi seguirà alcuni step che possono prevedere un’anticipazione e delle tranches, fino al saldo, erogate “a rimborso”. In questo caso sarà necessario presentare tutta la documentazione che giustifica l’esecuzione della singola spesa. Anche in questo caso si prevedono procedure semplici per il trasferimento dei fondi e il costante supporto all’amministrazione destinataria delle risorse per assicurare uno spedito ed efficace trasferimento dei fondi." +heroMode: + category: "MODALITÀ DI ACCESSO 1" + title: "Modalità alternativa per accedere alle risorse per la transizione digitale" + body: Soluzioni standard
    La modalità di accesso prevista per le misure con una platea ampia di beneficiari (oltre 1.000 PA). + link: /iniziativa/soluzioni-standard + btnLabel: SCOPRI DI PIù + btnAria: Scopri di più sulle soluzioni standard diff --git a/contents/iniziativa/soluzione-standard.yml b/contents/iniziativa/soluzione-standard.yml index 922f3f3d9..777542356 100644 --- a/contents/iniziativa/soluzione-standard.yml +++ b/contents/iniziativa/soluzione-standard.yml @@ -34,3 +34,10 @@ verticalTimeline: bodyParagraphl: "Attraverso “PA digitale 2026” le amministrazioni potranno accedere ad un’area riservata, per seguire la gestione amministrativa delle singole iniziative finanziate attraverso l’azione del Dipartimento per la trasformazione digitale. Con l’avvio degli avvisi avranno infatti la possibilità non solo di fare richiesta per i fondi, ma anche di produrre i dati relativi all’avanzamento delle iniziative, ricevere comunicazioni dedicate e inviare documentazioni ufficiali per l’erogazione delle risorse." littleTitler: 'EROGAZIONI PER OBIETTIVI' bodyParagraphr: 'Per semplificare l’erogazione delle risorse, i contributi saranno riconosciuti alle amministrazioni sulla base del raggiungimento di specifici obiettivi predefiniti. Il processo di rendicontazione sarà quindi alleggerito, e non sarà necessario rendicontare le singole spese effettuate per ottenere i fondi.' +heroMode: + category: "MODALITÀ DI ACCESSO 2" + title: "Modalità alternativa per accedere alle risorse per la transizione digitale" + body: Presentazioni progetti
    La modalità di accesso prevista per le misure con una platea ristretta di beneficiari (fino a 1.000 PA)." + link: /iniziativa/presentazione-progetti + btnLabel: SCOPRI DI PIù + btnAria: Scopri di più su presentazione progetti diff --git a/src/components/hero/HeroMode.jsx b/src/components/hero/HeroMode.jsx new file mode 100644 index 000000000..c66487dc2 --- /dev/null +++ b/src/components/hero/HeroMode.jsx @@ -0,0 +1,233 @@ +import React, { useContext } from 'react'; +import { createUseStyles } from 'react-jss'; +import { Link } from 'gatsby'; +import PropTypes from 'prop-types'; +import { ExternalLink } from '../ExternalLink'; +import { GlobalStateContext } from '../../context/globalContext'; +import { HeroCategory } from './HeroCategory'; +import { HeroTitle } from './HeroTitle'; +import { HeroBody } from './HeroBody'; +import { HeroCtaContainer } from './HeroCtaContainer'; +import { HeroGraphic } from './HeroGraphic'; +import { Hero } from './Hero'; + +const useStyles = createUseStyles({ + btnPrimaryLight: { + // eslint-disable-next-line sonarjs/no-duplicate-string + backgroundColor: 'var(--white)', + color: 'var(--primary)', + }, + verticalDelimiter: { + composes: 'd-none d-xl-block mr-4', + borderLeft: '1px solid #E6E9F2', + }, + whiteHighContrast: { + color: 'var(--white)', + '&:hover': { + // Needed to grant high contrast for a11y + color: ['var(--white)', '!important'], + }, + }, + heroSectionDark: { + backgroundColor: '#0066CC', + }, + heroSectionLight: { + backgroundColor: '#F0F6FC', + }, + heroTitle: { + composes: 'hero-title', + color: '#33485C', + fontSize: '2rem', + lineHeight: '1.25', + '@media (min-width: 992px)': { + fontSize: '2.667rem', + }, + }, + a11yHighContrast: { + '@global': { + noscript: { + color: 'white', + }, + }, + }, + outlineBtn: { + backgroundColor: 'transparent', + border: '1px solid #06c', + color: '#06c', + }, + heroImage: { + composes: 'row align-items-center', + '@media (min-width: 768px)': { + '& .hero-graphic-img': { + order: 2, + }, + }, + '@media (min-width: 991.99px)': { + padding: '2.222rem 0', + flexDirection: 'row', + }, + '& .hero-category': { + color: '#33485C', + fontSize: '0.889rem', + }, + '& .hero-body': { + color: '#33485C', + fontSize: '1.5rem', + lineHeight: '1.5', + marginBottom: '2rem', + '@media (min-width: 992px)': { + fontSize: '1.333rem', + }, + }, + '& .graphic-image': { + '@media (max-width: 991px)': { + maxWidth: '50%', + }, + '@media (max-width: 767px)': { + maxWidth: '80%', + margin: '0 auto 2.5rem', + }, + }, + '&.hero-small .hero-body': { + '@media (max-width: 992px)': { + fontSize: '1rem', + textAlign: 'left', + }, + }, + '&.hero-small .hero-title': { + '@media (max-width: 992px)': { + display: 'block', + textAlign: 'left', + }, + }, + '&.hero-small .graphic-image': { + '@media (max-width: 992px)': { + width: '220px', + }, + }, + '&.hero-main .hero-title': { + fontSize: '2.222rem', + color: '#fff', + }, + '&.hero-main .hero-body': { + color: '#fff', + }, + '&.hero-main .btn': { + backgroundColor: '#fff', + color: '#0066CC', + fontWeight: '600', + '&:hover': { + color: '#004d99', + }, + '@media (max-width: 767px)': { + width: '100%', + }, + }, + '& .btn': { + '@media (max-width: 767px)': { + width: '100%', + }, + }, + }, +}); + +export const HeroMode = ({ + ctaContainer, + smallText, + mainHero, + outlineBtn, + category, + title, + body, + firstInternal, + firstButtonHref, + firstButtonLabel, + firstButtonAriaLabel, + secondButtonLabel, + secondButtonAriaLabel, + imageUrl, + imageAlt, + heroTitleId, +}) => { + const classes = useStyles(); + const [, dispatch] = useContext(GlobalStateContext); + + return ( + +
    +
    +
    + {category ? : ''} + + +
    + {ctaContainer ? ( + + {firstInternal ? ( + + {firstButtonLabel} + + ) : ( + + {firstButtonLabel} + + )} + {secondButtonLabel ? ( + + dispatch({ + type: 'SET:HOW_SECTION_ID', + payload: { howId: 'beneficiari' }, + }) + } + > + {secondButtonLabel} + + ) : ( + '' + )} + + ) : ( + '' + )} +
    + + {imageAlt} + +
    +
    + ); +}; + +HeroMode.propTypes = { + ctaContainer: PropTypes.bool, + smallText: PropTypes.bool, + category: PropTypes.string, + title: PropTypes.string, + body: PropTypes.string, + firstInternal: PropTypes.bool, + firstButtonHref: PropTypes.string, + firstButtonLabel: PropTypes.string, + firstButtonAriaLabel: PropTypes.string, + secondButtonHref: PropTypes.string, + secondButtonLabel: PropTypes.string, + secondButtonAriaLabel: PropTypes.string, + imageUrl: PropTypes.string, + imageAlt: PropTypes.string, + heroTitleId: PropTypes.string, + mainHero: PropTypes.bool, + outlineBtn: PropTypes.bool, +}; diff --git a/src/layouts/SolutionProjects.jsx b/src/layouts/SolutionProjects.jsx index 4f1058cbc..dedb97a4a 100644 --- a/src/layouts/SolutionProjects.jsx +++ b/src/layouts/SolutionProjects.jsx @@ -2,13 +2,12 @@ import React, { useEffect, useContext } from 'react'; import { createUseStyles } from 'react-jss'; import { Breadcrumb, BreadcrumbItem, Row, Col } from 'design-react-kit'; import content from '../../contents/iniziativa/soluzione-progetti.yml'; -import contentHowItWorks from '../../contents/iniziativa/iniziativa.yml'; import { SEO } from '../components/SEO'; import seo from '../../contents/seo.yml'; import { GlobalStateContext } from '../context/globalContext'; import { HeroSolutions } from '../components/hero/HeroSolutions'; import { TimelineVertical } from '../components/TimelineVertical'; -import { ProjectsCards } from '../components/ProjectsCards'; +import { HeroMode } from '../components/hero/HeroMode'; const { title: seoTitle, description: seoDescription } = seo.projectsSolutionPage; @@ -47,8 +46,7 @@ const useStyles = createUseStyles({ export const SolutionProjects = () => { const classes = useStyles(); - const { hero, verticalTimeline } = content; - const { projectsCardsItem } = contentHowItWorks; + const { hero, verticalTimeline, heroMode } = content; const [, dispatch] = useContext(GlobalStateContext); useEffect(() => { @@ -92,7 +90,19 @@ export const SolutionProjects = () => { smallText="true" /> - + ); }; diff --git a/src/layouts/SolutionStandard.jsx b/src/layouts/SolutionStandard.jsx index b92d8e497..680729004 100644 --- a/src/layouts/SolutionStandard.jsx +++ b/src/layouts/SolutionStandard.jsx @@ -4,11 +4,10 @@ import { Breadcrumb, BreadcrumbItem, Row, Col } from 'design-react-kit'; import content from '../../contents/iniziativa/soluzione-standard.yml'; import { SEO } from '../components/SEO'; import seo from '../../contents/seo.yml'; -import contentHowItWorks from '../../contents/iniziativa/iniziativa.yml'; import { GlobalStateContext } from '../context/globalContext'; import { HeroSolutions } from '../components/hero/HeroSolutions'; import { TimelineVertical } from '../components/TimelineVertical'; -import { ProjectsCards } from '../components/ProjectsCards'; +import { HeroMode } from '../components/hero/HeroMode'; const { title: seoTitle, description: seoDescription } = seo.standardSolutionPage; @@ -47,8 +46,7 @@ const useStyles = createUseStyles({ export const SolutionStandard = () => { const classes = useStyles(); - const { hero, verticalTimeline } = content; - const { projectsCardsItem } = contentHowItWorks; + const { hero, verticalTimeline, heroMode } = content; const [, dispatch] = useContext(GlobalStateContext); useEffect(() => { @@ -92,7 +90,19 @@ export const SolutionStandard = () => { smallText="true" /> - + ); }; diff --git a/static/assets/Presentazione_Progetti.svg b/static/assets/Presentazione_Progetti.svg new file mode 100644 index 000000000..a1c44bff8 --- /dev/null +++ b/static/assets/Presentazione_Progetti.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/Soluzioni_Standard.svg b/static/assets/Soluzioni_Standard.svg new file mode 100644 index 000000000..aa081ba3f --- /dev/null +++ b/static/assets/Soluzioni_Standard.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From f8f23e83b3853028838367802e95daa1991b4f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Sat, 2 Apr 2022 10:46:30 +0200 Subject: [PATCH 38/49] fix: link to prod (#360) Co-authored-by: emnlpstr --- contents/links.yml | 2 +- contents/opportunity-page/opportunity.yml | 14 +++++++------- src/components/carousel/NoticesCarousel.jsx | 2 +- src/layouts/Header.jsx | 5 +---- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/contents/links.yml b/contents/links.yml index 5c96aa234..fe053c850 100644 --- a/contents/links.yml +++ b/contents/links.yml @@ -92,7 +92,7 @@ externalLinks: ariaLabel: 'Unione Europea (Collegamento esterno - Apre su nuova scheda)' label: 'Unione Europea' accedi: - linkTo: https://collaudo-padigitale2026.cs128.force.com/padigitale2026/sis_SpidPage + linkTo: https://areariservata.padigitale2026.gov.it/sis_SpidPage ariaLabel: "Accedi all'area privata" label: 'Accedi' repubblica: diff --git a/contents/opportunity-page/opportunity.yml b/contents/opportunity-page/opportunity.yml index 2db3f8a5d..6f6f23b2f 100644 --- a/contents/opportunity-page/opportunity.yml +++ b/contents/opportunity-page/opportunity.yml @@ -89,7 +89,7 @@ beneficiaries: solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni Standard - moreInfoLink: 'https://collaudo-padigitale2026.cs128.force.com/padigitale2026/Pa_digitale2026_avvisi' + moreInfoLink: 'https://areariservata.padigitale2026.gov.it/Pa_digitale2026_avvisi' - number: 1.3.1 id: piatt-dig-naz title: Piattaforma Digitale Nazionale Dati @@ -118,7 +118,7 @@ beneficiaries: solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto - moreInfoLink: 'https://collaudo-padigitale2026.cs128.force.com/padigitale2026/Pa_digitale2026_avvisi' + moreInfoLink: 'https://areariservata.padigitale2026.gov.it/Pa_digitale2026_avvisi' - number: 1.3.2 id: sport-digi-unic title: Sportello Digitale Unico @@ -168,7 +168,7 @@ beneficiaries: solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni standard - moreInfoLink: 'https://collaudo-padigitale2026.cs128.force.com/padigitale2026/Pa_digitale2026_avvisi' + moreInfoLink: 'https://areariservata.padigitale2026.gov.it/Pa_digitale2026_avvisi' - number: 1.4.2 id: access title: Accessibilità @@ -226,7 +226,7 @@ beneficiaries: solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni Standard - moreInfoLink: 'https://collaudo-padigitale2026.cs128.force.com/padigitale2026/Pa_digitale2026_avvisi' + moreInfoLink: 'https://areariservata.padigitale2026.gov.it/Pa_digitale2026_avvisi' goToButton: true - number: 1.4.4 id: adoz-id @@ -263,7 +263,7 @@ beneficiaries: solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni Standard - moreInfoLink: 'https://collaudo-padigitale2026.cs128.force.com/padigitale2026/Pa_digitale2026_avvisi' + moreInfoLink: 'https://areariservata.padigitale2026.gov.it/Pa_digitale2026_avvisi' goToButton: true - number: 1.4.5 id: digi-avvisi @@ -283,7 +283,7 @@ beneficiaries: solutionType: '/iniziativa/soluzioni-standard' accessSectionId: soluzioni-standard accessLabel: Soluzioni standard - moreInfoLink: 'https://collaudo-padigitale2026.cs128.force.com/padigitale2026/Pa_digitale2026_avvisi' + moreInfoLink: 'https://areariservata.padigitale2026.gov.it/Pa_digitale2026_avvisi' - number: 1.4.6 id: maas title: MaaS @@ -373,7 +373,7 @@ beneficiaries: solutionType: '/iniziativa/presentazione-progetti' accessSectionId: presentazione-progetto accessLabel: Presentazione Progetto - moreInfoLink: 'https://collaudo-padigitale2026.cs128.force.com/padigitale2026/Pa_digitale2026_avvisi' + moreInfoLink: 'https://areariservata.padigitale2026.gov.it/Pa_digitale2026_avvisi' modal: selectRepresent: - value: public-administration diff --git a/src/components/carousel/NoticesCarousel.jsx b/src/components/carousel/NoticesCarousel.jsx index fa5dd88b1..dfbd58535 100644 --- a/src/components/carousel/NoticesCarousel.jsx +++ b/src/components/carousel/NoticesCarousel.jsx @@ -174,7 +174,7 @@ export const NoticesCarousel = ({ content, title }) => { />
    scopri tutti diff --git a/src/layouts/Header.jsx b/src/layouts/Header.jsx index 05f6b43f3..a21e1db31 100644 --- a/src/layouts/Header.jsx +++ b/src/layouts/Header.jsx @@ -491,10 +491,7 @@ const NavHeader = () => { - + Avvisi From 7910b549decae287170dd6f7d65c044084e4989b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Sat, 2 Apr 2022 11:16:18 +0200 Subject: [PATCH 39/49] fix: faq text (#359) Co-authored-by: emnlpstr --- contents/faq-page/faq.yml | 95 +++++++++++++++++++++++++++++++++++++++ src/layouts/FaqPage.jsx | 4 +- 2 files changed, 97 insertions(+), 2 deletions(-) diff --git a/contents/faq-page/faq.yml b/contents/faq-page/faq.yml index c5e51b9cc..03d53141f 100644 --- a/contents/faq-page/faq.yml +++ b/contents/faq-page/faq.yml @@ -18,6 +18,15 @@ sidebar: - sectionTitle: Supporto tecnico sectionId: supporto-tecnico sectionActive: false + - sectionTitle: Misura 1.4.3 pagoPa + sectionId: measure-1-4-3-pagopa + sectionActive: false + - sectionTitle: Misura 1.4.3 appIO + sectionId: measure-1-4-3-appio + sectionActive: false + - sectionTitle: Misura 1.4.4 + sectionId: measure-1-4-4 + sectionActive: false questions: - title: Generali description: La strategia di ripresa economica e gli interventi previsti per il rilancio digitale del Paese @@ -144,6 +153,92 @@ questions: ariaLabel: Vai alla pagina di assistenza - title: Come posso annullare la mia iscrizione agli aggiornamenti? content: Se desideri interrompere la ricezione di comunicazioni e aggiornamenti da PA digitale 2026, usa il link “Annulla iscrizione” presente nella sezione finale di ogni email. + - title: Misura 1.4.3 pagoPa + description: Le indicazioni pratiche per risolvere le problematiche tecniche ricorrenti + sectionId: measure-1-4-3-pagopa + accordions: + - title: A quanto ammonta l'importo del finanziamento previsto dall'Avviso "Adozione pagoPa" della Misura 1.4.3? + content: "L’importo del finanziamento concedibile ai Comuni è individuato in un importo forfettario determinato secondo il seguente criterio:

    a. per i Comuni fino a 5.000 ab.: pago PA: €607 per servizio (min.3 max 111);
    b. per i Comuni 5.001 - 20.000 ab. pago PA: €857 per servizio (min.3 max 111);
    c. per i Comuni 20.001 - 100.000 ab. pago PA: €1821 per servizio (min.5 max 111);
    d. per i Comuni 100.001 - 250.000 ab. pago PA: €2747 per servizio (min.5 max 111);
    e. per i Comuni > 250.000 ab. pago PA: €7967 per servizio (min.5 max 111)." + - title: Quali enti della PA possono presentare domanda? + content: I soggetti attuatori, ovvero coloro che possono accedere allo strumento predisposto dall'Avviso, sono i Comuni. + - title: È possibile accedere al finanziamento in caso di realizzazione del progetto prima della pubblicazione dell'Avviso "Adozione pagoPA" della Misura 1.4.3? + content: Si, è possibile accedere al finanziamento previsto dall'Avviso nel caso in cui l'attivazione dei servizi di incasso (pagoPA) sia stata realizzata dopo il 01 Aprile 2021 con risorse finanziarie proprie. + - title: È possibile accedere al finanziamento in caso di realizzazione del progetto in data antecedente al 01 Aprile 2021? + content: No, non è possibile accedere al finanziamento previsto dall'Avviso nel caso in cui il processo di l'attuazione dei servizi di incasso(PagoPA) sia stata realizzatao prima del 01 Aprile 2021, indipendemente dai fondi/risorse utilizzati. Può essere invece finanziata l'attivazione di nuovi servizi, non inclusi nel precedente finanziamento. + - title: Quali interventi possono essere finanziati dall'Avviso 1.4.3 per PagoPA? + content: I servizi oggetto di migrazione possono essere tutti i servizi di incasso erogati da ciascun Ente facendo valere il principio della titolarità del credito, cioè, potranno essere migrati tutti i servizi di incasso gestiti direttamente dal singolo Ente e/o affidati a soggetti esterni (es. Riscossori; Unioni di Comuni; Comunità Montane) fermo restando che l’Ente mantenga la titolarità del credito vantato. + - title: Entro quando è possibile inoltrare la domanda di accesso al finanziamento? + content: La domanda può essere presentata a partire dalla data di pubblicazione dell'Avviso fino ad esaurimento delle risorse disponibili, e comunque non oltre alle ore 23.59 del 2 settembre 2022. + - title: Quando sarà emesso il Decreto di Finanziamento e quali informazioni saranno in esso contenute? + content: Ogni 30 giorni, dopo la chiusura della finestra temporale, il Dipartimento per la trasformazione digitale provvede alla definizione del decreto di ammissione a finanziamento dei progetti presentati nella relativa finestra temporale e per i quali i Comuni hanno provveduto all’accettazione del finanziamento e alla comunicazione del codice CUP attraverso la Piattaforma. In allegato al decreto di finanziamento sarà riportato l’elenco dei soggetti finanziati in ordine cronologico con il relativo CUP e importo finanziato. + - title: Quali sono i documenti necessari al fine di predisporre correttamente la richiesta di trasferimento delle risorse? + content: "Alla domanda di erogazione del finanziamento, il Comune dovrà allegare: Il certificato di regolare esecuzione del RUP; l’eventuale check list applicabile compilata secondo le indicazione delle linee guida fornite." + - title: Entro quanto tempo dovrà essere contrattualizzato il fornitore rispetto al Decreto di Finanziamento? + content: Il fornitore dovà essere contrattualizzato al massimo entro 6 mesi (180 gg) dalla data di notifica del Decreto di Finanziamento. + - title: Entro quando dovranno essere portate a termine le attività di migrazione e di attivazione dei servizi? + content: Le attività di migrazione e di attivazione dei servizi dovranno essere portate a termine entro 8 mesi (240 gg), a partire dalla data di contrattualizzazione del fornitore. + - title: Quando il processo di migrazione e attivazione dei servizi si intende concluso con esito positivo per per i servizi attivati sulla Piattaforma PagoPA? + content: Il processo di riterrà concluso quando sarà stata effettuata una transazione con esito positivo con la corretta applicazione del codice tassonomico per ogni singolo servizio incluso nel progetto. + - title: Cosa si intende per transazione con esito positivo per PagoPA? + content: Per transazione con esito positivo si intende sia una transazione reale eseguita da un cittadino, nel caso in cui la stagionalità del singolo servizio di incasso lo consenta, oppure - in caso contrario - una transazione reale con importo di valore simbolico (es. 0,01€) ma con codice tassonomico e IUV reale, al fine di poter verificare l’effettiva e corretta integrazione del servizio di incasso in modalità end-to-end (cd. transazione di test) + - title: Qual è il metodo di calcolo del voucher? + content: L’importo del voucher è determinato dal prodotto dell'importo unitario dei servizi attivati (in funzione della classe di popolazione residente del Soggetto Attuatore) e il numero totale dei servizi attivati. + - title: misura 1.4.3 appIO + description: Le indicazioni pratiche per risolvere le problematiche tecniche ricorrenti + sectionId: measure-1-4-3-appio + accordions: + - title: "Come viene calcolato l'importo forfettario previsto dall'Avviso ''Adozione APP IO'' della Misura 1.4.3?" + content: "L’importo del finanziamento concedibile ai Comuni è individuato in un importo forfettario determinato secondo il seguente criterio:

    a. per i Comuni fino a 5.000 ab.: App IO: €243 per servizio (min.3 max 50);
    b. per i Comuni 5.001 - 20.000 ab. App IO: €343 per servizio (min.3 max 50);
    c. per i Comuni 20.001 - 100.000 ab. App IO: €728 per servizio (min.5 max 50);
    d. per i Comuni 100.001 - 250.000 ab. App IO: €1.099 per servizio (min.5 max 50);
    e. per i Comuni > 250.000 ab. App IO: €3.187 per servizio (min.5 max 50)." + - title: Quali enti della PA possono presentare domanda? + content: I Soggetti Attuatori, ovvero coloro che possono accedere allo strumento predisposto dall'Avviso, sono i Comuni. + - title: Qual è l'obiettivo dell'Avviso "Adozione APP IO" della Misura 1.4.3? + content: L'obiettivo del presente Avviso riferito alla Misura 1.4.3 è la migrazione e l’attivazione dei servizi digitali (AppIO) seguendo una logica di “pacchetti” che identificano il numero minimo di servizi da integrare a fronte di una singola adesione all’Avviso con il fine ultimo di raggiungere una integrazione cd. full per ciascun Comune, come specificato nell'Allegato 2. + - title: È possibile accedere al finanziamento in caso di realizzazione del progetto prima della pubblicazione dell'Avviso "Adozione APP IO" riferito della Misura 1.4.3? + content: Si, è possibile accedere al finanziamento previsto dal presente Avviso nel caso in cui l'attuazione dei servizi digitali (AppIO) sia stata realizzata a decorrere dal 01 Aprile 2021, con risorse finanziarie proprie. + - title: È possibile accedere al finanziamento in caso di realizzazione del progetto, con l'ausilio di Fondi pubblici, prima della pubblicazione dell'Avviso "Adozione APP IO" della Misura 1.4.3? + content: No, non è possibile accedere al finanziamento previsto dall'Avviso riferito alla Misura 1.4.3 nel caso in cui l'attuazione degli stessi servizi digitali (AppIO) sia stata realizzata con altri finanziamenti pubblici, nazionali, regionali o europei, secondo quanto previsto dall'art. 7 dell'Avviso. Può essere invece finanziata l'attivazione di nuovi servizi, non inclusi nel precedente finanziamento. + - title: Entro quando è possibile inoltrare la domanda di accesso al finanziamento? + content: La domanda di partecipazione può essere presentata a partire dalla data di pubblicazione dell'Avviso fino ad esaurimento delle risorse disponibili, e comunque non oltre alle ore 23.59 del 2 settembre 2022. + - title: Entro quanto tempo dovrà essere contrattualizzato il fornitore rispetto al Decreto di Finanziamento? + content: Il fornitore dovà essere contrattualizzato al massimo entro 6 mesi (180 gg) dalla data di notifica del Decreto di Finanziamento. + - title: Entro quando dovranno essere portate a termine le attività di migrazione e di attivazione dei servizi? + content: Le attività di migrazione e di attivazione dei servizi dovranno essere portate a termine entro 8 mesi (240 gg), a partire dalla data di contrattualizzazione del fornitore. + - title: Quando il processo di migrazione e attivazione dei servizi si intende concluso con esito positivo per i servizi attivati sull’App IO? + content: Il processo si riterrà concluso con esito positivo quando le richieste di pubblicazione saranno approvate dalla PagoPA S.p.A e tutti i servizi saranno visibili in App. + - title: misura 1.4.4 + description: Le indicazioni pratiche per risolvere le problematiche tecniche ricorrenti + sectionId: measure-1-4-4 + accordions: + - title: Qual è l'importo del finanziamento concedibile? + content: L'importo del finanziamento riconoscibile è pari a 14.000 euro al termine della realizzazione del progetto. + - title: Sono previste risorse espressamente dedicate ai territori delle regioni Abruzzo, Basilicata, Campania, Calabria, Molise, Puglia, Sardegna, Sicilia? + content: Si, l'Avviso destina il 40% delle risorse al finanziamento di Soggetti Attuatori ubicati nelle regioni Abruzzo, Basilicata, Campania, Calabria, Molise, Puglia, Sardegna, Sicilia, nel rispetto della priorità trasversale del PNRR relativa al “superamento dei divari territoriali” di cui all’art. 2 comma 6 bis del decreto- legge 31 maggio 2021 n.77, convertito in legge 29 luglio 2021, n. 108. + - title: Quali enti della PA possono presentare domanda? + content: I soggetti attuatori, ovvero coloro che possono accedere allo strumento predisposto dall'Avviso, sono i Comuni. In seguito saranno pubblicati avvisi ad hoc per altre tipologie di pubbliche amministrazioni. + - title: Quali interventi possono essere finanziati dall'Avviso della Misura 1.4.4? + content: "Gli interventi che possono essere finanziati sono: adesione alla piattaforma di identità digitale SPID, adesione alla piattaforma di identità digitale CIE ed erogazione di un piano formativo su disposizioni normative, linee guida e best practices in caso di integrazione a SPID e CIE con protocollo SAML2. Per ulteriori dettagli si rimanda all'Allegato 2 del presente Avviso." + - title: È possibile accedere al finanziamento per l'adozione di una sola delle due piattaforme di identità digitale SPID/CIE? + content: Si, è possibile accedere al finanziamento previsto dall'Avviso al fine di adottare una sola delle due piattaforme, SPID o CIE, qualora una di esse sia stata già adottata dall'ente con protocollo SAML2, come specificato nell'Allegato 2. + - title: Nel caso in cui il Comune non abbia adottato nessuna piattaforma di identità digitale SPID e CIE, può fare richiesta per l'adozione di una sola delle due? + content: No, qualora lo scenario di partenza dell'ente sia qualificato dall'assenza di entrambe le piattaforme di identità digitale SPID e CIE, dovrà necessariamente adottarle entrambe, come specificato nell'Allegato 2. + - title: In quanto tempo deve essere concluso il progetto di integrazione? + content: Il progetto di integrazione deve essere concluso nel termine perentorio di 10 mesi dalla data di contrattualizzazione del fornitore, come specificato nell'Allegato 2. + - title: Quale standard di autenticazione deve applicare il Comune nell'adozione delle piattaforme di identità digitale? + content: OpenID Connect (OIDC) è lo standard di autenticazione attualmente utilizzato dalla quasi totalità delle moderne applicazioni web e mobile nel mondo privato ed è fortemente raccomandato, come specificato nell'Allegato 2. In alternativa è necessaria l'erogazione di un piano formativo, idoneo a costruire le basi per un successivo passaggio tecnologico. + - title: È possibile accedere al finanziamento in caso di progetti già avviati per integrazione SPID/CIE? + content: Si, è possibile accedere al finanziamento previsto dall'Avviso nel caso in cui il processo di adozione della piattaforma di identità digitale SPID/CIE sia stato avviato a decorrere dal 1° febbraio 2020 con fondi propri. + - title: Entro quando è possibile inoltrare la domanda di accesso al finanziamento? + content: La domanda può essere presentata a partire dalla data di pubblicazione fino ad esaurimento delle risorse disponibili, e comunque, entro e non oltre le ore 23:59 del 02/09/2022, come specificato nell'Avviso. + - title: Quando si considera raggiunto l’obiettivo di integrazione a CIE? + content: Per CIE sarà necessario che il soggetto attuatore abbia pubblicato l'adesione a CIE e messo in esercizio i servizi online. Farà fede la data di richiesta di adesione, purché la pubblicazione e messa in esercizio dei servizi avvenga entro e non oltre i 60 giorni decorrenti dalla data della richiesta di adesione a CIE. + - title: Quando si considera raggiunto l’obiettivo di integrazione a SPID? + content: Per SPID sarà necessario che il soggetto attuatore abbia eseguito i test tecnici di integrazione e abilitato i servizi online all’accesso tramite SPID. Farà fede la data di richiesta per il primo collaudo tecnico ad AgID il cui esito è positivo. + - title: Link utili per tematiche tecniche su SPID + content: 'Domande frequenti:
    https://www.spid.gov.it/domande-frequenti/
    https://helpdesk.spid.gov.it/knowledgebase.php?category=2

    Risorse per Sviluppatori:
    https://developers.italia.it/it/spid/#resourcecontent-1' + - title: Link utili per tematiche tecniche su CIE + content: 'Domande Frequenti:
    https://federazione.servizicie.interno.gov.it/faq

    Risorse per sviluppatori:
    https://developers.italia.it/it/cie' + + noResults: Nessun risultato trovato support: tag: Supporto diff --git a/src/layouts/FaqPage.jsx b/src/layouts/FaqPage.jsx index 949fb1d38..69edea75b 100644 --- a/src/layouts/FaqPage.jsx +++ b/src/layouts/FaqPage.jsx @@ -168,8 +168,8 @@ export const FaqPage = () => { const sideMenuActive = document.querySelector(`.sidebar-wrapper .list-item.active`); const sideMenuRefer = document.querySelector(`.sidebar-wrapper .list-item[data-id=${id}]`); - sideMenuActive.classList.remove('active'); - sideMenuRefer.classList.add('active'); + sideMenuActive && sideMenuActive.classList.remove('active'); + sideMenuRefer && sideMenuRefer.classList.add('active'); }; entries.forEach((entry) => { From ff98c3000f3992c78d582b07142427dab97b796e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Sat, 2 Apr 2022 12:43:04 +0200 Subject: [PATCH 40/49] fix: notices section (#361) * progress * fixed notices section * changed external link to interna Co-authored-by: emnlpstr --- src/components/carousel/NoticesCarousel.jsx | 11 ++++++++--- src/layouts/IndexPage.jsx | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/components/carousel/NoticesCarousel.jsx b/src/components/carousel/NoticesCarousel.jsx index dfbd58535..d3fb5480b 100644 --- a/src/components/carousel/NoticesCarousel.jsx +++ b/src/components/carousel/NoticesCarousel.jsx @@ -4,7 +4,6 @@ import { Row, Col, Card, CardBody, CardTitle } from 'design-react-kit'; import PropTypes from 'prop-types'; import { Link } from 'gatsby'; import { DesktopSwiper } from '../DesktopSwiper'; -import { ExternalLink } from '../ExternalLink'; const useStyles = createUseStyles({ heroCards: { @@ -121,6 +120,9 @@ const useStyles = createUseStyles({ lineHeight: '1.444rem', color: '#06c', }, + cardWrapper: { + textDecoration: 'none', + }, }); // const carousel = React.createRef(); @@ -130,7 +132,10 @@ export const NoticesCarousel = ({ content, title }) => { const slides = records.map((element) => ( <> - + CANDIDATURE Fino al {element.dataFine} @@ -140,7 +145,7 @@ export const NoticesCarousel = ({ content, title }) => {

    {element.titolo}

    -
    +
    )); diff --git a/src/layouts/IndexPage.jsx b/src/layouts/IndexPage.jsx index 31865d068..d8e3d3f23 100644 --- a/src/layouts/IndexPage.jsx +++ b/src/layouts/IndexPage.jsx @@ -23,7 +23,9 @@ export const IndexPage = () => { useEffect(() => { (async () => { try { - await fetch(`https://github.com/teamdigitale/padigitale2026-opendata`) + await fetch( + `https://raw.githubusercontent.com/teamdigitale/padigitale2026-opendata/main/dati/avvisi-latest.json` + ) .then((res) => res.json()) .then((data) => { setNewsList(data.windows); From 8e43f7e63f202292ea8b9beeffd56c646b6dc866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Pistar=C3=A0?= <52462767+emnlpstr@users.noreply.github.com> Date: Sat, 2 Apr 2022 12:44:04 +0200 Subject: [PATCH 41/49] fix: faq page (#362) * progress * fixed form * fix lint * updates FAQ * fix faq links Co-authored-by: emnlpstr --- contents/faq-page/faq.yml | 16 ++--- contents/note-legali-page/note-legali.md | 2 +- src/layouts/UpdatesPage.jsx | 82 +++++++++++++++--------- src/layouts/faq/QuestionSection.jsx | 6 ++ 4 files changed, 65 insertions(+), 41 deletions(-) diff --git a/contents/faq-page/faq.yml b/contents/faq-page/faq.yml index 03d53141f..a0a5bddd5 100644 --- a/contents/faq-page/faq.yml +++ b/contents/faq-page/faq.yml @@ -21,7 +21,7 @@ sidebar: - sectionTitle: Misura 1.4.3 pagoPa sectionId: measure-1-4-3-pagopa sectionActive: false - - sectionTitle: Misura 1.4.3 appIO + - sectionTitle: Misura 1.4.3 app IO sectionId: measure-1-4-3-appio sectionActive: false - sectionTitle: Misura 1.4.4 @@ -183,29 +183,29 @@ questions: content: Per transazione con esito positivo si intende sia una transazione reale eseguita da un cittadino, nel caso in cui la stagionalità del singolo servizio di incasso lo consenta, oppure - in caso contrario - una transazione reale con importo di valore simbolico (es. 0,01€) ma con codice tassonomico e IUV reale, al fine di poter verificare l’effettiva e corretta integrazione del servizio di incasso in modalità end-to-end (cd. transazione di test) - title: Qual è il metodo di calcolo del voucher? content: L’importo del voucher è determinato dal prodotto dell'importo unitario dei servizi attivati (in funzione della classe di popolazione residente del Soggetto Attuatore) e il numero totale dei servizi attivati. - - title: misura 1.4.3 appIO + - title: Misura 1.4.3 app IO description: Le indicazioni pratiche per risolvere le problematiche tecniche ricorrenti sectionId: measure-1-4-3-appio accordions: - title: "Come viene calcolato l'importo forfettario previsto dall'Avviso ''Adozione APP IO'' della Misura 1.4.3?" - content: "L’importo del finanziamento concedibile ai Comuni è individuato in un importo forfettario determinato secondo il seguente criterio:

    a. per i Comuni fino a 5.000 ab.: App IO: €243 per servizio (min.3 max 50);
    b. per i Comuni 5.001 - 20.000 ab. App IO: €343 per servizio (min.3 max 50);
    c. per i Comuni 20.001 - 100.000 ab. App IO: €728 per servizio (min.5 max 50);
    d. per i Comuni 100.001 - 250.000 ab. App IO: €1.099 per servizio (min.5 max 50);
    e. per i Comuni > 250.000 ab. App IO: €3.187 per servizio (min.5 max 50)." + content: "L’importo del finanziamento concedibile ai Comuni è individuato in un importo forfettario determinato secondo il seguente criterio:

    a. per i Comuni fino a 5.000 ab.: app IO: €243 per servizio (min.3 max 50);
    b. per i Comuni 5.001 - 20.000 ab. app IO: €343 per servizio (min.3 max 50);
    c. per i Comuni 20.001 - 100.000 ab. app IO: €728 per servizio (min.5 max 50);
    d. per i Comuni 100.001 - 250.000 ab. app IO: €1.099 per servizio (min.5 max 50);
    e. per i Comuni > 250.000 ab. app IO: €3.187 per servizio (min.5 max 50)." - title: Quali enti della PA possono presentare domanda? content: I Soggetti Attuatori, ovvero coloro che possono accedere allo strumento predisposto dall'Avviso, sono i Comuni. - title: Qual è l'obiettivo dell'Avviso "Adozione APP IO" della Misura 1.4.3? - content: L'obiettivo del presente Avviso riferito alla Misura 1.4.3 è la migrazione e l’attivazione dei servizi digitali (AppIO) seguendo una logica di “pacchetti” che identificano il numero minimo di servizi da integrare a fronte di una singola adesione all’Avviso con il fine ultimo di raggiungere una integrazione cd. full per ciascun Comune, come specificato nell'Allegato 2. + content: L'obiettivo del presente Avviso riferito alla Misura 1.4.3 è la migrazione e l’attivazione dei servizi digitali (app IO) seguendo una logica di “pacchetti” che identificano il numero minimo di servizi da integrare a fronte di una singola adesione all’Avviso con il fine ultimo di raggiungere una integrazione cd. full per ciascun Comune, come specificato nell'Allegato 2. - title: È possibile accedere al finanziamento in caso di realizzazione del progetto prima della pubblicazione dell'Avviso "Adozione APP IO" riferito della Misura 1.4.3? - content: Si, è possibile accedere al finanziamento previsto dal presente Avviso nel caso in cui l'attuazione dei servizi digitali (AppIO) sia stata realizzata a decorrere dal 01 Aprile 2021, con risorse finanziarie proprie. + content: Si, è possibile accedere al finanziamento previsto dal presente Avviso nel caso in cui l'attuazione dei servizi digitali (app IO) sia stata realizzata a decorrere dal 01 Aprile 2021, con risorse finanziarie proprie. - title: È possibile accedere al finanziamento in caso di realizzazione del progetto, con l'ausilio di Fondi pubblici, prima della pubblicazione dell'Avviso "Adozione APP IO" della Misura 1.4.3? - content: No, non è possibile accedere al finanziamento previsto dall'Avviso riferito alla Misura 1.4.3 nel caso in cui l'attuazione degli stessi servizi digitali (AppIO) sia stata realizzata con altri finanziamenti pubblici, nazionali, regionali o europei, secondo quanto previsto dall'art. 7 dell'Avviso. Può essere invece finanziata l'attivazione di nuovi servizi, non inclusi nel precedente finanziamento. + content: No, non è possibile accedere al finanziamento previsto dall'Avviso riferito alla Misura 1.4.3 nel caso in cui l'attuazione degli stessi servizi digitali (app IO) sia stata realizzata con altri finanziamenti pubblici, nazionali, regionali o europei, secondo quanto previsto dall'art. 7 dell'Avviso. Può essere invece finanziata l'attivazione di nuovi servizi, non inclusi nel precedente finanziamento. - title: Entro quando è possibile inoltrare la domanda di accesso al finanziamento? content: La domanda di partecipazione può essere presentata a partire dalla data di pubblicazione dell'Avviso fino ad esaurimento delle risorse disponibili, e comunque non oltre alle ore 23.59 del 2 settembre 2022. - title: Entro quanto tempo dovrà essere contrattualizzato il fornitore rispetto al Decreto di Finanziamento? content: Il fornitore dovà essere contrattualizzato al massimo entro 6 mesi (180 gg) dalla data di notifica del Decreto di Finanziamento. - title: Entro quando dovranno essere portate a termine le attività di migrazione e di attivazione dei servizi? content: Le attività di migrazione e di attivazione dei servizi dovranno essere portate a termine entro 8 mesi (240 gg), a partire dalla data di contrattualizzazione del fornitore. - - title: Quando il processo di migrazione e attivazione dei servizi si intende concluso con esito positivo per i servizi attivati sull’App IO? + - title: Quando il processo di migrazione e attivazione dei servizi si intende concluso con esito positivo per i servizi attivati sull’app IO? content: Il processo si riterrà concluso con esito positivo quando le richieste di pubblicazione saranno approvate dalla PagoPA S.p.A e tutti i servizi saranno visibili in App. - - title: misura 1.4.4 + - title: Misura 1.4.4 description: Le indicazioni pratiche per risolvere le problematiche tecniche ricorrenti sectionId: measure-1-4-4 accordions: diff --git a/contents/note-legali-page/note-legali.md b/contents/note-legali-page/note-legali.md index 830bf6d0c..db71eae86 100644 --- a/contents/note-legali-page/note-legali.md +++ b/contents/note-legali-page/note-legali.md @@ -6,7 +6,7 @@ La Presidenza del Consiglio dei Ministri - Dipartimento per la Trasformazione Di ### **Licenza dei contenuti** In applicazione del principio *open by default* ai sensi dell’articolo 52 del decreto legislativo 7 marzo 2005, n. 82 (CAD) e salvo dove diversamente specificato (compresi i contenuti incorporati di terzi), i dati, i documenti e le informazioni pubblicati sul sito sono rilasciati con [licenza CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/legalcode.it){class="text-decoration-none font-weight-semibold", rel='noreferrer', target='\_blank', aria-label='CC-BY 4.0 (Collegamento esterno - Apre su nuova scheda)'}. -Gli utenti sono quindi liberi di condividere (riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare questo materiale con qualsiasi mezzo e formato) e modificare (trasformare il materiale e utilizzarlo per opere derivate) per qualsiasi fine, anche commerciale con il solo onere di attribuzione, senza apporre restrizioni aggiuntive. +Gli utenti sono quindi liberi di condividere (riprodurre, distribuire, comunicare al pubblico, esporre in pubblico) rappresentare, eseguire e recitare questo materiale con qualsiasi mezzo e formato e modificare (trasformare il materiale e utilizzarlo per opere derivate) per qualsiasi fine, anche commerciale con il solo onere di attribuzione, senza apporre restrizioni aggiuntive. ### **Collegamenti a siti esterni e contenuti incorporati** Eventuali collegamenti a siti esterni di terzi, indicati nel presente sito, nonché eventuali contenuti incorporati di terzi sono forniti come semplice servizio agli utenti. L’indicazione dei collegamenti a siti esterni di terzi o l’inserimento di contenuti incorporati di terzi non implica da parte della Presidenza del Consiglio dei Ministri alcun tipo di approvazione o condivisione di responsabilità in relazione alla legittimità, alla completezza e alla correttezza delle informazioni contenute nei siti indicati. diff --git a/src/layouts/UpdatesPage.jsx b/src/layouts/UpdatesPage.jsx index 33fcb7a29..4373b05bc 100644 --- a/src/layouts/UpdatesPage.jsx +++ b/src/layouts/UpdatesPage.jsx @@ -285,11 +285,11 @@ const query = graphql` `; export const UpdatesPage = () => { - const [selectValue] = useState(false); const [inasmuchValue, setInasmuchValue] = useState(false); - const [inputValue, setInputValue] = useState(false); + const [inputValue, setInputValue] = useState(''); const [enteState, setEnteState] = useState(''); const [formValidate, setFormValidate] = useState(false); + const publicAdministrationValue = 'public-administration'; const { site: { @@ -343,30 +343,6 @@ export const UpdatesPage = () => { }); }; - useEffect(() => { - const inputArr = document.querySelectorAll('#updates-form [data-form="true"]'); - - const inputHandler = () => { - const currentInputArr = document.querySelectorAll('#updates-form [data-form="true"]'); - const visibleInput = Array.prototype.slice.call(currentInputArr).filter((input) => { - const hidden = input.closest('.hidden'); - if (!hidden) { - return input; - } - }); - const inputValue = Array.prototype.slice.call(visibleInput).every((input) => input.value !== ''); - if (inputValue) { - setInputValue(true); - } - }; - - setListenersToSelectOptions(); - setFocusStyleOnSelect(); - inputArr.forEach((input) => { - input.addEventListener('input', inputHandler); - }); - }, [setListenersToSelectOptions]); - const onSubmit = async (data) => { console.log(data); Object.keys(data).map(function (key) { @@ -450,9 +426,48 @@ export const UpdatesPage = () => { }; useEffect(() => { - console.log(inputValue); - inputValue && selectValue ? setFormValidate(true) : setFormValidate(false); - }, [selectValue, inputValue, formValidate, inasmuchValue]); + const inputArr = document.querySelectorAll('#updates-form input[data-form="true"]'); + const visibleInputArr = Array.prototype.slice.call(inputArr).filter((input) => { + if (!input.closest('.hidden')) { + return input; + } + }); + const isValidateInput = visibleInputArr.every((input) => { + if (input.value !== '') { + return input; + } + }); + + const isValidateSelectFunc = (enteState, inasmuchValue) => { + if (enteState || inasmuchValue) { + const inasmuchSelect = document.querySelector('#enteSelect'); + const isInasmuchVisible = !inasmuchSelect.closest('.hidden'); + if (enteState === publicAdministrationValue && inasmuchValue) { + return true; + } + if (enteState !== publicAdministrationValue && !inasmuchValue) { + return true; + } + if (enteState !== publicAdministrationValue && inasmuchValue && !isInasmuchVisible) { + return true; + } + } + return false; + }; + const isValidateSelect = isValidateSelectFunc(enteState, inasmuchValue); + + if (isValidateInput && isValidateSelect) { + setFormValidate(true); + } else { + setFormValidate(false); + } + setListenersToSelectOptions(); + setFocusStyleOnSelect(); + }, [enteState, inasmuchValue, inputValue]); + + const onInputHandler = (e) => { + setInputValue(e.target.value); + }; const { selectRepresent, @@ -531,6 +546,7 @@ export const UpdatesPage = () => { id="address" aria-required="true" data-form="true" + onInput={onInputHandler} autoComplete="email" {...field} className="mb-0" @@ -600,6 +616,7 @@ export const UpdatesPage = () => { {...field} id="enteType" data-form="true" + onInput={onInputHandler} /> {errors.enteType && errors.enteType.message} @@ -636,6 +653,7 @@ export const UpdatesPage = () => { aria-labelledby={errors.ente && 'error-enteName'} aria-invalid={errors.ente && 'true'} data-form="true" + onInput={onInputHandler} {...field} id="enteName" /> @@ -647,7 +665,7 @@ export const UpdatesPage = () => { /> -
    +