Author SHA1 Message Date
Robert Bond 9dfa2e8792 Merged PR 2677: Feature/ithc mitigation final
Related work items: #25509, #25515, #25516
2026-11-10 11:04:13 +00:00
Robert Bond 220d7826b2 Merged PR 2675: Feature/ithc mitigation
ITHC fixes

Related work items: #25508, #25509, #25510, #25513, #25514, #25515
2026-11-10 10:39:40 +00:00
robbond 73419aa598 fix(security): prevent caching of sensitive API responses 2026-11-09 16:38:19 +00:00
robbond 63c56da143 fix(security): disable legacy XSS browser filter 2026-11-09 15:56:30 +00:00
robbond ff84e9ea0f fix(security): use server-configured PET notification recipient 2026-11-09 14:04:31 +00:00
robbond f4f8075af3 fix(security): harden Contact Us PET notifications 2026-11-09 13:41:31 +00:00
robbond 3c0a9ef721 fix(security): harden Contact Us sender confirmations 2026-11-09 13:06:22 +00:00
robbond b821dc2092 fix(security): append Contact Us CRM activity reminder 2026-11-09 12:07:08 +00:00
robbond b15ac5e664 fix(security): harden Contact Us CRM task endpoint 2026-11-09 11:17:17 +00:00
robbond fef9591b5d fix(security): protect representation blob deletion against CSRF 2026-11-09 09:31:41 +00:00
robbond 4eba824ac2 fix(security): protect case blob deletion against CSRF 2026-11-09 07:56:59 +00:00
robbond 12b0e5eff0 fix(storage): await recursive blob deletions and propagate failures 2026-11-07 11:17:48 +00:00
robbond 57e0c62940 fix(storage): constrain recursive blob deletion to resource folders 2026-11-07 11:12:08 +00:00
robbond bb8c5047c8 Merge ITHC recovery into mitigation baseline 2026-11-07 07:55:52 +00:00
robbond 1377aebc89 fix: enforce representation blob ownership and secure SSR access 2026-11-06 17:05:40 +00:00
robbond 946d361a67 test: cover ITHC cross-user blob deletion protection 2026-11-06 13:02:49 +00:00
robbond c49b491698 refactor: migrate myportal viewall account lookup to server helper 2026-11-06 11:58:01 +00:00
robbond bf2e4a3254 refactor: migrate myportal index account lookup to server helper 2026-11-06 11:33:49 +00:00
robbond 4b552e9cdd refactor: extract server-side CRM personal account lookup 2026-11-06 11:22:42 +00:00
robbond b9be188d27 security: enforce CRM contact ownership and account field allowlist 2026-11-06 10:55:47 +00:00
robbond 71de8a2d14 refactor: extract server-side CRM contact update 2026-11-06 09:58:02 +00:00
robbond ea5e90943d chore: remove unused legacy CRM password validation 2026-11-06 09:26:10 +00:00
robbond ddcef8f5ea security: remove obsolete CRM login endpoint 2026-11-06 09:22:29 +00:00
robbond f7479b72b9 security: remove obsolete CRM password update functionality 2026-11-06 09:14:54 +00:00
robbond e1f8fb5c96 Revert "security: enforce authenticated CRM contact ownership"
This reverts commit e13700ab65.
2026-11-06 06:42:16 +00:00
robbond e13700ab65 security: enforce authenticated CRM contact ownership 2026-11-06 06:36:53 +00:00
robbond a0a1331a97 fix(security): retire obsolete CRM representation deletion endpoint 2026-11-05 17:18:30 +00:00
robbond faf3aa3675 fix(security): enforce ownership on private draft case creation 2026-11-05 16:58:35 +00:00
robbond 9b0cb9adc8 fix(security): retire legacy direct CRM case creation endpoint 2026-11-05 16:37:10 +00:00
robbond 93bf7e174f fix(security): enforce ownership on private draft PDF generation 2026-11-05 14:11:45 +00:00
robbond 8b045ab781 fix(security): enforce ownership across appeal completion 2026-11-05 13:28:43 +00:00
robbond fc960f907f fix(security): enforce ownership on private draft blob deletion 2026-11-05 13:04:09 +00:00
robbond 056dace563 fix(security): enforce ownership on draft blob listing proxy 2026-11-05 12:59:55 +00:00
robbond 9d6d3b9f71 fix(security): enforce ownership on appeal and representation blob proxies 2026-11-05 12:53:24 +00:00
robbond 0a115a8808 security: preserve representation history in watched-case upsert 2026-11-05 12:48:45 +00:00
robbond 706083b6f0 test: update endpoint contract fixtures and add test filtering 2026-11-05 10:25:59 +00:00
robbond 431c45ba2b security: enforce CRM watched-case deletion ownership 2026-11-05 10:24:52 +00:00
robbond eeb4a1f441 fix: restore watched-case deletion through subscriptions facade 2026-11-05 10:02:30 +00:00
robbond 2badf2e272 security: enforce authenticated CRM contact ownership 2026-11-05 06:49:00 +00:00
robbond 601668a675 security: enforce CRM watched-case deletion ownership 2026-11-04 17:44:05 +00:00
robbond d0ce82c69f security: retire obsolete CRM representation deletion endpoint 2026-11-04 17:10:23 +00:00
robbond 5729625229 fix(security): enforce ownership on private draft case creation 2026-11-04 16:07:23 +00:00
robbond b59959fb83 fix(security): enforce ownership on private draft PDF generation 2026-11-04 15:36:52 +00:00
robbond 4829c49c7b fix(security): enforce ownership across appeal completion 2026-11-04 14:20:11 +00:00
robbond f8245861b7 fix(security): enforce ownership on private draft blob deletion 2026-11-04 14:01:50 +00:00
robbond 9d8678f52a fix(security): enforce ownership on draft blob listing proxy 2026-11-04 13:45:56 +00:00
robbond 7649ad3615 fix(security): enforce ownership on appeal and representation blob proxies 2026-11-04 13:23:51 +00:00
robbond 569faa77e5 fix(security): isolate NextAuth email provider from Nodemailer 2026-11-04 11:26:01 +00:00
robbond d9f0c0797d fix(security): strip video embeds from rich text linkification 2026-11-04 10:51:56 +00:00
robbond 500a30e95b chore: remove obsolete static appeal form definitions 2026-11-04 10:04:28 +00:00
robbond ebe8cab03f fix(deps): migrate ESLint tooling for Next.js 16 2026-11-04 10:01:40 +00:00
robbond 16a206ae0f fix(security): remove obsolete Swagger documentation endpoint 2026-11-04 09:17:23 +00:00
robbond b170f65210 fix(deps): upgrade webpack to 5.112.2 2026-11-04 09:09:17 +00:00
robbond 945f5d4f5d fix(deps): remove unused server-side Application Insights SDK 2026-11-04 08:52:33 +00:00
robbond 07ea9c5451 fix(deps): upgrade Azure Identity and remove vulnerable uuid dependency 2026-11-04 07:50:07 +00:00
robbond ddf5aba9f5 fix(deps): upgrade direct uuid dependency to 11.1.1 2026-11-04 07:47:18 +00:00
robbond 4f1bde2440 fix(deps): upgrade file-type to 22.3.0 2026-11-04 07:45:29 +00:00
robbond 3a75c69b3a fix(deps): remove unused react-quill dependency 2026-11-04 07:36:12 +00:00
robbond 3f91a3e095 fix(security): replace nookies with patched cookie utility 2026-11-04 06:54:36 +00:00
robbond cd0c690454 fix(deps): update react-cookie-consent to address js-cookie vulnerability 2026-11-04 06:25:47 +00:00
robbond e46b00b4aa fix(deps): update immutable to patched release 2026-11-04 06:19:37 +00:00
robbond 814d23d3f5 fix(deps): update ajv to patched release 2026-11-04 06:06:25 +00:00
robbond c6e6f923a8 fix(deps): remove unused moment dependency 2026-11-04 06:04:13 +00:00
robbond ba639da696 fix(deps): update fflate to patched release 2026-11-04 06:01:07 +00:00
robbond e5bb0477f4 fix(deps): update browserslist to patched release 2026-11-03 18:06:30 +00:00
robbond 38ade33bf3 fix(deps): update nevware21 ts-utils to patched release 2026-11-03 18:04:28 +00:00
robbond 14e8ad82d1 fix(deps): remove vulnerable serialize-javascript dependency 2026-11-03 17:57:16 +00:00
robbond 7fc6acea5c fix(deps): update source-map-js to patched release 2026-11-03 17:11:23 +00:00
robbond ba83555771 fix(deps): update picomatch to patched releases 2026-11-03 17:09:07 +00:00
robbond 99073e2146 fix(deps): update brace-expansion to patched releases 2026-11-03 17:07:28 +00:00
robbond 1c2ae06793 fix(deps): update flatted to patched release 2026-11-03 17:05:15 +00:00
robbond 4c227da77a fix(deps): update js-yaml to patched release 2026-11-03 17:03:29 +00:00
robbond ef9a630e5e fix(deps): update jws to patched releases 2026-11-03 16:44:56 +00:00
robbond 7c8b7025a1 fix(deps): update validator to patched release 2026-11-03 16:37:36 +00:00
robbond 40d5629ac3 fix(deps): update lodash and lodash-es to patched releases 2026-11-03 16:36:01 +00:00
robbond 127b7c26d4 fix(deps): update multiparty to patched release 2026-11-03 16:25:58 +00:00
robbond 1d01cc4bdb fix(deps): remove unused legacy jsonpath dependency 2026-11-03 16:22:22 +00:00
robbond be8ee5cfdb fix(deps): remove unused compression dependency 2026-11-03 16:14:05 +00:00
robbond 898e1762bb fix(deps): update xmldom to patched release 2026-11-03 16:09:56 +00:00
robbond 933858ed6c fix(deps): update Azure XML parser dependencies 2026-11-03 16:05:15 +00:00
robbond ea92d85e6a fix(deps): remove unused react-pdf dependency 2026-11-03 15:52:54 +00:00
robbond 37b8dc7916 fix(deps): remove unused Swagger UI dependencies 2026-11-03 15:43:24 +00:00
robbond 298fa25c9b fix(deps): update Express and proxy-addr 2026-11-03 14:32:28 +00:00
robbond 40092a8915 fix(deps): update axios and transitive dependencies 2026-11-03 14:26:46 +00:00
robbond 441c9376f4 fix(deps): remove unused vulnerable Auth.js Prisma adapter 2026-11-03 13:56:56 +00:00
robbond cb24e02ce7 fix(styles): replace deprecated step-related Sass division 2026-11-03 13:27:35 +00:00
robbond adcf017d49 fix(styles): replace deprecated step-nav Sass division 2026-11-03 13:15:47 +00:00
robbond 697b1adc5f chore: revert vscode debug 2026-11-03 12:59:21 +00:00
robbond 41151d987f chore: update vscode debug launch.json 2026-11-03 12:56:51 +00:00
robbond 86a3e28d8e chore(build): reduce dependency Sass deprecation noise 2026-11-03 12:54:24 +00:00
robbond ba9294ad1a chore(deps): upgrade Next.js 16 with Webpack 2026-11-03 11:10:11 +00:00
robbond 16ca736789 chore(deps): update NextAuth v4 compatibility baseline 2026-11-03 10:15:53 +00:00
robbond bb50b17277 fix(ithc): correct server-side session retrieval for file APIs 2026-11-03 09:25:02 +00:00
robbond d417860d1d Merge branch 'SIPS-Development' into feature/ithc-mitigation 2026-11-02 16:05:12 +00:00
Robert Bond cfbd72e313 Merged PR 2666: fix: remove duplicate getDetails import from representation loader
fix: remove duplicate getDetails import from representation loader

Related work items: #25470
2026-11-02 13:08:20 +00:00
Robert Bond 93eabe8e6d Merged PR 2665: 25470 testing authentication handler
Related work items: #25470
2026-11-02 12:41:09 +00:00
Robert Bond ce21a1a00f Merged PR 2664: fixes on advanced search
fixes on advanced search

Related work items: #25462
2026-10-30 11:06:32 +00:00
robbond be2df2da8f Merge remote-tracking branch 'origin/SIPS-Development' into feature/ithc-mitigation 2026-10-27 13:33:15 +00:00
Robert Bond 2b691ac4ef Merged PR 2653: fix: preserve LPA questionnaire PDF metadata during submission
fix: preserve LPA questionnaire PDF metadata during submission

Related work items: #25435
2026-10-27 13:07:41 +00:00
robbond 65616f6307 ITHC: enforce container ownership on uploads 2026-10-27 06:05:47 +00:00
robbond 5e98d6e8c2 ITHC: enforce administrative case deletion authorization 2026-10-27 05:40:50 +00:00
robbond 8b607d8134 ITHC: enforce representation completion ownership and admin access 2026-10-26 17:11:38 +00:00
robbond 034b59a981 ITHC: enforce representation blob proxy ownership and admin access 2026-10-26 16:17:52 +00:00
robbond 37aeb03509 ITHC: protect administrative representation unlock endpoint 2026-10-26 15:27:10 +00:00
robbond 0daeb783b9 Stage 3: enforce blob deletion ownership and add admin representation deletion
Also repairs two stale Phase 21 fixtures:
- Supplies a valid PDF to exercise the upload dependency-failure path.
- Injects getPersonalAccount into the representation-involvement VM fixture.
2026-10-26 14:39:22 +00:00
robbond 848728584e Stage 2: integrate administrative login and protect dashboard 2026-10-26 14:31:07 +00:00
robbond d11c4a868e Add independent administrative authentication foundation 2026-10-26 12:51:42 +00:00
Robert Bond fdeff5b898 Merged PR 2605: updated query to include consultationclosed check
updated query to include consultationclosed check

Related work items: #24836
2026-09-07 10:46:32 +00:00
Robert Bond 4e9d585566 Merged PR 2596: fix build error
fix build error

Related work items: #24648
2026-09-02 12:37:32 +00:00
Robert Bond b95a20a980 Merged PR 2595: updated regex to exclude bulk annon mailers
updated regex to exclude bulk annon mailers

Related work items: #24648
2026-09-02 08:02:38 +00:00
Robert Bond c9e7743782 Merged PR 2586: update text for reps showing
update text for reps showing

Related work items: #24650
2026-08-25 15:20:56 +00:00
Robert Bond 6bf5918387 Merged PR 2585: added text before make reps button
added text before make reps button

Related work items: #24650
2026-08-25 09:01:11 +00:00
Robert Bond c2d79cf83f Merged PR 2580: fixed the links
fixed the links

Related work items: #24648
2026-08-20 12:54:44 +00:00
Robert Bond 6ba1e16f9a Merged PR 2573: added link to footer
added link to footer

Related work items: #24649
2026-08-18 15:17:25 +00:00
Robert Bond 6cce7d05f1 Merged PR 2572: overlay link to guidance
overlay link to guidance

Related work items: #24650
2026-08-18 15:02:36 +00:00
Robert Bond ac4834a2a4 Merged PR 2570: updated copyright links
updated copyright links

Related work items: #24648
2026-08-18 14:21:54 +00:00
Robert Bond 850006d917 Merged PR 2559: added package lock
added package lock

Related work items: #24389
2026-08-12 14:03:23 +00:00
Robert Bond 478fa91004 Merged PR 2558: updated link on awaiting submission view allin welsh
updated link on awaiting submission view allin welsh

Related work items: #24389
2026-08-12 13:58:07 +00:00
Robert Bond 5813d409bc Merged PR 2557: removed field
removed field

Related work items: #24554
2026-08-11 09:26:07 +00:00
Robert Bond 71035a054f Merged PR 2556: updated welsh translation
updated welsh translation

Related work items: #24389
2026-08-11 09:13:22 +00:00
Robert Bond c2c4690b9b Merged PR 2555: missing slash in welsh url for case link
missing slash in welsh url for case link

Related work items: #24389
2026-08-10 13:11:18 +00:00
Robert Bond 9e2461305f Merged PR 2546: upodated copy
upodated copy

Related work items: #24335
2026-08-05 11:40:56 +00:00
Robert Bond db07425788 Merged PR 2541: update description for case closed
update description for case closed

Related work items: #24335
2026-08-05 08:31:17 +00:00
Robert Bond 90e8cacf67 Merged PR 2537: adjusted back button on first page of reopend rep
adjusted back button on first page of reopend rep

Related work items: #24488
2026-08-04 10:42:07 +00:00
Robert Bond 6462bd5163 Merged PR 2536: updated path to wrapper to fix build error
updated path to wrapper to fix build error

Related work items: #24215
2026-08-04 08:30:13 +00:00
Robert Bond d190fa8ff7 Merged PR 2534: adjusted breadcrumb for viewall return from a case
adjusted breadcrumb for viewall return from a case

Related work items: #24389
2026-08-04 08:09:04 +00:00
Robert Bond 460dfadd1e Merged PR 2533: made petemail from server side var for logged in
made petemail from server side var for logged in

Related work items: #24215
2026-08-04 07:44:08 +00:00
Robert Bond d74e3fd668 Merged PR 2532: made petemail from serverside env var
made petemail from serverside env var

Related work items: #24215
2026-08-04 07:36:57 +00:00
Robert Bond 75e9cf820d Merged PR 2513: updated translation
updated translation

Related work items: #24396
2026-07-24 12:01:36 +00:00
Robert Bond 9a461dee5e Merged PR 2512: adjsuted breadcrumb for dashboard links to cases to return to my portal not s...
adjsuted breadcrumb for dashboard links to cases to return to my portal not search results

Related work items: #24389
2026-07-24 11:38:48 +00:00
Robert Bond 1258985882 Merged PR 2504: amend paths for reps to exclude long titles
amend paths for reps to exclude long titles

Related work items: #24279
2026-07-22 15:51:27 +00:00
Robert Bond 02507f298c Merged PR 2501: welsh updates for ministerial decision
welsh updates for ministerial decision

Related work items: #24335
2026-07-22 12:35:30 +00:00
Robert Bond 11cdb43da4 Merged PR 2500: additional welsh ammends
additional welsh ammends

Related work items: #24314
2026-07-22 12:24:54 +00:00
Robert Bond f5bdf6a7b0 Merged PR 2493: updated ministerial decision and removed inspectors decision for sips
updated ministerial decision and removed inspectors decision for sips

Related work items: #24335
2026-07-21 11:36:22 +00:00
Robert Bond f80752ab6a Merged PR 2491: delimit event name for welsh >>>
delimit event name for welsh >>>

Related work items: #24302
2026-07-20 16:03:48 +00:00
Robert Bond b01d789bb8 Merged PR 2490: eia to aea for welsh in tab and subheadings
eia to aea for welsh in tab and subheadings

Related work items: #24269
2026-07-20 15:10:18 +00:00
Robert Bond bbf205a45f Merged PR 2489: added in additonal dates
added in additonal dates

Related work items: #24318
2026-07-20 10:05:14 +00:00
Robert Bond ec046944c0 Merged PR 2488: fixed welsh breadcrumb link
fixed welsh breadcrumb link

Related work items: #24328
2026-07-20 06:51:48 +00:00
Robert Bond 579026b6cc Merged PR 2486: adjsuted references to pinswg_eiarequired fields to pinswg_sipseiarequired
adjsuted references to pinswg_eiarequired fields to pinswg_sipseiarequired

Related work items: #24261
2026-07-17 11:52:55 +00:00
Robert Bond 2e9f90211c Merged PR 2485: updated welsh translations
Related work items: #24314
2026-07-16 16:17:02 +00:00
Robert Bond b7a644d078 Merged PR 2484: updated link for SIPS overview
updated link for SIPS overview

Related work items: #24315
2026-07-16 15:04:04 +00:00
Robert Bond 7a54f3df71 Merged PR 2482: updated submission examination display logic
updated submission examination display logic

Related work items: #24306
2026-07-16 05:05:57 +00:00
Robert Bond a850399cb1 Merged PR 2481: updated labels and added welsh language description
updated labels and added welsh language description

Related work items: #24302
2026-07-15 17:15:55 +00:00
Robert Bond e2897e511f Merged PR 2480: update status from page load not state
update status from page load not state

Related work items: #24297
2026-07-15 16:43:43 +00:00
Robert Bond 95486f0164 Merged PR 2476: added check for inactive case deadlines
added check for inactive case deadlines

Related work items: #24297
2026-07-15 12:41:10 +00:00
Robert Bond b00a2c0733 Merged PR 2475: updated file location for consultations to be correct ticket number not title
updated file location for consultations to be correct ticket number not title

Related work items: #24279
2026-07-14 16:13:11 +00:00
Robert Bond d7a73b7b0b Merged PR 2473: added in the dates on summary tabs
added in the dates on summary tabs

Related work items: #24258, #24259, #24263, #24269
2026-07-14 10:40:54 +00:00
Robert Bond bab0c26515 Merged PR 2468: tweaked button link to use caseref
tweaked button link to use caseref

Related work items: #24199
2026-07-09 11:59:31 +00:00
Robert Bond 9ac88bbbde Merged PR 2452: updated csp and params
updated csp and params

Related work items: #23879
2026-07-03 04:50:47 +00:00
Robert Bond 79e6dfade9 Merged PR 2451: included dynamic legend on enlarged map
included dynamic legend on enlarged map

Related work items: #23879
2026-07-02 16:12:23 +00:00
Robert Bond e864049bec Merged PR 2449: language helper
Related work items: #23754
2026-07-01 11:29:15 +00:00
Robert Bond 49aa258fd9 Merged PR 2443: added docs
added docs

Related work items: #23754
2026-06-29 17:58:10 +00:00
Robert Bond ff699735c7 Merged PR 2442: remove lodash dependecies on _.has
Related work items: #23754
2026-06-29 13:08:06 +00:00
Robert Bond 7b6af58065 Merged PR 2441: electricity shouldnt be showing reps available
electricity shouldnt be showing reps available

Related work items: #24008
2026-06-29 08:39:39 +00:00
Robert Bond 001c7ad6fa Merged PR 2436: adjsuted condition to include pinswg_startdate in showrepbutton
adjsuted condition to include  pinswg_startdate in showrepbutton

Related work items: #23998
2026-06-25 14:47:05 +00:00
Robert Bond b87c522137 Merged PR 2435: Add workflow orchestration documentation validation
Add workflow orchestration documentation validation

Related work items: #23754
2026-06-25 11:46:36 +00:00
Robert Bond 3960a357dc Merged PR 2433: assessment api grouping
assessment api grouping

Related work items: #23754
2026-06-25 09:52:15 +00:00
Robert Bond 94b19f9697 Merged PR 2432: Add myportal API grouping facade read slice
Add myportal API grouping facade read slice

Related work items: #23754
2026-06-25 09:37:01 +00:00
Robert Bond a1b89d19b8 Merged PR 2431: Add case details API grouping facade
Add case details API grouping facade

Related work items: #23754
2026-06-25 09:22:12 +00:00
Robert Bond f9f78548b0 Merged PR 2430: Add API grouping facade rollout checkpoint
Add API grouping facade rollout checkpoint

Related work items: #23754
2026-06-25 09:05:59 +00:00
Robert Bond a266fa5428 Merged PR 2429: Add public search API grouping facade slice
Add public search API grouping facade slice

Related work items: #23754
2026-06-25 08:48:43 +00:00
Robert Bond 33dcb6b863 Merged PR 2428: Add documents API grouping facade slice
Add documents API grouping facade slice

Related work items: #23754
2026-06-25 08:24:58 +00:00
Robert Bond 153f0d679e Merged PR 2427: update api facade
Related work items: #23754
2026-06-25 08:11:14 +00:00
Robert Bond 5483c4cdf2 Merged PR 2426: added var to summary map and welsh translatioins
added var to summary map and welsh translatioins

Related work items: #23879
2026-06-24 17:10:22 +00:00
Robert Bond c98bbfc321 Merged PR 2424: varibale for dmw mapping version
varibale for dmw mapping version

Related work items: #23879
2026-06-24 14:43:08 +00:00
Robert Bond 6d0bc35612 Merged PR 2420: added welsh translations of api endpoints
added welsh translations of api endpoints

Related work items: #23879
2026-06-23 10:38:24 +00:00
Robert Bond d7bb1acb10 Merged PR 2414: welsh version of contact us and heading for rep heading for IP rep type
welsh version of contact us and heading for rep heading for IP rep type

Related work items: #23484, #23910
2026-06-22 12:44:36 +00:00
Robert Bond 27fceffbc9 Merged PR 2413: updated docs
updated docs

Related work items: #23754
2026-06-22 05:36:30 +00:00
Robert Bond 0150e243ed Merged PR 2408: updated context for current state at 19062026
updated context for current state at 19062026

Related work items: #23754
2026-06-19 12:39:40 +00:00
Robert Bond e195e09429 Merged PR 2407: Extract representation entry specialist rules to domain policy
Extract representation entry specialist rules to domain policy

Related work items: #23754
2026-06-19 11:21:17 +00:00
Robert Bond be68b987a1 Merged PR 2405: Representation Entry Policy discovery and wrapper
Related work items: #23754
2026-06-19 08:19:56 +00:00
Robert Bond 60a2ff4594 Merged PR 2404: case stage analysis
Related work items: #23754
2026-06-18 16:02:40 +00:00
Robert Bond 81a6276f44 Merged PR 2401: docs: document representation participation availability model
docs: document representation participation availability model

Related work items: #23754
2026-06-18 10:27:53 +00:00
Robert Bond c84ff3fff9 Merged PR 2399: Adds characterization coverage and documentation for CRM query field profile
Related work items: #23754
2026-06-18 08:04:36 +00:00
Robert Bond a6941a8a06 Merged PR 2398: amends to appeal policy
Related work items: #23754
2026-06-18 05:17:10 +00:00
Robert Bond 475aa965b4 Merged PR 2395: helpers for dashboard domain layer
Related work items: #23754
2026-06-17 16:06:09 +00:00
Robert Bond 0b66a0e1d4 Merged PR 2394: adjusting reps domain logic
Related work items: #23754
2026-06-17 10:55:32 +00:00
Robert Bond ca244e5de1 Merged PR 2392: updated project types for new sub grid
updated project types for new sub grid

Related work items: #23752
2026-06-16 17:44:04 +00:00
Robert Bond 3efaafdb72 Merged PR 2388: added updated copy for contact us
added updated copy for contact us

Related work items: #23482, #23483
2026-06-16 08:25:05 +00:00
Robert Bond 1e14fbc709 Merged PR 2387: update welsh translations for new appeal pdf
update welsh translations for new appeal pdf

Related work items: #23562
2026-06-15 12:03:28 +00:00
Robert Bond 628b2b71fd Merged PR 2385: update unsubscribe
update unsubscribe

Related work items: #23796
2026-06-11 13:04:21 +00:00
Robert Bond 3297fe4f16 Merged PR 2384: updated pdf to show correct lang prefs on appeal pdf
updated pdf to show correct lang prefs on appeal pdf

Related work items: #23562
2026-06-11 10:51:38 +00:00
Robert Bond 7b1faf0bac Merged PR 2382: missing import
missing import

Related work items: #23780
2026-06-10 12:41:04 +00:00
Robert Bond c6e42fc314 Merged PR 2381: ROW case stage updates
Related work items: #23564, #23779, #23780
2026-06-10 10:12:11 +00:00
Robert Bond 7e47340326 Merged PR 2377: added enlarge map view on dnsapplication list
added enlarge map view on dnsapplication list

Related work items: #23774
2026-06-09 10:04:32 +00:00
Robert Bond c39e4bcc9a Merged PR 2375: update representation policy
## Summary

Introduces a new `representation-policy` domain boundary and incrementally extracts low-risk representation entry policy logic while preserving existing behaviour.

This PR intentionally stops before extracting ROW and Advert entry rules because characterization uncovered behavioural differences between consumers that require a separate business decision.

## What Changed

Added:

```text
lib/domain/representation-policy/
```

Including:

- `resolveRepresentationWindow(...)`
- `isRepresentationWindowOpen(...)`
- `isRepresentationWindowClosed(...)`
- `canShowRepresentationButtonForAppealType(...)`
- `canStartHouseholderRepresentation(...)`
- `canStartCpoRepresentation(...)`

Updated consumers:

```text
components/case/summary/utils/representationEntry.js
components/search/repsonresults.js
```

## Extracted Behaviour

### Representation Window Calculation
Centralised shared representation window logic and adopted it in both consumers.

### Appeal Type Entry Gating
Centralised excluded appeal-type logic while preserving existing behaviour.

### Householder Rule
Centralised Householder (`846040004`) entry rule.

Preserved behaviour:

```text
Householder representations can only be started by LPAs.
```

### CPO Rule
Centralised CPO (`846040019`) entry rule.

Preserved behaviour using:

```text
pinswg_startdate
pinswg_statementduedate
```

No fallback date broadening introduced.

## Characterization Added

### ROW (`846040015`)
Documented:
- hearing vs non-hearing behaviour
- specialist-process field behaviour
- date gating
- appeal-type coercion behaviour

### Advert (`846040018`)
Documented:
- LPA/non-LPA behaviour
- specialist-process behaviour
- appeal-type coercion behaviour

## Important Findings

### ROW Divergence
Summary and Search consumers currently behave differently when only:

```text
pinswg_speacialistcaseprocess
```

exists.

### Advert Divergence
Summary and Search consumers currently use different specialist-process resolution paths.

### CRM Compatibility
Both fields remain in production use and must be preserved:

```text
pinswg_specialistcaseprocess
pinswg_speacialistcaseprocess
```

## Documentation

Added:

```text
lib/domain/representation-policy/README.md
```

Documenting:
- ownership
- non-goals
- CRM compatibility requirements
- ROW divergence
- Advert divergence
- future extraction constraints

## Validation

Executed during the slice series:

```bash
node tests/phase22/representation-window.test.cjs
node tests/phase22/representation-appeal-type-entry-gating.test.cjs
node tests/phase22/representation-householder-entry-rule.test.cjs
node tests/phase22/representation-cpo-entry-rule.test.cjs
node tests/phase22/representation-row-entry-rule.test.cjs
node tests/phase22/representation-advert-entry-rule.test.cjs
npm run lint
```

All passing.

## Out of Scope

No changes to:

- submission/finalisation
- uploads
- dashboards
- CRM/OData queries
- API routes
- Redux state
- translations
- blocked-message rendering
- CTA l...
2026-06-08 10:51:02 +00:00
Robert Bond 9595ad86df Merged PR 2374: addeding domain layer extrraction
# Summary

This PR introduces a **Case Lifecycle Domain Boundary** to centralize lifecycle decision logic and reduce coupling within the appeals application.

The work is **behaviour-preserving** and introduces no intentional changes to business rules, CRM integrations, translations, dashboards, API routes, or user-facing functionality.

## What was added

New lifecycle boundary:

```text
lib/domain/case-lifecycle/
```

Key responsibilities extracted:

- Specialist process normalization
- Appeal type mapping
- Specialist process stage override mapping
- Stage case-type resolution
- Stage catalogue lookup
- Closed-case status recognition
- Lifecycle stage index resolution
- Lifecycle stage status assignment

## Behaviour preserved

Characterization tests were added before each extraction to preserve:

- Appeal type mapping and aliases
- Specialist process handling
- Lifecycle stage progression
- Closed-case handling
- Status assignment (`complete`, `in-progress`, `not-started`)
- Existing ROW behaviour
- Existing `statuscode` lifecycle semantics

Closed-case recognition remains unchanged for:

```text
1000
5
6
846040013
846040059
846040060
```

## Documentation

Added:

```text
lib/domain/case-lifecycle/README.md
```

Documenting:

- Boundary ownership
- Non-goals
- Lifecycle invariants
- Known architectural constraints
- Future extraction roadmap

## Testing

Added lifecycle characterization coverage for:

- Stage wrapper behaviour
- Specialist process normalization
- Appeal type mapping
- Specialist process stage mapping
- Stage case-type resolution
- Stage catalogue lookup
- Progress behaviour
- Closed-case status handling
- Stage index resolution
- Stage status assignment

## Validation

- Lifecycle characterization tests passed
- `npm run lint` passed with no errors

## Out of Scope

No changes to:

- Stage catalogue ownership
- Representation eligibility
- Dashboard calculations
- CRM/OData queries
- API routes
- Redux state
- EN/CY translations
- Event visibility logic

## Risk

**Low risk**

The refactor was delivered through small, characterization-first slices with no functional changes intended.

Related work items: #23527
2026-06-08 09:34:30 +00:00
Robert Bond 2262f3ab74 Merged PR 2369: added dns sips case close message and in welsh
added dns sips case close message and in welsh

Related work items: #23555
2026-06-03 14:48:58 +00:00
Robert Bond d0cae0fff1 Merged PR 2368: case stage ROW updates and case closed variants and adv search fix
Related work items: #23551, #23555, #23559
2026-06-03 12:44:59 +00:00
Robert Bond a9be19b901 Merged PR 2367: updated description and welsh
updated description and welsh

Related work items: #23551
2026-06-02 14:46:55 +00:00
Robert Bond da07b4873e Merged PR 2365: update welsh case stage
update welsh case stage

Related work items: #23359
2026-06-02 12:40:08 +00:00
Robert Bond 4ced5d0f42 Merged PR 2363: updated status and welsh
updated status and welsh

Related work items: #23319, #23359
2026-06-02 08:34:51 +00:00
Robert Bond 18a05d4be8 Merged PR 2357: dashboards in admin for appeals and lpa
dashboards in admin for appeals and lpa

Related work items: #23527
2026-05-29 16:35:27 +00:00
Robert Bond b71a93076b Merged PR 2352: adjusted query to only show published
adjusted query to only show published

Related work items: #23447
2026-05-28 11:02:18 +00:00
Robert Bond 3f2b8807e7 Merged PR 2351: fix csp by making it server side
Related work items: #23447
2026-05-28 10:41:11 +00:00
Robert Bond 24cd7000f7 Merged PR 2350: added in count on case status dropdown
added in count on case status dropdown

Related work items: #23447
2026-05-28 09:02:30 +00:00
Robert Bond 905c82f598 Merged PR 2349: updated dropdown to show all new case stages
updated dropdown to show all new case stages

Related work items: #23447
2026-05-28 07:05:06 +00:00
Robert Bond 26e8464d46 Merged PR 2348: corrected welsh version of representations period
corrected welsh version of representations period

Related work items: #23319
2026-05-27 14:29:20 +00:00
Robert Bond 1df5573fce Merged PR 2346: updated close status on non val
updated close status on non val

Related work items: #23365
2026-05-26 16:11:48 +00:00
Robert Bond 25485d73ed Merged PR 2345: typo
typo

Related work items: #23365
2026-05-26 14:57:34 +00:00
Robert Bond 6d8d56d745 Merged PR 2343: update to non val
Related work items: #23365
2026-05-26 13:42:09 +00:00
Robert Bond f6bbaa5c1d Merged PR 2342: ammend case status and descriptions per bugs
ammend case status and descriptions per bugs

Related work items: #23319, #23357, #23359, #23365, #23394
2026-05-26 07:50:33 +00:00
Robert Bond 4f3e3f5183 Merged PR 2338: updated welsh translation
updated welsh translation

Related work items: #23319
2026-05-21 12:28:36 +00:00
Robert Bond a6cc030612 Merged PR 2333: updated welsh link on events tab
updated welsh link on events tab

Related work items: #22423
2026-05-19 15:26:33 +00:00
Robert Bond 2e98be3b65 Merged PR 2331: updated welsh text
updated welsh text

Related work items: #23094
2026-05-19 05:23:14 +00:00
Robert Bond 149238dd4e Merged PR 2330: welsh translation update and reps and site visit fix
welsh translation update and reps and site visit fix

Related work items: #23087, #23088
2026-05-18 12:18:03 +00:00
Robert Bond b6bd543527 Merged PR 2329: welsh link for events
welsh link for events

Related work items: #23054
2026-05-18 08:50:58 +00:00
Robert Bond 5967665138 Merged PR 2325: missing welsh translations on search results
missing welsh translations on search results

Related work items: #23044
2026-05-15 15:08:53 +00:00
Robert Bond 9860f47cbe Merged PR 2324: updated status message for case started/case in progrsss
updated status message for case started/case in progrsss

Related work items: #23064
2026-05-15 13:14:23 +00:00
Robert Bond 5bf1393020 Merged PR 2322: removed the ? on event
removed the ? on event

Related work items: #23063
2026-05-15 10:33:01 +00:00
Robert Bond 5a8fd73bfd Merged PR 2321: updated welsh status on search results and status tab descriptions
updated welsh status on search results and status tab descriptions

Related work items: #23044, #23045
2026-05-14 15:03:36 +00:00
Robert Bond c2ae6964f9 Merged PR 2318: auth stabilisation: extract shared myportal auth guard helper
auth stabilisation: extract shared myportal auth guard helper

ntroduces a small shared SSR helper (resolveMyPortalAuthContext) to standardize common myportal auth/session guards (session presence, session user identity, and pinsUser cookie) with preserved reason-coded diagnostics and signin redirect behavior. Migrates exactly two loaders (pages/myportal/searchresults.js, pages/myportal/addresssearchresults.js) to use the helper while keeping loader-specific UPSTREAM_FAILURE and CONTACT_LOOKUP_FAILED logic unchanged.

Related work items: #23020
2026-05-14 10:38:45 +00:00
Robert Bond 4fb62a6773 Merged PR 2317: Auth stabilisation: add reason-coded guards to MyPortal loaders
Adds incremental auth/session hardening across myportal loader paths (loadMyPortalAppealPage, searchresults, addresssearchresults) with explicit guard ordering and reason-coded diagnostics for missing session, missing session identity, missing cookie identity, contact/account lookup failures, and upstream dependency failures. Includes targeted Phase22 loader guard tests and keeps redirect behaviour policy unchanged.

Related work items: #23020
2026-05-14 10:27:12 +00:00
Robert Bond d0b2fd077a Merged PR 2315: Auth stabilistatiion and hardening
Related work items: #23020
2026-05-14 08:55:49 +00:00
Robert Bond d295a507ac Merged PR 2303: updated company name to pinswg_companyname
updated company name to pinswg_companyname

Related work items: #22774
2026-05-11 10:47:39 +00:00
Robert Bond 4f90c9a058 Merged PR 2302: updated text as per vickis request
updated text as per vickis request

Related work items: #22987
2026-05-11 09:52:19 +00:00
Robert Bond 0b02acf035 Merged PR 2300: updated final comments matching string
updated  final comments matching string

Related work items: #22842
2026-05-08 10:31:27 +00:00
Robert Bond 12a28a4be0 Merged PR 2296: added in statuscode and summary description
added in statuscode and summary description

Related work items: #22612, #22616
2026-05-07 10:20:28 +00:00
Robert Bond 1a2c3ede3b Merged PR 2295: resolved lint warnings
resolved lint warnings

Related work items: #22873
2026-05-05 17:13:53 +00:00
Robert Bond 46a0e0b185 Merged PR 2291: reps array refactor and update and tests
reps array refactor and update and tests

Related work items: #22873
2026-05-05 10:16:27 +00:00
Robert Bond 0ff2d69ba6 Merged PR 2290: add guard rail to check for locale and ensure verify request is language spec...
add guard rail to check for locale and ensure verify request is language specific

Related work items: #22303
2026-05-05 08:25:17 +00:00
Robert Bond d2e88b57d8 Merged PR 2288: add in company name for appellant and autofill agent details in new appeal
add in company name for appellant and autofill agent details in new appeal

Related work items: #22842
2026-04-30 16:25:03 +00:00
Robert Bond b596374c3c Merged PR 2286: allowed LPAs to make statements
allowed LPAs to make statements

Related work items: #22848
2026-04-30 09:15:53 +00:00
Robert Bond 9140476a2a Merged PR 2285: tweak to live link
tweak to live link

Related work items: #22423
2026-04-29 17:03:50 +00:00
Robert Bond baf5b1838d Merged PR 2283: Data driven status pages from CRM
Related work items: #22805
2026-04-29 15:29:54 +00:00
Robert Bond 1fd192b870 Merged PR 2282: replaced deadlineextensiuondate
replaced deadlineextensiuondate

Related work items: #22783
2026-04-29 08:02:29 +00:00
Robert Bond 8b187742af Merged PR 2281: update logic for reps arr take isAppellant from capacity selection not type o...
update logic for reps arr take isAppellant from capacity selection not type of involvement

Related work items: #22835
2026-04-28 16:07:35 +00:00
Robert Bond 421adafca3 Merged PR 2280: fix in place for app error
fix in place for app error

Related work items: #22834
2026-04-28 15:48:32 +00:00
Robert Bond a25ab433a6 Merged PR 2279: passed in case customer email in search and update rep logic to stop non owne...
passed in case customer email in search and update rep logic to stop non owners rasing reps on other owners cases

Related work items: #22095
2026-04-28 12:00:12 +00:00
Robert Bond 843e6adee6 Merged PR 2278: mocked design for status tab
mocked design for status tab

Related work items: #22805
2026-04-28 09:36:48 +00:00
Robert Bond b2945790b1 Merged PR 2274: case deadline and watch stream on results
case deadline and wat

Related work items: #22423, #22783
2026-04-27 13:07:46 +00:00
Robert Bond 138f03912b Merged PR 2273: check for existing record and not insert if exists
check for existing record and not insert if exists

Related work items: #22441
2026-04-24 15:56:54 +00:00
Robert Bond d406d97ddf Merged PR 2272: final comments added and update _IP_ precendence to be lower
final comments added and update _IP_ precendence to be lower

Related work items: #22573, #22661
2026-04-24 14:44:24 +00:00
Robert Bond f367f3342c Merged PR 2271: typo on videos and update portal sumamry fro removed fields
Related work items: #22698, #22813
2026-04-24 13:10:20 +00:00
Robert Bond d604d4f264 Merged PR 2269: added link for streaming events
added link for streaming events

Related work items: #22423
2026-04-23 14:34:08 +00:00
Robert Bond 43e37dc844 Merged PR 2268: adjusted styling tto center vertically dynamically
adjusted styling tto center vertically dynamically

Related work items: #22659
2026-04-23 04:59:06 +00:00
Robert Bond 7a14b7e8c9 Merged PR 2267: added ai guidance overlay
added ai guidance overlay

Related work items: #21744
2026-04-22 13:28:05 +00:00
Robert Bond b0004381ed Merged PR 2266: update media tabs display and query
update media tabs display and query

Related work items: #22698
2026-04-22 11:38:04 +00:00
Robert Bond 20782db916 Merged PR 2264: updatd createinvolvent call
updatd createinvolvent call

Related work items: #22441
2026-04-22 08:15:59 +00:00
Robert Bond f34ac3ba11 Merged PR 2263: createinvolvement updates contactinvolvement table
createinvolvement updates contactinvolvement table

Related work items: #22441
2026-04-21 16:16:31 +00:00
Robert Bond 5bf885933d Merged PR 2262: shows primary lpa and then lists additional lps below on the portal summary tab
shows primary lpa and then lists additional lps below on the portal summary tab

Related work items: #22699
2026-04-21 08:39:37 +00:00
Robert Bond 05d83822f2 Merged PR 2261: added in text and ui redesign for rep type selection
added in text and ui redesign for rep type selection

Related work items: #22574
2026-04-21 04:59:01 +00:00
Robert Bond 37a81522d5 Merged PR 2260: refactor(representations): complete slice-based refactor of representations flow
## Representations Refactor — Behaviour-Preserving Structural Improvements

This PR delivers a full refactor of the representations flow, improving structure, readability, and maintainability while preserving all existing behaviour.

The work was completed using a controlled, slice-based approach with strict guardrails and regression validation at each step. No changes have been made to user journeys, payloads, routing, or EN/CY behaviour.

The result is a cleaner, more maintainable codebase with reduced coupling and clearer separation of concerns, ready for future enhancements without increased risk.

---

## What Was Done

The refactor was delivered incrementally across the following slices:

- **R1** — Representation entry logic extraction
- **R2** — Page loader separation (SSR/data orchestration)
- **R3** — Journey step resolution extraction
- **R4** — Flow shell decomposition
- **R5** — Representation elements normalisation
- **R6** — Data/service layer cleanup
- **R7** — Summary rendering proof slice
- **R8** — Submission/finalisation boundary isolation
- **R9** — Summary rollout (Batch 1)

Each slice:
- was isolated to a single concern
- followed strict guardrails
- was validated before merge

Full detail is available in:
`context/representations-refactor-tracker.md`

---

## Key Improvements

- Reduced coupling across the representations journey
- Separated data loading, orchestration, and rendering concerns
- Simplified complex conditional logic into testable helpers
- Standardised summary rendering using shared primitives (`SummaryCard`, `SummaryRow`)
- Isolated submission/finalisation sequencing into explicit boundaries
- Improved overall readability and maintainability

---

## Behaviour Preservation

This refactor does **not** change:

- User journeys (APP / IP / Agent / LPA)
- Route and query behaviour
- Payload contracts and API interactions
- Redux state shape and usage
- Validation rules and messaging
- EN/CY behaviour
- File upload / PDF / email sequencing
- Linked-case logic

All changes are structural only.

---

## Validation

### Automated

- `npm run lint` — passed (warnings only, no new errors)
- `npm run test:reps` — passed (7/7)

### Manual

Validated end-to-end across:

- APP
- IP
- Agent
- LPA

Including:

- representation creation
- editing/resuming representations
- submission flow
- confirmation/completion behaviour
- summary rendering across case types
- EN/CY parity

---

## Risk Management

The refactor targeted several high-risk areas:

- Case summary entry logic
- Representation submission/finalisation sequencing
- Dual-mode entry (new vs existing representation)

Risk was controlled through:

- small, incremental slices
- one branch per slice
- regression validation per slice
- strict behaviour-preservation guardrails
- controlled rollout for summary rendering changes

---

## Reviewer Guidance

Suggested areas to focus on:

- End-to-end representation journey (create → submit → complete)
- S...
2026-04-20 13:09:07 +00:00
459 changed files with 69400 additions and 62852 deletions
+42 -133
View File
@@ -18,8 +18,8 @@ CLIENT_SECRET = .Jf8Q~tKMObCJjhh_hy3J5AIctFrBalU4FS~tdxk
RELAY_ROOT = https://ar-ns-lz-pedw-dev-uks-01.servicebus.windows.net/ar-hc-lz-pedw-dev-uks-01/ RELAY_ROOT = https://ar-ns-lz-pedw-dev-uks-01.servicebus.windows.net/ar-hc-lz-pedw-dev-uks-01/
RELAYURI = "ar-ns-lz-pedw-dev-uks-01.servicebus.windows.net" RELAYURI = "ar-ns-lz-pedw-dev-uks-01.servicebus.windows.net"
RELAYPATH = "ar-hc-lz-pedw-dev-uks-01" RELAYPATH = "ar-hc-lz-pedw-dev-uks-01"
CRMURL = "devcrm2016.llcdt.gov.wales/DVPINS" CRMURL = "dv-pedw.crm11.dynamics.com"
CRMURL_VERSION = "v8.2" CRMURL_VERSION = "v9.2"
# //New Test # //New Test
CLIENT_ID = d40b9373-96c2-4b04-8bd8-c2a2fe6444c1 CLIENT_ID = d40b9373-96c2-4b04-8bd8-c2a2fe6444c1
@@ -33,18 +33,13 @@ CRMURL = "ts-pedw.crm11.dynamics.com"
CRMURL_VERSION = "v9.2" CRMURL_VERSION = "v9.2"
# //New PreProd # //New PreProd
# CLIENT_ID = ab6c4678-b31a-4eb3-b429-e039120e488a CLIENT_ID = ab6c4678-b31a-4eb3-b429-e039120e488a
# CLIENT_SECRET = VWY8Q~9EtRzGXpd8Xs~5OS1fej2IyVJ8JgTMncw3 CLIENT_SECRET = VWY8Q~9EtRzGXpd8Xs~5OS1fej2IyVJ8JgTMncw3
# RELAY_ROOT = https://ar-ns-lz-pedw-ppe-uks-01.servicebus.windows.net/ar-hc-lz-pedw-ppe-uks-01/ RELAY_ROOT = https://ar-ns-lz-pedw-ppe-uks-01.servicebus.windows.net/ar-hc-lz-pedw-ppe-uks-01/
# RELAYURI = "ar-ns-lz-pedw-ppe-uks-01.servicebus.windows.net" RELAYURI = "ar-ns-lz-pedw-ppe-uks-01.servicebus.windows.net"
# RELAYPATH = "ar-hc-lz-pedw-ppe-uks-01" RELAYPATH = "ar-hc-lz-pedw-ppe-uks-01"
# # RELAY_ROOT = https://ar-ns-lz-pedw-ppe-ukw-01.servicebus.windows.net/ar-hc-lz-pedw-ppe-ukw-01/ CRMURL = "wg-pp-pedw.crm11.dynamics.com"
# # RELAYURI = "ar-ns-lz-pedw-ppe-ukw-01.servicebus.windows.net" CRMURL_VERSION = "v9.2"
# # RELAYPATH = "ar-hc-lz-pedw-ppe-ukw-01"
# # CRMURL = "ppcrm2016.llcdt.gov.wales/PPPINSWales"
# # CRMURL_VERSION = "v8.2"
# CRMURL = "wg-pp-pedw.crm11.dynamics.com"
# CRMURL_VERSION = "v9.2"
# //Prod Oauth WGO # //Prod Oauth WGO
@@ -61,61 +56,11 @@ CRMURL_VERSION = "v9.2"
# RELAY_ROOT = https://ar-ns-lz-pedw-prod-uks-01.servicebus.windows.net/ar-hc-lz-pedw-prod-uks-01/ # RELAY_ROOT = https://ar-ns-lz-pedw-prod-uks-01.servicebus.windows.net/ar-hc-lz-pedw-prod-uks-01/
# RELAYURI = "ar-ns-lz-pedw-prod-uks-01.servicebus.windows.net" # RELAYURI = "ar-ns-lz-pedw-prod-uks-01.servicebus.windows.net"
# RELAYPATH = "ar-hc-lz-pedw-prod-uks-01" # RELAYPATH = "ar-hc-lz-pedw-prod-uks-01"
# # RELAY_ROOT = https://ar-ns-lz-pedw-ppe-ukw-01.servicebus.windows.net/ar-hc-lz-pedw-prod-ukw-01/
# # RELAYURI = "ar-ns-lz-pedw-prod-ukw-01.servicebus.windows.net"
# # RELAYPATH = "ar-hc-lz-pedw-prod-ukw-01"
# CRMURL = "crm2016.llc.gov.wales/PEDW" # CRMURL = "crm2016.llc.gov.wales/PEDW"
# CRMURL_VERSION = "v8.2" # CRMURL_VERSION = "v8.2"
# D365 cnr WGO
# CLIENT_ID = 3125ac03-91ac-46a7-a166-0086f0ed90b3
# CLIENT_SECRET = bFq8Q~9VX5Ra3lKnGGIXsB.G6-ZGMx7LqyqXjdr4
# RELAY_ROOT = https://ar-ns-lz-pedw-d365cnr-uks-01.servicebus.windows.net/ar-hc-lz-pedw-d365cnr-uks-01/
# RELAYURI = "ar-ns-lz-pedw-d365cnr-uks-01.servicebus.windows.net"
# RELAYPATH = "ar-hc-lz-pedw-d365cnr-uks-01"
# CRMURL = "dv-pedw.crm11.dynamics.com"
# CRMURL_VERSION = "v9.2"
# D365 Dev WGO
# CLIENT_ID = 9b834097-03d7-409b-b038-ecfec31a394a
# CLIENT_SECRET = .Jf8Q~tKMObCJjhh_hy3J5AIctFrBalU4FS~tdxk
# RELAY_ROOT = https://ar-ns-lz-pedw-d365dev-uks-01.servicebus.windows.net/ar-hc-lz-pedw-d365dev-uks-01/
# RELAYURI = "ar-ns-lz-pedw-d365dev-uks-01.servicebus.windows.net"
# RELAYPATH = "ar-hc-lz-pedw-d365dev-uks-01"
# CRMURL = "dv-pedw.crm11.dynamics.com"
# CRMURL_VERSION = "v9.2"
# D365 Test WGO
# CLIENT_ID = d40b9373-96c2-4b04-8bd8-c2a2fe6444c1
# CLIENT_SECRET = 6hT8Q~glL~jloWpGmvXw3UY37QFwjUE0r._jobEM
# RELAY_ROOT = https://ar-ns-lz-pedw-d365test-uks-01.servicebus.windows.net/ar-hc-lz-pedw-d365test-uks-01/
# RELAYURI = "ar-ns-lz-pedw-d365test-uks-01.servicebus.windows.net"
# RELAYPATH = "ar-hc-lz-pedw-d365test-uks-01"
# CRMURL = "ts-pedw.crm11.dynamics.com"
# CRMURL_VERSION = "v9.2"
# D365 PP WGO
# CLIENT_ID = ab6c4678-b31a-4eb3-b429-e039120e488a
# CLIENT_SECRET = V288Q~P1lFMvvX9Xnkx2pLixK~GOREH983Owqc1E
# RELAY_ROOT = https://ar-ns-lz-pedw-d365ppe-uks-01.servicebus.windows.net/ar-hc-lz-pedw-d365ppe-uks-01/
# RELAYURI = "ar-ns-lz-pedw-d365ppe-uks-01.servicebus.windows.net"
# RELAYPATH = "ar-hc-lz-pedw-d365ppe-uks-01"
# CRMURL = "wg-pp-pedw.crm11.dynamics.com"
# CRMURL_VERSION = "v9.2"
# D365 Prod WGO
# CLIENT_ID = 3e4141a3-1fbd-454e-98f0-7f3a4f14a3cc
# CLIENT_SECRET = ULC8Q~fZiXm0.teVLlZ_7LjxBOj2vIsWSApu2bAq
# RELAY_ROOT = https://ar-ns-lz-pedw-d365prod-uks-01.servicebus.windows.net/ar-hc-lz-pedw-d365prod-uks-01/
# RELAYURI = "ar-ns-lz-pedw-d365prod-uks-01.servicebus.windows.net"
# RELAYPATH = "ar-hc-lz-pedw-d365prod-uks-01"
# CRMURL = "wg-prod-pedw.crm11.dynamics.com"
# CRMURL_VERSION = "v9.2"
//GOOGLE_TAG_MANAGER = GTM-T78CBC3
GOOGLE_TAG_MANAGER = G-GTWW3JT03Z GOOGLE_TAG_MANAGER = G-GTWW3JT03Z
SHOWLOGIN = true SHOWLOGIN = true
@@ -135,38 +80,24 @@ NEXTAUTH_URL = $API_ROOT
NEXTAUTH_URL_INTERNAL = $API_ROOT NEXTAUTH_URL_INTERNAL = $API_ROOT
NEXTAUTH_SECRET = SuperSecret NEXTAUTH_SECRET = SuperSecret
// CNR sql server # CNR sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-cnr-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword # DATABASE_URL = sqlserver://sql-srv-plt-pedw-cnr-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// dev test sql server # dev test sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-dev-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword DATABASE_URL = sqlserver://sql-srv-plt-pedw-dev-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// test sql server # test sql server
DATABASE_URL = sqlserver://sql-srv-plt-pedw-test-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword DATABASE_URL = sqlserver://sql-srv-plt-pedw-test-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// Pre prod sql server # Pre prod sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-ppe-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustservercertificate=true;hostnameincertificate=*.database.windows.net;logintimeout=30;authentication=SqlPassword DATABASE_URL = sqlserver://sql-srv-plt-pedw-ppe-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustservercertificate=true;hostnameincertificate=*.database.windows.net;logintimeout=30;authentication=SqlPassword
// Prod sql server # Prod sql server
# DATABASE_URL = sqlserver://pp-pedw-sql.database.windows.net:1433;database=PEDWPreProd;user=RobBondSQL;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword # DATABASE_URL = sqlserver://pp-pedw-sql.database.windows.net:1433;database=PEDWPreProd;user=RobBondSQL;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// Prod sql server # Prod sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-prod-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword # DATABASE_URL = sqlserver://sql-srv-plt-pedw-prod-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// D365 CNR sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-d365cnr-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// D365 Dev sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-d365dev-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// D365 Test sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-d365test-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// D365 PPE sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-d365ppe-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
// D365 Prod sql server
# DATABASE_URL = sqlserver://sql-srv-plt-pedw-d365prod-uks-01.database.windows.net:1433;database=PEDW;user=PedwSqlAdmin;password=GhWKr62F5sQ69dZx;encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryPassword
@@ -174,31 +105,31 @@ SECRET = SuperSecret
//Azure Storage Account # Azure Storage Account
AZURE_CLIENT_ID = $CLIENT_ID AZURE_CLIENT_ID = $CLIENT_ID
AZURE_TENANT_ID = $TENANT AZURE_TENANT_ID = $TENANT
AZURE_CLIENT_SECRET = $CLIENT_SECRET AZURE_CLIENT_SECRET = $CLIENT_SECRET
// CNR key # CNR key
AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwcnruks" AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwcnruks"
AZURE_STORAGE_ACCOUNT_KEY = hRffHq4IwctpaTKdS/U33Xq6nyTDF1t++WJgIwsw7gzstktZin/rRwbTIAL9KKqesVsK7EHrTTG6+ASt4+7skw== AZURE_STORAGE_ACCOUNT_KEY = hRffHq4IwctpaTKdS/U33Xq6nyTDF1t++WJgIwsw7gzstktZin/rRwbTIAL9KKqesVsK7EHrTTG6+ASt4+7skw==
AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwcnruks.blob.core.windows.net AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwcnruks.blob.core.windows.net
// new dev key # new dev key
AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwdevuks" AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwdevuks"
AZURE_STORAGE_ACCOUNT_KEY = MmrsrCjBfop9pI2oImsP/+lJUWU2DrXsAB8nq5bOVROTmPovSGxjCjKw9+TAFr00k8WDUK9r6mVx+AStcMLyAA== AZURE_STORAGE_ACCOUNT_KEY = MmrsrCjBfop9pI2oImsP/+lJUWU2DrXsAB8nq5bOVROTmPovSGxjCjKw9+TAFr00k8WDUK9r6mVx+AStcMLyAA==
AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwdevuks.blob.core.windows.net AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwdevuks.blob.core.windows.net
// New test key # New test key
AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwtestuks" AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwtestuks"
# AZURE_STORAGE_ACCOUNT_KEY = 5NdDO9GGlbTFLHFOXZRw8H2C0Ow5bFTvHwUHEbStyzg2mbd1uwHSeBSvM/dkN+HfdwrFzqAkwL5P+AStdO6cig== # AZURE_STORAGE_ACCOUNT_KEY = 5NdDO9GGlbTFLHFOXZRw8H2C0Ow5bFTvHwUHEbStyzg2mbd1uwHSeBSvM/dkN+HfdwrFzqAkwL5P+AStdO6cig==
AZURE_STORAGE_ACCOUNT_KEY = bqJAz5pYQVGee8dnVhlsqW+xHwinNTjgY2AmojNyB+d4uAotMR20WcO4Op13yB+9dFaXAkkjtIA4+AStHT/IYg== AZURE_STORAGE_ACCOUNT_KEY = bqJAz5pYQVGee8dnVhlsqW+xHwinNTjgY2AmojNyB+d4uAotMR20WcO4Op13yB+9dFaXAkkjtIA4+AStHT/IYg==
AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwtestuks.blob.core.windows.net AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwtestuks.blob.core.windows.net
// New preprod key # New preprod key
# AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwppeuks" AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwppeuks"
# AZURE_STORAGE_ACCOUNT_KEY = B4GRKr+cA9b9mNM/GHFivzhzflJIZltG8bMmooXlYvGYySPAspTTHistAT30sHipnR+hh6dqUc9q+ASttAjPRQ== AZURE_STORAGE_ACCOUNT_KEY = B4GRKr+cA9b9mNM/GHFivzhzflJIZltG8bMmooXlYvGYySPAspTTHistAT30sHipnR+hh6dqUc9q+ASttAjPRQ==
# AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwppeuks.blob.core.windows.net AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwppeuks.blob.core.windows.net
# PROD key # PROD key
@@ -211,59 +142,33 @@ AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwtestuks.blob.core.windows.net
# AZURE_STORAGE_ACCOUNT_KEY = OfV9MFqXcLLPam9GhEdMWadIOwIzhc5hd5TUqzIuQoswFdtV4ybaemjatSv+Kht0Ny1qQKjLplwY+AStUTZJrg== # AZURE_STORAGE_ACCOUNT_KEY = OfV9MFqXcLLPam9GhEdMWadIOwIzhc5hd5TUqzIuQoswFdtV4ybaemjatSv+Kht0Ny1qQKjLplwY+AStUTZJrg==
# AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwproduks.blob.core.windows.net # AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwproduks.blob.core.windows.net
# D365 CNR key
# AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwd365cnruks"
# AZURE_STORAGE_ACCOUNT_KEY = nEwCp+4FuVf/9a4DOyKuQO2yRRV4Ypigg20ch1YaiL09YmEhWMEO5pNLpYtI3WnQCkIqeu1CUqwM+AStCLW01g==
# AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwd365cnruks.blob.core.windows.net
# D365 DEV key
# AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwd365devuks"
# AZURE_STORAGE_ACCOUNT_KEY = XzwQxuZXSwYrVgemDUD2ymTpYTIfWqhypbmEALw1ZEEP0M4D3b3Gh28clSymxwFu7Gu9mhwkW4/V+AStZ6RF8Q==
# AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwd365devuks.blob.core.windows.net
# D365 TEST key
# AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwd365testuks"
# AZURE_STORAGE_ACCOUNT_KEY = 5NdDO9GGlbTFLHFOXZRw8H2C0Ow5bFTvHwUHEbStyzg2mbd1uwHSeBSvM/dkN+HfdwrFzqAkwL5P+AStdO6cig==
# AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwd365testuks.blob.core.windows.net
# D365 PP key
# AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwd365ppeuks"
# AZURE_STORAGE_ACCOUNT_KEY = xQz4FWDnQDE09uPOCj1t7axRiquvZG9vbxL88ywzVsJnTsAgewrHnuAGkxGPBCp2xGE53ffYOme6+AStSr8OoQ==
# AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwd365ppeuks.blob.core.windows.net
# D365 Prod key
# AZURE_STORAGE_ACCOUNT_NAME = "sapltpedwd365produks"
# AZURE_STORAGE_ACCOUNT_KEY = DvKcWhDpFKMFdVXFF2SqDG0sYQ3AkNCmJUBG0cvgzi5NBHS4Ahd2hPAlfA3hGi2EbohUag3vCucK+ASt1IdBhA==
# AZURE_PEDW_STORAGE_ENDPOINT = https://sapltpedwd365produks.blob.core.windows.net
AZURE_PEDW_CONTAINER = "pedwapplications" AZURE_PEDW_CONTAINER = "pedwapplications"
AZURE_PEDW_QUEUE_ENDPOINT = https://$AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net AZURE_PEDW_QUEUE_ENDPOINT = https://$AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net
//gov.notify # gov.notify
//NOTIFY_API_KEY = pedwnextauthkey-90f93710-9dae-423e-aea1-11eccd0dc132-0c9469d9-d671-444d-9e9d-3e5a62001043 # NOTIFY_API_KEY = pedwnextauthkey-90f93710-9dae-423e-aea1-11eccd0dc132-0c9469d9-d671-444d-9e9d-3e5a62001043
NOTIFY_API_KEY = pedwnextauthlivekey-90f93710-9dae-423e-aea1-11eccd0dc132-5c0ed187-754a-4b04-8c99-978e5710c2c1 # NOTIFY_API_KEY = pedwnextauthlivekey-90f93710-9dae-423e-aea1-11eccd0dc132-5c0ed187-754a-4b04-8c99-978e5710c2c1
NOTIFY_API_KEY = pedwnextauthlive01key-90f93710-9dae-423e-aea1-11eccd0dc132-72bfb1e1-c0b7-47cb-9887-3d47a4b11ad4
SHOW_DEBUG = true SHOW_DEBUG = true
// DEV Connection string # DEV Connection string
//NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=4b7568b3-70bd-4591-9dc2-267c0a6501d1;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/;ApplicationId=447d38b5-5d40-4238-8fb3-0ef4741b3db1 NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=4b7568b3-70bd-4591-9dc2-267c0a6501d1;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/;ApplicationId=447d38b5-5d40-4238-8fb3-0ef4741b3db1
APPLICATIONINSIGHTS_CONNECTIONSTRING = InstrumentationKey=7a06e24a-793c-47bc-8987-ce80f180e035;IngestionEndpoint=https://uksouth-1.in.applicationinsights.azure.com/;LiveEndpoint=https://uksouth.livediagnostics.monitor.azure.com/;ApplicationId=9906b6d0-b791-4add-8d53-c827a534e1d4 APPLICATIONINSIGHTS_CONNECTIONSTRING = InstrumentationKey=7a06e24a-793c-47bc-8987-ce80f180e035;IngestionEndpoint=https://uksouth-1.in.applicationinsights.azure.com/;LiveEndpoint=https://uksouth.livediagnostics.monitor.azure.com/;ApplicationId=9906b6d0-b791-4add-8d53-c827a534e1d4
# Test Connection string
// Test Connection string
NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=cc60e8e7-5b30-4c2b-a176-8b96b21b12df;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/;ApplicationId=2a4094be-6fd1-46ab-a67d-5f241692b129 NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=cc60e8e7-5b30-4c2b-a176-8b96b21b12df;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/;ApplicationId=2a4094be-6fd1-46ab-a67d-5f241692b129
// Preprod Connection string # Preprod Connection string
//NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=7370f0f9-834d-4c7a-b3c4-9951fcad5ad2;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/;ApplicationId=04362cb7-6dfc-469e-8274-12243e8be851 # NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=7370f0f9-834d-4c7a-b3c4-9951fcad5ad2;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/;ApplicationId=04362cb7-6dfc-469e-8274-12243e8be851
NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=a41b91bf-f7dc-4f44-bb66-a67df4eee435;IngestionEndpoint=https://uksouth-1.in.applicationinsights.azure.com/;LiveEndpoint=https://uksouth.livediagnostics.monitor.azure.com/;ApplicationId=473d0632-16f1-4065-8984-d6bac62402c0 # NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=a41b91bf-f7dc-4f44-bb66-a67df4eee435;IngestionEndpoint=https://uksouth-1.in.applicationinsights.azure.com/;LiveEndpoint=https://uksouth.livediagnostics.monitor.azure.com/;ApplicationId=473d0632-16f1-4065-8984-d6bac62402c0
// Prod Connection string # Prod Connection string
//NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=61f358c2-8075-4164-b897-17bc6dd31fee;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/;ApplicationId=0c297349-396b-4dc6-8b56-85f5c680adc6 # NEXT_PUBLIC_APP_INSIGHT = InstrumentationKey=61f358c2-8075-4164-b897-17bc6dd31fee;IngestionEndpoint=https://ukwest-0.in.applicationinsights.azure.com/;LiveEndpoint=https://ukwest.livediagnostics.monitor.azure.com/;ApplicationId=0c297349-396b-4dc6-8b56-85f5c680adc6
HIDEERRORLOGS = false HIDEERRORLOGS = false
@@ -272,3 +177,7 @@ SHOWSIPS = true
ALLOWED_IPS=::1,203.0.113.42,198.51.100.17 ALLOWED_IPS=::1,203.0.113.42,198.51.100.17
UPLOAD_BATCH_COUNT = 5 UPLOAD_BATCH_COUNT = 5
NRWDOMAIN = rdbmedia.co.uk
MAP_TARGET = pedw-dev
-34
View File
@@ -1,34 +0,0 @@
{
"extends": "next/core-web-vitals",
"rules": {
"@next/next/no-img-element": "off",
"react/no-unknown-property": "error"
}//,
//...your configuration
// "overrides": [
// //...your overrides
// {
// // Force the setting of a swagger description on each api endpoint
// "files": ["pages/api/**/*.js"],
// "plugins": ["jsdoc"],
// "rules": {
// "jsdoc/no-missing-syntax": [
// "error",
// {
// "contexts": [
// {
// "comment": "JsdocBlock:has(JsdocTag[tag=swagger])",
// "context": "any",
// "message": "@swagger documentation is required on each API. Check this out for syntax info: https://github.com/jellydn/next-swagger-doc"
// }
// ]
// }
// ]
// }
// }
// ]
}
+2
View File
@@ -78,6 +78,8 @@ Minimum required before merge:
- `.clinerules` - `.clinerules`
- `CONTRIBUTING_AI.md` - `CONTRIBUTING_AI.md`
- `context/implementation-governance.md`
- `context/maintainability-adoption-programme.md`
- `context/runbook.md` - `context/runbook.md`
- `context/integration-map.md` - `context/integration-map.md`
- `memory-bank/README.md` - `memory-bank/README.md`
+92 -87
View File
@@ -1,7 +1,7 @@
import { DefaultAzureCredential } from "@azure/identity"; import { DefaultAzureCredential } from "@azure/identity";
import _ from "lodash"; import _ from "lodash";
import { hashAPIPath, consoleLogger } from "."; import { hashAPIPath, consoleLogger } from ".";
import { getDocumentTypeFromFilename } from "../components/utils"; import { getDocumentTypeFromFilename, hasOwn } from "../components/utils";
const { const {
ContainerClient, ContainerClient,
@@ -316,7 +316,7 @@ export const createBlob = async (formContent, containerName, caseref) => {
formContent = JSON.parse(formContent); formContent = JSON.parse(formContent);
let caseID = ""; let caseID = "";
caseID = _.has(formContent, "pinswg_name") caseID = hasOwn(formContent, "pinswg_name")
? formContent.pinswg_name ? formContent.pinswg_name
: caseref; : caseref;
@@ -476,20 +476,19 @@ export const createRepPDFBlob = async (
? await blockBlobClient.uploadData(content) ? await blockBlobClient.uploadData(content)
: await blockBlobClient.uploadStream(content); : await blockBlobClient.uploadStream(content);
let whichLocation = const locationMap = [
repName.indexOf("_IP_") > 0 { key: "_IP_-_Comments_", value: "846040038" }, // most specific first
? "846040005" { key: "_IP_", value: "846040005" },
: repName.indexOf("_Statement_") > 0 { key: "_Statement_", value: "846040002" },
? "846040002" { key: "_Questionnaire_", value: "846040001" },
: repName.indexOf("_Questionnaire_") > 0 { key: "_Comments", value: "846040003" },
? "846040001" { key: "_Impact", value: "846040029" },
: repName.indexOf("_Comments") > 0 { key: "_Consultation_Response_", value: "846040036" }
? "846040003" ];
: repName.indexOf("_Impact") > 0
? "846040029" const whichLocation =
: repName.indexOf("_Consultation_Response_") > 0 locationMap.find((item) => repName.includes(item.key))?.value ||
? "846040036" "846040002";
: "846040002";
const tags = { const tags = {
containerid: containerName, containerid: containerName,
@@ -526,6 +525,31 @@ export const deleteBlob = async (containerName, blobName) => {
return { "deleted": blobName }; return { "deleted": blobName };
}; };
const isSafeDeletionPathSegment = (value) =>
typeof value === "string" &&
value.length > 0 &&
value.length <= 255 &&
value === value.trim() &&
value !== "." &&
value !== ".." &&
!/[\\/\u0000-\u001f\u007f]/.test(value);
const buildDeletionFolderPrefix = (resourcePath, expectedSegmentCount) => {
if (typeof resourcePath !== "string") {
throw new Error("Invalid deletion resource path");
}
const segments = resourcePath.split("/");
if (
segments.length !== expectedSegmentCount ||
!segments.every(isSafeDeletionPathSegment)
) {
throw new Error("Invalid deletion resource path");
}
return segments.join("/") + "/";
};
export const deleteBlobCase = async (containerName, blobName) => { export const deleteBlobCase = async (containerName, blobName) => {
const creds = new DefaultAzureCredential(); const creds = new DefaultAzureCredential();
@@ -539,13 +563,15 @@ export const deleteBlobCase = async (containerName, blobName) => {
//conLog"deleteBlobCase "); //conLog"deleteBlobCase ");
console.log("blob to delete:", blobName); const folderPrefix = buildDeletionFolderPrefix(blobName, 1);
console.log("blob to delete:", folderPrefix);
for await (const blob of containerClient.listBlobsFlat({ for await (const blob of containerClient.listBlobsFlat({
prefix: blobName prefix: folderPrefix
})) { })) {
console.log(" ------ :", blob.name); console.log(" ------ :", blob.name);
containerClient.deleteBlob(blob.name); await containerClient.deleteBlob(blob.name);
} }
//containerClient.deleteBlob(blobName); //containerClient.deleteBlob(blobName);
@@ -567,17 +593,19 @@ export const deleteBlobRep = async (containerName, blobName) => {
const sasUrl = `${STORAGE_PATH}/${containerName}?${containerToken}`; const sasUrl = `${STORAGE_PATH}/${containerName}?${containerToken}`;
const containerClient = new ContainerClient(sasUrl); const containerClient = new ContainerClient(sasUrl);
console.log("blob to delete:", blobName); const folderPrefix = buildDeletionFolderPrefix(blobName, 2);
console.log("blob to delete:", folderPrefix);
for await (const blob of containerClient.listBlobsFlat({ for await (const blob of containerClient.listBlobsFlat({
prefix: blobName prefix: folderPrefix
})) { })) {
console.log("------ :", blob.name); console.log("------ :", blob.name);
const blockBlobClient = containerClient.getBlockBlobClient(blob.name); const blockBlobClient = containerClient.getBlockBlobClient(blob.name);
console.log("=======:", await blockBlobClient.exists()); console.log("=======:", await blockBlobClient.exists());
(await blockBlobClient.exists()) && (await blockBlobClient.exists()) &&
containerClient.deleteBlob(blob.name); (await containerClient.deleteBlob(blob.name));
//containerClient.deleteIfExists(); //containerClient.deleteIfExists();
//containerClient.deleteBlob(blob.name); //containerClient.deleteBlob(blob.name);
@@ -618,71 +646,46 @@ export const uploadFile = async (formContent, containerName, foldername) => {
); );
console.log(data); console.log(data);
let whichLocation = const fieldName = files[prop][0].fieldName;
files[prop][0].fieldName.indexOf("_Statement_of_Case") >
0 || const whichLocation =
files[prop][0].fieldName.indexOf("_-_Statement_of_Case") > [
0 || // 1️⃣ LPA docs (grouped)
files[prop][0].fieldName.indexOf("_-_Application_Form") > {
0 || match: [
files[prop][0].fieldName.indexOf( "_Statement_of_Case",
"_-_Site_Ownership_Certificate" "_-_Statement_of_Case",
) > 0 || "_-_Application_Form",
files[prop][0].fieldName.indexOf("_-_Decision_Notice") > "_-_Site_Ownership_Certificate",
0 || "_-_Decision_Notice",
files[prop][0].fieldName.indexOf("_-_Site_Location_Plan") > "_-_Site_Location_Plan",
0 || "_-_Plans_Drawing_Documents",
files[prop][0].fieldName.indexOf( "_-_Additional_Plans_Drawings_Documents",
"_-_Plans_Drawing_Documents" "_-_Design_and_Access_Statement",
) > 0 || "_-_NSB_LPA_Additional_Documents",
files[prop][0].fieldName.indexOf( "_-_LPA_Correspondence",
"_-_Additional_Plans_Drawings_Documents" "_-_LPA_Original_Permission",
) > 0 || "_-_LPA's_Registration_Letter",
files[prop][0].fieldName.indexOf( "_-_Environmental_Statement",
"_-_Design_and_Access_Statement" "_-_Cost_of_Application",
) > 0 || "_-_Other_Relevant_Material",
files[prop][0].fieldName.indexOf( "_-_S106_Agreement_or_Unilateral_Undertaking"
"_-_NSB_LPA_Additional_Documents" ],
) > 0 || value: "846040000"
files[prop][0].fieldName.indexOf("_-_LPA_Correspondence") > },
0 || { match: ["_IP_-_Comments_"], value: "846040038" },
files[prop][0].fieldName.indexOf( {
"_-_LPA_Original_Permission" match: ["_Consultation_Response_"],
) > 0 || value: "846040036"
files[prop][0].fieldName.indexOf( },
"_-_LPA's_Registration_Letter" { match: ["_Questionnaire_"], value: "846040001" },
) > 0 || { match: ["_Statement_"], value: "846040002" },
files[prop][0].fieldName.indexOf( { match: ["_Comments_"], value: "846040003" },
+"_-_Environmental_Statement" { match: ["_Impact_"], value: "846040001" },
) > 0 || { match: ["_IP_"], value: "846040005" }
files[prop][0].fieldName.indexOf("_-_Cost_of_Application") > ].find((rule) =>
0 || rule.match.some((key) => fieldName.includes(key))
files[prop][0].fieldName.indexOf( )?.value || "846040000";
"_-_Other_Relevant_Material"
) > 0 ||
files[prop][0].fieldName.indexOf(
"_-_S106_Agreement_or_Unilateral_Undertaking" > 0
)
? "846040000"
: files[prop][0].fieldName.indexOf("_IP_") > 0
? "846040005"
: files[prop][0].fieldName.indexOf("_Statement_") > 0
? "846040002"
: files[prop][0].fieldName.indexOf(
"_Questionnaire_"
) > 0
? "846040001"
: files[prop][0].fieldName.indexOf("_Comments_") >
0
? "846040003"
: files[prop][0].fieldName.indexOf("_Impact_") >
0
? "846040001"
: files[prop][0].fieldName.indexOf(
"_Consultation_Response_"
) > 0
? "846040036"
: "846040000";
const tags = { const tags = {
containerid: containerName, containerid: containerName,
@@ -803,6 +806,8 @@ export const uploadSingleFile = async (
/_Statement_of_Case|_-_Statement_of_Case|_-_Application_Form|_-_Site_Ownership_Certificate|_-_Decision_Notice|_-_Site_Location_Plan|_-_Plans_Drawing_Documents|_-_Additional_Plans_Drawings_Documents|_-_Design_and_Access_Statement|_-_NSB_LPA_Additional_Documents|_-_LPA_Correspondence|_-_LPA_Original_Permission|_-_LPA's_Registration_Letter|_-_Environmental_Statement|_-_Cost_of_Application|_-_Other_Relevant_Material|_-_S106_Agreement_or_Unilateral_Undertaking/, /_Statement_of_Case|_-_Statement_of_Case|_-_Application_Form|_-_Site_Ownership_Certificate|_-_Decision_Notice|_-_Site_Location_Plan|_-_Plans_Drawing_Documents|_-_Additional_Plans_Drawings_Documents|_-_Design_and_Access_Statement|_-_NSB_LPA_Additional_Documents|_-_LPA_Correspondence|_-_LPA_Original_Permission|_-_LPA's_Registration_Letter|_-_Environmental_Statement|_-_Cost_of_Application|_-_Other_Relevant_Material|_-_S106_Agreement_or_Unilateral_Undertaking/,
value: "846040000" value: "846040000"
}, },
{ pattern: /_IP_-_Comments_/, value: "846040038" },
{ pattern: /_IP_/, value: "846040005" }, { pattern: /_IP_/, value: "846040005" },
{ pattern: /_Statement_/, value: "846040002" }, { pattern: /_Statement_/, value: "846040002" },
{ pattern: /_Questionnaire_/, value: "846040001" }, { pattern: /_Questionnaire_/, value: "846040001" },
+2 -2
View File
@@ -1,8 +1,8 @@
import { getJson, requestJson } from "./endpointClient"; import { getJson, requestJson } from "./endpointClient";
import { getSignedJson, postSignedJson } from "./signedRequestClient"; import { getSignedJson, postSignedJson } from "./signedRequestClient";
export const getFileJson = (url) => { export const getFileJson = (url, config) => {
return getJson(url); return getJson(url, config);
}; };
export const getSignedFileJson = async (queryUrl) => { export const getSignedFileJson = async (queryUrl) => {
+1 -1
View File
@@ -5,7 +5,7 @@ export const BASE_URL =
? window.apiRoot ? window.apiRoot
: process.env.API_ROOT || `http://localhost:${port}`; : process.env.API_ROOT || `http://localhost:${port}`;
export const API_PATH = "/api/data/v8.2/"; export const API_PATH = "/api/data/v9.2/";
export const WEBAPI_URL = export const WEBAPI_URL =
process.env.RELAY_ROOT || process.env.RELAY_ROOT ||
+26 -47
View File
@@ -1,4 +1,4 @@
import _ from "lodash"; import { hasOwn } from "../../components/utils";
const MASK = "[REDACTED]"; const MASK = "[REDACTED]";
@@ -50,44 +50,38 @@ export const consoleLogger = (err) => {
redactSensitive(err) + redactSensitive(err) +
"\n\n/////////////////////////////////////////////////\n" "\n\n/////////////////////////////////////////////////\n"
); );
var errStr =
"\n\n/////////////////////////////////////////////////\nServer Error " + const errStr =
"\n" + "\n\n/////////////////////////////////////////////////\nServer Error\n" +
(_.has(err, "name") ? "Name: " + err.name + "\n" : "") + (hasOwn(err, "name") ? `Name: ${err.name}\n` : "") +
(_.has(err, "code") ? "Code: " + err.code + "\n" : "") + (hasOwn(err, "code") ? `Code: ${err.code}\n` : "") +
(_.has(err, "query") ? "Query: " + err.query + "\n" : "") + (hasOwn(err, "query") ? `Query: ${err.query}\n` : "") +
(_.has(err, "message") ? "Message: " + err.message + "\n" : "") + (hasOwn(err, "message") ? `Message: ${err.message}\n` : "") +
(_.has(err, "request.url") (err?.request?.url ? `request.url: ${err.request.url}\n` : "") +
? "request.url: " + err.request.url + "\n" (err?.response?.status ? `Status: ${err.response.status}\n` : "") +
(err?.response?.statusText
? `StatusText: ${err.response.statusText}\n`
: "") + : "") +
(_.has(err, "response.status") ? "Status: " + err.code + "\n" : "") + (err?.response?.request?.socket?.remoteAddress
(_.has(err, "response.statusText") ? `Request IP: ${err.response.request.socket.remoteAddress}\n`
? "\nStatusText: " + err.response.status + "\n"
: "") + : "") +
(_.has(err, "response.request.socket.remoteAddress") (err?.response?.data?.error?.message
? "\nRequest IP: " + ? `Message: ${redactSensitive(err.response.data.error.message)}\n`
err.response.request.socket.remoteAddress +
"\n"
: "") + : "") +
(_.has(err, "response.data.error.message") (err?.response?.config?.url
? "\nMessage: " + ? `Request URL: ${redactSensitive(err.response.config.url)}\n`
redactSensitive(err.response.data.error.message) +
"\n"
: "") + : "") +
(_.has(err, "response.config.url") (err?.response?.headers?.date
? "\nRequest URL: " + redactSensitive(err.config.url) + "\n" ? `Request Time: ${err.response.headers.date}\n`
: "") + : "") +
(_.has(err, "response.headers.date") (err?.config?.url
? "\nRequest Time: " + err.response.headers.date + "\n" ? `Axios config url: ${redactSensitive(err.config.url)}\n`
: "") + : "") +
(_.has(err, "config.url") (err?.message
? "\nAxios config url: " + redactSensitive(err.config.url) + "\n" ? `Axios message: ${redactSensitive(err.message)}\n`
: "") + : "") +
(_.has(err, "config.url") (err?.config?.data
? "\nAxios message url: " + redactSensitive(err.message) + "\n" ? `Request payload: ${redactSensitive(err.config.data)}\n`
: "") +
(_.has(err, "config.data")
? "\nRequest payload: " + redactSensitive(err.config.data) + "\n"
: "") + : "") +
"\n/////////////////////////////////////////////////\n"; "\n/////////////////////////////////////////////////\n";
@@ -104,18 +98,3 @@ export const conLog = (err) => {
console.log(errStr); console.log(errStr);
return errStr; return errStr;
}; };
export const logInfo = (event, data = {}) => {
try {
console.info(
JSON.stringify({
level: "info",
event,
data: redactSensitive(data),
ts: new Date().toISOString()
})
);
} catch (_error) {
console.info(`[info] ${event}`);
}
};
+5 -5
View File
@@ -28,13 +28,13 @@ export const getSelectQuery = (appealTypeName) => {
return "&$select=pinswg_detailedeiascreening,modifiedon,_pinswg_appellant_value,pinswg_name,pinswg_siteaddresscounty,pinswg_siteaddressline1,pinswg_siteaddressline2,pinswg_siteaddresspostcode,pinswg_siteaddresstown,pinswg_casedecisiondate,pinswg_dateeventrequested,pinswg_decision,pinswg_finalcommentsduedate,pinswg_otherpartiesstatement,pinswg_procedure,pinswg_proofsofevidencewrittenstatementsofeviden,pinswg_questionnaireduedate,pinswg_relevantauthorityname,pinswg_startdate,statuscode,pinswg_startdateoftheevent,pinswg_typeofevent,pinswg_statementduedate"; return "&$select=pinswg_detailedeiascreening,modifiedon,_pinswg_appellant_value,pinswg_name,pinswg_siteaddresscounty,pinswg_siteaddressline1,pinswg_siteaddressline2,pinswg_siteaddresspostcode,pinswg_siteaddresstown,pinswg_casedecisiondate,pinswg_dateeventrequested,pinswg_decision,pinswg_finalcommentsduedate,pinswg_otherpartiesstatement,pinswg_procedure,pinswg_proofsofevidencewrittenstatementsofeviden,pinswg_questionnaireduedate,pinswg_relevantauthorityname,pinswg_startdate,statuscode,pinswg_startdateoftheevent,pinswg_typeofevent,pinswg_statementduedate";
break; break;
case "pinswg_dnses": case "pinswg_dnses":
return "&$select=pinswg_eiarequired,pinswg_anticipatedgridreferenceeastingtext,pinswg_anticipatedgridreferencenorthingtext,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_addresscounty,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_choiceofprocedure,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofdecision,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_decision,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectdescription,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_suspensionenddates,pinswg_suspensionstartdates,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,pinswg_casestage,_pinswg_dnsids_value,pinswg_startdateofevent,pinswg_typeofevent"; return "&$select=pinswg_eiarequired,pinswg_anticipatedgridreferenceeastingtext,pinswg_anticipatedgridreferencenorthingtext,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_addresscounty,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_choiceofprocedure,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofdecision,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_decision,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectdescription,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_suspensionenddates,pinswg_suspensionstartdates,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,_pinswg_dnsids_value,pinswg_startdateofevent,pinswg_typeofevent";
break; break;
case "pinswg_electricityacts": case "pinswg_electricityacts":
return "&$select=pinswg_eiarequired,modifiedon,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_decision,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,pinswg_startdateofevent,pinswg_typeofevent"; return "&$select=pinswg_eiarequired,modifiedon,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_decision,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,pinswg_startdateofevent,pinswg_typeofevent";
break; break;
case "pinswg_harbourrevisionorders": case "pinswg_harbourrevisionorders":
return "&$select=pinswg_eiarequired,pinswg_anticipatedgridreferenceeastingtext,pinswg_anticipatedgridreferencenorthingtext,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_addresscounty,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_choiceofprocedure,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofdecision,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_decision,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectdiscription,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_suspensionenddates,pinswg_suspensionstartdate,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,pinswg_casestage,pinswg_startdateofevent,pinswg_typeofevent"; return "&$select=pinswg_eiarequired,pinswg_anticipatedgridreferenceeastingtext,pinswg_anticipatedgridreferencenorthingtext,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_addresscounty,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_choiceofprocedure,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofdecision,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_decision,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectdiscription,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_suspensionenddates,pinswg_suspensionstartdate,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,pinswg_startdateofevent,pinswg_typeofevent";
break; break;
case "pinswg_householderappealhases": case "pinswg_householderappealhases":
return "&$select=pinswg_eiarequired,modifiedon,_pinswg_appellant_value,pinswg_name,pinswg_siteaddressline1,pinswg_siteaddressline2,pinswg_siteaddresspostcode,pinswg_siteaddresstown,_pinswg_associatedlpa_value,pinswg_casedecisiondate,pinswg_dateeventrequested,pinswg_decision,pinswg_finalcommentsduedate,pinswg_otherpartiesstmt,pinswg_procedure,pinswg_questionnaireduedate,pinswg_startdate,pinswg_statementduedate,statuscode"; return "&$select=pinswg_eiarequired,modifiedon,_pinswg_appellant_value,pinswg_name,pinswg_siteaddressline1,pinswg_siteaddressline2,pinswg_siteaddresspostcode,pinswg_siteaddresstown,_pinswg_associatedlpa_value,pinswg_casedecisiondate,pinswg_dateeventrequested,pinswg_decision,pinswg_finalcommentsduedate,pinswg_otherpartiesstmt,pinswg_procedure,pinswg_questionnaireduedate,pinswg_startdate,pinswg_statementduedate,statuscode";
@@ -79,10 +79,10 @@ export const getSelectQuery = (appealTypeName) => {
return "&$select=modifiedon,_pinswg_appellant_value,pinswg_name,pinswg_siteaddressline1,pinswg_siteaddressline2,pinswg_siteaddresspostcode,pinswg_siteaddresstown,_pinswg_associatedlpa_value,statuscode"; return "&$select=modifiedon,_pinswg_appellant_value,pinswg_name,pinswg_siteaddressline1,pinswg_siteaddressline2,pinswg_siteaddresspostcode,pinswg_siteaddresstown,_pinswg_associatedlpa_value,statuscode";
break; break;
case "pinswg_transportandworkacts": case "pinswg_transportandworkacts":
return "&$select=pinswg_eiarequired,pinswg_anticipatedgridreferenceeastingtext,pinswg_anticipatedgridreferencenorthingtext,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_addresscounty,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_choiceofprocedure,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofdecision,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectdescription,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_suspensionenddates,pinswg_suspensionstartdate,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,pinswg_casestage,pinswg_startdateofevent,pinswg_typeofevent"; return "&$select=pinswg_eiarequired,pinswg_anticipatedgridreferenceeastingtext,pinswg_anticipatedgridreferencenorthingtext,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_addresscounty,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_choiceofprocedure,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofdecision,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectdescription,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_suspensionenddates,pinswg_suspensionstartdate,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,pinswg_startdateofevent,pinswg_typeofevent";
case "pinswg_sipses": case "pinswg_sipses":
// return "&$select=pinswg_anticipatedgridreferenceeastingtext,pinswg_anticipatedgridreferencenorthingtext,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_addresscounty,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_choiceofprocedure,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofdecision,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_decision,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectdescription,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_suspensionenddates,pinswg_suspensionstartdates,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,pinswg_casestage,_pinswg_dnsids_value,pinswg_startdateofevent,pinswg_typeofevent"; // return "&$select=pinswg_anticipatedgridreferenceeastingtext,pinswg_anticipatedgridreferencenorthingtext,_pinswg_appellant_value,pinswg_name,pinswg_addressline1,pinswg_addressline2,pinswg_postcode,pinswg_addresstown,_pinswg_associatedlpa_value,pinswg_addresscounty,pinswg_applicationacceptedasvalid,pinswg_applicationrejectedasinvalid,pinswg_choiceofprocedure,pinswg_confirmrequesttovaryapplication,pinswg_dateeventrequested,pinswg_dateofdecision,pinswg_dateofrequesttovarytheapplication,pinswg_dateofsubmissionofapplication,pinswg_dateprojectpublishedonwebsite,pinswg_deadlineforsubmissionofapplication,pinswg_decision,pinswg_endofrepresentationperiod,pinswg_inspectorreportsubmittedtowelshgovernment,pinswg_procedureconfirmed,pinswg_projectdescription,pinswg_projectlocation,pinswg_recommendation,pinswg_rejectrequesttovaryapplication,pinswg_reportdueby,pinswg_suspensiondates,pinswg_suspensionenddates,pinswg_suspensionstartdates,pinswg_validnoticeofintentiontosubmitanapplicati,pinswg_webaddress,pinswg_withdrawndate,pinswg_writtenacceptanceofnotification,statuscode,_pinswg_dnsids_value,pinswg_startdateofevent,pinswg_typeofevent";
return "&$select=_pinswg_projecttype_value,pinswg_eiarequired,pinswg_anticipatedgridrefeasting,pinswg_anticipatedgridrefnorthing,_pinswg_appellant_value,pinswg_name,_pinswg_associatedlpa_value,pinswg_choiceofprocedure,pinswg_decision,pinswg_projectdescription,pinswg_projectlocation,pinswg_recommendation,statuscode,pinswg_casestage,_pinswg_sipscase_value,pinswg_writtenacceptanceofnotification,pinswg_validnoticeofintentiontosubmit,pinswg_deadlineforsubmissionofapplication,pinswg_screeningstartdate,pinswg_eiatargetdate,pinswg_targetextended,pinswg_directionissueddate,pinswg_eiarequired,pinswg_scopingstartdate,pinswg_scopingtargetdate,pinswg_scopingtargetextended,pinswg_scopingoutcomeissueddate,pinswg_essubmitted,pinswg_deemedmarinelicenseappliedfor,pinswg_validationdeadlineextension,pinswg_casesuspensionstartdate,pinswg_casesuspensionenddate,pinswg_consultationopen,pinswg_consultationclose,pinswg_reportissuedtowelshministers,pinswg_decisionissuedtoapplicant,pinswg_decisionoutcome,pinswg_redetermination,pinswg_redeterminationconsultationdeadline"; return "&$select=pinswg_casedeadline,pinswg_sipseiarequired,pinswg_anticipatedgridrefeasting,pinswg_anticipatedgridrefnorthing,_pinswg_appellant_value,pinswg_name,_pinswg_associatedlpa_value,pinswg_choiceofprocedure,pinswg_decision,pinswg_projectdescription,pinswg_projectlocation,pinswg_recommendation,statuscode,_pinswg_sipscase_value,pinswg_writtenacceptanceofnotification,pinswg_validnoticeofintentiontosubmit,pinswg_deadlineforsubmissionofapplication,pinswg_screeningstartdate,pinswg_eiatargetdate,pinswg_targetextended,pinswg_directionissueddate,pinswg_scopingstartdate,pinswg_scopingtargetdate,pinswg_scopingtargetextended,pinswg_scopingoutcomeissueddate,pinswg_essubmitted,pinswg_deemedmarinelicenseappliedfor,pinswg_validationdeadlineextension,pinswg_consultationopen,pinswg_consultationclose,pinswg_reportissuedtowelshministers,pinswg_decisionissuedtoapplicant,pinswg_decisionoutcome,pinswg_redetermination,pinswg_redeterminationconsultationdeadline,pinswg_reportdeadline,pinswg_casesubmissiondate,pinswg_preexaminationmeetingneeded,pinswg_consultaionpublicitydeadline,pinswg_endofexaminationstartofreporting,pinswg_compulsoryacquisitionvariationsubmitted,pinswg_compulsoryacquisitionvariationaccepted,pinswg_schemeorderamendmentrequestaccepted,pinswg_schemeorderamendmentrequestsubmitted";
break; break;
default: default:
return ""; return "";
-25
View File
@@ -11,31 +11,6 @@ export const getPersonalAccount = (contactid) => {
}); });
}; };
export const getLogin = (emailAddress, pwd) => {
return getJson(
"/api/endpoint/getlogin_api?emailAddress=" +
emailAddress +
"&pwd=" +
pwd
).catch((error) => {
consoleLogger(error);
});
};
export const updatePassword = (contactId, newpassword) => {
var queryUrl = "/api/endpoint/updateaccount_api?contactId=" + contactId;
var data = { "pinswg_custom_password": newpassword };
var config = {
method: "post",
url: queryUrl,
data: data
};
return requestJson(config).catch((error) => {
consoleLogger(error);
});
};
export const updateAccount = async (contactId, updateBody, ssr) => { export const updateAccount = async (contactId, updateBody, ssr) => {
var queryUrl = var queryUrl =
(ssr ? BASE_URL : "") + (ssr ? BASE_URL : "") +
-4
View File
@@ -1,7 +1,5 @@
import { import {
getPersonalAccount, getPersonalAccount,
getLogin,
updatePassword,
updateAccount, updateAccount,
createAccount, createAccount,
getEmailAccountCheck, getEmailAccountCheck,
@@ -12,8 +10,6 @@ import {
export { export {
getPersonalAccount, getPersonalAccount,
getLogin,
updatePassword,
updateAccount, updateAccount,
createAccount, createAccount,
getEmailAccountCheck, getEmailAccountCheck,
+20
View File
@@ -65,3 +65,23 @@ export const getNewDocumentsPaged = async (
return logAndReturnResponse(error); return logAndReturnResponse(error);
} }
}; };
export const getStatusByAppeal = async () => {
try {
return await getJson(
BASE_URL + "/api/admin/getStatusCountsByAppeal_api"
);
} catch (error) {
return logAndReturnResponse(error);
}
};
export const getStatusByAppealLPA = async () => {
try {
return await getJson(
BASE_URL + "/api/admin/getStatusCountsByAppealAndLPA_api"
);
} catch (error) {
return logAndReturnResponse(error);
}
};
+10 -2
View File
@@ -1,7 +1,15 @@
import { import {
getNewAppeals, getNewAppeals,
getNewAppealsPage, getNewAppealsPage,
getNewDocumentsPaged getNewDocumentsPaged,
getStatusByAppeal,
getStatusByAppealLPA
} from "./adminDirectService"; } from "./adminDirectService";
export { getNewAppeals, getNewAppealsPage, getNewDocumentsPaged }; export {
getNewAppeals,
getNewAppealsPage,
getNewDocumentsPaged,
getStatusByAppeal,
getStatusByAppealLPA
};
+13 -34
View File
@@ -5,7 +5,7 @@ import { getJson, requestJson } from "../clients/endpointClient";
import { buildFileQuery, withBaseUrl } from "../clients/fileRouteBuilder"; import { buildFileQuery, withBaseUrl } from "../clients/fileRouteBuilder";
export const getCaseMessage = (searchString) => { export const getCaseMessage = (searchString) => {
const route = buildFileQuery("/api/endpoint/getcasemessage_api", { const route = buildFileQuery("/api/cases/get-case-message", {
id: searchString id: searchString
}); });
@@ -13,7 +13,7 @@ export const getCaseMessage = (searchString) => {
}; };
export const getIncidentbyID = (searchString) => { export const getIncidentbyID = (searchString) => {
const route = buildFileQuery("/api/endpoint/getincidentbyid_api", { const route = buildFileQuery("/api/cases/get-incident-by-id", {
searchString searchString
}); });
@@ -37,7 +37,7 @@ export const getPartSavedAppeal = (searchString) => {
}; };
export const getSIPSEvents = async (caseid) => { export const getSIPSEvents = async (caseid) => {
const route = buildFileQuery("/api/endpoint/getsipsevents_api", { const route = buildFileQuery("/api/cases/get-sips-events", {
caseid caseid
}); });
@@ -45,7 +45,7 @@ export const getSIPSEvents = async (caseid) => {
}; };
export const getSIPSMedia = async (caseid) => { export const getSIPSMedia = async (caseid) => {
const route = buildFileQuery("/api/endpoint/getsipsmedia_api", { const route = buildFileQuery("/api/cases/get-sips-media", {
caseid caseid
}); });
@@ -76,35 +76,6 @@ export const getAppealID = (
}); });
}; };
export const createNewCase = (
appealTypeId,
lpaID,
contactid,
createBody,
containerName
) => {
appealTypeId = parseInt(appealTypeId);
var data = createBody;
var queryUrl = buildFileQuery("/api/endpoint/createcase_api", {
appealTypeId,
lpaID,
contactid,
containername: containerName
});
var config = {
method: "post",
url: withBaseUrl(BASE_URL, queryUrl),
data: data
};
return requestJson(config).catch((error) => {
consoleLogger(error);
});
};
export const createNewCaseBlob = ( export const createNewCaseBlob = (
appealTypeId, appealTypeId,
lpaID, lpaID,
@@ -251,7 +222,7 @@ export const getAppealPDFDocument = async (incidentid) => {
}; };
export const getPortalModuleDetails = async (appealType, caseReference) => { export const getPortalModuleDetails = async (appealType, caseReference) => {
const route = buildFileQuery("/api/endpoint/getportalmoduledetails_api", { const route = buildFileQuery("/api/myportal/get-portal-module-details", {
appealType, appealType,
caseReference: encodeURI(caseReference) caseReference: encodeURI(caseReference)
}); });
@@ -274,3 +245,11 @@ export const getPortalModuleDetailsProxy = (appealType, caseReference) => {
consoleLogger(error); consoleLogger(error);
}); });
}; };
export const getCaseStatus = async (appealType, caseReference) => {
const route = buildFileQuery("/api/endpoint/getStatusCounts_api", {});
return getJson(withBaseUrl(BASE_URL, route)).catch((error) => {
consoleLogger(error);
});
};
+4 -4
View File
@@ -4,7 +4,6 @@ import {
getSIPSEvents, getSIPSEvents,
getSIPSMedia, getSIPSMedia,
getAppealID, getAppealID,
createNewCase,
createNewCaseBlob, createNewCaseBlob,
updateCase, updateCase,
updateCaseBlob, updateCaseBlob,
@@ -16,7 +15,8 @@ import {
getPartSavedAppeal, getPartSavedAppeal,
getIsPublishedbyID, getIsPublishedbyID,
getPortalModuleDetails, getPortalModuleDetails,
getPortalModuleDetailsProxy getPortalModuleDetailsProxy,
getCaseStatus
} from "./caseDirectService"; } from "./caseDirectService";
export { export {
@@ -25,7 +25,6 @@ export {
getSIPSEvents, getSIPSEvents,
getSIPSMedia, getSIPSMedia,
getAppealID, getAppealID,
createNewCase,
createNewCaseBlob, createNewCaseBlob,
updateCase, updateCase,
updateCaseBlob, updateCaseBlob,
@@ -37,5 +36,6 @@ export {
getPartSavedAppeal, getPartSavedAppeal,
getIsPublishedbyID, getIsPublishedbyID,
getPortalModuleDetails, getPortalModuleDetails,
getPortalModuleDetailsProxy getPortalModuleDetailsProxy,
getCaseStatus
}; };
+39 -4
View File
@@ -28,13 +28,48 @@ export const getAwaitingSubmissionFromBlob = (containerName) => {
}); });
}; };
export const getRepsFromBlob = (containerName) => { export const getRepsFromBlob = (containerName, config) => {
const route = buildFileQuery("/api/file/getrepsblob", { const route = buildFileQuery("/api/file/getrepsblob", {
container: containerName container: containerName
}); });
const url = withBaseUrl(BASE_URL, appendHashSuffix(route, hashAPIPath));
const hasForwardedCookie =
typeof config?.headers?.Cookie === "string" &&
config.headers.Cookie.length > 0;
if (hasForwardedCookie) {
let trustedDestination = false;
try {
const destination = new URL(url);
const expectedOrigin = new URL(process.env.NEXTAUTH_URL);
trustedDestination =
destination.origin === expectedOrigin.origin &&
["http:", "https:"].includes(destination.protocol) &&
!destination.username &&
!destination.password;
} catch {
trustedDestination = false;
}
if (!trustedDestination) {
return Promise.reject(
new Error("Untrusted representation request destination")
);
}
}
return getFileJson( return getFileJson(
withBaseUrl(BASE_URL, appendHashSuffix(route, hashAPIPath)) url,
hasForwardedCookie
? {
...config,
maxRedirects: 0
}
: config
).catch((error) => { ).catch((error) => {
consoleLogger(error); consoleLogger(error);
}); });
@@ -83,7 +118,7 @@ export const deleteAwaitingSubmissionsFromBlob = (
casefolderID casefolderID
}); });
return getSignedFileJson(queryUrl).catch((error) => { return postSignedFileJson(queryUrl).catch((error) => {
consoleLogger(error); consoleLogger(error);
}); });
}; };
@@ -99,7 +134,7 @@ export const deleteMyRepresentationsFromBlob = (
repfile repfile
}); });
return getSignedFileJson(queryUrl).catch((error) => { return postSignedFileJson(queryUrl).catch((error) => {
consoleLogger(error); consoleLogger(error);
}); });
}; };
+41
View File
@@ -25,3 +25,44 @@ export const sendEmail = async (
throw error; throw error;
} }
}; };
export const sendContactUsConfirmation = async (formValues, language) => {
const mailData = {
"contactEmail": formValues.contactEmail,
"contactSubject": formValues.contactSubject,
"contactbody": formValues.contactbody,
"typeOfContact": formValues.typeOfContact,
"language": language
};
try {
return await requestJson({
method: "post",
url: "/api/email/contactus-confirmation",
data: mailData
});
} catch (error) {
consoleLogger(error);
throw error;
}
};
export const sendContactUsPETNotification = async (formValues) => {
const mailData = {
"contactEmail": formValues.contactEmail,
"contactSubject": formValues.contactSubject,
"contactbody": formValues.contactbody,
"typeOfContact": formValues.typeOfContact
};
try {
return await requestJson({
method: "post",
url: "/api/email/contactus-pet-notification",
data: mailData
});
} catch (error) {
consoleLogger(error);
throw error;
}
};
+12 -26
View File
@@ -12,7 +12,7 @@ import {
} from "../clients/fileRouteBuilder"; } from "../clients/fileRouteBuilder";
export const getMyCases = (loggedInUserId) => { export const getMyCases = (loggedInUserId) => {
const route = buildFileQuery("/api/endpoint/getmycases_api", { const route = buildFileQuery("/api/myportal/get-my-cases", {
loggedInUserId loggedInUserId
}); });
@@ -32,7 +32,7 @@ export const getMyInvolvements = async (loggedInUserId) => {
}; };
export const getMyLPACases = (lpaid) => { export const getMyLPACases = (lpaid) => {
const route = buildFileQuery("/api/endpoint/getmylpacases_api", { const route = buildFileQuery("/api/myportal/get-my-lpa-cases", {
lpaid lpaid
}); });
@@ -85,7 +85,7 @@ export const getRepresentationsProxy = (incidentID) => {
}; };
export const getWatchedCases = (loggedInUserId) => { export const getWatchedCases = (loggedInUserId) => {
const route = buildFileQuery("/api/endpoint/getwatchedcases_api", { const route = buildFileQuery("/api/subscriptions/get-watched-cases", {
loggedInUserId loggedInUserId
}); });
@@ -95,7 +95,7 @@ export const getWatchedCases = (loggedInUserId) => {
}; };
export const getWatchedCasesProxy = (loggedInUserId) => { export const getWatchedCasesProxy = (loggedInUserId) => {
const route = buildFileQuery("/api/endpoint/getwatchedcasesproxy_api", { const route = buildFileQuery("/api/subscriptions/get-watched-cases-proxy", {
loggedInUserId loggedInUserId
}); });
@@ -129,7 +129,7 @@ export const getAwaitingSubmission = (loggedInUserId) => {
export const createWatchedCases = async (formValues) => { export const createWatchedCases = async (formValues) => {
var data = formValues; var data = formValues;
var queryUrl = buildFileQuery("/api/endpoint/createwatchedcases_api"); var queryUrl = buildFileQuery("/api/subscriptions/create-watched-case");
var config = { var config = {
method: "post", method: "post",
@@ -144,24 +144,6 @@ export const createWatchedCases = async (formValues) => {
} }
}; };
export const deleteMyRepresentations = (myRepresentationsID) => {
var queryUrl = buildFileQuery("/api/endpoint/deletemyrepresentations_api", {
myRepresentationsID
});
return deleteSignedJson(queryUrl, {
headers: {
"OData-MaxVersion": "4.0",
"OData-Version": "4.0",
"Accept": "application/json;odata.metadata=none",
"Prefer": 'odata.include-annotations="*",return=representation',
"Content-Type": "application/json"
}
}).catch((error) => {
consoleLogger(error);
});
};
export const deleteAwaitingSubmissions = (incidentID) => { export const deleteAwaitingSubmissions = (incidentID) => {
var queryUrl = buildFileQuery( var queryUrl = buildFileQuery(
"/api/endpoint/deleteawaitingsubmissions_api", "/api/endpoint/deleteawaitingsubmissions_api",
@@ -181,7 +163,7 @@ export const deleteAwaitingSubmissions = (incidentID) => {
}; };
export const deleteWatchedCases = async (watchedCaseID) => { export const deleteWatchedCases = async (watchedCaseID) => {
var queryUrl = buildFileQuery("/api/endpoint/deletewatchedcases_api", { var queryUrl = buildFileQuery("/api/subscriptions/delete-watched-case", {
watchedCaseID watchedCaseID
}); });
@@ -274,10 +256,14 @@ export const sendRepCompleteMessage = async (
}); });
}; };
export const setRepInvolvment = async (caseid, contactid) => { export const setRepInvolvment = async (caseid, contactid, involvement) => {
var queryUrl = buildFileQuery("/api/file/createrepinvolvement_api"); var queryUrl = buildFileQuery("/api/file/createrepinvolvement_api");
var data = { "incidentid": caseid, "contactid": contactid }; var data = {
"incidentid": caseid,
"contactid": contactid,
"involvement": involvement
};
var config = { var config = {
method: "post", method: "post",
url: queryUrl, url: queryUrl,
-2
View File
@@ -12,7 +12,6 @@ import {
getAwaitingSubmissionProxy, getAwaitingSubmissionProxy,
createWatchedCases, createWatchedCases,
deleteWatchedCases, deleteWatchedCases,
deleteMyRepresentations,
deleteAwaitingSubmissions, deleteAwaitingSubmissions,
sendCaseCompleteMessage, sendCaseCompleteMessage,
sendCaseCompleteMessageProxy, sendCaseCompleteMessageProxy,
@@ -35,7 +34,6 @@ export {
getAwaitingSubmissionProxy, getAwaitingSubmissionProxy,
createWatchedCases, createWatchedCases,
deleteWatchedCases, deleteWatchedCases,
deleteMyRepresentations,
deleteAwaitingSubmissions, deleteAwaitingSubmissions,
sendCaseCompleteMessage, sendCaseCompleteMessage,
sendCaseCompleteMessageProxy, sendCaseCompleteMessageProxy,
+9 -9
View File
@@ -51,7 +51,7 @@ export const getBasicSearchPaged = (
showNumberOfRecords showNumberOfRecords
) => { ) => {
return getJson( return getJson(
"/api/endpoint/getbasicsearchpaged_api?searchString=" + "/api/search/basic-paged?searchString=" +
searchString + searchString +
"&pageNumber=" + "&pageNumber=" +
pageNumber + pageNumber +
@@ -103,7 +103,7 @@ export const getBasicDNSSearchPaged = (
export const getAdvancedSearch = (searchString) => { export const getAdvancedSearch = (searchString) => {
return getJson( return getJson(
BASE_URL + BASE_URL +
"/api/endpoint/getadvancedsearch_api?searchstring=" + "/api/search/advanced?searchstring=" +
JSON.stringify(searchString) JSON.stringify(searchString)
).catch(logAndReturnEmptyValueErrorResponse); ).catch(logAndReturnEmptyValueErrorResponse);
}; };
@@ -116,7 +116,7 @@ export const getAdvancedSearchPaged = (
showNumberOfRecords showNumberOfRecords
) => { ) => {
return getJson( return getJson(
"/api/endpoint/getadvancedsearchpaged_api?searchstring=" + "/api/search/advanced-paged?searchstring=" +
JSON.stringify(searchString) + JSON.stringify(searchString) +
"&pageNumber=" + "&pageNumber=" +
pageNumber + pageNumber +
@@ -186,12 +186,12 @@ export const getBasicSearchDetailsPaged = async (
}) })
.join(" or "); .join(" or ");
const url = `/api/endpoint/getbasicsearchdetailspaged_api?appealTypeName=${appealTypeName}&primaryIdAttribute=${primaryIdAttribute}&incidentID=${encodeURIComponent( const groupedUrl = `/api/search/basic-details-paged?appealTypeName=${appealTypeName}&primaryIdAttribute=${primaryIdAttribute}&incidentID=${encodeURIComponent(
filter filter
)}`; )}`;
try { try {
const data = await getJson(url); const data = await getJson(groupedUrl);
return data.value || []; return data.value || [];
} catch (error) { } catch (error) {
consoleLogger(error); consoleLogger(error);
@@ -201,7 +201,7 @@ export const getBasicSearchDetailsPaged = async (
export const getSearchDocumentDetails = (incidentID) => { export const getSearchDocumentDetails = (incidentID) => {
return getJson( return getJson(
"/api/endpoint/getsearchdocumentdetails_api?incidentid=" + incidentID "/api/documents/get-search-document-details?incidentid=" + incidentID
).catch((error) => { ).catch((error) => {
consoleLogger(error); consoleLogger(error);
throw error; throw error;
@@ -210,7 +210,7 @@ export const getSearchDocumentDetails = (incidentID) => {
export const getSearchDocumentTypes = (incidentID) => { export const getSearchDocumentTypes = (incidentID) => {
return getJson( return getJson(
"/api/endpoint/getsearchdocumentTypes_api?incidentid=" + incidentID "/api/documents/get-search-document-types?incidentid=" + incidentID
).catch((error) => { ).catch((error) => {
consoleLogger(error); consoleLogger(error);
}); });
@@ -225,7 +225,7 @@ export const getSearchDocumentDetailsPaged = (
documentType documentType
) => { ) => {
return getJson( return getJson(
"/api/endpoint/getsearchdocumentdetailspaged_api?incidentid=" + "/api/documents/get-search-document-details-paged?incidentid=" +
incidentID + incidentID +
"&pageNumber=" + "&pageNumber=" +
pageNumber + pageNumber +
@@ -244,7 +244,7 @@ export const getSearchDocumentDetailsPaged = (
export const getLinkedCases = (parentIncidentid) => { export const getLinkedCases = (parentIncidentid) => {
return getJson( return getJson(
"/api/endpoint/getlinkedcases_api?parentincidentid=" + parentIncidentid "/api/cases/get-linked-cases?parentincidentid=" + parentIncidentid
).catch((error) => { ).catch((error) => {
consoleLogger(error); consoleLogger(error);
}); });
+104
View File
@@ -0,0 +1,104 @@
import useTranslation from "next-translate/useTranslation";
import { parseCookies, setCookie } from "../lib/cookies";
import { useEffect, useRef, useState } from "react";
const COOKIE_NAME = "pedwAiPolicyNoticeHidden";
const COOKIE_DAYS = 7;
export default function AIPolicyNotice() {
let { t } = useTranslation();
const [hasCheckedCookie, setHasCheckedCookie] = useState(false);
const [isOpen, setIsOpen] = useState(false);
const dismissButtonRef = useRef(null);
useEffect(() => {
const cookies = parseCookies();
const isHidden = cookies[COOKIE_NAME] === "true";
setIsOpen(!isHidden);
setHasCheckedCookie(true);
}, []);
useEffect(() => {
if (isOpen && dismissButtonRef.current) {
dismissButtonRef.current.focus();
}
}, [isOpen]);
const dismissNotice = () => {
const now = new Date();
const expDate = new Date(now);
expDate.setDate(now.getDate() + COOKIE_DAYS);
setCookie(null, COOKIE_NAME, "true", {
path: "/",
expires: expDate
});
setIsOpen(false);
};
if (!hasCheckedCookie || !isOpen) {
return null;
}
return (
<div
className="modal aiModal fade show"
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
padding: "1rem"
}}
aria-hidden={false}
>
<div className="modal-dialog" style={{ margin: 0 }}>
<div
className="modal-content govuk-!-padding-6"
role="dialog"
aria-modal="true"
aria-labelledby="ai-policy-notice-title"
>
<h2
id="ai-policy-notice-title"
className="govuk-heading-m govuk-!-margin-bottom-3"
>
{t("home:ai-policy-notice-title")}
</h2>
<p className="govuk-body">
{t("home:ai-policy-notice-paragraph-one")}
</p>
<p className="govuk-body govuk-!-margin-bottom-4">
{t("home:ai-policy-notice-paragraph-two")}{" "}
<a
target="_blank"
rel="noopener noreferrer"
href={t(
"home:ai-policy-notice-paragraph-two-a-link"
)}
>
{t("home:ai-policy-notice-paragraph-two-a-label")}
</a>{" "}
{t("home:ai-policy-notice-paragraph-two-b")}
</p>
<button
ref={dismissButtonRef}
type="button"
className="govuk-button govuk-!-margin-bottom-0"
data-module="govuk-button"
onClick={dismissNotice}
>
{t("home:ai-policy-notice-dismiss-button")}
</button>
</div>
</div>
<div
className="modal-backdrop fade show"
style={{ opacity: 0.2 }}
></div>
</div>
);
}
-184
View File
@@ -1,184 +0,0 @@
import useTranslation from "next-translate/useTranslation";
import Link from "next/link";
import { useRouter } from "next/router";
import React, { useState } from "react";
import { connect } from "react-redux";
import { Field, formValueSelector, reduxForm } from "redux-form";
import { updatePassword } from "../../actions/services/accountService";
const RenderTextfield = ({
id,
className,
rows,
datafieldname,
name,
label,
input,
type,
errorMsg,
meta: { touched, error },
...custom
}) => {
return (
<>
<div
className={
touched && error
? "govuk-form-group govuk-form-group--error"
: "govuk-form-group "
}
>
<label className="govuk-label " htmlFor={id} id={id + "_label"}>
{label}
</label>
{touched && error && (
<span id={id + "-error"} className="govuk-error-message">
<span className="govuk-visually-hidden">Error:</span>{" "}
{touched &&
((error && (
<span>{errorMsg ? errorMsg : error}</span>
)) ||
(warning && <span>{warning}</span>))}
</span>
)}
<input
{...input}
className={className}
name={name}
id={id}
type={type}
/>
</div>
</>
);
};
const ChangePassword = (props) => {
const {
footerLinks,
pages,
handleSubmit,
value,
setPasswordUpdated,
passwordUpdated
} = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
let errorsobj = {};
const onHandleSubmit = (values) => {
let contactid = props.props.accountDetails.loggedinUserId;
let updateBody = props.props.form.changepasswordForm.values.newpassword;
console.log(contactid, updateBody);
updatePassword(contactid, updateBody);
setPasswordUpdated(true);
};
const required = (value) => (value ? undefined : "Is required");
const passwordsMustMatch = (value, allValues) =>
value !== allValues.newpassword ? "Passwords do not match" : undefined;
const minLength = (min) => (value) =>
value && value.length < min
? `Must be at least ${min} characters`
: undefined;
const [hasErrors, setHasErrors] = useState("");
return (
<>
{passwordUpdated != true ? (
<form onSubmit={handleSubmit(onHandleSubmit)}>
<fieldset className="govuk-fieldset">
<Field
name="newpassword"
id="newpassword"
component={RenderTextfield}
type="password"
className="govuk-input govuk-input--width-20"
validate={[required, minLength(6)]}
label="New password"
/>
<Field
name="confirmpassword"
id="confirmpassword"
component={RenderTextfield}
type="password"
className="govuk-input govuk-input--width-20"
validate={[required, passwordsMustMatch]}
label="Confirm new password"
/>
</fieldset>
<div className="govuk-button-group">
<button
type="submit"
className="govuk-button"
data-module="govuk-button"
>
Continue
</button>
<Link
href={
"/myportal?q=" +
props.accountDetails.loggedinUserId
}
className="govuk-link"
>
Cancel
</Link>
</div>
</form>
) : (
<>
<p className="govuk-body">
<Link
href={
"/myportal?q=" +
props.accountDetails.loggedinUserId
}
className="govuk-link"
>
Go to My Portal
</Link>
</p>
</>
)}
</>
);
};
const mapStateToProps = (state) => {
return {
search: state.search,
searchResultsObj: state.searchResultsObj,
formData: state.formData,
appealType: state.appealType,
accountDetails: state.accountDetails
//form: state.form,
};
};
const mapDispatchToProps = (dispatch) => {
return {
setCurrentSection: (currentSection) => {
dispatch(setCurrentSection(currentSection));
}
};
};
const selector = formValueSelector("changepasswordForm"); // <-- same as form name
export default connect(
mapStateToProps,
mapDispatchToProps
)(
reduxForm({
form: "changepasswordForm",
destroyOnUnmount: false
})(ChangePassword)
);
+9 -9
View File
@@ -140,12 +140,12 @@ const RenderPickList = ({
input, input,
optionsArr, optionsArr,
meta: { touched, error }, meta: { touched, error },
errorMsg, errorMsg
}) => { }) => {
let { t, lang } = useTranslation(); let { t, lang } = useTranslation();
optionsArr = [ optionsArr = [
t("account:account-preferred-language-english") + ":846040001", t("account:account-preferred-language-english") + ":846040001",
t("account:account-preferred-language-welsh") + ":846040000", t("account:account-preferred-language-welsh") + ":846040000"
]; ];
return ( return (
<> <>
@@ -202,7 +202,7 @@ let PersonalDetails = (props) => {
load, load,
pristine, pristine,
reset, reset,
submitting, submitting
} = props; } = props;
let { t, lang } = useTranslation(); let { t, lang } = useTranslation();
@@ -324,8 +324,8 @@ let PersonalDetails = (props) => {
label={t("account:account-telephone-label")} label={t("account:account-telephone-label")}
/> />
<Field <Field
name="company" name="pinswg_companyname"
id="company" id="pinswg_companyname"
component={RenderTextfield} component={RenderTextfield}
type="text" type="text"
className="govuk-input govuk-input--width-20" className="govuk-input govuk-input--width-20"
@@ -444,7 +444,7 @@ const mapStateToProps = (state) => {
searchResultsObj: state.searchResultsObj, searchResultsObj: state.searchResultsObj,
formData: state.formData, formData: state.formData,
appealType: state.appealType, appealType: state.appealType,
accountDetails: state.accountDetails, accountDetails: state.accountDetails
//form: state.form, //form: state.form,
}; };
}; };
@@ -453,7 +453,7 @@ const mapDispatchToProps = (dispatch) => {
return { return {
setCurrentSection: (currentSection) => { setCurrentSection: (currentSection) => {
dispatch(setCurrentSection(currentSection)); dispatch(setCurrentSection(currentSection));
}, }
}; };
}; };
@@ -484,12 +484,12 @@ const selector = formValueSelector("personalDetailsForm"); // <-- same as form n
PersonalDetails = reduxForm({ PersonalDetails = reduxForm({
form: "personalDetailsForm", form: "personalDetailsForm",
enableReinitialize: true, // this is needed!! enableReinitialize: true, // this is needed!!
destroyOnUnmount: false, destroyOnUnmount: false
})(PersonalDetails); })(PersonalDetails);
// You have to connect() to any reducers that you wish to connect to yourself // You have to connect() to any reducers that you wish to connect to yourself
PersonalDetails = connect((state) => ({ PersonalDetails = connect((state) => ({
initialValues: state.accountDetails.accountDetails, // pull initial values from account reducer initialValues: state.accountDetails.accountDetails // pull initial values from account reducer
}))(PersonalDetails); }))(PersonalDetails);
export default PersonalDetails; export default PersonalDetails;
+4 -4
View File
@@ -11,7 +11,7 @@ const BuildCheckPersonalDetails = (props) => {
handleSubmit, handleSubmit,
value, value,
setPersonalDetailsComplete, setPersonalDetailsComplete,
setAccountUpdatedComplete, setAccountUpdatedComplete
} = props; } = props;
let { t, lang } = useTranslation(); let { t, lang } = useTranslation();
@@ -142,7 +142,7 @@ const BuildCheckPersonalDetails = (props) => {
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{ {
props.props.props.form.personalDetailsForm.values props.props.props.form.personalDetailsForm.values
.company .pinswg_companyname
} }
</dd> </dd>
<dd className="govuk-summary-list__actions"> <dd className="govuk-summary-list__actions">
@@ -354,7 +354,7 @@ const mapStateToProps = (state) => {
searchResultsObj: state.searchResultsObj, searchResultsObj: state.searchResultsObj,
formData: state.formData, formData: state.formData,
appealType: state.appealType, appealType: state.appealType,
accountDetails: state.accountDetails, accountDetails: state.accountDetails
//form: state.form, //form: state.form,
}; };
}; };
@@ -363,7 +363,7 @@ const mapDispatchToProps = (dispatch) => {
return { return {
setCurrentSection: (currentSection) => { setCurrentSection: (currentSection) => {
dispatch(setCurrentSection(currentSection)); dispatch(setCurrentSection(currentSection));
}, }
}; };
}; };
@@ -4,7 +4,7 @@ import { useRouter } from "next/router";
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { updateAccount } from "../../actions/services/accountService"; import { updateAccount } from "../../actions/services/accountService";
import { setCookie } from "nookies"; import { setCookie } from "../../lib/cookies";
const PersonalDetailsComplete = (props) => { const PersonalDetailsComplete = (props) => {
const { const {
@@ -50,7 +50,7 @@ const PersonalDetailsComplete = (props) => {
} }
doUpdate(); doUpdate();
}, [loggedinUserId, formValues, prefLang]); }, [loggedinUserId, formValues, prefLang, userLang]);
return ( return (
<> <>
+16 -10
View File
@@ -66,7 +66,7 @@ const RegisterForm = (props) => {
setRegisterFormComplete, setRegisterFormComplete,
setAccountCreatedComplete, setAccountCreatedComplete,
loggedInUserEmail, loggedInUserEmail,
emailaddress1, emailaddress1
} = props; } = props;
let { t, lang } = useTranslation(); let { t, lang } = useTranslation();
@@ -92,11 +92,6 @@ const RegisterForm = (props) => {
? "Invalid phone number" ? "Invalid phone number"
: undefined; : undefined;
const passwordsMatch = (value, allValues) =>
value !== allValues.pinswg_custom_password
? "Passwords don't match"
: undefined;
const minLength = (min) => (value) => const minLength = (min) => (value) =>
value && value.length < min value && value.length < min
? `Must be ${min} characters or more` ? `Must be ${min} characters or more`
@@ -199,6 +194,17 @@ const RegisterForm = (props) => {
"account:register-new-account-phone-label" "account:register-new-account-phone-label"
)} )}
/> />
<Field
name="company"
id="company"
component={RenderTextfield}
type="text"
className="govuk-input govuk-input--width-20"
validate={[required]}
label={t(
"account:register-new-account-company-label"
)}
/>
</fieldset> </fieldset>
<fieldset className="govuk-fieldset"> <fieldset className="govuk-fieldset">
<legend className="govuk-fieldset__legend govuk-fieldset__legend--m"> <legend className="govuk-fieldset__legend govuk-fieldset__legend--m">
@@ -312,8 +318,8 @@ const mapStateToProps = (state, props) => {
appealType: state.appealType, appealType: state.appealType,
//form: state.form, //form: state.form,
initialValues: { initialValues: {
emailaddress1: props.loggedInUserEmail, emailaddress1: props.loggedInUserEmail
}, }
}; };
}; };
@@ -321,7 +327,7 @@ const mapDispatchToProps = (dispatch) => {
return { return {
setCurrentSection: (currentSection) => { setCurrentSection: (currentSection) => {
dispatch(setCurrentSection(currentSection)); dispatch(setCurrentSection(currentSection));
}, }
}; };
}; };
@@ -334,6 +340,6 @@ export default connect(
reduxForm({ reduxForm({
form: "accountRegisterForm", form: "accountRegisterForm",
enableReinitialize: true, enableReinitialize: true,
destroyOnUnmount: false, destroyOnUnmount: false
})(RegisterForm) })(RegisterForm)
); );
+3 -2
View File
@@ -3,6 +3,7 @@ import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import CRMError from "./crmError"; import CRMError from "./crmError";
import SearchResults from "./search/addresssearchresults"; import SearchResults from "./search/addresssearchresults";
import { hasOwn } from "./utils";
export default function Search(props) { export default function Search(props) {
const { const {
@@ -12,14 +13,14 @@ export default function Search(props) {
myportal, myportal,
watchedCases, watchedCases,
isLinkedCase, isLinkedCase,
showLoginCheck, showLoginCheck
} = props; } = props;
let { t } = useTranslation(); let { t } = useTranslation();
const router = useRouter(); const router = useRouter();
const { locale } = router; const { locale } = router;
var hasError = _.has(searchResultsObj.searchResultsObj, "errorCode") var hasError = hasOwn(searchResultsObj.searchResultsObj, "errorCode")
? true ? true
: false; : false;
+52 -66
View File
@@ -6,15 +6,17 @@ import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import PaginationControl from "../../../components/search/pagination"; import PaginationControl from "../../../components/search/pagination";
import { connect } from "react-redux"; import { connect } from "react-redux";
import transLookup from "../../../data/lookuptranslations.json";
import { import {
setSearchResults, setSearchResults,
setSearchDetails setSearchDetails
} from "../../../store/searchOutput/action"; } from "../../../store/searchOutput/action";
import { getDetailsProxy, getSearchDetailsPaged } from "../../utils"; import { getDetailsProxy, getSearchDetailsPaged, hasOwn } from "../../utils";
import { getAdvancedSearchPaged } from "../../../actions/services/searchService"; import { getAdvancedSearchPaged } from "../../../actions/services/searchService";
import { getNewAppealsPage } from "../../../actions/services/adminService"; import { getNewAppealsPage } from "../../../actions/services/adminService";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import { import {
setCurrentPage, setCurrentPage,
setCurrentReference setCurrentReference
@@ -28,9 +30,15 @@ function AppealsTab(props) {
const [fieldSortState, setfieldSortState] = useState("desc"); const [fieldSortState, setfieldSortState] = useState("desc");
const [loginToWatch, setLoginToWatch] = useState("true"); const [loginToWatch, setLoginToWatch] = useState("true");
const searchDetailsObj = props.searchResultsObj.searchDetailsObj || {}; const {
const resultsArr = props.searchResultsObj.searchResultsObj.value || []; searchResultsObj: searchResultsState,
const searchResultsObj = props.searchResultsObj.searchResultsObj; setSearchResults,
setSearchDetails
} = props;
const searchDetailsObj = searchResultsState.searchDetailsObj || {};
const resultsArr = searchResultsState.searchResultsObj.value || [];
const searchResultsObj = searchResultsState.searchResultsObj;
const { t } = useTranslation(); const { t } = useTranslation();
const router = useRouter(); const router = useRouter();
@@ -75,20 +83,14 @@ function AppealsTab(props) {
fieldSort, fieldSort,
selectedOption selectedOption
).then((data) => { ).then((data) => {
props.setSearchResults(data); // ✅ use props, not import setSearchResults(data);
return getSearchDetailsPaged(data).then((details) => { return getSearchDetailsPaged(data).then((details) => {
props.setSearchDetails(details); // ✅ use props, not import setSearchDetails(details);
setShowSpinnerState(false); setShowSpinnerState(false);
}); });
}); });
}, },
[ [selectedOption, setSearchDetails, setSearchResults]
advancedSearch,
searchString,
selectedOption,
props.setSearchDetails,
props.setSearchResults
]
); );
useEffect(() => { useEffect(() => {
@@ -255,6 +257,8 @@ function AppealsTab(props) {
className="govuk-link--no-underline" className="govuk-link--no-underline"
onClick={() => { onClick={() => {
setCurrentReference({ setCurrentReference({
"statuscode":
item.statuscode,
"ticketnumber": "ticketnumber":
item.ticketnumber, item.ticketnumber,
"currentReference": "currentReference":
@@ -304,7 +308,7 @@ function AppealsTab(props) {
)} )}
: :
</span> </span>
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_projectlocation" "pinswg_projectlocation"
) )
@@ -323,7 +327,7 @@ function AppealsTab(props) {
)[0] )[0]
: "" : ""
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline1" "pinswg_siteaddressline1"
) )
@@ -333,52 +337,52 @@ function AppealsTab(props) {
{/* {detailsObj.pinswg_siteaddressline1 != {/* {detailsObj.pinswg_siteaddressline1 !=
null && <br />} */} null && <br />} */}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline1" "pinswg_siteaddressline1"
) && ) &&
detailsObj.pinswg_siteaddressline1 != detailsObj.pinswg_siteaddressline1 !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline1" "pinswg_siteaddressline1"
) )
? detailsObj.pinswg_siteaddressline2 ? detailsObj.pinswg_siteaddressline2
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline2" "pinswg_siteaddressline2"
) && ) &&
detailsObj.pinswg_siteaddressline2 != detailsObj.pinswg_siteaddressline2 !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresstown" "pinswg_siteaddresstown"
) )
? detailsObj.pinswg_siteaddresstown ? detailsObj.pinswg_siteaddresstown
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresstown" "pinswg_siteaddresstown"
) && ) &&
detailsObj.pinswg_siteaddresstown != detailsObj.pinswg_siteaddresstown !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresscounty" "pinswg_siteaddresscounty"
) )
? detailsObj.pinswg_siteaddresscounty ? detailsObj.pinswg_siteaddresscounty
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresscounty" "pinswg_siteaddresscounty"
) && ) &&
detailsObj.pinswg_siteaddresscounty != detailsObj.pinswg_siteaddresscounty !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresspostcode" "pinswg_siteaddresspostcode"
) )
@@ -396,7 +400,7 @@ function AppealsTab(props) {
? item.pinswg_appellantfirstname + ? item.pinswg_appellantfirstname +
" " + " " +
item.pinswg_appellantlastname item.pinswg_appellantlastname
: _.has(detailsObj, [ : hasOwn(detailsObj, [
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue" "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue"
]) ])
? detailsObj[ ? detailsObj[
@@ -411,23 +415,17 @@ function AppealsTab(props) {
)} )}
: :
</span> </span>
{_.has(item, [ {hasOwn(item, [
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" "_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
]) ])
? router.locale == "cy" ? resolveCrmDisplayValue({
? jsonpath({ value: item[
path:
'$..[?(@ && @.value=="' +
item[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true
})
: item[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" "_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || "N/A" ],
locale: router.locale,
translations: transLookup,
fallbackValue: "N/A"
})
: ""} : ""}
</dd> </dd>
<dd className="govuk-summary-list__value govuk-!-font-size-16"> <dd className="govuk-summary-list__value govuk-!-font-size-16">
@@ -437,20 +435,14 @@ function AppealsTab(props) {
)} )}
: :
</span> </span>
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: item[
path: "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
item[ locale: router.locale,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: "N/A"
'")].value_cy', })}
json: transLookup,
eval: true
})
: item[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] || "N/A"}
</dd> </dd>
<dd className="govuk-summary-list__value govuk-!-font-size-16"> <dd className="govuk-summary-list__value govuk-!-font-size-16">
<span className="results-visually-hidden"> <span className="results-visually-hidden">
@@ -460,20 +452,14 @@ function AppealsTab(props) {
: :
</span> </span>
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: item[
path: "statuscode@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
item[ locale: router.locale,
"statuscode@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: "N/A"
'")].value_cy', })}
json: transLookup,
eval: true
})
: item[
"statuscode@OData.Community.Display.V1.FormattedValue"
] || "N/A"}
</dd> </dd>
<dd className="govuk-summary-list__value govuk-!-font-size-16"> <dd className="govuk-summary-list__value govuk-!-font-size-16">
{item[ {item[
+273
View File
@@ -0,0 +1,273 @@
import { useMemo, useState } from "react";
import Link from "next/link";
export default function AppealStatusDashboard({ statusObj = [] }) {
const [openSections, setOpenSections] = useState({});
const sortedAppeals = useMemo(
() =>
[...statusObj].sort(
(a, b) => (b.caseCount || 0) - (a.caseCount || 0)
),
[statusObj]
);
const percentageOf = (value, total) =>
total ? `${(((value || 0) / total) * 100).toFixed(1)}%` : "0.0%";
const totalCases = sortedAppeals.reduce(
(sum, appeal) => sum + (appeal.caseCount || 0),
0
);
const largestAppeal = sortedAppeals[0];
const allStatuses = sortedAppeals.flatMap((appeal) =>
(appeal.statuses || []).map((status) => ({
...status,
appealType: appeal.value
}))
);
const statusTotals = allStatuses.reduce((acc, status) => {
if (!acc[status.statuscode]) {
acc[status.statuscode] = {
value: status.value,
statuscode: status.statuscode,
caseCount: 0
};
}
acc[status.statuscode].caseCount += status.caseCount || 0;
return acc;
}, {});
const mostCommonStatus = Object.values(statusTotals).sort(
(a, b) => b.caseCount - a.caseCount
)[0];
const maxAppealCount = largestAppeal?.caseCount || 1;
const allExpanded =
sortedAppeals.length > 0 &&
sortedAppeals.every((_, index) => openSections[index]);
const toggleSection = (index) => {
setOpenSections((current) => ({
...current,
[index]: !current[index]
}));
};
const showAll = () => {
const allOpen = {};
sortedAppeals.forEach((_, index) => {
allOpen[index] = true;
});
setOpenSections(allOpen);
};
const hideAll = () => {
setOpenSections({});
};
return (
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h1>Appeal case status dashboard</h1>
<div className="govuk-grid-row">
<DashboardCard title="Total cases" value={totalCases} />
<DashboardCard
title="Appeal types"
value={sortedAppeals.length}
/>
<DashboardCard
title="Largest appeal type"
value={largestAppeal?.caseCount || 0}
caption={largestAppeal?.value}
/>
<DashboardCard
title="Most common status"
value={mostCommonStatus?.caseCount || 0}
caption={mostCommonStatus?.value}
/>
</div>
<section className="govuk-!-margin-top-8">
<h2 className="govuk-heading-m">
Case counts and stage breakdown by appeal type
</h2>
<p className="govuk-body-s">
Select an appeal type row to show the case stage
breakdown.
</p>
<div className="govuk-accordion__controls">
<button
type="button"
className="govuk-accordion__show-all"
onClick={allExpanded ? hideAll : showAll}
>
<span className="govuk-accordion__show-all-text">
{allExpanded
? "Hide all sections"
: "Show all sections"}
</span>
</button>
</div>
<div
className="govuk-accordion appeal-stage-chart"
id="appeals-with-status-accordion"
>
{sortedAppeals.map((appeal, index) => {
const isOpen = !!openSections[index];
const barWidth =
((appeal.caseCount || 0) / maxAppealCount) *
100;
const sortedStatuses = [...(appeal.statuses || [])]
.filter((status) => (status.caseCount || 0) > 0)
.sort(
(a, b) =>
(b.caseCount || 0) - (a.caseCount || 0)
);
return (
<div
className={
isOpen
? "govuk-accordion__section govuk-accordion__section--expanded appeal-stage-chart__accordion-section"
: "govuk-accordion__section appeal-stage-chart__accordion-section"
}
key={appeal.appealType || index}
>
<div className="govuk-accordion__section-header">
<h2 className="govuk-accordion__section-heading">
<button
type="button"
className="govuk-accordion__section-button appeal-stage-chart__button"
id={`appeal-status-heading-${index}`}
aria-expanded={isOpen}
aria-controls={`appeal-status-content-${index}`}
onClick={() =>
toggleSection(index)
}
>
<span className="appeal-stage-chart__row">
<span className="appeal-stage-chart__label">
{appeal.value} (
{percentageOf(
appeal.caseCount,
totalCases
)}
)
</span>
<span className="appeal-stage-chart__bar-wrapper">
<span
className="appeal-stage-chart__bar"
style={{
width: `${barWidth}%`
}}
aria-hidden="true"
>
{sortedStatuses.map(
(
status,
statusIndex
) => (
<span
key={`${status.statuscode}-${statusIndex}`}
className={`appeal-stage-chart__segment appeal-stage-chart__segment--${
statusIndex %
6
}`}
style={{
width: `${
((status.caseCount ||
0) /
(appeal.caseCount ||
1)) *
100
}%`
}}
title={`${status.value}: ${status.caseCount}`}
/>
)
)}
</span>
<span className="appeal-stage-chart__count">
{appeal.caseCount ||
0}{" "}
cases
</span>
</span>
</span>
</button>
</h2>
</div>
<div
id={`appeal-status-content-${index}`}
className="govuk-accordion__section-content"
aria-labelledby={`appeal-status-heading-${index}`}
hidden={!isOpen}
>
<dl className="govuk-summary-list">
{sortedStatuses.map((status) => (
<div
className="govuk-summary-list__row"
key={status.statuscode}
>
<dt className="govuk-summary-list__key">
<Link
target="_blank"
href={`/advancedsearchresults?apt=${appeal.appealType}&statuscode=${status.statuscode}`}
>
{status.value}
</Link>
</dt>
<dd className="govuk-summary-list__value">
{status.caseCount || 0}{" "}
cases (
{percentageOf(
status.caseCount,
appeal.caseCount
)}{" "}
of this appeal type)
</dd>
</div>
))}
</dl>
</div>
</div>
);
})}
</div>
</section>
</div>
</div>
);
}
function DashboardCard({ title, value, caption }) {
return (
<div className="govuk-grid-column-one-quarter">
<div className="dashboard-card">
<p className="govuk-body-s dashboard-card__title">{title}</p>
<p className="govuk-heading-l dashboard-card__value">{value}</p>
{caption && (
<p className="govuk-body-s dashboard-card__caption">
{caption}
</p>
)}
</div>
</div>
);
}
@@ -0,0 +1,571 @@
import { useMemo, useState } from "react";
import Link from "next/link";
export default function AppealLpaStatusDashboard({ statusObj = [] }) {
const [openAppeals, setOpenAppeals] = useState({});
const [openLpaSections, setOpenLpaSections] = useState({});
const [openAppealLpas, setOpenAppealLpas] = useState({});
const [openLpaAppeals, setOpenLpaAppeals] = useState({});
const percentageOf = (value, total) =>
total ? `${(((value || 0) / total) * 100).toFixed(1)}%` : "0.0%";
const totalCases = useMemo(
() =>
statusObj.reduce((total, item) => total + (item.caseCount || 0), 0),
[statusObj]
);
const groupedAppeals = useMemo(() => {
const grouped = statusObj.reduce((acc, item) => {
const appealKey = item.appealType;
if (!acc[appealKey]) {
acc[appealKey] = {
appealType: item.appealType,
appealTypeName: item.appealTypeName,
caseCount: 0,
lpas: {}
};
}
acc[appealKey].caseCount += item.caseCount || 0;
const lpaKey = item.lpaId || "unknown-lpa";
if (!acc[appealKey].lpas[lpaKey]) {
acc[appealKey].lpas[lpaKey] = {
lpaId: item.lpaId,
lpaName: item.lpaName || "Unknown LPA",
caseCount: 0,
statuses: []
};
}
acc[appealKey].lpas[lpaKey].caseCount += item.caseCount || 0;
acc[appealKey].lpas[lpaKey].statuses.push({
statuscode: item.statuscode,
status: item.status,
caseCount: item.caseCount || 0
});
return acc;
}, {});
return Object.values(grouped)
.map((appeal) => ({
...appeal,
lpas: Object.values(appeal.lpas)
.map((lpa) => ({
...lpa,
statuses: lpa.statuses.sort(
(a, b) => (b.caseCount || 0) - (a.caseCount || 0)
)
}))
.sort((a, b) => (b.caseCount || 0) - (a.caseCount || 0))
}))
.sort((a, b) => (b.caseCount || 0) - (a.caseCount || 0));
}, [statusObj]);
const groupedLpas = useMemo(() => {
const grouped = statusObj.reduce((acc, item) => {
const lpaKey = item.lpaId || "unknown-lpa";
if (!acc[lpaKey]) {
acc[lpaKey] = {
lpaId: item.lpaId,
lpaName: item.lpaName || "Unknown LPA",
caseCount: 0,
appeals: {}
};
}
acc[lpaKey].caseCount += item.caseCount || 0;
const appealKey = item.appealType;
if (!acc[lpaKey].appeals[appealKey]) {
acc[lpaKey].appeals[appealKey] = {
appealType: item.appealType,
appealTypeName: item.appealTypeName,
caseCount: 0,
statuses: []
};
}
acc[lpaKey].appeals[appealKey].caseCount += item.caseCount || 0;
acc[lpaKey].appeals[appealKey].statuses.push({
statuscode: item.statuscode,
status: item.status,
caseCount: item.caseCount || 0
});
return acc;
}, {});
return Object.values(grouped)
.map((lpa) => ({
...lpa,
appeals: Object.values(lpa.appeals)
.map((appeal) => ({
...appeal,
statuses: appeal.statuses.sort(
(a, b) => (b.caseCount || 0) - (a.caseCount || 0)
)
}))
.sort((a, b) => (b.caseCount || 0) - (a.caseCount || 0))
}))
.sort((a, b) => (b.caseCount || 0) - (a.caseCount || 0));
}, [statusObj]);
const toggleAppeal = (appealType) => {
setOpenAppeals((current) => ({
...current,
[appealType]: !current[appealType]
}));
};
const toggleLpaSection = (lpaId) => {
setOpenLpaSections((current) => ({
...current,
[lpaId]: !current[lpaId]
}));
};
const toggleAppealLpa = (key) => {
setOpenAppealLpas((current) => ({
...current,
[key]: !current[key]
}));
};
const toggleLpaAppeal = (key) => {
setOpenLpaAppeals((current) => ({
...current,
[key]: !current[key]
}));
};
const sortedAppeals = useMemo(
() => [...statusObj].sort((a, b) => (b.lpaId || 0) - (a.lpaId || 0)),
[statusObj]
);
const allStatuses = sortedAppeals.flatMap((appeal) =>
(appeal.statuses || []).map((status) => ({
...status,
lpaId: appeal.lpaId,
lpaName: appeal.lpaName
}))
);
const statusTotals = allStatuses.reduce((acc, status) => {
if (!acc[status.statuscode]) {
acc[status.statuscode] = {
value: status.value,
statuscode: status.statuscode,
caseCount: 0
};
}
acc[status.statuscode].caseCount += status.caseCount || 0;
return acc;
}, {});
const largestAppeal = groupedLpas[0];
const mostCommonStatus = Object.values(groupedAppeals).sort(
(a, b) => b.caseCount - a.caseCount
)[0];
const maxAppealCount = largestAppeal?.caseCount || 1;
const maxGroupedAppealCount = groupedAppeals[0]?.caseCount || 1;
const allAppealsExpanded =
groupedAppeals.length > 0 &&
groupedAppeals.every((appeal) => openAppeals[appeal.appealType]);
const allLpasExpanded =
groupedLpas.length > 0 &&
groupedLpas.every((lpa) => openLpaSections[lpa.lpaId]);
const showAllAppeals = () => {
const allOpen = {};
groupedAppeals.forEach((appeal) => {
allOpen[appeal.appealType] = true;
});
setOpenAppeals(allOpen);
};
const showAllLpas = () => {
const allOpen = {};
groupedLpas.forEach((lpa) => {
allOpen[lpa.lpaId] = true;
});
setOpenLpaSections(allOpen);
};
const hideAllAppeals = () => {
setOpenAppeals({});
setOpenAppealLpas({});
};
const hideAllLpas = () => {
setOpenLpaSections({});
setOpenLpaAppeals({});
};
return (
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h1 className="">LPA Appeal case status dashboard</h1>
<div className="govuk-grid-row">
<DashboardCard title="Total cases" value={totalCases} />
<DashboardCard title="LPAs" value={groupedLpas.length} />
<DashboardCard
title="Largest number of appeals"
value={largestAppeal?.caseCount || 0}
caption={largestAppeal?.lpaName}
/>
<DashboardCard
title="Most common appeal"
value={mostCommonStatus?.caseCount || 0}
caption={mostCommonStatus?.appealTypeName}
/>
</div>
</div>
<section className="govuk-!-margin-top-8">
<h2 className="govuk-heading-m">
Appeal types and case stages by LPA
</h2>
<div className="govuk-accordion__controls">
<button
type="button"
className="govuk-accordion__show-all"
onClick={allLpasExpanded ? hideAllLpas : showAllLpas}
>
<span className="govuk-accordion__show-all-text">
{allLpasExpanded
? "Hide all sections"
: "Show all sections"}
</span>
</button>
</div>
<div
className="govuk-accordion"
id="lpa-appeal-status-accordion"
>
{groupedLpas.map((lpa) => {
const lpaOpen = !!openLpaSections[lpa.lpaId];
const width =
((lpa.caseCount || 0) / maxAppealCount) * 100;
return (
<div
className={
lpaOpen
? "govuk-accordion__section govuk-accordion__section--expanded"
: "govuk-accordion__section"
}
key={lpa.lpaId}
>
<div className="govuk-accordion__section-header">
<h3 className="govuk-accordion__section-heading">
<button
type="button"
className="govuk-accordion__section-button"
aria-expanded={lpaOpen}
onClick={() =>
toggleLpaSection(lpa.lpaId)
}
>
<div className="appeal-count-chart__row">
<div className="appeal-count-chart__label">
{lpa.lpaName} (
{percentageOf(
lpa.caseCount,
totalCases
)}
)
</div>
<div className="appeal-count-chart__bar-wrapper">
<span
className="appeal-count-chart__bar"
style={{
width: `${width}%`
}}
/>
<span className="appeal-count-chart__count">
{lpa.caseCount}
</span>
</div>
</div>
</button>
</h3>
</div>
<div
className="govuk-accordion__section-content"
hidden={!lpaOpen}
>
{lpa.appeals.map((appeal) => {
const key = `${lpa.lpaId}-${appeal.appealType}`;
const appealOpen =
!!openLpaAppeals[key];
return (
<div
className="lpa-status-block"
key={key}
>
<button
type="button"
className="lpa-status-block__button"
aria-expanded={appealOpen}
onClick={() =>
toggleLpaAppeal(key)
}
>
<span className="govuk-body-m">
{appeal.appealTypeName}
</span>
<span className="govuk-body-m">
{appeal.caseCount} cases
(
{percentageOf(
appeal.caseCount,
lpa.caseCount
)}
)
</span>
</button>
<div hidden={!appealOpen}>
<dl className="govuk-summary-list govuk-!-margin-bottom-4">
{appeal.statuses.map(
(status) => (
<div
className="govuk-summary-list__row"
key={
status.statuscode
}
>
<dt className="govuk-summary-list__key">
<Link
target="_blank"
href={`/advancedsearchresults?apt=${appeal.appealType}&lpa=${lpa.lpaId}&statuscode=${status.statuscode}`}
>
{
status.status
}
</Link>
</dt>
<dd className="govuk-summary-list__value">
{
status.caseCount
}{" "}
(
{percentageOf(
status.caseCount,
appeal.caseCount
)}
)
</dd>
</div>
)
)}
</dl>
</div>
</div>
);
})}
</div>
</div>
);
})}
</div>
</section>
<section className="govuk-!-margin-top-8">
<h2 className="govuk-heading-m">
Case stage by LPA and Appeal Type
</h2>
<p className="govuk-body-s">
Select an appeal type row to show the LPA and then case
stage breakdown.
</p>
<div className="govuk-accordion__controls">
<button
type="button"
className="govuk-accordion__show-all"
onClick={
allAppealsExpanded ? hideAllAppeals : showAllAppeals
}
>
<span className="govuk-accordion__show-all-text">
{allAppealsExpanded
? "Hide all sections"
: "Show all sections"}
</span>
</button>
</div>
<div
className="govuk-accordion"
id="appeal-lpa-status-accordion"
>
{groupedAppeals.map((appeal) => {
const appealOpen = !!openAppeals[appeal.appealType];
const width =
((appeal.caseCount || 0) / maxGroupedAppealCount) *
100;
return (
<div
className={
appealOpen
? "govuk-accordion__section govuk-accordion__section--expanded"
: "govuk-accordion__section"
}
key={appeal.appealType}
>
<div className="govuk-accordion__section-header">
<h2 className="govuk-accordion__section-heading">
<button
type="button"
className="govuk-accordion__section-button"
aria-expanded={appealOpen}
onClick={() =>
toggleAppeal(appeal.appealType)
}
>
<div className="appeal-count-chart__row">
<div className="appeal-count-chart__label">
{appeal.appealTypeName}{" "}
{/* {appeal.caseCount} cases */}
(
{percentageOf(
appeal.caseCount,
totalCases
)}
)
</div>
<div className="appeal-count-chart__bar-wrapper">
<span
className="appeal-count-chart__bar"
style={{
width: `${width}%`
}}
/>
<span className="appeal-count-chart__count">
{appeal.caseCount}
</span>
</div>
</div>
</button>
</h2>
</div>
<div
className="govuk-accordion__section-content"
hidden={!appealOpen}
>
{appeal.lpas.map((lpa) => {
const lpaKey = `${appeal.appealType}-${lpa.lpaId}`;
const lpaOpen =
!!openAppealLpas[lpaKey];
return (
<div
className="lpa-status-block"
key={lpaKey}
>
<button
type="button"
className="lpa-status-block__button"
aria-expanded={lpaOpen}
onClick={() =>
toggleAppealLpa(lpaKey)
}
>
<span className="govuk-body-m">
{lpa.lpaName}
</span>
<span className="govuk-body-m">
{lpa.caseCount} cases (
{percentageOf(
lpa.caseCount,
appeal.caseCount
)}
)
</span>
</button>
<div hidden={!lpaOpen}>
<dl className="govuk-summary-list govuk-!-margin-bottom-4">
{lpa.statuses.map(
(status) => (
<div
className="govuk-summary-list__row"
key={
status.statuscode
}
>
<dt className="govuk-summary-list__key">
<Link
target="_blank"
href={`/advancedsearchresults?apt=${appeal.appealType}&lpa=${lpa.lpaId}&statuscode=${status.statuscode}`}
>
{
status.status
}
</Link>
</dt>
<dd className="govuk-summary-list__value">
{
status.caseCount
}{" "}
(
{percentageOf(
status.caseCount,
lpa.caseCount
)}
)
</dd>
</div>
)
)}
</dl>
</div>
</div>
);
})}
</div>
</div>
);
})}
</div>
</section>
</div>
);
}
function DashboardCard({ title, value, caption }) {
return (
<div className="govuk-grid-column-one-quarter">
<div className="dashboard-card">
<p className="govuk-body-s dashboard-card__title">{title}</p>
<p className="govuk-heading-l dashboard-card__value">{value}</p>
{caption && (
<p className="govuk-body-s dashboard-card__caption">
{caption}
</p>
)}
</div>
</div>
);
}
+294
View File
@@ -0,0 +1,294 @@
// // components/admin/tabs/AccountsTab.js
// import Link from "next/link";
// export default function AppealsWithStatusTab({ statusObj }) {
// return (
// <div>
// <h1>User Accounts</h1>
// <dl className="govuk-summary-list govuk-!-margin-bottom-9 results">
// <div className="govuk-summary-list__row results-headings">
// <dd className="govuk-summary-list__key govuk-!-font-size-16">
// Name
// </dd>
// <dd className="govuk-summary-list__key govuk-!-font-size-16">
// Last accessed
// </dd>
// </div>
// {statusObj.map((appeal) => (
// <div key={appeal.id} className="govuk-summary-list__row">
// <dd className="govuk-summary-list__value govuk-!-font-size-16 ">
// <Link
// target="_blank"
// href={`/auth/signin2?email=${appeal.value}`}
// >
// {appeal.value}
// </Link>
// <br />
// <dl className="govuk-summary-list govuk-!-margin-bottom-9 govuk-!-margin-left-9 results">
// <div className="govuk-summary-list__row results-headings">
// <dd className="govuk-summary-list__key govuk-!-font-size-16">
// Name
// </dd>
// <dd className="govuk-summary-list__key govuk-!-font-size-16">
// Last accessed
// </dd>
// </div>
// {appeal.statuses.map((statuses) => (
// <div
// key={appeal.id}
// className="govuk-summary-list__row"
// >
// <dd className="govuk-summary-list__value govuk-!-font-size-16 ">
// {statuses.value}
// </dd>
// <dd className="govuk-summary-list__value govuk-!-font-size-16 ">
// Total: {statuses.caseCount}
// </dd>
// </div>
// ))}
// </dl>
// </dd>
// <dd className="govuk-summary-list__value govuk-!-font-size-16 ">
// Total: {appeal.caseCount}
// </dd>
// </div>
// ))}
// </dl>
// </div>
// );
// }
import { useState } from "react";
import Link from "next/link";
export default function AppealsWithStatusTab({ statusObj = [] }) {
const [openSections, setOpenSections] = useState({});
const toggleSection = (index) => {
setOpenSections((current) => ({
...current,
[index]: !current[index]
}));
};
const showAll = () => {
const allOpen = {};
statusObj.forEach((_, index) => {
allOpen[index] = true;
});
setOpenSections(allOpen);
};
const hideAll = () => {
setOpenSections({});
};
const allExpanded =
statusObj.length > 0 &&
statusObj.every((_, index) => openSections[index]);
const sortedAppeals = [...statusObj].sort(
(a, b) => (b.caseCount || 0) - (a.caseCount || 0)
);
const maxCount = sortedAppeals[0]?.caseCount || 1;
return (
<div>
<h1 className="govuk-heading-l">Case status by appeal type</h1>
<div className="govuk-!-margin-bottom-6">
<h2 className="govuk-heading-m">Case counts by appeal type</h2>
<dl className="appeal-count-chart">
{sortedAppeals.map((appeal) => {
const maxCount = sortedAppeals[0]?.caseCount || 1;
const width =
((appeal.caseCount || 0) / maxCount) * 100;
return (
<div
className="appeal-count-chart__row"
key={appeal.appealType}
>
<dt className="appeal-count-chart__label">
{appeal.value}
</dt>
<dd className="appeal-count-chart__bar-wrapper">
<span
className="appeal-count-chart__bar"
style={{ width: `${width}%` }}
/>
<span className="appeal-count-chart__count">
{appeal.caseCount || 0}
</span>
</dd>
</div>
);
})}
</dl>
</div>
<div className="govuk-!-margin-bottom-6">
<h2 className="govuk-heading-m">Case stages by appeal type</h2>
<dl className="appeal-stage-chart">
{sortedAppeals.map((appeal) => (
<div
className="appeal-stage-chart__row"
key={appeal.appealType}
>
<dt className="appeal-stage-chart__label">
{appeal.value}
</dt>
<dd className="appeal-stage-chart__bar-wrapper">
<div
className="appeal-stage-chart__bar"
style={{
width: `${((appeal.caseCount || 0) / maxCount) * 100}%`
}}
aria-label={`${appeal.value}, ${appeal.caseCount || 0} cases`}
>
{(appeal.statuses || [])
.filter(
(status) => status.caseCount > 0
)
.sort(
(a, b) => b.caseCount - a.caseCount
)
.map((status, index) => (
<span
key={status.statuscode}
className={`appeal-stage-chart__segment appeal-stage-chart__segment--${index % 6}`}
style={{
width: `${((status.caseCount || 0) / (appeal.caseCount || 1)) * 100}%`
}}
title={`${status.value}: ${status.caseCount}`}
/>
))}
</div>
<span className="appeal-stage-chart__count">
{appeal.caseCount || 0}
</span>
</dd>
</div>
))}
</dl>
</div>
<div className="govuk-accordion__controls">
<button
type="button"
className="govuk-accordion__show-all"
onClick={allExpanded ? hideAll : showAll}
>
<span className="govuk-accordion__show-all-text">
{allExpanded
? "Hide all sections"
: "Show all sections"}
</span>
</button>
</div>
<div className="govuk-accordion" id="appeals-with-status-accordion">
{[...statusObj]
.sort((a, b) => (b.caseCount || 0) - (a.caseCount || 0))
.map((appeal, index) => {
const isOpen = !!openSections[index];
return (
<div
className={
isOpen
? "govuk-accordion__section govuk-accordion__section--expanded"
: "govuk-accordion__section"
}
key={appeal.appealType || index}
>
<div className="govuk-accordion__section-header ">
<h2 className="govuk-accordion__section-heading">
<button
type="button"
className="govuk-accordion__section-button "
id={`appeal-status-heading-${index}`}
aria-expanded={isOpen}
aria-controls={`appeal-status-content-${index}`}
onClick={() => toggleSection(index)}
>
<span
style={{
display: "flex",
justifyContent:
"space-between",
alignItems: "center",
width: "100%",
paddingRight: "20px" // leaves room for accordion icon
}}
>
<span className="govuk-heading-s ">
{appeal.value}
</span>
<span
className="govuk-body-s"
style={{
fontWeight: "normal"
}}
>
{appeal.caseCount || 0}{" "}
cases
</span>
</span>
</button>
</h2>
</div>
<div
id={`appeal-status-content-${index}`}
className="govuk-accordion__section-content"
aria-labelledby={`appeal-status-heading-${index}`}
hidden={!isOpen}
>
<dl className="govuk-summary-list govuk-!-margin-left-9">
{(appeal.statuses || [])
.sort(
(a, b) =>
(b.caseCount || 0) -
(a.caseCount || 0)
)
.map((status) => (
<div
className="govuk-summary-list__row"
key={status.statuscode}
>
<dt className="govuk-summary-list__key">
<Link
target="_blank"
href={`/advancedsearchresults?apt=${appeal.appealType}&statuscode=${status.statuscode}`}
>
{status.value}
</Link>
</dt>
<dd className="govuk-summary-list__value">
{status.caseCount || 0}
</dd>
</div>
))}
</dl>
</div>
</div>
);
})}
</div>
</div>
);
}
+34 -60
View File
@@ -5,7 +5,7 @@ import { useRouter } from "next/router";
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import { formatDates, getDocLink } from "../../utils"; import { formatDates, getDocLink, hasOwn } from "../../utils";
import PaginationControl from "../../../components/case/pagination"; import PaginationControl from "../../../components/case/pagination";
import DocumentLink from "../../utils/downloads"; import DocumentLink from "../../utils/downloads";
import { useDownloadQueue } from "../../utils/downloadmanager"; import { useDownloadQueue } from "../../utils/downloadmanager";
@@ -21,6 +21,8 @@ import { getNewDocumentsPaged } from "../../../actions/services/adminService";
import { setCurrentPage } from "../../../store/currentView/action"; import { setCurrentPage } from "../../../store/currentView/action";
import { setDocumentDetails } from "../../../store/searchOutput/action"; import { setDocumentDetails } from "../../../store/searchOutput/action";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
const getDocumentTypes = [ const getDocumentTypes = [
{ {
"Value": 846040009, "Value": 846040009,
@@ -397,19 +399,11 @@ const DocumentsTab = (props) => {
className="govuk-label-s govuk-checkboxes__label" className="govuk-label-s govuk-checkboxes__label"
htmlFor={item.Value} htmlFor={item.Value}
> >
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: item.Label,
path: locale,
'$..[?(@ && @.value=="' + translations: transLookup
item.Label + })}
'")].value_cy',
json: transLookup,
eval: true
})
: item.Label ||
t(
"case:summary-no-date-entered-label"
)}{" "}
</label> </label>
</div> </div>
); );
@@ -470,19 +464,11 @@ const DocumentsTab = (props) => {
className="govuk-label-s govuk-checkboxes__label" className="govuk-label-s govuk-checkboxes__label"
htmlFor={"origin_" + item.Value} htmlFor={"origin_" + item.Value}
> >
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: item.Label,
path: locale,
'$..[?(@ && @.value=="' + translations: transLookup
item.Label + })}
'")].value_cy',
json: transLookup,
eval: true
})
: item.Label ||
t(
"case:summary-no-date-entered-label"
)}{" "}
</label> </label>
</div> </div>
); );
@@ -754,7 +740,7 @@ const DocumentsTab = (props) => {
// )} // )}
// : // :
// </span> // </span>
// {_.has( // {hasOwn(
// detailsObj, // detailsObj,
// "pinswg_name" // "pinswg_name"
// ) // )
@@ -789,7 +775,7 @@ const DocumentsTab = (props) => {
)} )}
: :
</span> </span>
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_name" "pinswg_name"
) )
@@ -805,7 +791,7 @@ const DocumentsTab = (props) => {
)} )}
: :
</span> </span>
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_name" "pinswg_name"
) )
@@ -822,23 +808,16 @@ const DocumentsTab = (props) => {
: :
</span> </span>
{router.locale == "cy" {resolveCrmDisplayValue(
? jsonpath({ {
path: value: detailsObj[
'$..[?(@ && @.value=="' + "pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue"
detailsObj[ ],
"pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue" locale,
] + translations:
'")].value_cy', transLookup
json: transLookup, }
eval: true )}
})
: detailsObj[
"pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
</dd> </dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14"> <dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden"> <span className="results-visually-hidden">
@@ -848,7 +827,7 @@ const DocumentsTab = (props) => {
: :
</span> </span>
{_.has( {hasOwn(
detailsObj, detailsObj,
"createdon" "createdon"
) )
@@ -936,17 +915,16 @@ const DocumentsTab = (props) => {
) )
.then((data) => data) .then((data) => data)
.then((data) => { .then((data) => {
props.setDocumentDetails(data); setDocumentDetails(data);
setShowSpinnerState(false); setShowSpinnerState(false);
}); });
}, },
[ [
props.incidentid,
selectedOption, selectedOption,
selectedDocumentType, selectedDocumentType,
selectedWeeks, selectedWeeks,
selectedDocumentOrigin, selectedDocumentOrigin,
props.setDocumentDetails setDocumentDetails
] ]
); );
@@ -957,7 +935,7 @@ const DocumentsTab = (props) => {
orderBy, orderBy,
fieldSort fieldSort
).then((data) => { ).then((data) => {
props.setDocumentDetails(data); setDocumentDetails(data);
return data; return data;
}); });
@@ -1060,7 +1038,7 @@ const DocumentsTab = (props) => {
selectedDocumentType, selectedDocumentType,
selectedWeeks selectedWeeks
).then((data) => { ).then((data) => {
props.setDocumentDetails(data); setDocumentDetails(data);
setDocumentSearchState(true); setDocumentSearchState(true);
return data; return data;
@@ -1072,13 +1050,11 @@ const DocumentsTab = (props) => {
//const searchDocumentResultsObj = docDetailsObj(); //const searchDocumentResultsObj = docDetailsObj();
}, [ }, [
incidentid, incidentid,
props.setDocumentDetails, setDocumentDetails,
selectedOption, selectedOption,
selectedDocumentType, selectedDocumentType,
fieldSortState, fieldSortState,
orderByState, orderByState,
getDocumentTypes,
getOrigin,
getDocumentResults, getDocumentResults,
lang, lang,
selectedWeeks selectedWeeks
@@ -1107,9 +1083,7 @@ const DocumentsTab = (props) => {
return ( return (
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-grid-column-full"> <div className="govuk-grid-column-full">
<h2 className="govuk-heading-m "> <h1 className="">{t("case:documents-heading-label")}</h1>
{t("case:documents-heading-label")}
</h2>
{/* <div className=""> {/* <div className="">
MDU :{" "} MDU :{" "}
{countFieldValue( {countFieldValue(
@@ -1134,7 +1108,7 @@ const DocumentsTab = (props) => {
<select <select
onChange={(e) => { onChange={(e) => {
setSelectedWeeks(e.target.value); setSelectedWeeks(e.target.value);
props.setCurrentPage(1); setCurrentPage(1);
}} }}
value={selectedWeeks} value={selectedWeeks}
className="govuk-select" className="govuk-select"
+146 -31
View File
@@ -2,11 +2,7 @@
import { useState } from "react"; import { useState } from "react";
import Link from "next/link"; import Link from "next/link";
import { bytesToSize } from "../../../components/utils"; import { bytesToSize } from "../../../components/utils";
import { import { consoleLogger } from "../../../actions/core/logger";
deleteMyRepresentationsFromBlob,
deleteAwaitingSubmissionsFromBlob
} from "../../../actions/services/documentService";
import { sendRepCompleteMessage } from "../../../actions/services/portalService";
import { formatBlobDates } from "../utils/adminHelper"; import { formatBlobDates } from "../utils/adminHelper";
@@ -21,6 +17,59 @@ export default function StorageTab({ data, repCompleteCount }) {
setShowTmpFile(newState); setShowTmpFile(newState);
}; };
const deleteRepItem = (containerID, caseID, repfile) => {
fetch("/api/admin/deleteblobrep", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
container: containerID,
casefolderID: caseID,
repfile
})
})
.then((response) => {
if (!response.ok) {
throw new Error("Unable to delete representation");
}
return response.json();
})
.then((data) => {
return data;
})
.then(() => {
fetch("/api/admin/getrepsblobproxy", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ container: containerID })
})
.then((response) => {
if (!response.ok) {
throw new Error(
"Unable to refresh representations"
);
}
return response.json();
})
.then((data) => {
setMyRepresentations(data);
setMyRepresentationsDetails(data);
})
.catch((error) => {
consoleLogger(error);
return null;
})
.then(() => {
setCurrentView({
"viewName": "My Representations",
"viewKey": "myRepresentations"
});
});
})
.catch((error) => {
consoleLogger(error);
});
};
return ( return (
<div> <div>
<h1>Storage Account Contents</h1> <h1>Storage Account Contents</h1>
@@ -86,20 +135,52 @@ export default function StorageTab({ data, repCompleteCount }) {
{folder.hasTmpFile && ( {folder.hasTmpFile && (
<> <>
<button <button
onClick={() => { onClick={async () => {
confirm( if (
"Do you want to remove this unsubmitted appeal " + !confirm(
folder.folderPath + "Do you want to remove this unsubmitted appeal " +
"?\n" folder.folderPath +
) && "?\n"
(deleteCaseItem( )
c.container, ) {
folder.folderPath, return;
setData }
),
try {
const response =
await fetch(
"/api/admin/deleteblobcase",
{
method: "POST",
headers:
{
"Content-Type":
"application/json"
},
body: JSON.stringify(
{
container:
c.container,
casefolderID:
folder.folderPath
}
)
}
);
if (!response.ok) {
throw new Error(
"Unable to delete case"
);
}
alert( alert(
"Temp case Deleted!" "Temp case Deleted!"
)); );
window.location.reload();
} catch (error) {
consoleLogger(error);
}
}} }}
> >
Delete this TMP appeal Delete this TMP appeal
@@ -144,7 +225,7 @@ export default function StorageTab({ data, repCompleteCount }) {
onClick={async () => { onClick={async () => {
const response = const response =
await fetch( await fetch(
"/api/file/editRepJson", "/api/admin/editRepJson",
{ {
method: "POST", method: "POST",
headers: headers:
@@ -186,7 +267,8 @@ export default function StorageTab({ data, repCompleteCount }) {
{folder.repComplete && ( {folder.repComplete && (
<button <button
onClick={async () => { onClick={async () => {
confirm( if (
!confirm(
"Do you want resend the rep queue message " + "Do you want resend the rep queue message " +
folder.repJsonBlob.name.split( folder.repJsonBlob.name.split(
"/" "/"
@@ -195,20 +277,53 @@ export default function StorageTab({ data, repCompleteCount }) {
folder.repJsonBlob.name.split( folder.repJsonBlob.name.split(
"/" "/"
)[1] )[1]
) && )
(sendRepCompleteMessage( ) {
c.container, return;
folder.repJsonBlob.name.split( }
"/"
)[0], try {
folder.repJsonBlob.name.split( const response =
"/" await fetch(
)[1] "/api/admin/createrepcompletemessage",
), {
method: "POST",
headers:
{
"Content-Type":
"application/json"
},
body: JSON.stringify(
{
container:
c.container,
tempcaseref:
folder.repJsonBlob.name.split(
"/"
)[0],
repid: folder.repJsonBlob.name.split(
"/"
)[1]
}
)
}
);
if (!response.ok) {
throw new Error(
"Unable to recreate representation queue message"
);
}
alert( alert(
"rep queue message sent!" "rep queue message sent!"
), );
window.location.reload()); window.location.reload();
} catch (error) {
consoleLogger(
error
);
}
}} }}
> >
Recreate Queue Message Recreate Queue Message
+1 -1
View File
@@ -37,7 +37,7 @@ export async function fetchAdminStorageData() {
const limit = pLimit(5); const limit = pLimit(5);
let data = await Promise.all( let data = await Promise.all(
users.map(async (user) => { users.map(async (user) => {
limit(async () => { return limit(async () => {
const containers = await listContainersForUser( const containers = await listContainersForUser(
blobServiceClient, blobServiceClient,
`${user.id}`, `${user.id}`,
+2 -2
View File
@@ -91,7 +91,7 @@ const Breadcrumbs = (props) => {
watchedCases: () => t("myportal:watchedcases-card-title"), watchedCases: () => t("myportal:watchedcases-card-title"),
myCases: () => t("myportal:mycases-card-title"), myCases: () => t("myportal:mycases-card-title"),
myRepresentations: () => t("myportal:myrepresentations-card-title"), myRepresentations: () => t("myportal:myrepresentations-card-title"),
mySubmittedReps: "Submitted representations" mySubmittedReps: () => t("myportal:submitted-reps-card-title")
}; };
const viewAllLabelResolver = labelsByKey[viewKey]; const viewAllLabelResolver = labelsByKey[viewKey];
@@ -186,7 +186,7 @@ const Breadcrumbs = (props) => {
<> <>
{renderLinkCrumb( {renderLinkCrumb(
isWelsh isWelsh
? `${router.locale}/dnsapplications` ? `/${router.locale}/dnsapplications`
: "/dnsapplications", : "/dnsapplications",
t("dnsCommon:service-name") t("dnsCommon:service-name")
)} )}
+1 -8
View File
@@ -44,15 +44,8 @@ const Case = (props) => {
showLoginCheck={props.showLoginCheck} showLoginCheck={props.showLoginCheck}
eventsObj={props.eventsObj} eventsObj={props.eventsObj}
mediaObj={props.mediaObj} mediaObj={props.mediaObj}
mapTarget={props.mapTarget}
/> />
{showRepresentations == true && (
<RepresentationList
incidentid={props.incidentid}
caseReference={props.caseReference}
representationsObj={props.representationsObj}
documentDetailsObj={props.documentDetailsObj}
/>
)}
</div> </div>
</div> </div>
</main> </main>
+26 -385
View File
@@ -5,7 +5,7 @@ import { useRouter } from "next/router";
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import transLookup from "../../data/lookuptranslations.json"; import transLookup from "../../data/lookuptranslations.json";
import { formatDates, getDocLink } from "../utils"; import { formatDates, getDocLink, hasOwn } from "../utils";
import PaginationControl from "./pagination"; import PaginationControl from "./pagination";
import { sendGAEvent } from "@next/third-parties/google"; import { sendGAEvent } from "@next/third-parties/google";
@@ -19,6 +19,7 @@ import { setCurrentPage } from "../../store/currentView/action";
import { setDocumentDetails } from "../../store/searchOutput/action"; import { setDocumentDetails } from "../../store/searchOutput/action";
import DocumentLink from "../utils/downloads"; import DocumentLink from "../utils/downloads";
import { useDownloadQueue } from "../utils/downloadmanager"; import { useDownloadQueue } from "../utils/downloadmanager";
import resolveCrmDisplayValue from "../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
const DocumentDetails = (props) => { const DocumentDetails = (props) => {
let { t, lang } = useTranslation(); let { t, lang } = useTranslation();
@@ -38,6 +39,8 @@ const DocumentDetails = (props) => {
const router = useRouter(); const router = useRouter();
const { locale } = router; const { locale } = router;
const appealType = props.currentView?.caseReference?.appealType;
var documentDetailsArr = documentDetailsObj || []; var documentDetailsArr = documentDetailsObj || [];
const { startDownload, getStatus } = useDownloadQueue(3); const { startDownload, getStatus } = useDownloadQueue(3);
const [selectedOption, setSelectedOption] = useState(10); const [selectedOption, setSelectedOption] = useState(10);
@@ -92,352 +95,6 @@ const DocumentDetails = (props) => {
}; };
let ShowDocLinks = getDocLink(docsOffline); let ShowDocLinks = getDocLink(docsOffline);
const DocumentView = (documentDetailsArr) => {
documentDetailsArr = documentDetailsArr.value;
return (
<>
<p>
{documentDetailsObj["@odata.count"] > 1
? t("case:documents-count-label-1")
: t("case:documents-count-label-1a")}{" "}
{documentDetailsObj["@odata.count"]}{" "}
{documentDetailsObj["@odata.count"] > 1
? t("case:documents-count-label-2")
: t("case:documents-count-label-2a")}
</p>
<div className="documentFilters govuk-!-margin-top-5">
<div
id="recordDocumentTypeSelect"
className="govuk-grid-row govuk-!-margin-left-0"
>
<div className="govuk-form-group">
<label
className="govuk-label-s "
htmlFor="showDocumentType"
>
{t("case:documents-show-label")}
<select
onChange={(e) => {
setSelectedDocumentType(e.target.value);
setCurrentPage(1);
}}
value={selectedDocumentType}
className="govuk-select"
id="showDocumentType"
name="showDocumentType"
>
<option value="all" key="00">
{router.locale == "cy"
? jsonpath({
path: '$..[?(@ && @.value=="All")].value_cy',
json: transLookup,
eval: true
})
: "All"}
</option>
{documentTypes.map((item, key) => {
return (
<option
key={key}
value={
item.pinswg_isharedocumentlocations
}
>
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
item.pinswg_isharedocumentlocationsLabel +
'")].value_cy',
json: transLookup,
eval: true
})
: item.pinswg_isharedocumentlocationsLabel ||
t(
"case:summary-no-date-entered-label"
)}
</option>
);
})}
</select>
{t("case:documents-count-label-2")}
</label>
</div>
</div>
{documentDetailsObj["@odata.count"] > 5 && (
<div
id="recordCountSelect"
className="govuk-grid-row govuk-!-margin-left-0"
>
<div className="govuk-form-group">
<label
className="govuk-label-s "
htmlFor="showNumberOfRecords"
>
{t(
"search:searchresults-show-records-label-a"
)}
<select
onChange={(e) => {
setSelectedOption(e.target.value);
setCurrentPage(1);
}}
value={selectedOption}
className="govuk-select"
id="showNumberOfRecords"
name="showNumberOfRecords"
>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="50">50</option>
</select>{" "}
{t(
"search:searchresults-show-records-label-b"
)}
</label>
</div>
</div>
)}
</div>
{ShowDocLinks && (
<div className="govuk-warning-text ">
<span
className="govuk-warning-text__icon"
aria-hidden="true"
>
!
</span>
<strong className="govuk-warning-text__text govuk-!-margin-top-2">
<span className="govuk-visually-hidden">
Notice
</span>
{t("case:documents-not-available-label")}
</strong>
</div>
)}
<dl className="documentList govuk-summary-list govuk-!-margin-bottom-9 results">
<div className="govuk-summary-list__row results-headings">
<dd className="govuk-summary-list__key govuk-!-font-size-16 ">
<button
type="button"
onClick={() => sortDataBy("pinswg_name")}
className={
orderByState == "pinswg_name"
? fieldSortState == "asc"
? `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16 sortAsc`
: `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16 sortDesc`
: `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16`
}
>
{t("case:documents-name-label")}
</button>
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-16">
{/* {t("case:documents-doc-type-label")} */}
<button
type="button"
onClick={() =>
sortDataBy("pinswg_isharedocumentlocations")
}
className={
orderByState ==
"pinswg_isharedocumentlocations"
? fieldSortState == "asc"
? `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16 sortAsc`
: `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16 sortDesc`
: `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16`
}
>
{t("case:documents-doc-type-label")}
</button>
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-16">
{/* {t("case:documents-date-published-label")} */}
<button
type="button"
onClick={() => sortDataBy("createdon")}
className={
orderByState == "createdon"
? fieldSortState == "asc"
? `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16 sortAsc`
: `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16 sortDesc`
: `govuk-link govuk-link--no-underline govuk-!-font-weight-bold govuk-!-font-size-16`
}
>
{t("case:documents-date-published-label")}
</button>
</dd>
{/* <dd className="govuk-summary-list__key govuk-!-font-size-16">
{t("case:documents-size-label")}
</dd> */}
</div>
{showSpinnerState == true ? (
<div className="govuk-summary-list__row">
<div className="govuk-!-margin-top-4 govuk-!-margin-bottom-4 govuk-!-font-weight-bold govuk-!-font-size-20 ">
{t("common:spinner-fetching-data")}
<img
className="data-loading-icon"
src="/assets/images/loading.gif"
alt={
router.locale == "cy"
? "Nôl data"
: "Fetching data"
}
/>
</div>
</div>
) : (
documentDetailsArr.map((item, key) => {
let detailsObj = jsonpath({
path:
"$..[?(@ && @._pinswg_documentids_value=='" +
incidentid +
"')]",
json: item,
sanbox: {}
});
detailsObj = item;
return (
<div
className="govuk-summary-list__row"
key={key}
>
<dd className="govuk-summary-list__value govuk-!-font-size-16 ">
{showDownloadingState === key && (
<div className="coverLoadingLink downloading">
{/* <img
className="data-loading-icon"
src="/assets/images/loading.gif"
alt={
router.locale ==
"cy"
? "Nôl data"
: "Fetching data"
}
/> */}
</div>
)}
{!ShowDocLinks ? (
<Link
scroll={false}
href={
detailsObj.pinswg_hashlink
}
key={key}
onClick={() => {
(toggleDownLoadLink(key),
sendGAEvent(
"event",
"DownloadedFile",
{
caseReference:
props.caseReference,
filename:
detailsObj.pinswg_name
}
));
}}
>
<span className="results-visually-hidden">
{t(
"case:documents-name-label"
)}
:
</span>
{_.has(
detailsObj,
"pinswg_name"
)
? detailsObj.pinswg_name
: ""}
</Link>
) : (
<>
<span className="results-visually-hidden">
{t(
"case:documents-name-label"
)}
:
</span>
{_.has(
detailsObj,
"pinswg_name"
)
? detailsObj.pinswg_name
: ""}
</>
)}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-16">
<span className="results-visually-hidden">
{t("case:documents-doc-type-label")}
:
</span>
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-16">
<span className="results-visually-hidden">
{t(
"case:documents-date-published-label"
)}
:
</span>
{_.has(
detailsObj,
"pinswg_latestpublisheddate"
)
? formatDates(
detailsObj.pinswg_latestpublisheddate
)
: ""}
</dd>
{/* <dd className="govuk-summary-list__value govuk-!-font-size-16">
<span className="results-visually-hidden">
{t("case:documents-size-label")}:
</span>
92
</dd> */}
</div>
);
})
)}
</dl>
<PaginationControl
showNoOfRecords={selectedOption}
currentPage={currentPage}
searchResultsObj={documentDetailsObj}
spinnerState={spinnerState}
orderBy={orderByState}
fieldSort={fieldSortState}
getDocumentResults={getDocumentResults}
/>
</>
);
};
const FilteredDocumentView = (documentDetailsArr) => { const FilteredDocumentView = (documentDetailsArr) => {
documentDetailsArr = documentDetailsArr.value; documentDetailsArr = documentDetailsArr.value;
@@ -547,19 +204,11 @@ const DocumentDetails = (props) => {
item.pinswg_isharedocumentlocations item.pinswg_isharedocumentlocations
} }
> >
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: item.pinswg_isharedocumentlocationsLabel,
path: locale,
'$..[?(@ && @.value=="' + translations: transLookup
item.pinswg_isharedocumentlocationsLabel + })}{" "}
'")].value_cy',
json: transLookup,
eval: true
})
: item.pinswg_isharedocumentlocationsLabel ||
t(
"case:summary-no-date-entered-label"
)}{" "}
- ({item.count}) - ({item.count})
</label> </label>
</div> </div>
@@ -785,7 +434,7 @@ const DocumentDetails = (props) => {
)} )}
: :
</span> </span>
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_name" "pinswg_name"
) )
@@ -801,7 +450,7 @@ const DocumentDetails = (props) => {
)} )}
: :
</span> </span>
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_name" "pinswg_name"
) )
@@ -817,24 +466,13 @@ const DocumentDetails = (props) => {
)} )}
: :
</span> </span>
{resolveCrmDisplayValue({
{router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup
"pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue" })}
] +
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
</dd> </dd>
<dd className="govuk-summary-list__value govuk-!-font-size-16"> <dd className="govuk-summary-list__value govuk-!-font-size-16">
<span className="results-visually-hidden"> <span className="results-visually-hidden">
@@ -844,7 +482,7 @@ const DocumentDetails = (props) => {
: :
</span> </span>
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_latestpublisheddate" "pinswg_latestpublisheddate"
) )
@@ -1043,14 +681,17 @@ const DocumentDetails = (props) => {
<h3> <h3>
{showDocumentSearchState == false {showDocumentSearchState == false
? t("case:documents-checking-label") ? t("case:documents-checking-label")
: t("case:documents-non-available-label")} : appealType === 846040002 ||
appealType === 846040011
? t(
"case:documents-non-available-app-label"
)
: t("case:documents-non-available-label")}
</h3> </h3>
</div> </div>
</div> </div>
) : showFilteredDocs == "true" ? (
FilteredDocumentView(documentDetailsArr)
) : ( ) : (
DocumentView(documentDetailsArr) FilteredDocumentView(documentDetailsArr)
)} )}
</div> </div>
</div> </div>
+125 -82
View File
@@ -3,9 +3,16 @@ import { setCurrentPage } from "../../store/currentView/action";
import { connect } from "react-redux"; import { connect } from "react-redux";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { formatDates } from "../utils"; import { formatDates } from "../utils";
import {
getLivePublishedEvent,
isEventLiveNow
} from "./summary/utils/liveEvent";
import { useRouter } from "next/router";
const EventsDetails = (props) => { const EventsDetails = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const EventView = (eventsArr) => { const EventView = (eventsArr) => {
eventsArr = eventsArr.value; eventsArr = eventsArr.value;
@@ -23,8 +30,6 @@ const EventsDetails = (props) => {
return obj.hasOwnProperty(property) && obj[property] !== null; return obj.hasOwnProperty(property) && obj[property] !== null;
} }
//console.log(eventsArr.length > 0);
return ( return (
eventsArr.length > 0 && ( eventsArr.length > 0 && (
<div className="govuk-grid-row"> <div className="govuk-grid-row">
@@ -63,76 +68,26 @@ const EventsDetails = (props) => {
{item.pinswg_eventname} {item.pinswg_eventname}
</div> </div>
)} )}
</div>
<div className="eventColumn">
{hasOwnPropertyAndNotNull( {hasOwnPropertyAndNotNull(
item, item,
"pinswg_eventaddressline1" [
) && ( "pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
<> ]
<div>
<b>
{t(
"case:event-address-label"
)}
</b>
:
</div>
<div>
{
item.pinswg_eventaddressline1
}
</div>
</>
)}
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddressline2"
) && ( ) && (
<div> <div>
<b>
{t(
"case:event-type-of-event-label"
)}
</b>
:{" "}
{ {
item.pinswg_eventaddressline2 item[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
]
} }
</div> </div>
)} )}
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddresstown"
) && (
<div>
{
item.pinswg_eventaddresstown
}
</div>
)}
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddresscounty"
) && (
<div>
{
item.pinswg_eventaddresscounty
}
</div>
)}
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddresscounty"
) && (
<div>
{
item.pinswg_eventaddresspostcode
}
</div>
)}
</div>
{/* type of event
start date date of event - end date of event
if virtual event no address showNoOfRecords
show event address */}
<div className="eventColumn">
{hasOwnPropertyAndNotNull( {hasOwnPropertyAndNotNull(
item, item,
"pinswg_dateeventrequested" "pinswg_dateeventrequested"
@@ -171,25 +126,113 @@ const EventsDetails = (props) => {
<div className="eventColumn"> <div className="eventColumn">
{hasOwnPropertyAndNotNull( {hasOwnPropertyAndNotNull(
item, item,
[ "pinswg_eventaddressline1"
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue",
]
) && ( ) && (
<div> <>
<b> <div
{t( style={{
"case:event-type-of-event-label" display: "flex"
)} }}
</b> >
:{" "} <b>
{ {t(
item[ "case:event-address-label"
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" )}
] </b>
} :
</div> <div
style={{
display:
"flex",
marginLeft:
"10px",
flexDirection:
"column"
}}
>
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddressline1"
) && (
<span>
{
item.pinswg_eventaddressline1
}
</span>
)}
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddressline2"
) && (
<span>
{
item.pinswg_eventaddressline2
}
</span>
)}
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddresstown"
) && (
<span>
{
item.pinswg_eventaddresstown
}
</span>
)}
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddresscounty"
) && (
<span>
{
item.pinswg_eventaddresscounty
}
</span>
)}
{hasOwnPropertyAndNotNull(
item,
"pinswg_eventaddresscounty"
) && (
<span>
{
item.pinswg_eventaddresspostcode
}
</span>
)}
</div>
</div>
</>
)} )}
</div> </div>
{/* type of event
start date date of event - end date of event
if virtual event no address showNoOfRecords
show event address */}
{hasOwnPropertyAndNotNull(
item,
"pinswg_linktotheevent"
) &&
isEventLiveNow(item) && (
<div className="eventColumn">
<a
href={
locale === "en"
? item.pinswg_linktotheevent
: item.pinswg_linktotheeventstreamwelsh
}
className="govuk-link"
target="_blank"
rel="noopener noreferrer"
>
{t(
"case:live-event-link"
)}
</a>
</div>
)}
</div> </div>
</> </>
) )
@@ -203,7 +246,7 @@ const EventsDetails = (props) => {
const mapStateToProps = (state) => { const mapStateToProps = (state) => {
return { return {
...state, ...state
}; };
}; };
@@ -214,7 +257,7 @@ const mapDispatchToProps = (dispatch) => {
}, },
setCurrentPage: (currentPage) => { setCurrentPage: (currentPage) => {
dispatch(setCurrentPage(currentPage)); dispatch(setCurrentPage(currentPage));
}, }
}; };
}; };
+25 -411
View File
@@ -1,404 +1,7 @@
// // import { setEventDetails } from "../../store/searchOutput/action";
// // import { setCurrentPage } from "../../store/currentView/action";
// // import { connect } from "react-redux";
// // import useTranslation from "next-translate/useTranslation";
// // import { formatDates } from "../utils";
// // const MediaDetails = (props) => {
// // let { t } = useTranslation();
// // const MediaView = (mediaArr) => {
// // mediaArr = mediaArr.value;
// // return mediaArr.map((item, key) => {
// // <div>{item.pinswg_name}</div>;
// // });
// // };
// // const mediaArr = props.mediaObj?.value || [];
// // // event publishiing flag set to true displa
// // function hasOwnPropertyAndNotNull(obj, property) {
// // return obj.hasOwnProperty(property) && obj[property] !== null;
// // }
// // //console.log(eventsArr.length > 0);
// // return (
// // mediaArr.length > 0 && (
// // <div className="govuk-grid-row">
// // <div className="card">
// // <div className="card-body">
// // <h2 className="govuk-heading-m ">
// // {t("case:event-title")}Media
// // </h2>
// // {mediaArr.map(
// // (item, key) =>
// // item.pinswg_publishtoweb && (
// // <>
// // {" "}
// // <div className="">
// // <div className="">
// // <div>
// // <b>
// // {" "}
// // {t(
// // "case:event-name-label",
// // )}
// // </b>
// // : {item.pinswg_name}
// // </div>
// // {hasOwnPropertyAndNotNull(
// // item,
// // "pinswg_description",
// // ) && (
// // <div>
// // <b>
// // {t(
// // "case:event-event-name-label",
// // )}
// // </b>
// // :{" "}
// // {
// // item.pinswg_description
// // }
// // </div>
// // )}
// // </div>
// // </div>
// // </>
// // ),
// // )}{" "}
// // </div>
// // </div>
// // </div>
// // )
// // );
// // };
// // const mapStateToProps = (state) => {
// // return {
// // ...state,
// // };
// // };
// // const mapDispatchToProps = (dispatch) => {
// // return {
// // setEventDetails: (mediaObj) => {
// // dispatch(setEventDetails(mediaObj));
// // },
// // setCurrentPage: (currentPage) => {
// // dispatch(setCurrentPage(currentPage));
// // },
// // };
// // };
// // export default connect(mapStateToProps, mapDispatchToProps)(MediaDetails);
// import { useEffect, useMemo, useState } from "react";
// import { connect } from "react-redux";
// import useTranslation from "next-translate/useTranslation";
// import { useRouter } from "next/router";
// const extractYouTubeId = (input) => {
// if (!input) return null;
// if (/^[a-zA-Z0-9_-]{11}$/.test(input)) return input;
// try {
// const url = new URL(input);
// if (url.hostname.includes("youtu.be"))
// return url.pathname.slice(1) || null;
// const v = url.searchParams.get("v");
// if (v) return v;
// const embedMatch = url.pathname.match(/\/embed\/([^/]+)/);
// if (embedMatch?.[1]) return embedMatch[1];
// const shortsMatch = url.pathname.match(/\/shorts\/([^/]+)/);
// if (shortsMatch?.[1]) return shortsMatch[1];
// return null;
// } catch {
// return null;
// }
// };
// export default function MediaDetails({ mediaObj, whichTab }) {
// const router = useRouter();
// const mediaArr = mediaObj?.value || [];
// const videoItems = useMemo(() => {
// const isWelsh = router.locale === "cy";
// return (mediaArr || [])
// .filter((x) => x?.pinswg_publishtoweb)
// .map((item) => {
// const url = isWelsh
// ? item.pinswg_mediaLinkCY
// : item.pinswg_mediaLinkEN;
// const videoId = extractYouTubeId(url);
// if (!videoId) return null;
// return {
// key:
// item.pinswg_documentid ||
// `${item.pinswg_name}-${videoId}`,
// videoId,
// name: item.pinswg_name || "Video",
// description: item.pinswg_description || "",
// thumbnail: `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`,
// };
// })
// .filter(Boolean);
// }, [mediaArr, router.locale]);
// const [watchedIds, setWatchedIds] = useState(new Set());
// const [selectedIndex, setSelectedIndex] = useState(0);
// // Forces a fresh iframe instance whenever we need to hard-stop playback
// const [playerInstance, setPlayerInstance] = useState(0);
// const isActive = whichTab === "case-media";
// const selected = videoItems[selectedIndex] || null;
// // When leaving the media tab, hard-stop playback by unmounting (and bumping instance)
// useEffect(() => {
// if (!isActive) {
// setPlayerInstance((n) => n + 1);
// }
// }, [isActive]);
// // When list/locale changes, reset to first (no autoplay)
// useEffect(() => {
// setSelectedIndex(0);
// setPlayerInstance((n) => n + 1);
// }, [videoItems.length, router.locale]);
// if (!videoItems.length) return null;
// const embedBase = "https://www.youtube-nocookie.com/embed";
// // IMPORTANT:
// // - autoplay=0 for initial load
// // - autoplay=1 only when user clicks an item
// const [autoplay, setAutoplay] = useState(false);
// useEffect(() => {
// // whenever we leave tab or reset player, don't autoplay next time
// if (!isActive) setAutoplay(false);
// }, [isActive]);
// const embedSrc = selected
// ? `${embedBase}/${selected.videoId}?rel=0&modestbranding=1&playsinline=1&autoplay=${autoplay ? "1" : "0"}`
// : "";
// return (
// <div className="govuk-grid-row">
// <div className="card">
// <div className="card-body">
// <h2 className="govuk-heading-m">Media</h2>
// {/* Player: only render when tab is active */}
// {isActive && (
// <div className="videoWrapper govuk-!-margin-bottom-4">
// <iframe
// key={`${selected?.videoId}-${playerInstance}`}
// src={embedSrc}
// title={selected?.name || "YouTube video"}
// frameBorder="0"
// allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
// allowFullScreen
// />
// </div>
// )}
// <h3 className="govuk-heading-s">Videos</h3>
// <ul className="govuk-list govuk-list--spaced">
// {videoItems.map((v, idx) => {
// const isSelected = idx === selectedIndex;
// return (
// <li key={v.key}>
// <button
// type="button"
// className={`videoTabButton ${isSelected ? "active" : ""}`}
// onClick={() => {
// setSelectedIndex(idx);
// setAutoplay(true); // play only on user action
// setPlayerInstance((n) => n + 1); // ensure clean switch / stop previous
// setWatchedIds((prev) =>
// new Set(prev).add(v.videoId),
// );
// }}
// >
// <div className="videoTabContent">
// <div className="thumbnailWrapper">
// <img
// src={v.thumbnail}
// alt=""
// className="videoThumbnail"
// loading="lazy"
// />
// <span
// className="playIcon"
// aria-hidden="true"
// >
// ▶
// </span>
// {/* Duration badge (see section 2) */}
// {v.duration && (
// <span className="durationBadge">
// {v.duration}
// </span>
// )}
// {/* Watched indicator (see section 3) */}
// {watchedIds.has(v.videoId) && (
// <span className="watchedBadge">
// Watched
// </span>
// )}
// </div>
// <span className="videoTitle">
// {v.name}
// </span>
// </div>
// </button>
// </li>
// );
// })}
// </ul>
// </div>
// </div>
// <style jsx>{`
// .videoWrapper {
// position: relative;
// padding-bottom: 56.25%;
// height: 0;
// overflow: hidden;
// border: 1px solid #b1b4b6;
// border-radius: 4px;
// }
// .videoWrapper iframe {
// position: absolute;
// top: 0;
// left: 0;
// width: 100%;
// height: 100%;
// }
// .videoTabButton {
// width: 100%;
// text-align: left;
// background: transparent;
// border: 1px solid #b1b4b6;
// border-radius: 4px;
// padding: 10px 12px;
// cursor: pointer;
// }
// .videoTabButton:hover {
// background: #f3f2f1;
// }
// .videoTabButton.active {
// border-color: #1d70b8;
// box-shadow: inset 0 0 0 1px #1d70b8;
// background: #eef4ff;
// }
// .videoTabContent {
// display: flex;
// gap: 12px;
// align-items: center;
// }
// .videoThumbnail {
// width: 120px;
// aspect-ratio: 16 / 9;
// object-fit: cover;
// border-radius: 4px;
// border: 1px solid #b1b4b6;
// background: #000;
// }
// .videoTitle {
// font-weight: 600;
// }
// @media (max-width: 40.0625em) {
// .videoThumbnail {
// width: 90px;
// }
// }
// .thumbnailWrapper {
// position: relative;
// width: 120px;
// flex-shrink: 0;
// }
// .videoThumbnail {
// width: 100%;
// aspect-ratio: 16 / 9;
// object-fit: cover;
// border-radius: 4px;
// border: 1px solid #b1b4b6;
// background: #000;
// }
// /* ▶ Play icon */
// .playIcon {
// position: absolute;
// inset: 0;
// display: flex;
// align-items: center;
// justify-content: center;
// font-size: 32px;
// color: white;
// text-shadow: 0 0 6px rgba(0, 0, 0, 0.7);
// pointer-events: none;
// }
// /* ⏱ Duration badge */
// .durationBadge {
// position: absolute;
// bottom: 6px;
// right: 6px;
// background: rgba(0, 0, 0, 0.8);
// color: white;
// font-size: 12px;
// padding: 2px 6px;
// border-radius: 3px;
// }
// /* 👁 Watched badge */
// .watchedBadge {
// position: absolute;
// top: 6px;
// left: 6px;
// background: #00703c; /* GOV green */
// color: white;
// font-size: 11px;
// padding: 2px 6px;
// border-radius: 3px;
// }
// .videoTabContent {
// display: flex;
// gap: 12px;
// align-items: center;
// }
// .videoTitle {
// font-weight: 600;
// }
// `}</style>
// </div>
// );
// }
import { useEffect, useMemo, useState } from "react"; import { useEffect, useMemo, useState } from "react";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { getBilingualText } from "./summary/utils/helpers";
/** /**
* MediaDetails * MediaDetails
@@ -447,19 +50,19 @@ const MediaDetails = ({ mediaObj, whichTab, title, useNoCookie = true }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const router = useRouter(); const router = useRouter();
const mediaArr = mediaObj?.value || []; const sourceMedia = mediaObj?.value;
const isActive = whichTab ? whichTab === "case-media" : true; const isActive = whichTab ? whichTab === "case-media" : true;
// Build list of playable items (publishable only) // Build list of playable items (publishable only)
const videoItems = useMemo(() => { const videoItems = useMemo(() => {
const isWelsh = router.locale === "cy"; const isWelsh = router.locale === "cy";
return (mediaArr || []) return (sourceMedia || [])
.filter((x) => x?.pinswg_publishtoweb) .filter((x) => x?.pinswg_publishtoweb)
.map((item) => { .map((item) => {
const link = isWelsh const link = isWelsh
? item.pinswg_mediaLinkCY ? item.pinswg_videoplatformurlwelsh
: item.pinswg_mediaLinkEN; : item.pinswg_videoplatformurl;
const videoId = extractYouTubeId(link); const videoId = extractYouTubeId(link);
if (!videoId) return null; if (!videoId) return null;
@@ -468,19 +71,19 @@ const MediaDetails = ({ mediaObj, whichTab, title, useNoCookie = true }) => {
key: key:
item.pinswg_documentid || item.pinswg_documentid ||
item.pinswg_mediaid || item.pinswg_mediaid ||
`${item.pinswg_name}-${videoId}`, `${item.pinswg_eventrecordingid}-${videoId}`,
videoId, videoId,
name: item.pinswg_name || "Video", name: item.pinswg_eventrecordingname || "Video",
description: item.pinswg_description || "", description: item.pinswg_description || "",
// If you later store duration in CRM, map it here (e.g. "03:42") // If you later store duration in CRM, map it here (e.g. "03:42")
duration: item.pinswg_duration || null, duration: item.pinswg_duration || null,
thumbnailHQ: `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`, thumbnailHQ: `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`,
thumbnailMax: `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`, thumbnailMax: `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`,
raw: item, raw: item
}; };
}) })
.filter(Boolean); .filter(Boolean);
}, [mediaArr, router.locale]); }, [sourceMedia, router.locale]);
const [selectedIndex, setSelectedIndex] = useState(0); const [selectedIndex, setSelectedIndex] = useState(0);
@@ -546,14 +149,22 @@ const MediaDetails = ({ mediaObj, whichTab, title, useNoCookie = true }) => {
{selected && ( {selected && (
<div className="govuk-!-margin-bottom-4"> <div className="govuk-!-margin-bottom-4">
<div className="govuk-body"> <div className="govuk-body">
<b>{t("case:event-name-label")}</b>:{" "} <b>{t("case:event-recording-name-label")}</b>:{" "}
{selected.name} {getBilingualText(selected.name, router.locale)}
</div> </div>
{!!selected.description && ( {!!selected.description && (
<div className="govuk-body"> <div className="govuk-body">
<b>{t("case:event-event-name-label")}</b>:{" "} <b>
{selected.description} {t(
"case:event-recording-description-label"
)}
</b>
:{" "}
{getBilingualText(
selected.description,
router.locale
)}
</div> </div>
)} )}
</div> </div>
@@ -629,7 +240,10 @@ const MediaDetails = ({ mediaObj, whichTab, title, useNoCookie = true }) => {
</div> </div>
<span className="videoTitle"> <span className="videoTitle">
{v.name} {getBilingualText(
v.name,
router.locale
)}
</span> </span>
</div> </div>
</button> </button>
@@ -2,22 +2,22 @@ import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Field, change, reduxForm } from "redux-form"; import { Field, change, reduxForm } from "redux-form";
import { useState } from "react"; import { useEffect, useState } from "react";
import { bytesToSize, getThumbnailIconByExtension } from "../../utils"; import { bytesToSize, getThumbnailIconByExtension } from "../../utils";
import { import {
FileUploadField, FileUploadField,
RenderCondtionalRadioList, RenderCondtionalRadioList,
RenderPickList,
RenderRichMultiline, RenderRichMultiline,
shouldDisableButton, shouldDisableButton
} from "./representationElements"; } from "./representationElements";
import RepresentationTypeSelectorBlock from "./elements/RepresentationTypeSelectorBlock";
import { useDropzone } from "react-dropzone"; import { useDropzone } from "react-dropzone";
import { import {
setRepresentationCapacity, setRepresentationCapacity,
setRepresentationSubmit, setRepresentationSubmit,
setFilesForRepresentations, setFilesForRepresentations
} from "../../../store/currentView/action"; } from "../../../store/currentView/action";
const ConsultationAgent = (props) => { const ConsultationAgent = (props) => {
@@ -36,9 +36,23 @@ const ConsultationAgent = (props) => {
setSavingStatus, setSavingStatus,
savingStatus, savingStatus,
setFilesForRepresentations, setFilesForRepresentations,
onRepresentationTypeChange,
onTypeSelectionConfirmed
} = props; } = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone(); const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const persistedRepresentationType =
currentView?.caseReference?.repDetails?.representationType;
const [typeSelectionConfirmed, setTypeSelectionConfirmed] = useState(
!!persistedRepresentationType
);
useEffect(() => {
if (persistedRepresentationType) {
setTypeSelectionConfirmed(true);
}
}, [persistedRepresentationType]);
if (JSON.stringify(formObj) != "{}") { if (JSON.stringify(formObj) != "{}") {
setRepFileName(formObj.representationForm.values); setRepFileName(formObj.representationForm.values);
@@ -63,63 +77,43 @@ const ConsultationAgent = (props) => {
)); ));
const required = (value) => (value ? undefined : "Required"); const required = (value) => (value ? undefined : "Required");
const selectedRepresentationType =
formObj?.representationForm?.values?.representationType ||
props.representationType;
const isTypeConfirmed =
!!selectedRepresentationType && typeSelectionConfirmed;
const selectedRepresentationTypeDisplay =
router.locale == "cy"
? selectedRepresentationType == "Questionnaire"
? "Holiadur"
: selectedRepresentationType == "Statement"
? "Datganiad"
: selectedRepresentationType == "Final comments"
? "Sylwadau terfynol"
: selectedRepresentationType
: selectedRepresentationType;
return ( return (
<> <>
<div className="govuk-grid-row"> <RepresentationTypeSelectorBlock
<div className="govuk-form-group"> t={t}
{typeof formObj.representationForm.values headingText={t(
.representationType == "undefined" && "myrepresentations:consultation-from-an-agent-heading"
props.representationType != "Select..." ? ( )}
<> kindLabelText={t(
<h2 className="govuk-heading-m "> "myrepresentations:kind-of-consultation-label"
{t( )}
"myrepresentations:consultation-from-an-agent-heading" isTypeSelected={isTypeConfirmed}
)} selectedTypeDisplay={selectedRepresentationTypeDisplay}
</h2> representationType={selectedRepresentationType}
setTypeSelectionConfirmed={setTypeSelectionConfirmed}
<label onRepresentationTypeChange={onRepresentationTypeChange}
className="govuk-label govuk-body-m" onTypeSelectionConfirmed={onTypeSelectionConfirmed}
htmlFor="representationType" optionsArr={appellantApplicantRepresentationArr}
> />
{t( {isTypeConfirmed && (
"myrepresentations:kind-of-consultation-label"
)}
</label>
<Field
name="representationType"
component={RenderPickList}
datafieldname="representationType"
optionsArr={
appellantApplicantRepresentationArr
}
/>
</>
) : (
<label className="govuk-label govuk-body-m">
{t("myrepresentations:representation-type")}:{" "}
{router.locale == "cy"
? formObj.representationForm.values
.representationType == "Questionnaire"
? "Holiadur"
: formObj.representationForm.values
.representationType == "Statement"
? "Datganiad"
: formObj.representationForm.values
.representationType ==
"Final comments"
? "Sylwadau terfynol"
: formObj.representationForm.values
.representationType
: formObj.representationForm.values
.representationType}
</label>
)}
</div>
</div>
{(typeof props.representationType != "undefined" ||
typeof formObj.representationForm.values
.representationType != "undefined") && (
<> <>
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
@@ -146,8 +140,7 @@ const ConsultationAgent = (props) => {
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
<p className="govuk-body"> <p className="govuk-body">
{formObj.representationForm.values {selectedRepresentationType ==
.representationType ==
"Consultation Response" "Consultation Response"
? t( ? t(
"myrepresentations:enter-comment-label" "myrepresentations:enter-comment-label"
@@ -160,8 +153,7 @@ const ConsultationAgent = (props) => {
className="govuk-fieldset" className="govuk-fieldset"
aria-describedby="commentBox-hint" aria-describedby="commentBox-hint"
> >
{formObj.representationForm.values {selectedRepresentationType ==
.representationType ==
"Consultation Response" && ( "Consultation Response" && (
<div className="govuk-form-group"> <div className="govuk-form-group">
<Field <Field
@@ -223,7 +215,8 @@ const ConsultationAgent = (props) => {
"myrepresentations:add-files-label" "myrepresentations:add-files-label"
)} )}
ticketnumber={ ticketnumber={
props.props.caseReference props.currentView.caseReference
.ticketnumber
} }
hint={"sdsd"} hint={"sdsd"}
fileList={ fileList={
@@ -265,8 +258,7 @@ const ConsultationAgent = (props) => {
</div> </div>
</> </>
)} )}
{typeof formObj.representationForm.values.representationType != {isTypeConfirmed && (
"undefined" && (
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-button-group"> <div className="govuk-button-group">
<button <button
@@ -275,7 +267,7 @@ const ConsultationAgent = (props) => {
data-module="govuk-button" data-module="govuk-button"
disabled={shouldDisableButton({ disabled={shouldDisableButton({
props, props,
formObj, formObj
})} })}
> >
{t("common:continue-button")} {t("common:continue-button")}
@@ -349,7 +341,7 @@ const mapDispatchToProps = (dispatch) => ({
setFilesForRepresentations: (fileList) => { setFilesForRepresentations: (fileList) => {
dispatch(setFilesForRepresentations(fileList)); dispatch(setFilesForRepresentations(fileList));
}, }
}); });
export default connect( export default connect(
@@ -359,6 +351,6 @@ export default connect(
reduxForm({ reduxForm({
form: "representationForm", form: "representationForm",
enableReinitialize: true, enableReinitialize: true,
destroyOnUnmount: false, destroyOnUnmount: false
})(ConsultationAgent) })(ConsultationAgent)
); );
@@ -2,21 +2,21 @@ import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Field, change, reduxForm } from "redux-form"; import { Field, change, reduxForm } from "redux-form";
import { useState } from "react"; import { useEffect, useState } from "react";
import { bytesToSize, getThumbnailIconByExtension } from "../../utils"; import { bytesToSize, getThumbnailIconByExtension } from "../../utils";
import { import {
FileUploadField, FileUploadField,
RenderPickList,
RenderRichMultiline, RenderRichMultiline,
shouldDisableButton, shouldDisableButton
} from "./representationElements"; } from "./representationElements";
import RepresentationTypeSelectorBlock from "./elements/RepresentationTypeSelectorBlock";
import { useDropzone } from "react-dropzone"; import { useDropzone } from "react-dropzone";
import { import {
setRepresentationCapacity, setRepresentationCapacity,
setRepresentationSubmit, setRepresentationSubmit,
setFilesForRepresentations, setFilesForRepresentations
} from "../../../store/currentView/action"; } from "../../../store/currentView/action";
const ConsultationAppellant = (props) => { const ConsultationAppellant = (props) => {
@@ -35,9 +35,23 @@ const ConsultationAppellant = (props) => {
setSavingStatus, setSavingStatus,
savingStatus, savingStatus,
setFilesForRepresentations, setFilesForRepresentations,
onRepresentationTypeChange,
onTypeSelectionConfirmed
} = props; } = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone(); const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const persistedRepresentationType =
currentView?.caseReference?.repDetails?.representationType;
const [typeSelectionConfirmed, setTypeSelectionConfirmed] = useState(
!!persistedRepresentationType
);
useEffect(() => {
if (persistedRepresentationType) {
setTypeSelectionConfirmed(true);
}
}, [persistedRepresentationType]);
console.log(JSON.stringify(formObj) == "{}" ? "empty" : "value"); console.log(JSON.stringify(formObj) == "{}" ? "empty" : "value");
if (JSON.stringify(formObj) != "{}") { if (JSON.stringify(formObj) != "{}") {
@@ -62,66 +76,47 @@ const ConsultationAppellant = (props) => {
index === self.findIndex((t) => t.name === value.name) index === self.findIndex((t) => t.name === value.name)
); );
const selectedRepresentationType =
formObj?.representationForm?.values?.representationType ||
props.representationType;
const isTypeConfirmed =
!!selectedRepresentationType && typeSelectionConfirmed;
const selectedRepresentationTypeDisplay =
router.locale == "cy"
? selectedRepresentationType == "Questionnaire"
? "Holiadur"
: selectedRepresentationType == "Statement"
? "Datganiad"
: selectedRepresentationType == "Final comments"
? "Sylwadau terfynol"
: selectedRepresentationType
: selectedRepresentationType;
return ( return (
<> <>
<div className="govuk-grid-row"> <RepresentationTypeSelectorBlock
<div className="govuk-form-group"> t={t}
{typeof formObj.representationForm.values headingText={t(
.representationType == "undefined" && "myrepresentations:consultation-from-an-appellant-heading"
props.representationType != "Select..." ? ( )}
<> kindLabelText={t(
<h2 className="govuk-heading-m "> "myrepresentations:kind-of-consultation-label"
{t( )}
"myrepresentations:consultation-from-an-appellant-heading" isTypeSelected={isTypeConfirmed}
)} selectedTypeDisplay={selectedRepresentationTypeDisplay}
</h2> representationType={selectedRepresentationType}
<label setTypeSelectionConfirmed={setTypeSelectionConfirmed}
className="govuk-label govuk-body-m" onRepresentationTypeChange={onRepresentationTypeChange}
htmlFor="representationType" onTypeSelectionConfirmed={onTypeSelectionConfirmed}
> optionsArr={appellantApplicantRepresentationArr}
{t( />
"myrepresentations:kind-of-consultation-label" {isTypeConfirmed && (
)}
</label>
<Field
name="representationType"
component={RenderPickList}
datafieldname="representationType"
optionsArr={
appellantApplicantRepresentationArr
}
/>
</>
) : (
<label className="govuk-label govuk-body-m">
{t("myrepresentations:representation-type")}:{" "}
{router.locale == "cy"
? formObj.representationForm.values
.representationType == "Questionnaire"
? "Holiadur"
: formObj.representationForm.values
.representationType == "Statement"
? "Datganiad"
: formObj.representationForm.values
.representationType ==
"Final comments"
? "Sylwadau terfynol"
: formObj.representationForm.values
.representationType
: formObj.representationForm.values
.representationType}
</label>
)}
</div>
</div>
{(typeof props.representationType != "undefined" ||
typeof formObj.representationForm.values
.representationType != "undefined") && (
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
<p className="govuk-body"> <p className="govuk-body">
{formObj.representationForm.values {selectedRepresentationType ==
.representationType ==
"Consultation Response" "Consultation Response"
? t("myrepresentations:enter-comment-label") ? t("myrepresentations:enter-comment-label")
: t( : t(
@@ -132,8 +127,7 @@ const ConsultationAppellant = (props) => {
className="govuk-fieldset" className="govuk-fieldset"
aria-describedby="commentBox-hint" aria-describedby="commentBox-hint"
> >
{formObj.representationForm.values {selectedRepresentationType ==
.representationType ==
"Consultation Response" && ( "Consultation Response" && (
<div className="govuk-form-group"> <div className="govuk-form-group">
<Field <Field
@@ -195,7 +189,10 @@ const ConsultationAppellant = (props) => {
label={t( label={t(
"myrepresentations:add-files-label" "myrepresentations:add-files-label"
)} )}
ticketnumber={props.props.caseReference} ticketnumber={
props.currentView.caseReference
.ticketnumber
}
hint={"sdsd"} hint={"sdsd"}
fileList={ fileList={
props.currentView.fileList props.currentView.fileList
@@ -233,8 +230,7 @@ const ConsultationAppellant = (props) => {
</div> </div>
)} )}
{typeof formObj.representationForm.values.representationType != {isTypeConfirmed && (
"undefined" && (
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-button-group"> <div className="govuk-button-group">
<button <button
@@ -243,7 +239,7 @@ const ConsultationAppellant = (props) => {
data-module="govuk-button" data-module="govuk-button"
disabled={shouldDisableButton({ disabled={shouldDisableButton({
props, props,
formObj, formObj
})} })}
> >
{t("common:continue-button")} {t("common:continue-button")}
@@ -253,7 +249,6 @@ const ConsultationAppellant = (props) => {
onClick={() => { onClick={() => {
setRepresentationCapacity(); setRepresentationCapacity();
props.updateField( props.updateField(
"representationForm",
"representationType", "representationType",
"" ""
); );
@@ -321,7 +316,7 @@ const mapDispatchToProps = (dispatch) => {
setFilesForRepresentations: (fileList) => { setFilesForRepresentations: (fileList) => {
dispatch(setFilesForRepresentations(fileList)); dispatch(setFilesForRepresentations(fileList));
}, }
}; };
}; };
@@ -332,6 +327,6 @@ export default connect(
reduxForm({ reduxForm({
form: "representationForm", form: "representationForm",
enableReinitialize: true, enableReinitialize: true,
destroyOnUnmount: false, destroyOnUnmount: false
})(ConsultationAppellant) })(ConsultationAppellant)
); );
@@ -2,22 +2,22 @@ import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Field, change, reduxForm } from "redux-form"; import { Field, change, reduxForm } from "redux-form";
import { useState } from "react"; import { useEffect, useState } from "react";
import { bytesToSize, getThumbnailIconByExtension } from "../../utils"; import { bytesToSize, getThumbnailIconByExtension } from "../../utils";
import { import {
FileUploadField, FileUploadField,
RenderCondtionalRadioList, RenderCondtionalRadioList,
RenderPickList,
RenderRichMultiline, RenderRichMultiline,
shouldDisableButton, shouldDisableButton
} from "./representationElements"; } from "./representationElements";
import RepresentationTypeSelectorBlock from "./elements/RepresentationTypeSelectorBlock";
import { useDropzone } from "react-dropzone"; import { useDropzone } from "react-dropzone";
import { import {
setRepresentationCapacity, setRepresentationCapacity,
setRepresentationSubmit, setRepresentationSubmit,
setFilesForRepresentations, setFilesForRepresentations
} from "../../../store/currentView/action"; } from "../../../store/currentView/action";
const ConsultationInterestedPartyPerson = (props) => { const ConsultationInterestedPartyPerson = (props) => {
@@ -35,11 +35,25 @@ const ConsultationInterestedPartyPerson = (props) => {
setSavingStatus, setSavingStatus,
savingStatus, savingStatus,
setFilesForRepresentations, setFilesForRepresentations,
onRepresentationTypeChange,
onTypeSelectionConfirmed
} = props; } = props;
const required = (value) => (value ? undefined : "Required"); const required = (value) => (value ? undefined : "Required");
const { acceptedFiles, getRootProps, getInputProps } = useDropzone(); const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const persistedRepresentationType =
props.currentView?.caseReference?.repDetails?.representationType;
const [typeSelectionConfirmed, setTypeSelectionConfirmed] = useState(
!!persistedRepresentationType
);
useEffect(() => {
if (persistedRepresentationType) {
setTypeSelectionConfirmed(true);
}
}, [persistedRepresentationType]);
if (JSON.stringify(formObj) != "{}") { if (JSON.stringify(formObj) != "{}") {
setRepFileName(formObj.representationForm.values); setRepFileName(formObj.representationForm.values);
@@ -62,67 +76,46 @@ const ConsultationInterestedPartyPerson = (props) => {
{file.path} - {file.size} bytes {file.path} - {file.size} bytes
</li> </li>
)); ));
const selectedRepresentationType =
formObj?.representationForm?.values?.representationType ||
props.representationType;
const isTypeConfirmed =
!!selectedRepresentationType && typeSelectionConfirmed;
const selectedRepresentationTypeDisplay =
router.locale == "cy"
? selectedRepresentationType == "Questionnaire"
? "Holiadur"
: selectedRepresentationType == "Statement"
? "Datganiad"
: selectedRepresentationType == "Final comments"
? "Sylwadau terfynol"
: selectedRepresentationType
: selectedRepresentationType;
return ( return (
<> <>
<div className="govuk-grid-row"> <RepresentationTypeSelectorBlock
<div className="govuk-form-group"> t={t}
{typeof formObj.representationForm.values headingText={t(
.representationType == "undefined" && "myrepresentations:consultation-from-an-interested-person-heading"
props.representationType != "Select..." ? ( )}
<> kindLabelText={t(
<h2 className="govuk-heading-m "> "myrepresentations:kind-of-consultation-label"
{t( )}
"myrepresentations:consultation-from-an-interested-person-heading" isTypeSelected={isTypeConfirmed}
)} selectedTypeDisplay={selectedRepresentationTypeDisplay}
</h2> representationType={selectedRepresentationType}
setTypeSelectionConfirmed={setTypeSelectionConfirmed}
<label onRepresentationTypeChange={onRepresentationTypeChange}
className="govuk-label govuk-body-m" onTypeSelectionConfirmed={onTypeSelectionConfirmed}
htmlFor="representationType" optionsArr={interestedPersonRepresentationArr}
> validate={[required]}
{t( errorMsg={t("myrepresentations:select-an-option-label")}
"myrepresentations:kind-of-consultation-label" />
)} {isTypeConfirmed && (
</label>
<Field
name="representationType"
component={RenderPickList}
datafieldname="representationType"
validate={[required]}
optionsArr={
interestedPersonRepresentationArr
}
errorMsg={t(
"myrepresentations:select-an-option-label"
)}
/>
</>
) : (
<label className="govuk-label govuk-body-m">
{t("myrepresentations:representation-type")}:{" "}
{router.locale == "cy"
? formObj.representationForm.values
.representationType == "Questionnaire"
? "Holiadur"
: formObj.representationForm.values
.representationType == "Statement"
? "Datganiad"
: formObj.representationForm.values
.representationType ==
"Final comments"
? "Sylwadau terfynol"
: formObj.representationForm.values
.representationType
: formObj.representationForm.values
.representationType}
</label>
)}
</div>
</div>
{(typeof props.representationType != "undefined" ||
typeof formObj.representationForm.values
.representationType != "undefined") && (
<> <>
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
@@ -134,7 +127,7 @@ const ConsultationInterestedPartyPerson = (props) => {
t( t(
"myrepresentations:questionnaire-yes" "myrepresentations:questionnaire-yes"
), ),
t("myrepresentations:questionnaire-no"), t("myrepresentations:questionnaire-no")
]} ]}
id="representationOnBehalfOf" id="representationOnBehalfOf"
className="govuk-radios__input" className="govuk-radios__input"
@@ -154,8 +147,7 @@ const ConsultationInterestedPartyPerson = (props) => {
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
<p className="govuk-body"> <p className="govuk-body">
{formObj.representationForm.values {selectedRepresentationType ==
.representationType ==
"Consultation Response" "Consultation Response"
? t( ? t(
"myrepresentations:enter-comment-label" "myrepresentations:enter-comment-label"
@@ -169,8 +161,7 @@ const ConsultationInterestedPartyPerson = (props) => {
aria-describedby="commentBox-hint" aria-describedby="commentBox-hint"
> >
{" "} {" "}
{formObj.representationForm.values {selectedRepresentationType ==
.representationType ==
"Consultation Response" && ( "Consultation Response" && (
<div className="govuk-form-group"> <div className="govuk-form-group">
<Field <Field
@@ -232,7 +223,8 @@ const ConsultationInterestedPartyPerson = (props) => {
"myrepresentations:add-files-label" "myrepresentations:add-files-label"
)} )}
ticketnumber={ ticketnumber={
props.props.caseReference props.currentView.caseReference
.ticketnumber
} }
hint={"sdsd"} hint={"sdsd"}
fileList={ fileList={
@@ -274,8 +266,7 @@ const ConsultationInterestedPartyPerson = (props) => {
</div> </div>
</> </>
)} )}
{typeof formObj.representationForm.values.representationType != {isTypeConfirmed && (
"undefined" && (
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-button-group"> <div className="govuk-button-group">
<button <button
@@ -284,7 +275,7 @@ const ConsultationInterestedPartyPerson = (props) => {
data-module="govuk-button" data-module="govuk-button"
disabled={shouldDisableButton({ disabled={shouldDisableButton({
props, props,
formObj, formObj
})} })}
> >
{t("common:continue-button")} {t("common:continue-button")}
@@ -363,7 +354,7 @@ const mapDispatchToProps = (dispatch) => ({
dispatch(change(form, field, newValue)), dispatch(change(form, field, newValue)),
setFilesForRepresentations: (fileList) => { setFilesForRepresentations: (fileList) => {
dispatch(setFilesForRepresentations(fileList)); dispatch(setFilesForRepresentations(fileList));
}, }
}); });
export default connect( export default connect(
@@ -373,6 +364,6 @@ export default connect(
reduxForm({ reduxForm({
form: "representationForm", form: "representationForm",
enableReinitialize: true, enableReinitialize: true,
destroyOnUnmount: false, destroyOnUnmount: false
})(ConsultationInterestedPartyPerson) })(ConsultationInterestedPartyPerson)
); );
@@ -1,17 +1,134 @@
import { Field } from "redux-form"; import { Field } from "redux-form";
import router from "next/router";
import Link from "next/link";
import { RenderPickList } from "../representationElements"; const getRepresentationTypeHint = (option, t) => {
const map = {
"Statement": t("myrepresentations:rep-type-statement-hint"),
"Final comments": t("myrepresentations:rep-type-final-comments-hint"),
"Questionnaire": t("myrepresentations:rep-type-questionnaire-hint"),
"Consultation Response": t(
"myrepresentations:rep-type-consultation-hint"
),
"Local Impact Report": t("myrepresentations:rep-type-lir-hint"),
"Marine Impact Report": t("myrepresentations:rep-type-mir-hint")
};
return map[option] || "";
};
const getRepresentationTypeLabel = (option) => {
if (router.locale !== "cy") {
return option;
}
if (option === "Questionnaire") {
return "Holiadur";
}
if (option === "Statement") {
return "Datganiad";
}
if (option === "Final comments") {
return "Sylwadau terfynol";
}
return option;
};
const RenderRepresentationTypeRadioList = ({
name,
optionsArr,
errorMsg,
onRepresentationTypeChange,
input,
meta: { touched, error }
}) => {
return (
<div
className={
touched && error
? "govuk-form-group govuk-form-group--error"
: "govuk-form-group"
}
>
{touched && error && (
<span id={`${name}-error`} className="govuk-error-message">
<span className="govuk-visually-hidden">Error:</span>{" "}
{errorMsg}
</span>
)}
<div className="govuk-radios govuk-radios--small">
{optionsArr.map((option, index) => {
const optionId = `${name}_${index}`;
const hintId = `${optionId}-hint`;
return (
<div
key={option.value || optionId}
className="govuk-radios__item representation-type-option"
>
<input
className="govuk-radios__input"
id={optionId}
name={input.name}
type="radio"
value={option.value}
checked={input.value === option.value}
onChange={() => input.onChange(option.value)}
aria-describedby={
option.hint ? hintId : undefined
}
/>
<label
className="govuk-label govuk-radios__label govuk-!-font-weight-bold "
htmlFor={optionId}
>
{option.label}
{option.hint && (
<div
id={hintId}
className="govuk-hint govuk-!-margin-top-2"
>
{option.hint}
</div>
)}
</label>
</div>
);
})}
</div>
</div>
);
};
const RepresentationTypeSelectorBlock = ({ const RepresentationTypeSelectorBlock = ({
t, t,
headingText, headingText,
kindLabelText, kindLabelText,
isTypeSelected, isTypeSelected,
selectedTypeDisplay, selectedTypeDisplay,
representationType,
setTypeSelectionConfirmed,
onRepresentationTypeChange,
onTypeSelectionConfirmed,
optionsArr, optionsArr,
validate, validate,
errorMsg errorMsg
}) => { }) => {
const enhancedOptions = (optionsArr || [])
.filter((option) => option && option !== "Select...")
.map((option) => ({
value: option,
label: getRepresentationTypeLabel(option),
hint: getRepresentationTypeHint(option, t)
}));
const hasSelectableOptions = enhancedOptions.length > 0;
return ( return (
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
@@ -20,20 +137,59 @@ const RepresentationTypeSelectorBlock = ({
<h2 className="govuk-heading-m ">{headingText}</h2> <h2 className="govuk-heading-m ">{headingText}</h2>
<label <label
className="govuk-label govuk-body-m" className="govuk-label govuk-body-m govuk-!-margin-bottom-2"
htmlFor="representationType" htmlFor="representationType"
> >
{kindLabelText} {kindLabelText}
</label> </label>
<Field {hasSelectableOptions ? (
name="representationType" <>
component={RenderPickList} <Field
datafieldname="representationType" name="representationType"
validate={validate} component={
optionsArr={optionsArr} RenderRepresentationTypeRadioList
errorMsg={errorMsg} }
/> onRepresentationTypeChange={
onRepresentationTypeChange
}
validate={validate}
optionsArr={enhancedOptions}
errorMsg={errorMsg}
/>
<button
type="button"
className="govuk-button"
data-module="govuk-button"
disabled={!representationType}
onClick={() => {
if (representationType) {
setTypeSelectionConfirmed(true);
onTypeSelectionConfirmed &&
onTypeSelectionConfirmed(
representationType
);
}
}}
>
{t("common:continue-button")}
</button>
</>
) : (
<>
<p className="govuk-body">
{t(
"myrepresentations:representation-type-unavailable-label"
)}
</p>
<Link className="govuk-link" href="/">
{t(
"myrepresentations:return-home-link-label"
)}
</Link>
</>
)}
</> </>
) : ( ) : (
<label className="govuk-label govuk-body-m"> <label className="govuk-label govuk-body-m">
+58 -260
View File
@@ -52,12 +52,18 @@ import {
buildSubmitEnrichedValues, buildSubmitEnrichedValues,
runFinalisationSequence runFinalisationSequence
} from "./utils/finalisationBoundary"; } from "./utils/finalisationBoundary";
import { buildRepresentationContext } from "./utils/buildRepsArrRules";
import { getAvailableRepresentationTypes } from "../../../lib/domain/representation-type-policy/getAvailableRepresentationTypes";
let MakeRepresentation = (props) => { let MakeRepresentation = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
const [savingStatus, setSavingStatus] = useState(false); const [savingStatus, setSavingStatus] = useState(false);
const [finaliseAppealProcess, setFinaliseAppealProcess] = useState(false); const [finaliseAppealProcess, setFinaliseAppealProcess] = useState(false);
const [representationTypeConfirmed, setRepresentationTypeConfirmed] =
useState(
!!props?.currentView?.caseReference?.repDetails?.representationType
);
//const [questionnaireCount, setQuestionnaireCount] = useState(0); //const [questionnaireCount, setQuestionnaireCount] = useState(0);
@@ -249,9 +255,14 @@ let MakeRepresentation = (props) => {
var detailsObj = {}; var detailsObj = {};
// const isAppellant =
// props.props.accountDetails.accountDetails.pinswg_typeofinvolvement ===
// 846040001;
const isAppellant = const isAppellant =
props.props.accountDetails.accountDetails.pinswg_typeofinvolvement === props.props.accountDetails.accountDetails.emailaddress1 ==
846040001; props.searchResultsObj?.searchResultsObj?.value[0].customerid_contact
.emailaddress1;
const capacityOptionsArr = []; const capacityOptionsArr = [];
@@ -286,7 +297,7 @@ let MakeRepresentation = (props) => {
}); });
let resultsObj = findResultsObjForCurrentReference({ let resultsObj = findResultsObjForCurrentReference({
"currentReference": currentView.caseReference.currentReference, "currentReference": currentView.caseReference.ticketnumber,
"caseResultsSource": caseResultsSource "caseResultsSource": caseResultsSource
}); });
@@ -303,259 +314,25 @@ let MakeRepresentation = (props) => {
const safeDetailsObj = detailsObj || {}; const safeDetailsObj = detailsObj || {};
const safeResultsObj = resultsObj || {}; const safeResultsObj = resultsObj || {};
// blocked out build reps arr for refactoring
// const buildRepsArr = (detailsObj) => {
// const buildArr = [];
// const todaysDate = new Date();
// const isDNS = appealType === 846040011;
// const isSIPS = appealType === 846040002;
// const isIP = true;
// const isAppellant =
// props.props.accountDetails.accountDetails
// .pinswg_typeofinvolvement === 846040001;
// // Determine key dates based on appeal type
// const startDate = new Date(
// isDNS
// ? detailsObj.pinswg_applicationacceptedasvalid
// : detailsObj.pinswg_startdate || detailsObj.pinswg_startdates
// );
// const questionnaireDate = new Date(
// isDNS
// ? detailsObj.pinswg_endofrepresentationperiod
// : detailsObj.pinswg_questionnaireduedate
// );
// questionnaireDate.setHours(23, 59, 59, 999);
// const finalCommentsDate = new Date(
// isDNS
// ? detailsObj.pinswg_endofrepresentationperiod
// : detailsObj.pinswg_finalcommentsduedate
// );
// finalCommentsDate.setHours(23, 59, 59, 999);
// const statementDueDate = new Date(
// isDNS
// ? detailsObj.pinswg_endofrepresentationperiod
// : detailsObj.pinswg_statementduedate ||
// detailsObj.pinswg_statementsduedate
// );
// statementDueDate.setHours(23, 59, 59, 999);
// // Shared condition
// const isWithin = (start, end) =>
// todaysDate >= start && todaysDate <= end;
// const notAppeal = (...types) => !types.includes(appealType);
// // Questionnaire
// if (
// isLPA &&
// notAppeal(846040019, 846040011, 846040015, 846040016) &&
// isWithin(startDate, finalCommentsDate)
// ) {
// buildArr.push("Questionnaire");
// }
// // DNS LPA Documents
// if (
// isLPA &&
// isDNS &&
// appealType !== 846040019 &&
// isWithin(startDate, finalCommentsDate)
// ) {
// buildArr.push("Local Impact Report", "Statement");
// }
// // Non-DNS Statement
// if (
// !isDNS &&
// appealType !== 846040004 &&
// isWithin(startDate, statementDueDate)
// ) {
// buildArr.push("Statement");
// }
// // DNS Non-LPA Statement
// if (isDNS && !isLPA && isWithin(startDate, statementDueDate)) {
// buildArr.push("Statement");
// }
// // Final Comments
// const isSpecialistNonHearing =
// currentView.caseReference.specialistProcess !== 846040001;
// if (
// (appealType !== 846040004 ||
// (appealType === 846040015 && isSpecialistNonHearing)) &&
// isWithin(statementDueDate, finalCommentsDate)
// ) {
// buildArr.push("Final comments");
// }
// if (
// appealType === 846040004 &&
// isSpecialistNonHearing &&
// isWithin(statementDueDate, finalCommentsDate)
// ) {
// buildArr.push("Final comments");
// }
// // Remove "Statement" for LPA Advert Part 3 (no statement)
// if (
// isLPA &&
// appealType === 846040018 &&
// currentView.caseReference.specialistProcess === 846040000
// ) {
// const index = buildArr.indexOf("Statement");
// if (index !== -1) buildArr.splice(index, 1);
// }
// // SIPS-related documents
// if (isSIPS) {
// const capacity = repCapacityType();
// if (capacity === "appellant") {
// buildArr.push("Consultation Response");
// } else {
// buildArr.push("Consultation Response", "Local Impact Report");
// }
// if (isNRW) {
// buildArr.push("Marine Impact Report");
// }
// }
// return buildArr;
// };
const buildRepsArr = (detailsObj) => { const buildRepsArr = (detailsObj) => {
const buildArr = []; const isCaseOwner =
const todaysDate = new Date(); props.props.accountDetails.accountDetails.emailaddress1 ==
props.searchResultsObj?.searchResultsObj?.value[0]
.customerid_contact.emailaddress1;
const isDNS = appealType === 846040011; const ctx = buildRepresentationContext({
const isSIPS = appealType === 846040002; detailsObj,
const specialistProcess = currentView.caseReference.specialistProcess; appealType,
specialistProcess: currentView.caseReference.specialistProcess,
involvementType:
props.props?.accountDetails?.accountDetails
?.pinswg_typeofinvolvement,
selectedCapacity: repCapacityType(),
isCaseOwner,
isNRW
});
const isSpecialistNonHearing = specialistProcess !== 846040001; return getAvailableRepresentationTypes(ctx);
const involvementType =
props.props?.accountDetails?.accountDetails
?.pinswg_typeofinvolvement;
const isAppellant = involvementType === 846040001;
const isAgent = involvementType === 846040000;
const isIP = involvementType === 846040061;
//const isLPA = involvementType === 846040000;
const startDate = new Date(
isDNS
? detailsObj.pinswg_applicationacceptedasvalid
: detailsObj.pinswg_startdate || detailsObj.pinswg_startdates
);
const finalCommentsDate = new Date(
isDNS
? detailsObj.pinswg_endofrepresentationperiod
: detailsObj.pinswg_finalcommentsduedate
);
finalCommentsDate.setHours(23, 59, 59, 999);
const statementDueDate = new Date(
isDNS
? detailsObj.pinswg_endofrepresentationperiod
: detailsObj.pinswg_statementduedate ||
detailsObj.pinswg_statementsduedate
);
statementDueDate.setHours(23, 59, 59, 999);
const isWithin = (start, end) =>
todaysDate >= start && todaysDate <= end;
const addRep = (value) => {
if (!buildArr.includes(value)) {
buildArr.push(value);
}
};
const canAddQuestionnaire =
isLPA &&
![846040019, 846040011, 846040015, 846040016].includes(
appealType
) &&
isWithin(startDate, finalCommentsDate);
if (canAddQuestionnaire) {
addRep("Questionnaire");
}
const isLpaAdvertPart3NoStatement =
isLPA &&
appealType === 846040018 &&
specialistProcess === 846040000;
const canAddDnsLpaDocs =
isLPA &&
isDNS &&
appealType !== 846040019 &&
!isAppellant &&
isWithin(startDate, finalCommentsDate);
if (canAddDnsLpaDocs) {
addRep("Local Impact Report");
addRep("Statement");
}
const canAddStatementForNonDns =
!isDNS &&
appealType !== 846040004 &&
!isLpaAdvertPart3NoStatement &&
!isAppellant &&
isWithin(startDate, statementDueDate);
if (canAddStatementForNonDns) {
addRep("Statement");
}
const canAddStatementForDnsNonLpa =
isDNS &&
!isLPA &&
!isAppellant &&
isWithin(startDate, statementDueDate);
if (canAddStatementForDnsNonLpa) {
addRep("Statement");
}
const canSubmitFinalComments = isAppellant || isAgent || isIP || isLPA;
const canAddFinalComments =
canSubmitFinalComments &&
isWithin(statementDueDate, finalCommentsDate) &&
(appealType !== 846040004 || isSpecialistNonHearing);
// IP and Agents and LPA can do final comments.
if (canAddFinalComments) {
addRep("Final comments");
}
if (isSIPS) {
const capacity = repCapacityType();
addRep("Consultation Response");
if (capacity !== "appellant") {
addRep("Local Impact Report");
}
if (isNRW) {
addRep("Marine Impact Report");
}
}
return buildArr;
}; };
const repCapacityType = () => { const repCapacityType = () => {
@@ -586,7 +363,10 @@ let MakeRepresentation = (props) => {
updateRepresentation, updateRepresentation,
setSavingStatus, setSavingStatus,
savingStatus, savingStatus,
setCurrentReference setCurrentReference,
onRepresentationTypeChange: () =>
setRepresentationTypeConfirmed(false),
onTypeSelectionConfirmed: () => setRepresentationTypeConfirmed(true)
}; };
const { controlKey } = resolveRepresentationControlKey({ const { controlKey } = resolveRepresentationControlKey({
@@ -791,7 +571,7 @@ let MakeRepresentation = (props) => {
loggedinUserEmail loggedinUserEmail
} = props.props; } = props.props;
const incidentID = props.appealType.caseReference.incidentid; const incidentID = props.appealType.caseReference.incidentid;
const currentRef = caseReferenceObj.currentReference; const currentRef = caseReferenceObj.ticketnumber;
const containerID = accountDetails.containerID; const containerID = accountDetails.containerID;
setSavingStatus(useSaveStatus); setSavingStatus(useSaveStatus);
@@ -1092,15 +872,29 @@ let MakeRepresentation = (props) => {
// Prepare data object for upload // Prepare data object for upload
const dataObj = cleanedValues; const dataObj = cleanedValues;
const caseFolderReference =
props.caseReference ||
dataObj.ticketnumber ||
currentView?.caseReference?.ticketnumber ||
currentView?.caseReference?.currentReference ||
dataObj.caseRef ||
"";
// Update links on values // Update links on values
const updatedValues = updateLinks(cleanedValues); const updatedValues = updateLinks(cleanedValues);
const resolvedContainerID =
updatedValues.containerID ||
dataObj.containerID ||
props?.props?.accountDetails?.containerID ||
props?.props?.accountDetails?.accountDetails?.containerID;
// Perform file upload and return the promise // Perform file upload and return the promise
return uploadRepFiles( return uploadRepFiles(
dataObj, dataObj,
[{}], [{}],
updatedValues.containerID, resolvedContainerID,
`${props.caseReference}/${dataObj.repfile_name}` `${caseFolderReference}/${dataObj.repfile_name}`
); );
}; };
@@ -1108,7 +902,7 @@ let MakeRepresentation = (props) => {
const isQuestionnaire = const isQuestionnaire =
formObj?.representationForm?.values?.representationType === formObj?.representationForm?.values?.representationType ===
"Questionnaire"; "Questionnaire" && representationTypeConfirmed;
const appealIsConsultation = appealType === 846040002; const appealIsConsultation = appealType === 846040002;
const appealIsLocalImpact = const appealIsLocalImpact =
@@ -1210,8 +1004,12 @@ let MakeRepresentation = (props) => {
<RepresentationFlowFormStage <RepresentationFlowFormStage
t={t} t={t}
appealIsConsultation={appealIsConsultation} appealIsConsultation={appealIsConsultation}
currentReference={ currentReference={ticketnumber}
currentView.caseReference.currentReference caseTitle={
currentView?.caseReference?.repDetails
?.pinswg_name ||
currentView?.currentReference ||
currentView?.caseReference.currentReference
} }
whichControl={whichControl} whichControl={whichControl}
appealIsLocalImpact={appealIsLocalImpact} appealIsLocalImpact={appealIsLocalImpact}
@@ -2,7 +2,7 @@ import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Field, change, reduxForm } from "redux-form"; import { Field, change, reduxForm } from "redux-form";
import { useState } from "react"; import { useEffect, useState } from "react";
import { bytesToSize, getThumbnailIconByExtension } from "../../utils"; import { bytesToSize, getThumbnailIconByExtension } from "../../utils";
import { import {
@@ -36,10 +36,24 @@ const RepAgent = (props) => {
updateRepresentation, updateRepresentation,
setSavingStatus, setSavingStatus,
savingStatus, savingStatus,
setFilesForRepresentations setFilesForRepresentations,
onRepresentationTypeChange,
onTypeSelectionConfirmed
} = props; } = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone(); const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const persistedRepresentationType =
currentView?.caseReference?.repDetails?.representationType;
const [typeSelectionConfirmed, setTypeSelectionConfirmed] = useState(
!!persistedRepresentationType
);
useEffect(() => {
if (persistedRepresentationType) {
setTypeSelectionConfirmed(true);
}
}, [persistedRepresentationType]);
if (JSON.stringify(formObj) != "{}") { if (JSON.stringify(formObj) != "{}") {
setRepFileName(formObj.representationForm.values); setRepFileName(formObj.representationForm.values);
@@ -64,23 +78,23 @@ const RepAgent = (props) => {
)); ));
const required = (value) => (value ? undefined : "Required"); const required = (value) => (value ? undefined : "Required");
const hasTypeSelectionInline = const selectedRepresentationType =
typeof formObj.representationForm.values.representationType == formObj?.representationForm?.values?.representationType ||
"undefined" && props.representationType != "Select..."; props.representationType;
const isTypeConfirmed =
!!selectedRepresentationType && typeSelectionConfirmed;
const selectedRepresentationTypeDisplay = const selectedRepresentationTypeDisplay =
router.locale == "cy" router.locale == "cy"
? formObj.representationForm.values.representationType == ? selectedRepresentationType == "Questionnaire"
"Questionnaire"
? "Holiadur" ? "Holiadur"
: formObj.representationForm.values.representationType == : selectedRepresentationType == "Statement"
"Statement"
? "Datganiad" ? "Datganiad"
: formObj.representationForm.values.representationType == : selectedRepresentationType == "Final comments"
"Final comments"
? "Sylwadau terfynol" ? "Sylwadau terfynol"
: formObj.representationForm.values.representationType : selectedRepresentationType
: formObj.representationForm.values.representationType; : selectedRepresentationType;
const handleSaveExit = () => { const handleSaveExit = () => {
let valuesObj = props.props.props.form[props.form].values || {}; let valuesObj = props.props.props.form[props.form].values || {};
@@ -98,13 +112,15 @@ const RepAgent = (props) => {
"myrepresentations:representation-from-an-agent-heading" "myrepresentations:representation-from-an-agent-heading"
)} )}
kindLabelText={t("myrepresentations:kind-of-rep-label")} kindLabelText={t("myrepresentations:kind-of-rep-label")}
isTypeSelected={!hasTypeSelectionInline} isTypeSelected={isTypeConfirmed}
selectedTypeDisplay={selectedRepresentationTypeDisplay} selectedTypeDisplay={selectedRepresentationTypeDisplay}
representationType={selectedRepresentationType}
setTypeSelectionConfirmed={setTypeSelectionConfirmed}
onRepresentationTypeChange={onRepresentationTypeChange}
onTypeSelectionConfirmed={onTypeSelectionConfirmed}
optionsArr={appellantApplicantRepresentationArr} optionsArr={appellantApplicantRepresentationArr}
/> />
{(typeof props.representationType != "undefined" || {isTypeConfirmed && (
typeof formObj.representationForm.values
.representationType != "undefined") && (
<> <>
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
@@ -227,8 +243,7 @@ const RepAgent = (props) => {
</div> </div>
</> </>
)} )}
{typeof formObj.representationForm.values.representationType != {isTypeConfirmed && (
"undefined" && (
<RepresentationActionButtons <RepresentationActionButtons
t={t} t={t}
locale={router.locale} locale={router.locale}
@@ -2,12 +2,11 @@ import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Field, change, reduxForm } from "redux-form"; import { Field, change, reduxForm } from "redux-form";
import { useState } from "react"; import { useEffect, useState } from "react";
import { bytesToSize, getThumbnailIconByExtension } from "../../utils"; import { bytesToSize, getThumbnailIconByExtension } from "../../utils";
import { import {
FileUploadField, FileUploadField,
RenderPickList,
RenderRichMultiline, RenderRichMultiline,
shouldDisableButton shouldDisableButton
} from "./representationElements"; } from "./representationElements";
@@ -36,10 +35,24 @@ const RepAppellant = (props) => {
updateRepresentation, updateRepresentation,
setSavingStatus, setSavingStatus,
savingStatus, savingStatus,
setFilesForRepresentations setFilesForRepresentations,
onRepresentationTypeChange,
onTypeSelectionConfirmed
} = props; } = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone(); const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const persistedRepresentationType =
currentView?.caseReference?.repDetails?.representationType;
const [typeSelectionConfirmed, setTypeSelectionConfirmed] = useState(
!!persistedRepresentationType
);
useEffect(() => {
if (persistedRepresentationType) {
setTypeSelectionConfirmed(true);
}
}, [persistedRepresentationType]);
console.log(JSON.stringify(formObj) == "{}" ? "empty" : "value"); console.log(JSON.stringify(formObj) == "{}" ? "empty" : "value");
if (JSON.stringify(formObj) != "{}") { if (JSON.stringify(formObj) != "{}") {
@@ -64,23 +77,23 @@ const RepAppellant = (props) => {
index === self.findIndex((t) => t.name === value.name) index === self.findIndex((t) => t.name === value.name)
); );
const hasTypeSelectionInline = const selectedRepresentationType =
typeof formObj.representationForm.values.representationType == formObj?.representationForm?.values?.representationType ||
"undefined" && props.representationType != "Select..."; props.representationType;
const isTypeConfirmed =
!!selectedRepresentationType && typeSelectionConfirmed;
const selectedRepresentationTypeDisplay = const selectedRepresentationTypeDisplay =
router.locale == "cy" router.locale == "cy"
? formObj.representationForm.values.representationType == ? selectedRepresentationType == "Questionnaire"
"Questionnaire"
? "Holiadur" ? "Holiadur"
: formObj.representationForm.values.representationType == : selectedRepresentationType == "Statement"
"Statement"
? "Datganiad" ? "Datganiad"
: formObj.representationForm.values.representationType == : selectedRepresentationType == "Final comments"
"Final comments"
? "Sylwadau terfynol" ? "Sylwadau terfynol"
: formObj.representationForm.values.representationType : selectedRepresentationType
: formObj.representationForm.values.representationType; : selectedRepresentationType;
const handleSaveExit = () => { const handleSaveExit = () => {
let valuesObj = props.props.props.form[props.form].values || {}; let valuesObj = props.props.props.form[props.form].values || {};
@@ -98,13 +111,15 @@ const RepAppellant = (props) => {
"myrepresentations:representation-from-an-appellant-heading" "myrepresentations:representation-from-an-appellant-heading"
)} )}
kindLabelText={t("myrepresentations:kind-of-rep-label")} kindLabelText={t("myrepresentations:kind-of-rep-label")}
isTypeSelected={!hasTypeSelectionInline} isTypeSelected={isTypeConfirmed}
selectedTypeDisplay={selectedRepresentationTypeDisplay} selectedTypeDisplay={selectedRepresentationTypeDisplay}
representationType={selectedRepresentationType}
setTypeSelectionConfirmed={setTypeSelectionConfirmed}
onRepresentationTypeChange={onRepresentationTypeChange}
onTypeSelectionConfirmed={onTypeSelectionConfirmed}
optionsArr={appellantApplicantRepresentationArr} optionsArr={appellantApplicantRepresentationArr}
/> />
{(typeof props.representationType != "undefined" || {isTypeConfirmed && (
typeof formObj.representationForm.values
.representationType != "undefined") && (
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
<p className="govuk-body"> <p className="govuk-body">
@@ -220,8 +235,7 @@ const RepAppellant = (props) => {
</div> </div>
)} )}
{typeof formObj.representationForm.values.representationType != {isTypeConfirmed && (
"undefined" && (
<RepresentationActionButtons <RepresentationActionButtons
t={t} t={t}
locale={router.locale} locale={router.locale}
@@ -66,7 +66,8 @@ const RepComplete = (props) => {
(props.props.currentView.representationMessageSent != true && (props.props.currentView.representationMessageSent != true &&
(setRepInvolvment( (setRepInvolvment(
props.props.currentView.caseReference.incidentid, props.props.currentView.caseReference.incidentid,
props.props.props.props.accountDetails.accountDetails.contactid props.props.props.props.accountDetails.accountDetails.contactid,
props.props.currentView.representationCapacity
), ),
sendRepCompleteMessage( sendRepCompleteMessage(
props.props.props.props.accountDetails.containerID, props.props.props.props.accountDetails.containerID,
@@ -1,4 +1,3 @@
import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { useState } from "react"; import { useState } from "react";
@@ -13,6 +12,7 @@ import {
bytesToSize, bytesToSize,
getThumbnailIconByExtension, getThumbnailIconByExtension,
formatDates, formatDates,
hasOwn,
updateLinks, updateLinks,
getDocLink getDocLink
} from "../../utils"; } from "../../utils";
@@ -233,35 +233,41 @@ const RepCompleteSubmit = (props) => {
let filterFiles = []; let filterFiles = [];
function showRepsEnded(endDate) { function showRepsEnded(endDate) {
let date = new Date(); if (!endDate) {
date = new Date(date.toDateString()); return false;
let end = new Date(endDate); }
end.setUTCHours(23);
end.setUTCMinutes(59);
end.setUTCSeconds(59);
end.toISOString();
return end > date ? false : true; const end = new Date(endDate);
if (Number.isNaN(end.getTime())) {
return false;
}
const today = new Date();
today.setHours(0, 0, 0, 0);
end.setHours(23, 59, 59, 999);
return end <= today;
} }
const checkRepDatePassed = () => { const checkRepDatePassed = () => {
if (repFormData.representationType == "Questionnaire") { if (repFormData.representationType === "Questionnaire") {
return false; return false;
} else {
if (repFormData.representationType == "Final comments") {
return repFormData.hasOwnProperty(
"pinswg_finalcommentsduedate"
) && showRepsEnded(repFormData.pinswg_finalcommentsduedate)
? true
: false;
}
if (repFormData.representationType == "Statement") {
return repFormData.hasOwnProperty("pinswg_statementduedate") &&
showRepsEnded(repFormData.pinswg_statementduedate)
? true
: false;
}
} }
if (repFormData.representationType === "Final comments") {
return showRepsEnded(repFormData.pinswg_finalcommentsduedate);
}
if (repFormData.representationType === "Statement") {
return (
showRepsEnded(repFormData.pinswg_statementduedate) ||
showRepsEnded(repFormData.pinswg_endofrepresentationperiod)
);
}
return false;
}; };
const triggerQuestionnaireDownload = async () => { const triggerQuestionnaireDownload = async () => {
@@ -399,7 +405,7 @@ const RepCompleteSubmit = (props) => {
</a> */} </a> */}
</dd> </dd>
</div> </div>
{_.has( {hasOwn(
repFormData, repFormData,
"representationOnBehalfOf" "representationOnBehalfOf"
) && ( ) && (
@@ -1,6 +1,7 @@
import { JSONPath as jsonpath } from "jsonpath-plus"; import { JSONPath as jsonpath } from "jsonpath-plus";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { hasOwn } from "../../utils";
const RepDetails = (props) => { const RepDetails = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -17,8 +18,8 @@ const RepDetails = (props) => {
? props.myRepresentations.myRepresentations ? props.myRepresentations.myRepresentations
: props.searchResultsObj.searchDetailsObj : props.searchResultsObj.searchDetailsObj
: props.currentType == "watchedCases" : props.currentType == "watchedCases"
? props.props.props.props.watchedCases.watchedCasesDetails ? props.props.props.props.watchedCases.watchedCasesDetails
: props.props.props.searchResultsObj.searchDetailsObj; : props.props.props.searchResultsObj.searchDetailsObj;
var detailsObj = {}; var detailsObj = {};
@@ -31,7 +32,7 @@ const RepDetails = (props) => {
detailsObj = jsonpath({ detailsObj = jsonpath({
path: '$..[?(@ && @.ticketnumber=="' + ticketnumber + '")]', path: '$..[?(@ && @.ticketnumber=="' + ticketnumber + '")]',
json: setCaseDetailsObj, json: setCaseDetailsObj,
eval: true, eval: true
}); });
detailsObj = detailsObj[0]; detailsObj = detailsObj[0];
@@ -61,34 +62,43 @@ const RepDetails = (props) => {
{t("case:summary-site-address-label")} {t("case:summary-site-address-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(detailsObj, "pinswg_siteaddressline1") {hasOwn(detailsObj, "pinswg_siteaddressline1")
? detailsObj.pinswg_siteaddressline1 ? detailsObj.pinswg_siteaddressline1
: ""} : ""}
{_.has(detailsObj, "pinswg_siteaddressline1") && {hasOwn(
detailsObj,
"pinswg_siteaddressline1"
) &&
detailsObj.pinswg_siteaddressline1 != detailsObj.pinswg_siteaddressline1 !=
null && <br />} null && <br />}
{_.has(detailsObj, "pinswg_siteaddressline2") {hasOwn(detailsObj, "pinswg_siteaddressline2")
? detailsObj.pinswg_siteaddressline2 ? detailsObj.pinswg_siteaddressline2
: ""} : ""}
{_.has(detailsObj, "pinswg_siteaddressline2") && {hasOwn(
detailsObj,
"pinswg_siteaddressline2"
) &&
detailsObj.pinswg_siteaddressline2 != detailsObj.pinswg_siteaddressline2 !=
null && <br />} null && <br />}
{_.has(detailsObj, "pinswg_siteaddresstown") {hasOwn(detailsObj, "pinswg_siteaddresstown")
? detailsObj.pinswg_siteaddresstown ? detailsObj.pinswg_siteaddresstown
: ""} : ""}
{_.has(detailsObj, "pinswg_siteaddresstown") && {hasOwn(detailsObj, "pinswg_siteaddresstown") &&
detailsObj.pinswg_siteaddresstown != detailsObj.pinswg_siteaddresstown !=
null && <br />} null && <br />}
{_.has(detailsObj, "pinswg_siteaddresscounty") {hasOwn(detailsObj, "pinswg_siteaddresscounty")
? detailsObj.pinswg_siteaddresscounty ? detailsObj.pinswg_siteaddresscounty
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresscounty" "pinswg_siteaddresscounty"
) && ) &&
detailsObj.pinswg_siteaddresscounty != detailsObj.pinswg_siteaddresscounty !=
null && <br />} null && <br />}
{_.has(detailsObj, "pinswg_siteaddresspostcode") {hasOwn(
detailsObj,
"pinswg_siteaddresspostcode"
)
? detailsObj.pinswg_siteaddresspostcode ? detailsObj.pinswg_siteaddresspostcode
: ""} : ""}
</dd> </dd>
@@ -2,7 +2,7 @@ import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Field, change, reduxForm } from "redux-form"; import { Field, change, reduxForm } from "redux-form";
import { useState } from "react"; import { useEffect, useState } from "react";
import { bytesToSize, getThumbnailIconByExtension } from "../../utils"; import { bytesToSize, getThumbnailIconByExtension } from "../../utils";
import { import {
@@ -35,12 +35,26 @@ const RepInterestedPartyPerson = (props) => {
updateRepresentation, updateRepresentation,
setSavingStatus, setSavingStatus,
savingStatus, savingStatus,
setFilesForRepresentations setFilesForRepresentations,
onRepresentationTypeChange,
onTypeSelectionConfirmed
} = props; } = props;
const required = (value) => (value ? undefined : "Required"); const required = (value) => (value ? undefined : "Required");
const { acceptedFiles, getRootProps, getInputProps } = useDropzone(); const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const persistedRepresentationType =
props.currentView?.caseReference?.repDetails?.representationType;
const [typeSelectionConfirmed, setTypeSelectionConfirmed] = useState(
!!persistedRepresentationType
);
useEffect(() => {
if (persistedRepresentationType) {
setTypeSelectionConfirmed(true);
}
}, [persistedRepresentationType]);
if (JSON.stringify(formObj) != "{}") { if (JSON.stringify(formObj) != "{}") {
setRepFileName(formObj.representationForm.values); setRepFileName(formObj.representationForm.values);
@@ -64,23 +78,23 @@ const RepInterestedPartyPerson = (props) => {
</li> </li>
)); ));
const hasTypeSelectionInline = const selectedRepresentationType =
typeof formObj.representationForm.values.representationType == formObj?.representationForm?.values?.representationType ||
"undefined" && props.representationType != "Select..."; props.representationType;
const isTypeConfirmed =
!!selectedRepresentationType && typeSelectionConfirmed;
const selectedRepresentationTypeDisplay = const selectedRepresentationTypeDisplay =
router.locale == "cy" router.locale == "cy"
? formObj.representationForm.values.representationType == ? selectedRepresentationType == "Questionnaire"
"Questionnaire"
? "Holiadur" ? "Holiadur"
: formObj.representationForm.values.representationType == : selectedRepresentationType == "Statement"
"Statement"
? "Datganiad" ? "Datganiad"
: formObj.representationForm.values.representationType == : selectedRepresentationType == "Final comments"
"Final comments"
? "Sylwadau terfynol" ? "Sylwadau terfynol"
: formObj.representationForm.values.representationType : selectedRepresentationType
: formObj.representationForm.values.representationType; : selectedRepresentationType;
const handleSaveExit = () => { const handleSaveExit = () => {
let valuesObj = props.props.props.form[props.form].values || {}; let valuesObj = props.props.props.form[props.form].values || {};
@@ -95,18 +109,20 @@ const RepInterestedPartyPerson = (props) => {
<RepresentationTypeSelectorBlock <RepresentationTypeSelectorBlock
t={t} t={t}
headingText={t( headingText={t(
"myrepresentations:consultation-from-an-interested-person-heading" "myrepresentations:representation-from-an-interested-person-heading"
)} )}
kindLabelText={t("myrepresentations:kind-of-rep-label")} kindLabelText={t("myrepresentations:kind-of-rep-label")}
isTypeSelected={!hasTypeSelectionInline} isTypeSelected={isTypeConfirmed}
selectedTypeDisplay={selectedRepresentationTypeDisplay} selectedTypeDisplay={selectedRepresentationTypeDisplay}
representationType={selectedRepresentationType}
setTypeSelectionConfirmed={setTypeSelectionConfirmed}
onRepresentationTypeChange={onRepresentationTypeChange}
onTypeSelectionConfirmed={onTypeSelectionConfirmed}
optionsArr={interestedPersonRepresentationArr} optionsArr={interestedPersonRepresentationArr}
validate={[required]} validate={[required]}
errorMsg={t("myrepresentations:select-an-option-label")} errorMsg={t("myrepresentations:select-an-option-label")}
/> />
{(typeof props.representationType != "undefined" || {isTypeConfirmed && (
typeof formObj.representationForm.values
.representationType != "undefined") && (
<> <>
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
@@ -213,8 +229,7 @@ const RepInterestedPartyPerson = (props) => {
</div> </div>
</> </>
)} )}
{typeof formObj.representationForm.values.representationType != {isTypeConfirmed && (
"undefined" && (
<RepresentationActionButtons <RepresentationActionButtons
t={t} t={t}
locale={router.locale} locale={router.locale}
@@ -10,9 +10,9 @@ import { useState, useEffect } from "react";
import { import {
FileUploadField, FileUploadField,
RenderMultiline, RenderMultiline,
RenderPickList, shouldDisableButton
shouldDisableButton,
} from "./representationElements"; } from "./representationElements";
import RepresentationTypeSelectorBlock from "./elements/RepresentationTypeSelectorBlock";
import RepresentationProgress_enforcement from "./representationProgress/representationProgress_enforcement"; import RepresentationProgress_enforcement from "./representationProgress/representationProgress_enforcement";
import RepresentationProgress_s78 from "./representationProgress/representationProgress_s78"; import RepresentationProgress_s78 from "./representationProgress/representationProgress_s78";
import Enforcement_Questionnaire from "./representationQuestionnaires/representationLPAQuestionnaire_enforcement"; import Enforcement_Questionnaire from "./representationQuestionnaires/representationLPAQuestionnaire_enforcement";
@@ -23,7 +23,7 @@ import {
setRepresentationSubmit, setRepresentationSubmit,
setFilesForRepresentations, setFilesForRepresentations,
setCurrentPage, setCurrentPage,
setCurrentReference, setCurrentReference
} from "../../../store/currentView/action"; } from "../../../store/currentView/action";
let RepLPA = (props) => { let RepLPA = (props) => {
@@ -49,6 +49,8 @@ let RepLPA = (props) => {
setSavingStatus, setSavingStatus,
savingStatus, savingStatus,
setFilesForRepresentations, setFilesForRepresentations,
onRepresentationTypeChange,
onTypeSelectionConfirmed
} = props; } = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone(); const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
@@ -59,6 +61,36 @@ let RepLPA = (props) => {
)); ));
const required = (value) => (value ? undefined : "Required"); const required = (value) => (value ? undefined : "Required");
const persistedRepresentationType =
currentView?.caseReference?.repDetails?.representationType;
const [typeSelectionConfirmed, setTypeSelectionConfirmed] = useState(
!!persistedRepresentationType
);
useEffect(() => {
if (persistedRepresentationType) {
setTypeSelectionConfirmed(true);
}
}, [persistedRepresentationType]);
const selectedRepresentationType =
formObj?.representationForm?.values?.representationType ||
props.representationType;
const isTypeConfirmed =
!!selectedRepresentationType && typeSelectionConfirmed;
const selectedRepresentationTypeDisplay =
router.locale == "cy"
? selectedRepresentationType == "Questionnaire"
? "Holiadur"
: selectedRepresentationType == "Statement"
? "Datganiad"
: selectedRepresentationType == "Final comments"
? "Sylwadau terfynol"
: selectedRepresentationType
: selectedRepresentationType;
const whichQuestionnaire = () => { const whichQuestionnaire = () => {
{ {
switch (currentView.caseReference.appealType) { switch (currentView.caseReference.appealType) {
@@ -183,7 +215,7 @@ let RepLPA = (props) => {
currentView.caseReference.currentReference + currentView.caseReference.currentReference +
'")]', '")]',
json: setCaseDetailsObj, json: setCaseDetailsObj,
eval: true, eval: true
}); });
let setCaseResultssObj = router.query.hasOwnProperty("state") let setCaseResultssObj = router.query.hasOwnProperty("state")
@@ -202,7 +234,7 @@ let RepLPA = (props) => {
currentView.caseReference.currentReference + currentView.caseReference.currentReference +
'")]', '")]',
json: setCaseResultssObj, json: setCaseResultssObj,
eval: true, eval: true
}); });
resultsObj = resultsObj[0]; resultsObj = resultsObj[0];
@@ -225,62 +257,26 @@ let RepLPA = (props) => {
return ( return (
<> <>
<RepresentationTypeSelectorBlock
t={t}
headingText={t(
"myrepresentations:representation-from-an-lpa-heading"
)}
kindLabelText={t("myrepresentations:kind-of-rep-label")}
isTypeSelected={isTypeConfirmed}
selectedTypeDisplay={selectedRepresentationTypeDisplay}
representationType={selectedRepresentationType}
setTypeSelectionConfirmed={setTypeSelectionConfirmed}
onRepresentationTypeChange={onRepresentationTypeChange}
onTypeSelectionConfirmed={onTypeSelectionConfirmed}
optionsArr={appellantApplicantRepresentationArr}
validate={[required]}
errorMsg={t("myrepresentations:select-an-option-label")}
/>
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-form-group"> <div className="govuk-form-group">
{!_.has( {isTypeConfirmed &&
formObj["representationForm"], (selectedRepresentationType != "Questionnaire" ? (
["values", "representationType"] ||
typeof props.currentView.caseReference.repDetails !=
"undefined"
) ? (
<>
<label
className="govuk-label govuk-body-m"
htmlFor="representationType"
>
{t(
"myrepresentations:representation-from-an-lpa-heading"
)}
</label>
<Field
id="representationType"
name="representationType"
component={RenderPickList}
datafieldname="representationType"
optionsArr={appellantApplicantRepresentationArr}
/>
</>
) : (
<label className="govuk-label govuk-body-m">
{t("myrepresentations:representation-type")}:{" "}
{router.locale == "cy"
? formObj.representationForm.values
.representationType == "Questionnaire"
? "Holiadur"
: formObj.representationForm.values
.representationType == "Statement"
? "Datganiad"
: formObj.representationForm.values
.representationType ==
"Final comments"
? "Sylwadau terfynol"
: formObj.representationForm.values
.representationType
: formObj.representationForm.values
.representationType}
</label>
)}
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
{(_.has(formObj["representationForm"], [
"values",
"representationType",
]) ||
typeof props.representationType != "undefined") &&
(props.representationType != "Questionnaire" &&
props.representationType != "Select..." ? (
<> <>
<p className="govuk-body"> <p className="govuk-body">
{t("myrepresentations:enter-comment-label")} {t("myrepresentations:enter-comment-label")}
@@ -354,7 +350,8 @@ let RepLPA = (props) => {
"myrepresentations:add-files-label" "myrepresentations:add-files-label"
)} )}
ticketnumber={ ticketnumber={
props.currentView.caseReference.ticketnumber props.currentView.caseReference
.ticketnumber
} }
hint={"sdsd"} hint={"sdsd"}
fileList={ fileList={
@@ -401,9 +398,8 @@ let RepLPA = (props) => {
</div> </div>
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-button-group"> <div className="govuk-button-group">
{(typeof props.representationType != "undefined" || {isTypeConfirmed &&
_.has(formObj, "values", "representationType")) && selectedRepresentationType == "Questionnaire" && (
props.representationType == "Questionnaire" && (
<> <>
{showQuestionnaireSection < {showQuestionnaireSection <
questionnaireCount && ( questionnaireCount && (
@@ -443,14 +439,14 @@ let RepLPA = (props) => {
// top: 0, // top: 0,
// behavior: "smooth", // behavior: "smooth",
// }); // });
setRepFileName( (setRepFileName(
props.formObj[ props.formObj[
"representationForm" "representationForm"
].values ].values
), ),
setShowQuestionnaireSection( setShowQuestionnaireSection(
showQuestionnaireSection - 1 showQuestionnaireSection - 1
); ));
}} }}
className="govuk-link" className="govuk-link"
> >
@@ -503,9 +499,8 @@ let RepLPA = (props) => {
)} )}
</> </>
)}{" "} )}{" "}
{(typeof props.representationType != "undefined" || {isTypeConfirmed &&
_.has(formObj, "values", "representationType")) && selectedRepresentationType != "Questionnaire" && (
props.representationType != "Questionnaire" && (
<> <>
<button <button
type="submit" type="submit"
@@ -513,7 +508,7 @@ let RepLPA = (props) => {
data-module="govuk-button" data-module="govuk-button"
disabled={shouldDisableButton({ disabled={shouldDisableButton({
props, props,
formObj, formObj
})} })}
onClick={() => { onClick={() => {
let valuesObj = let valuesObj =
@@ -612,7 +607,7 @@ RepLPA = connect((state) => {
return { return {
procedureType, procedureType,
representationType, representationType
}; };
})(RepLPA); })(RepLPA);
@@ -625,7 +620,7 @@ const mapDispatchToProps = (dispatch) => ({
}, },
setCurrentReference: (currentReference) => { setCurrentReference: (currentReference) => {
dispatch(setCurrentReference(currentReference)); dispatch(setCurrentReference(currentReference));
}, }
}); });
const mapStateToProps = (state, props) => { const mapStateToProps = (state, props) => {
@@ -641,8 +636,7 @@ const mapStateToProps = (state, props) => {
], ],
"firstname": "firstname":
props.props.props.accountDetails.accountDetails.firstname, props.props.props.accountDetails.accountDetails.firstname,
"lastname": "lastname": props.props.props.accountDetails.accountDetails.lastname
props.props.props.accountDetails.accountDetails.lastname,
} }
); );
return { return {
@@ -653,7 +647,7 @@ const mapStateToProps = (state, props) => {
currentView: state.currentView, currentView: state.currentView,
myRepresentations: state.myRepresentations, myRepresentations: state.myRepresentations,
watchedCases: state.watchedCases, watchedCases: state.watchedCases,
initialValues: initialValuesTemp, initialValues: initialValuesTemp
}; };
}; };
@@ -664,6 +658,6 @@ export default connect(
reduxForm({ reduxForm({
form: "representationForm", form: "representationForm",
enableReinitialize: true, enableReinitialize: true,
destroyOnUnmount: false, destroyOnUnmount: false
})(RepLPA) })(RepLPA)
); );
@@ -1,6 +1,7 @@
import { JSONPath as jsonpath } from "jsonpath-plus"; import { JSONPath as jsonpath } from "jsonpath-plus";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { hasOwn } from "../../utils";
const RepLPADetails = (props) => { const RepLPADetails = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -15,15 +16,15 @@ const RepLPADetails = (props) => {
? props.props.myRepresentations.myRepresentations ? props.props.myRepresentations.myRepresentations
: props.searchResultsObj.searchDetailsObj : props.searchResultsObj.searchDetailsObj
: props.currentType == "watchedCases" : props.currentType == "watchedCases"
? props.props.props.watchedCases.watchedCasesDetails ? props.props.props.watchedCases.watchedCasesDetails
: props.props.searchResultsObj.searchDetailsObj; : props.props.searchResultsObj.searchDetailsObj;
var detailsObj = {}; var detailsObj = {};
detailsObj = jsonpath({ detailsObj = jsonpath({
path: '$..[?(@ && @.ticketnumber=="' + ticketnumber + '")]', path: '$..[?(@ && @.ticketnumber=="' + ticketnumber + '")]',
json: setCaseDetailsObj, json: setCaseDetailsObj,
eval: true, eval: true
}); });
detailsObj = detailsObj[0]; detailsObj = detailsObj[0];
@@ -51,34 +52,43 @@ const RepLPADetails = (props) => {
{t("case:summary-site-address-label")} {t("case:summary-site-address-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(detailsObj, "pinswg_siteaddressline1") {hasOwn(detailsObj, "pinswg_siteaddressline1")
? detailsObj.pinswg_siteaddressline1 ? detailsObj.pinswg_siteaddressline1
: ""} : ""}
{_.has(detailsObj, "pinswg_siteaddressline1") && {hasOwn(
detailsObj,
"pinswg_siteaddressline1"
) &&
detailsObj.pinswg_siteaddressline1 != detailsObj.pinswg_siteaddressline1 !=
null && <br />} null && <br />}
{_.has(detailsObj, "pinswg_siteaddressline2") {hasOwn(detailsObj, "pinswg_siteaddressline2")
? detailsObj.pinswg_siteaddressline2 ? detailsObj.pinswg_siteaddressline2
: ""} : ""}
{_.has(detailsObj, "pinswg_siteaddressline2") && {hasOwn(
detailsObj,
"pinswg_siteaddressline2"
) &&
detailsObj.pinswg_siteaddressline2 != detailsObj.pinswg_siteaddressline2 !=
null && <br />} null && <br />}
{_.has(detailsObj, "pinswg_siteaddresstown") {hasOwn(detailsObj, "pinswg_siteaddresstown")
? detailsObj.pinswg_siteaddresstown ? detailsObj.pinswg_siteaddresstown
: ""} : ""}
{_.has(detailsObj, "pinswg_siteaddresstown") && {hasOwn(detailsObj, "pinswg_siteaddresstown") &&
detailsObj.pinswg_siteaddresstown != detailsObj.pinswg_siteaddresstown !=
null && <br />} null && <br />}
{_.has(detailsObj, "pinswg_siteaddresscounty") {hasOwn(detailsObj, "pinswg_siteaddresscounty")
? detailsObj.pinswg_siteaddresscounty ? detailsObj.pinswg_siteaddresscounty
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresscounty" "pinswg_siteaddresscounty"
) && ) &&
detailsObj.pinswg_siteaddresscounty != detailsObj.pinswg_siteaddresscounty !=
null && <br />} null && <br />}
{_.has(detailsObj, "pinswg_siteaddresspostcode") {hasOwn(
detailsObj,
"pinswg_siteaddresspostcode"
)
? detailsObj.pinswg_siteaddresspostcode ? detailsObj.pinswg_siteaddresspostcode
: ""} : ""}
</dd> </dd>
@@ -1,6 +1,5 @@
import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { formatDates, updateLinks } from "../../../utils"; import { formatDates, hasOwn, updateLinks } from "../../../utils";
let RepLPAQuestionnaireCheck_s78 = (props) => { let RepLPAQuestionnaireCheck_s78 = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -11,7 +10,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
showQuestionnaireSection, showQuestionnaireSection,
setShowQuestionnaireSection, setShowQuestionnaireSection,
setRepresentationSubmit, setRepresentationSubmit,
questionnaireCount, questionnaireCount
} = props; } = props;
let repFormData = formObj.representationForm.values; let repFormData = formObj.representationForm.values;
@@ -22,7 +21,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<> <>
{showQuestionnaireSection} {showQuestionnaireSection}
{_.has(repFormData, "procedureType") && ( {hasOwn(repFormData, "procedureType") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -84,7 +83,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "enterToView") && ( {hasOwn(repFormData, "enterToView") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -117,7 +116,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
)} )}
{_.has(repFormData, "enterNeighbouringLandToViewSite") && ( {hasOwn(repFormData, "enterNeighbouringLandToViewSite") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -160,7 +159,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.enterNeighbouringLandToViewSiteEvidence, __html: repFormData.enterNeighbouringLandToViewSiteEvidence
}} }}
/> />
</dd> </dd>
@@ -187,7 +186,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "enterNeighbouringLandAccessRequired") && ( {hasOwn(repFormData, "enterNeighbouringLandAccessRequired") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -231,7 +230,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.enterNeighbouringLandAccessRequiredEvidence, __html: repFormData.enterNeighbouringLandAccessRequiredEvidence
}} }}
/> />
</dd> </dd>
@@ -258,7 +257,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "healthAndSafetyIssues") && ( {hasOwn(repFormData, "healthAndSafetyIssues") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -301,7 +300,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.healthAndSafetyIssuesEvidence, __html: repFormData.healthAndSafetyIssuesEvidence
}} }}
/> />
</dd> </dd>
@@ -337,11 +336,11 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(repFormData, "LPAcontactDetails") ? ( {hasOwn(repFormData, "LPAcontactDetails") ? (
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.LPAcontactDetails, __html: repFormData.LPAcontactDetails
}} }}
/> />
) : ( ) : (
@@ -378,11 +377,11 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(repFormData, "LPAcaseFileAndReps") ? ( {hasOwn(repFormData, "LPAcaseFileAndReps") ? (
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.LPAcaseFileAndReps, __html: repFormData.LPAcaseFileAndReps
}} }}
/> />
) : ( ) : (
@@ -419,11 +418,11 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(repFormData, "LPAldpAndMap") ? ( {hasOwn(repFormData, "LPAldpAndMap") ? (
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.LPAldpAndMap, __html: repFormData.LPAldpAndMap
}} }}
/> />
) : ( ) : (
@@ -460,11 +459,11 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(repFormData, "LPAlocalGuidance") ? ( {hasOwn(repFormData, "LPAlocalGuidance") ? (
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.LPAlocalGuidance, __html: repFormData.LPAlocalGuidance
}} }}
/> />
) : ( ) : (
@@ -493,7 +492,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
{_.has(repFormData, "LPAintentionToSubmitFullStatement") && ( {hasOwn(repFormData, "LPAintentionToSubmitFullStatement") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -526,7 +525,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
)} )}
{_.has(repFormData, "AONB") && ( {hasOwn(repFormData, "AONB") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -558,7 +557,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
)} )}
{_.has(repFormData, "ROW") && ( {hasOwn(repFormData, "ROW") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -600,7 +599,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.ROWEvidence, __html: repFormData.ROWEvidence
}} }}
/> />
</dd> </dd>
@@ -627,7 +626,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "conservationArea") && ( {hasOwn(repFormData, "conservationArea") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -670,7 +669,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.conservationAreaEvidence, __html: repFormData.conservationAreaEvidence
}} }}
/> />
</dd> </dd>
@@ -697,7 +696,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "affectListedBuilding") && ( {hasOwn(repFormData, "affectListedBuilding") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -740,7 +739,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.affectListedBuildingEvidence, __html: repFormData.affectListedBuildingEvidence
}} }}
/> />
</dd> </dd>
@@ -767,7 +766,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "TPO") && ( {hasOwn(repFormData, "TPO") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -810,7 +809,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.TPOEvidence, __html: repFormData.TPOEvidence
}} }}
/> />
</dd> </dd>
@@ -837,7 +836,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "natureConservationSite") && ( {hasOwn(repFormData, "natureConservationSite") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -880,7 +879,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.natureConservationSiteEvidence, __html: repFormData.natureConservationSiteEvidence
}} }}
/> />
</dd> </dd>
@@ -907,7 +906,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "protectedSpecies") && ( {hasOwn(repFormData, "protectedSpecies") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -950,7 +949,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.protectedSpeciesEvidence, __html: repFormData.protectedSpeciesEvidence
}} }}
/> />
</dd> </dd>
@@ -977,7 +976,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "gypsyTravellerInvolvment") && ( {hasOwn(repFormData, "gypsyTravellerInvolvment") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1010,7 +1009,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
)} )}
{_.has(repFormData, "governmentDepartmentComments") && ( {hasOwn(repFormData, "governmentDepartmentComments") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1053,7 +1052,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.governmentDepartmentCommentsEvidence, __html: repFormData.governmentDepartmentCommentsEvidence
}} }}
/> />
</dd> </dd>
@@ -1080,7 +1079,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "developmentNotBeginLaterThanFiveYears") && ( {hasOwn(repFormData, "developmentNotBeginLaterThanFiveYears") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1113,7 +1112,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
)} )}
{_.has(repFormData, "developmentCarriedOutInAccordance") && ( {hasOwn(repFormData, "developmentCarriedOutInAccordance") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1156,7 +1155,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.developmentCarriedOutInAccordanceEvidence, __html: repFormData.developmentCarriedOutInAccordanceEvidence
}} }}
/> />
</dd> </dd>
@@ -1183,7 +1182,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "developmentNotTakePlaceBiodiversity") && ( {hasOwn(repFormData, "developmentNotTakePlaceBiodiversity") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1216,7 +1215,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
)} )}
{_.has(repFormData, "developmentNotTakePlaceBroadband") && ( {hasOwn(repFormData, "developmentNotTakePlaceBroadband") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1259,7 +1258,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.developmentNotTakePlaceBroadbandEvidence, __html: repFormData.developmentNotTakePlaceBroadbandEvidence
}} }}
/> />
</dd> </dd>
@@ -1286,7 +1285,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "developmentAnyOtherConditions") && ( {hasOwn(repFormData, "developmentAnyOtherConditions") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1329,7 +1328,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.developmentAnyOtherConditionsEvidence, __html: repFormData.developmentAnyOtherConditionsEvidence
}} }}
/> />
</dd> </dd>
@@ -1356,7 +1355,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "copyOfApplicantsCertificate") && ( {hasOwn(repFormData, "copyOfApplicantsCertificate") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1399,7 +1398,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.copyOfApplicantsCertificateEvidence, __html: repFormData.copyOfApplicantsCertificateEvidence
}} }}
/> />
</dd> </dd>
@@ -1426,7 +1425,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "advertismentGiven") && ( {hasOwn(repFormData, "advertismentGiven") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1469,7 +1468,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.advertismentGivenEvidence, __html: repFormData.advertismentGivenEvidence
}} }}
/> />
</dd> </dd>
@@ -1496,7 +1495,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "copyOfLetterOfAppealNotification") && ( {hasOwn(repFormData, "copyOfLetterOfAppealNotification") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1539,7 +1538,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.copyOfLetterOfAppealNotificationEvidence, __html: repFormData.copyOfLetterOfAppealNotificationEvidence
}} }}
/> />
</dd> </dd>
@@ -1566,7 +1565,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "lpaEIAOS") && ( {hasOwn(repFormData, "lpaEIAOS") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1609,7 +1608,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.lpaEIAOSEvidence, __html: repFormData.lpaEIAOSEvidence
}} }}
/> />
</dd> </dd>
@@ -1636,7 +1635,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "advertismentConsentDiscontinuanceNotice") && ( {hasOwn(repFormData, "advertismentConsentDiscontinuanceNotice") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1681,7 +1680,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.advertismentConsentDiscontinuanceNoticeEvidence, __html: repFormData.advertismentConsentDiscontinuanceNoticeEvidence
}} }}
/> />
</dd> </dd>
@@ -1708,7 +1707,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "detailsOfOtherAppeals") && ( {hasOwn(repFormData, "detailsOfOtherAppeals") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1751,7 +1750,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.detailsOfOtherAppeals, __html: repFormData.detailsOfOtherAppeals
}} }}
/> />
</dd> </dd>
@@ -1778,7 +1777,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "detailsOfPreviousAppeals") && ( {hasOwn(repFormData, "detailsOfPreviousAppeals") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1821,7 +1820,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.detailsOfPreviousAppealsEvidence, __html: repFormData.detailsOfPreviousAppealsEvidence
}} }}
/> />
</dd> </dd>
@@ -1848,7 +1847,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "otherRelevantInformation") && ( {hasOwn(repFormData, "otherRelevantInformation") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1891,7 +1890,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
<div <div
className="govuk-summary-list-check-ellipsis" className="govuk-summary-list-check-ellipsis"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: repFormData.otherRelevantInformationEvidence, __html: repFormData.otherRelevantInformationEvidence
}} }}
/> />
</dd> </dd>
@@ -1918,7 +1917,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
)} )}
</> </>
)} )}
{_.has(repFormData, "signedDate") && ( {hasOwn(repFormData, "signedDate") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1950,7 +1949,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
)} )}
{_.has(repFormData, "caseOfficer") && ( {hasOwn(repFormData, "caseOfficer") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -1983,7 +1982,7 @@ let RepLPAQuestionnaireCheck_s78 = (props) => {
</div> </div>
</> </>
)} )}
{_.has(repFormData, "onBehalfOfLPA") && ( {hasOwn(repFormData, "onBehalfOfLPA") && (
<> <>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -4,6 +4,7 @@ const RepresentationFlowFormStage = ({
t, t,
appealIsConsultation, appealIsConsultation,
currentReference, currentReference,
caseTitle,
whichControl, whichControl,
appealIsLocalImpact, appealIsLocalImpact,
renderDueDate, renderDueDate,
@@ -22,7 +23,7 @@ const RepresentationFlowFormStage = ({
: t( : t(
"myrepresentations:make-a-representation-on-label" "myrepresentations:make-a-representation-on-label"
)}{" "} )}{" "}
{currentReference}{" "} {caseTitle}{" "}
</h1> </h1>
<div id="rep-form"> <div id="rep-form">
@@ -0,0 +1,119 @@
const {
getAvailableRepresentationTypes
} = require("../../../../lib/domain/representation-type-policy/getAvailableRepresentationTypes");
export const APPEAL_TYPES = {
SIPS: 846040002,
DNS: 846040011,
HOUSEHOLDER: 846040004,
ADVERT: 846040018,
EXCLUDE_QUESTIONNAIRE_1: 846040019,
EXCLUDE_QUESTIONNAIRE_2: 846040015,
EXCLUDE_QUESTIONNAIRE_3: 846040016
};
export const SPECIALIST_PROCESS = {
WRITTEN_REPS: 846040000,
HEARING: 846040001
};
export const INVOLVEMENT_TYPES = {
LPA: 846040012
};
export const REPRESENTATION_OPTIONS = {
QUESTIONNAIRE: "Questionnaire",
STATEMENT: "Statement",
FINAL_COMMENTS: "Final comments",
CONSULTATION_RESPONSE: "Consultation Response",
LOCAL_IMPACT_REPORT: "Local Impact Report",
MARINE_IMPACT_REPORT: "Marine Impact Report"
};
const isValidDate = (date) =>
date instanceof Date && !Number.isNaN(date.getTime());
const toDateOrNull = (value) => {
const date = new Date(value);
return isValidDate(date) ? date : null;
};
const endOfDay = (date) => {
if (!isValidDate(date)) return null;
const next = new Date(date);
next.setHours(23, 59, 59, 999);
return next;
};
const isWithinWindow = (now, start, end) => {
if (!isValidDate(now) || !isValidDate(start) || !isValidDate(end)) {
return false;
}
return now >= start && now <= end;
};
const normalizeCapacity = (value) =>
(value || "")
.toString()
.toLowerCase()
.replace(/(\band|[\s\-\+\(\)\,\&])/g, "");
export const buildRepresentationContext = ({
detailsObj = {},
appealType,
specialistProcess,
involvementType,
selectedCapacity,
isCaseOwner,
isNRW,
now = new Date()
}) => {
const isDNS = appealType === APPEAL_TYPES.DNS;
const startDate = toDateOrNull(
isDNS
? detailsObj.pinswg_applicationacceptedasvalid
: detailsObj.pinswg_startdate || detailsObj.pinswg_startdates
);
const statementDueDate = endOfDay(
toDateOrNull(
isDNS
? detailsObj.pinswg_endofrepresentationperiod
: detailsObj.pinswg_statementduedate ||
detailsObj.pinswg_statementsduedate
)
);
const finalCommentsDueDate = endOfDay(
toDateOrNull(
isDNS
? detailsObj.pinswg_endofrepresentationperiod
: detailsObj.pinswg_finalcommentsduedate
)
);
const capacity = normalizeCapacity(selectedCapacity);
const isLPA = involvementType === INVOLVEMENT_TYPES.LPA;
return {
appealType,
specialistProcess,
isDNS,
isSIPS: appealType === APPEAL_TYPES.SIPS,
isLPA,
isNRW: !!isNRW,
isCaseOwner: !!isCaseOwner,
isSelectedAppellant: capacity === "appellant",
isSelectedAgent: capacity === "agent",
isSelectedInterestedParty: capacity === "interestedparty",
now,
startDate,
statementDueDate,
finalCommentsDueDate
};
};
export const buildRepsArrFromContext = (ctx) => {
return getAvailableRepresentationTypes(ctx);
};
@@ -33,6 +33,14 @@ export const buildSubmitEnrichedValues = ({
representationCapacity, representationCapacity,
locale locale
}) => { }) => {
const isPopulatedText = (value) =>
value !== null &&
value !== undefined &&
(typeof value !== "string" || value.trim() !== "");
const preserveExistingWhenMissing = (canonicalValue, existingValue) =>
isPopulatedText(canonicalValue) ? canonicalValue : existingValue;
const buildSiteAddress = () => { const buildSiteAddress = () => {
const { const {
pinswg_siteaddressline1, pinswg_siteaddressline1,
@@ -47,10 +55,12 @@ export const buildSubmitEnrichedValues = ({
pinswg_siteaddresstown, pinswg_siteaddresstown,
pinswg_siteaddresspostcode pinswg_siteaddresspostcode
] ]
.filter(Boolean) .filter(isPopulatedText)
.join(" "); .join(" ");
}; };
const siteAddress = buildSiteAddress();
return { return {
...formValues, ...formValues,
containerID: accountDetails.containerID, containerID: accountDetails.containerID,
@@ -58,7 +68,10 @@ export const buildSubmitEnrichedValues = ({
incidentID: incidentID:
caseReferenceObj.incidentid || caseReferenceObj.incidentid ||
caseReferenceObj.repDetails.incidentid, caseReferenceObj.repDetails.incidentid,
caseRef: caseReferenceObj.currentReference, caseRef: preserveExistingWhenMissing(
caseReferenceObj.ticketnumber,
formValues.caseRef
),
casereference: caseReferenceObj.currentReference, casereference: caseReferenceObj.currentReference,
pinswg_questionnaireduedate: detailsObj.pinswg_questionnaireduedate, pinswg_questionnaireduedate: detailsObj.pinswg_questionnaireduedate,
pinswg_endofrepresentationperiod: pinswg_endofrepresentationperiod:
@@ -72,12 +85,18 @@ export const buildSubmitEnrichedValues = ({
firstname: accountDetails.firstname, firstname: accountDetails.firstname,
lastname: accountDetails.lastname, lastname: accountDetails.lastname,
emailAddress: accountDetails.emailaddress1, emailAddress: accountDetails.emailaddress1,
siteAddress: buildSiteAddress(), siteAddress: preserveExistingWhenMissing(
siteAddress,
formValues.siteAddress
),
pinswg_siteaddressline1: detailsObj.pinswg_siteaddressline1, pinswg_siteaddressline1: detailsObj.pinswg_siteaddressline1,
pinswg_siteaddressline2: detailsObj.pinswg_siteaddressline2, pinswg_siteaddressline2: detailsObj.pinswg_siteaddressline2,
pinswg_siteaddresstown: detailsObj.pinswg_siteaddresstown, pinswg_siteaddresstown: detailsObj.pinswg_siteaddresstown,
pinswg_siteaddresspostcode: detailsObj.pinswg_siteaddresspostcode, pinswg_siteaddresspostcode: detailsObj.pinswg_siteaddresspostcode,
pinswg_lpareference: resultsObj?.pinswg_lpareference, pinswg_lpareference: preserveExistingWhenMissing(
resultsObj?.pinswg_lpareference,
formValues.pinswg_lpareference
),
_pinswg_appellant_value: detailsObj._pinswg_appellant_value, _pinswg_appellant_value: detailsObj._pinswg_appellant_value,
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue": "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue":
detailsObj[ detailsObj[
+7 -17
View File
@@ -88,23 +88,13 @@ const RepresentationList = (props) => {
{t("case:documents-doc-type-label")}: {t("case:documents-doc-type-label")}:
</span> </span>
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue" translations: transLookup
] + })}
'")].value_cy',
json: transLookup,
sanbox: {}
})
: detailsObj[
"pinswg_isharedocumentlocations@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
</dd> </dd>
<dd className="govuk-summary-list__value govuk-!-font-size-16"> <dd className="govuk-summary-list__value govuk-!-font-size-16">
<span className="results-visually-hidden"> <span className="results-visually-hidden">
+130
View File
@@ -0,0 +1,130 @@
import useTranslation from "next-translate/useTranslation";
import { useState } from "react";
import { getLifecycleStagesForCase } from "../../lib/domain/case-lifecycle";
const statusClassMap = {
complete: "govuk-tag govuk-!-margin-top-2",
"in-progress": "govuk-tag govuk-tag--yellow govuk-!-margin-top-2",
"not-started": "govuk-tag govuk-tag--grey govuk-!-margin-top-2",
blocked: "govuk-tag govuk-tag--red govuk-!-margin-top-2"
};
const statusTextMap = {
complete: "status-complete",
"in-progress": "status-in-progress",
"not-started": "status-not-started",
blocked: "status-blocked"
};
const StatusDetails = (props) => {
let { t } = useTranslation();
const caseResult = props.searchResultsObj?.value?.[0];
const caseDetails = props.searchDetailsObj?.[0]?.value?.[0];
const statusCode = Number(caseResult?.statuscode);
const appealType = Number(caseResult?.pinswg_appealcasetype);
const specialistProcess = caseDetails?.pinswg_specialistcaseprocess;
const stages = getLifecycleStagesForCase(
appealType,
statusCode,
specialistProcess
);
function hasOwnPropertyAndNotNull(obj, property) {
return obj.hasOwnProperty(property) && obj[property] !== null;
}
const [expandAll, setExpandAll] = useState(null);
// null = use default (in-progress open)
// true = force open all
// false = force close all
const handleToggleAll = () => {
setExpandAll((prev) => (prev === true ? false : true));
};
return (
<div className="govuk-grid-row">
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h2 className="govuk-heading-m ">
{t("case:status-title")}
</h2>
<button
type="button"
className="govuk-!-margin-bottom-3 govuk-link watchCase govuk-!-font-size-16 "
onClick={handleToggleAll}
>
{expandAll === true
? t("case:status-hide-all-label")
: t("case:status-show-all-label")}
</button>
<ul className="govuk-task-list">
{stages.map((stage) => {
const isDefaultOpen =
stage.status === "in-progress";
const isOpen =
expandAll === null ? isDefaultOpen : expandAll;
return (
<li
className="govuk-task-list__item"
key={stage.id}
>
<div className="govuk-task-list__name-and-hint">
{stage.descriptionKey && (
<details
className="govuk-details govuk-!-margin-top-2 govuk-!-margin-bottom-2"
open={isOpen}
>
<summary className="govuk-details__summary">
<span className="govuk-details__summary-text">
{t(
`case-stages:${stage.titleKey}`
)}
</span>
</summary>
<div className="govuk-details__text">
{t(
`case-stages:${stage.descriptionKey}`
)}
</div>
</details>
)}
</div>
<div
className="govuk-task-list__status "
id={`${stage.id}-status`}
>
<strong
className={
statusClassMap[stage.status] ||
"govuk-tag govuk-tag--grey govuk-!-margin-top-2"
}
>
{t(
`case-stages:${
statusTextMap[
stage.status
] || "status-not-started"
}`
)}
</strong>
</div>
</li>
);
})}
</ul>
</div>
</div>
</div>
);
};
export default StatusDetails;
+272 -93
View File
@@ -9,6 +9,7 @@ import transLookup from "../../data/lookuptranslations.json";
import Documents from "./documents"; import Documents from "./documents";
import EventsDetails from "./events"; import EventsDetails from "./events";
import MediaDetails from "./media"; import MediaDetails from "./media";
import StatusDetails from "./status";
import { import {
createWatchedCases, createWatchedCases,
@@ -23,6 +24,7 @@ import {
setCurrentReference, setCurrentReference,
setCurrentView setCurrentView
} from "../../store/currentView/action"; } from "../../store/currentView/action";
import resolveCrmDisplayValue from "../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import { import {
setWatchedCases, setWatchedCases,
@@ -30,8 +32,12 @@ import {
} from "../../store/watchedCases/action"; } from "../../store/watchedCases/action";
import { signIn, useSession } from "next-auth/react"; import { signIn, useSession } from "next-auth/react";
import { destroyCookie, parseCookies, setCookie } from "nookies"; import { destroyCookie, parseCookies, setCookie } from "../../lib/cookies";
import { getFormCollectionByID, getDetailsProxy } from "../utils"; import { getFormCollectionByID, getDetailsProxy, hasOwn } from "../utils";
import {
getLivePublishedEvent,
isEventLiveNow
} from "./summary/utils/liveEvent";
import * as CaseTypes from "./summaryTypes"; // ✅ must match filename exactly import * as CaseTypes from "./summaryTypes"; // ✅ must match filename exactly
import { import {
@@ -61,7 +67,7 @@ import CaseNoticeBanner from "./caseNoticeBanner";
import WatchModal from "./watchmodal"; import WatchModal from "./watchmodal";
import EIADetails from "./eia"; import EIADetails from "./eia";
import GoogleMapComponent from "../mapping"; import MapComponent from "../mapping";
import OSPoint from "ospoint"; import OSPoint from "ospoint";
const CaseSummary = (props) => { const CaseSummary = (props) => {
@@ -90,7 +96,8 @@ const CaseSummary = (props) => {
currentView, currentView,
messagesObj, messagesObj,
docsOffline, docsOffline,
ticketnumber ticketnumber,
mapTarget
} = props; } = props;
const showLoginCheck = const showLoginCheck =
@@ -196,6 +203,10 @@ const CaseSummary = (props) => {
return isEmail; return isEmail;
}; };
const primaryId = getFormCollectionByID(
appealTypeID || setCaseQueryObj.value[0].pinswg_appealcasetype
).PrimaryIdAttribute;
const deleteItem = (caseID, topThreeType) => { const deleteItem = (caseID, topThreeType) => {
let cookies = parseCookies(); let cookies = parseCookies();
topThreeType == "watchedCases" && topThreeType == "watchedCases" &&
@@ -311,6 +322,20 @@ const CaseSummary = (props) => {
let hasEndDate = typeof d != "undefined"; let hasEndDate = typeof d != "undefined";
const hasEventsTabData =
isObjectNotEmpty(props, "eventsObj") &&
Array.isArray(props.eventsObj?.value) &&
props.eventsObj.value.length > 0;
const hasMediaTabData =
isObjectNotEmpty(props, "mediaObj") &&
Array.isArray(props.mediaObj?.value) &&
props.mediaObj.value.length > 0;
const livePublishedEvent = hasEventsTabData
? getLivePublishedEvent(props.eventsObj)
: null;
let point = {}; let point = {};
let siteCoords = {}; let siteCoords = {};
let center = {}; let center = {};
@@ -349,6 +374,47 @@ const CaseSummary = (props) => {
showDetails == true ? ( showDetails == true ? (
<> <>
<div className="govuk-frontend-supported"> <div className="govuk-frontend-supported">
{livePublishedEvent && (
<div
className="govuk-notification-banner govuk-!-margin-bottom-6"
role="region"
aria-labelledby="live-event-title"
data-module="govuk-notification-banner"
>
<div className="govuk-notification-banner__header">
<h2
className="govuk-notification-banner__title"
id="live-event-title"
>
{t("case:live-event-subheading")}
</h2>
</div>
<div className="govuk-notification-banner__content">
<p className="govuk-notification-banner__heading">
{t("case:live-event-copy")}
</p>
{livePublishedEvent.pinswg_eventname && (
<p className="govuk-body">
{livePublishedEvent.pinswg_eventname}
</p>
)}
<a
href={
locale === "en"
? livePublishedEvent.pinswg_linktotheevent
: livePublishedEvent.pinswg_linktotheeventstreamwelsh
}
className="govuk-link govuk-link--no-visited-state"
target="_blank"
rel="noopener noreferrer"
>
{t("case:live-event-link")}
</a>
</div>
</div>
)}
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-grid-column-full"> <div className="govuk-grid-column-full">
<h1 className="govuk-heading-xl govuk-!-margin-bottom-7"> <h1 className="govuk-heading-xl govuk-!-margin-bottom-7">
@@ -363,6 +429,7 @@ const CaseSummary = (props) => {
</h1> </h1>
</div> </div>
</div> </div>
<div className="govuk-tabs" data-module="govuk-tabs"> <div className="govuk-tabs" data-module="govuk-tabs">
<h2 className="govuk-tabs__title">Contents</h2> <h2 className="govuk-tabs__title">Contents</h2>
<ul className="govuk-tabs__list"> <ul className="govuk-tabs__list">
@@ -443,12 +510,11 @@ const CaseSummary = (props) => {
href="#case-eia" href="#case-eia"
onClick={() => setWhichTab("case-eia")} onClick={() => setWhichTab("case-eia")}
> >
{" "} {router.locale == "cy" ? "AEA" : "EIA"}
EIA
</a> </a>
</li> </li>
)} )}
{isObjectNotEmpty(props, "eventsObj") && ( {hasEventsTabData && (
<li <li
className={ className={
whichTab == "case-events" whichTab == "case-events"
@@ -468,7 +534,7 @@ const CaseSummary = (props) => {
</a> </a>
</li> </li>
)} )}
{isObjectNotEmpty(props, "mediaObj") && ( {hasMediaTabData && (
<li <li
className={ className={
whichTab == "case-media" whichTab == "case-media"
@@ -505,6 +571,21 @@ const CaseSummary = (props) => {
{t("case:summary-tab-documents-label")} {t("case:summary-tab-documents-label")}
</a> </a>
</li> </li>
<li
className={
whichTab == "case-status"
? "govuk-tabs__list-item govuk-tabs__list-item--selected"
: "govuk-tabs__list-item "
}
>
<a
className="govuk-tabs__tab"
href="#case-status"
onClick={() => setWhichTab("case-status")}
>
{t("case:status-title")}
</a>
</li>
</ul> </ul>
<div <div
className={ className={
@@ -526,28 +607,16 @@ const CaseSummary = (props) => {
<dl className="govuk-summary-list govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-margin-bottom-9">
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{getFormCollectionByID( {primaryId === "pinswg_dnsid" ||
appealTypeID || primaryId ===
setCaseQueryObj.value[0] "pinswg_nonvalidationid" ||
.pinswg_appealcasetype primaryId === "pinswg_sipscase"
).PrimaryIdAttribute ==
"pinswg_dnsid"
? t( ? t(
"case:summary-applicantonly-label" "case:summary-applicantonly-label"
) )
: getFormCollectionByID( : t(
appealTypeID || "case:summary-appellantonly-label"
setCaseQueryObj )}
.value[0]
.pinswg_appealcasetype
).PrimaryIdAttribute ==
"pinswg_nonvalidationid"
? t(
"case:summary-appellantonly-label"
)
: t(
"case:summary-applicant-label"
)}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{casesObj.pinswg_appellantagent == {casesObj.pinswg_appellantagent ==
@@ -562,7 +631,7 @@ const CaseSummary = (props) => {
</div> </div>
{detailsObj.pinswg_agentcontactname != {detailsObj.pinswg_agentcontactname !=
null && null &&
(_.has( (hasOwn(
detailsObj, detailsObj,
"pinswg_agentcontactname" "pinswg_agentcontactname"
) ? ( ) ? (
@@ -573,7 +642,7 @@ const CaseSummary = (props) => {
)} )}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_agentcontactname" "pinswg_agentcontactname"
) )
@@ -617,103 +686,103 @@ const CaseSummary = (props) => {
)[0] )[0]
: "" : ""
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline1" "pinswg_siteaddressline1"
) )
? detailsObj.pinswg_siteaddressline1 ? detailsObj.pinswg_siteaddressline1
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addressline1" "pinswg_addressline1"
) )
? detailsObj.pinswg_addressline1 ? detailsObj.pinswg_addressline1
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline1" "pinswg_siteaddressline1"
) && ) &&
detailsObj.pinswg_siteaddressline1 != detailsObj.pinswg_siteaddressline1 !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addressline1" "pinswg_addressline1"
) && ) &&
detailsObj.pinswg_addressline1 != detailsObj.pinswg_addressline1 !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline2" "pinswg_siteaddressline2"
) )
? detailsObj.pinswg_siteaddressline2 ? detailsObj.pinswg_siteaddressline2
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addressline2" "pinswg_addressline2"
) )
? detailsObj.pinswg_addressline2 ? detailsObj.pinswg_addressline2
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addressline2" "pinswg_addressline2"
) && ) &&
detailsObj.pinswg_addressline2 != detailsObj.pinswg_addressline2 !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresstown" "pinswg_siteaddresstown"
) )
? detailsObj.pinswg_siteaddresstown ? detailsObj.pinswg_siteaddresstown
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addresstown" "pinswg_addresstown"
) )
? detailsObj.pinswg_addresstown ? detailsObj.pinswg_addresstown
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresstown" "pinswg_siteaddresstown"
) && ) &&
detailsObj.pinswg_siteaddresstown != detailsObj.pinswg_siteaddresstown !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addresstown" "pinswg_addresstown"
) && ) &&
detailsObj.pinswg_addresstown != detailsObj.pinswg_addresstown !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresscounty" "pinswg_siteaddresscounty"
) )
? detailsObj.pinswg_siteaddresscounty ? detailsObj.pinswg_siteaddresscounty
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addresscounty" "pinswg_addresscounty"
) )
? detailsObj.pinswg_addresscounty ? detailsObj.pinswg_addresscounty
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresscounty" "pinswg_siteaddresscounty"
) && ) &&
detailsObj.pinswg_siteaddresscounty != detailsObj.pinswg_siteaddresscounty !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addresscounty" "pinswg_addresscounty"
) && ) &&
detailsObj.pinswg_addresscounty != detailsObj.pinswg_addresscounty !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresspostcode" "pinswg_siteaddresspostcode"
) )
? detailsObj.pinswg_siteaddresspostcode ? detailsObj.pinswg_siteaddresspostcode
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_postcode" "pinswg_postcode"
) )
@@ -808,6 +877,52 @@ const CaseSummary = (props) => {
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-grid-column-full"> <div className="govuk-grid-column-full">
<div className=""> <div className="">
{getFormCollectionByID(
appealTypeID
).PrimaryIdAttribute ==
"pinswg_sipscase" &&
isConsultationWindowOpen(
detailsObj
) && (
<p>
{t(
"case:summary-make-consultation-response-para-a"
)}
<Link
target="_blank"
className="govuk-link"
href={t(
"case:summary-make-representation-para-a-link"
)}
>
{t(
"case:summary-make-representation-para-a-label"
)}
</Link>
</p>
)}
{isGeneralRepresentationWindowOpen(
detailsObj
) && (
<div className="govuk-button-group">
<p>
{t(
"case:summary-make-representation-para-a"
)}
<Link
target="_blank"
className="govuk-link"
href={t(
"case:summary-make-representation-para-a-link"
)}
>
{t(
"case:summary-make-representation-para-a-label"
)}
</Link>
</p>
</div>
)}
<div className="govuk-button-group"> <div className="govuk-button-group">
{getFormCollectionByID( {getFormCollectionByID(
appealTypeID appealTypeID
@@ -839,13 +954,13 @@ const CaseSummary = (props) => {
case: case:
currentType == currentType ==
"searchResultsObj" "searchResultsObj"
? detailsObj.pinswg_name ? detailsObj.ticketnumber
: currentType == : currentType ==
"watchedCases" "watchedCases"
? casesObj.pinswg_title ? casesObj.pinswg_title
: currentType == : currentType ==
"directResultsObj" "directResultsObj"
? detailsObj.pinswg_name ? detailsObj.ticketnumber
: casesObj.reference : casesObj.reference
} }
}} }}
@@ -914,6 +1029,7 @@ const CaseSummary = (props) => {
)} )}
</> </>
)} )}
{isGeneralRepresentationWindowOpen( {isGeneralRepresentationWindowOpen(
detailsObj detailsObj
) && ( ) && (
@@ -1367,7 +1483,7 @@ const CaseSummary = (props) => {
</div> </div>
<div className="govuk-grid-row"> <div className="govuk-grid-row">
<div className="govuk-grid-column-full"> <div className="govuk-grid-column-full">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_startdate" "pinswg_startdate"
) && ) &&
@@ -1457,9 +1573,11 @@ const CaseSummary = (props) => {
width: "100%" width: "100%"
}} }}
> >
<GoogleMapComponent <MapComponent
center={center} center={center}
zoom={zoom} zoom={zoom}
locale={router.locale}
mapTarget={mapTarget}
/> />
{/* <OSMapComponent center={center} zoom={zoom} /> */} {/* <OSMapComponent center={center} zoom={zoom} /> */}
</div> </div>
@@ -1498,103 +1616,103 @@ const CaseSummary = (props) => {
)[0] )[0]
: "" : ""
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline1" "pinswg_siteaddressline1"
) )
? detailsObj.pinswg_siteaddressline1 ? detailsObj.pinswg_siteaddressline1
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addressline1" "pinswg_addressline1"
) )
? detailsObj.pinswg_addressline1 ? detailsObj.pinswg_addressline1
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline1" "pinswg_siteaddressline1"
) && ) &&
detailsObj.pinswg_siteaddressline1 != detailsObj.pinswg_siteaddressline1 !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addressline1" "pinswg_addressline1"
) && ) &&
detailsObj.pinswg_addressline1 != detailsObj.pinswg_addressline1 !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddressline2" "pinswg_siteaddressline2"
) )
? detailsObj.pinswg_siteaddressline2 ? detailsObj.pinswg_siteaddressline2
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addressline2" "pinswg_addressline2"
) )
? detailsObj.pinswg_addressline2 ? detailsObj.pinswg_addressline2
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addressline2" "pinswg_addressline2"
) && ) &&
detailsObj.pinswg_addressline2 != detailsObj.pinswg_addressline2 !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresstown" "pinswg_siteaddresstown"
) )
? detailsObj.pinswg_siteaddresstown ? detailsObj.pinswg_siteaddresstown
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addresstown" "pinswg_addresstown"
) )
? detailsObj.pinswg_addresstown ? detailsObj.pinswg_addresstown
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresstown" "pinswg_siteaddresstown"
) && ) &&
detailsObj.pinswg_siteaddresstown != detailsObj.pinswg_siteaddresstown !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addresstown" "pinswg_addresstown"
) && ) &&
detailsObj.pinswg_addresstown != detailsObj.pinswg_addresstown !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresscounty" "pinswg_siteaddresscounty"
) )
? detailsObj.pinswg_siteaddresscounty ? detailsObj.pinswg_siteaddresscounty
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addresscounty" "pinswg_addresscounty"
) )
? detailsObj.pinswg_addresscounty ? detailsObj.pinswg_addresscounty
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresscounty" "pinswg_siteaddresscounty"
) && ) &&
detailsObj.pinswg_siteaddresscounty != detailsObj.pinswg_siteaddresscounty !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_addresscounty" "pinswg_addresscounty"
) && ) &&
detailsObj.pinswg_addresscounty != detailsObj.pinswg_addresscounty !=
null && <br />} null && <br />}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_siteaddresspostcode" "pinswg_siteaddresspostcode"
) )
? detailsObj.pinswg_siteaddresspostcode ? detailsObj.pinswg_siteaddresspostcode
: ""} : ""}
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_postcode" "pinswg_postcode"
) )
@@ -1622,16 +1740,20 @@ const CaseSummary = (props) => {
<div className="card-body"> <div className="card-body">
<div> <div>
<h4 className="govuk-heading-s "> <h4 className="govuk-heading-s ">
EIA Screening {t(
"case:summary-eia-screening-heading"
)}
</h4> </h4>
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
Screening start date {t(
"case:summary-eia-screening-start-date-label"
)}
</dt>{" "} </dt>{" "}
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_screeningstartdate" "pinswg_screeningstartdate"
) )
@@ -1651,10 +1773,12 @@ const CaseSummary = (props) => {
</div> </div>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
EIA target date {t(
"case:summary-eia-screening-target-date-label"
)}
</dt>{" "} </dt>{" "}
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_eiatargetdate" "pinswg_eiatargetdate"
) )
@@ -1679,10 +1803,12 @@ const CaseSummary = (props) => {
) && ( ) && (
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
Target Extended {t(
"case:summary-eia-screening-target-extended-label"
)}
</dt>{" "} </dt>{" "}
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_targetextended" "pinswg_targetextended"
) )
@@ -1703,11 +1829,12 @@ const CaseSummary = (props) => {
)} )}
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
Direction Issued {t(
Date "case:summary-eia-screening-direction-issued-label"
)}
</dt>{" "} </dt>{" "}
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_directionissueddate" "pinswg_directionissueddate"
) )
@@ -1737,7 +1864,7 @@ const CaseSummary = (props) => {
)} )}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_eiarequired" "pinswg_eiarequired"
) )
@@ -1756,6 +1883,35 @@ const CaseSummary = (props) => {
</dd> </dd>
</div> </div>
)} )}
{hasValidKey(
detailsObj,
"pinswg_sipseiarequired"
) && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-eia-required-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue(
{
value: detailsObj[
"pinswg_sipseiarequired@OData.Community.Display.V1.FormattedValue"
],
locale,
translations:
transLookup,
fallbackValue:
t(
"case:summary-awaiting-information-label"
)
}
)}
</dd>
</div>
)}
</dl> </dl>
</div> </div>
</div> </div>
@@ -1764,16 +1920,20 @@ const CaseSummary = (props) => {
<div className="card-body"> <div className="card-body">
<div> <div>
<h4 className="govuk-heading-s "> <h4 className="govuk-heading-s ">
EIA Scoping {t(
"case:summary-eia-scoping-heading"
)}
</h4> </h4>
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
Scoping Start Date {t(
"case:summary-eia-scoping-start-date-label"
)}
</dt>{" "} </dt>{" "}
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_scopingstartdate" "pinswg_scopingstartdate"
) )
@@ -1793,10 +1953,12 @@ const CaseSummary = (props) => {
</div> </div>
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
Scoping Target Date {t(
"case:summary-eia-scoping-target-date-label"
)}
</dt>{" "} </dt>{" "}
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_scopingtargetdate" "pinswg_scopingtargetdate"
) )
@@ -1820,11 +1982,12 @@ const CaseSummary = (props) => {
) && ( ) && (
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
Scoping Target {t(
Extended "case:summary-eia-scoping-target-extended-label"
)}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_scopingtargetextended" "pinswg_scopingtargetextended"
) )
@@ -1845,11 +2008,12 @@ const CaseSummary = (props) => {
)} )}
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
Scoping Outcome {t(
Issued Date "case:summary-eia-scoping-direction-issued-date-label"
)}
</dt>{" "} </dt>{" "}
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_scopingoutcomeissueddate" "pinswg_scopingoutcomeissueddate"
) )
@@ -1878,7 +2042,7 @@ const CaseSummary = (props) => {
.PrimaryIdAttribute == "pinswg_sipscase" && ( .PrimaryIdAttribute == "pinswg_sipscase" && (
<EIADetails props={props} /> <EIADetails props={props} />
)} )}
{isObjectNotEmpty(props, "eventsObj") && ( {hasEventsTabData && (
<div <div
className={ className={
whichTab == "case-events" whichTab == "case-events"
@@ -1891,7 +2055,7 @@ const CaseSummary = (props) => {
</div> </div>
)} )}
{isObjectNotEmpty(props, "mediaObj") && ( {hasMediaTabData && (
<div <div
className={ className={
whichTab == "case-media" whichTab == "case-media"
@@ -1928,6 +2092,19 @@ const CaseSummary = (props) => {
showFilteredDocs={props.showFilteredDocs} showFilteredDocs={props.showFilteredDocs}
/> />
</div> </div>
<div
className={
whichTab == "case-status"
? "govuk-tabs__panel "
: "govuk-tabs__panel govuk-tabs__panel--hidden"
}
id="case-status"
>
<StatusDetails
searchResultsObj={props.searchResultsObj}
searchDetailsObj={props.searchDetailsObj}
/>
</div>
</div> </div>
</div> </div>
</> </>
@@ -1992,10 +2169,12 @@ const CaseSummary = (props) => {
) : null; ) : null;
} }
const fallbackIncidentId = setCaseQueryObj?.value?.[0]?.incidentid;
useEffect(() => { useEffect(() => {
const linkCaseObj = async () => { const linkCaseObj = async () => {
let docObj = await getLinkedCases( let docObj = await getLinkedCases(
incidentid || setCaseQueryObj.value[0].incidentid incidentid || fallbackIncidentId
).then((data) => { ).then((data) => {
//console.log(data); //console.log(data);
setCurrentLinkedCases(data); setCurrentLinkedCases(data);
@@ -2006,7 +2185,7 @@ const CaseSummary = (props) => {
}; };
const linkedCases = linkCaseObj(); const linkedCases = linkCaseObj();
}, [incidentid, setCurrentLinkedCases]); }, [incidentid, fallbackIncidentId, setCurrentLinkedCases]);
let now = new Date(); let now = new Date();
let expDate = new Date(now); let expDate = new Date(now);
@@ -0,0 +1,853 @@
import { getStageCaseTypeKey } from "../../../../lib/domain/case-lifecycle/getStageCaseTypeKey";
import { getStagesForCaseTypeKey } from "../../../../lib/domain/case-lifecycle/getStagesForCaseTypeKey";
import { getLifecycleStageIndex } from "../../../../lib/domain/case-lifecycle/getLifecycleStageIndex";
import { getLifecycleStageStatus } from "../../../../lib/domain/case-lifecycle/getLifecycleStageStatus";
const slugify = (value) =>
value
.toString()
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-|-$/g, "");
const buildStages = (stages) =>
stages.map((stage) => ({
id: slugify(stage.titleKey),
...stage
}));
export const stagesByCaseType = {
DNS: buildStages([
{
stageId: 846040001,
titleKey: "pre-application",
descriptionKey: "pre-application-desc"
},
{
stageId: 846040002,
titleKey: "environmental-impact-assessment-scoping",
descriptionKey: "environmental-impact-assessment-scoping-desc"
},
{
stageId: 846040003,
titleKey: "notification",
descriptionKey: "notification-desc"
},
{
stageId: 846040004,
titleKey: "acceptance-checking",
descriptionKey: "acceptance-checking-desc"
},
{
stageId: 846040005,
titleKey: "invalid-submission",
descriptionKey: "invalid-submission-desc"
},
{
stageId: 846040006,
titleKey: "consultation",
descriptionKey: "consultation-desc"
},
{
stageId: 846040007,
titleKey: "re-consultation",
descriptionKey: "re-consultation-desc"
},
{
stageId: 846040008,
titleKey: "reporting",
descriptionKey: "reporting-desc"
},
{
stageId: 846040009,
titleKey: "inspectors-decision",
descriptionKey: "inspectors-decision-desc"
},
{
stageId: 846040011,
titleKey: "report-to-ministers",
descriptionKey: "report-to-ministers-desc"
},
{
stageId: 846040012,
titleKey: "minister-s-decision",
descriptionKey: "minister-s-decision-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-dnssips"
}
]),
SIP: buildStages([
{
stageId: 846040001,
titleKey: "pre-application",
descriptionKey: "pre-application-desc"
},
{
stageId: 846040002,
titleKey: "environmental-impact-assessment-scoping",
descriptionKey: "environmental-impact-assessment-scoping-desc"
},
{
stageId: 846040003,
titleKey: "notification",
descriptionKey: "notification-desc"
},
{
stageId: 846040004,
titleKey: "acceptance-checking",
descriptionKey: "acceptance-checking-desc"
},
{
stageId: 846040005,
titleKey: "invalid-submission",
descriptionKey: "invalid-submission-desc"
},
{
stageId: 846040006,
titleKey: "consultation",
descriptionKey: "consultation-desc"
},
{
stageId: 846040007,
titleKey: "re-consultation",
descriptionKey: "re-consultation-desc"
},
{
stageId: 846040008,
titleKey: "reporting",
descriptionKey: "reporting-desc"
},
{
stageId: 846040011,
titleKey: "report-to-ministers",
descriptionKey: "report-to-ministers-desc"
},
{
stageId: 846040012,
titleKey: "minister-s-decision",
descriptionKey: "minister-s-decision-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-dnssips"
}
]),
PLANNING_S78: buildStages([
{
stageId: 846040014,
titleKey: "appeal-submitted",
descriptionKey: "appeal-submitted-desc"
},
{
stageId: 846040015,
titleKey: "appeal-registered",
descriptionKey: "appeal-registered-desc"
},
{
stageId: 846040016,
titleKey: "appeal-validated",
descriptionKey: "appeal-validated-desc"
},
{
stageId: 1,
titleKey: "case-in-progress",
descriptionKey: "case-in-progress-desc"
},
{
stageId: 846040017,
titleKey: "questionnaire-lpa-to-notify",
descriptionKey: "questionnaire-lpa-to-notify-desc"
},
{
stageId: 846040018,
titleKey: "representations-period",
descriptionKey: "representations-period-desc"
},
{
stageId: 846040019,
titleKey: "final-comments",
descriptionKey: "final-comments-desc"
},
{
stageId: 846040020,
titleKey: "event",
descriptionKey: "event-desc"
},
{
stageId: 846040021,
titleKey: "site-visit",
descriptionKey: "site-visit-desc"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc"
}
]),
CONDITIONS_73_79: "PLANNING_S78",
LBCAC: "PLANNING_S78",
LDCS: "PLANNING_S78",
PLANNING_OBLIGATIONS_S106: "PLANNING_S78",
PRIOR_NOTIFICATION: "PLANNING_S78",
HAS: buildStages([
{
stageId: 846040014,
titleKey: "appeal-submitted",
descriptionKey: "appeal-submitted-desc"
},
{
stageId: 846040015,
titleKey: "appeal-registered",
descriptionKey: "appeal-registered-desc"
},
{
stageId: 846040016,
titleKey: "appeal-validated",
descriptionKey: "appeal-validated-desc"
},
{
stageId: 1,
titleKey: "case-in-progress",
descriptionKey: "case-in-progress-desc"
},
{
stageId: 846040021,
titleKey: "site-visit",
descriptionKey: "site-visit-desc"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc"
}
]),
CALL_INS: buildStages([
{
stageId: 846040023,
titleKey: "application-called-in",
descriptionKey: "application-called-in-desc"
},
{
stageId: 846040043,
titleKey: "application-registered",
descriptionKey: "application-registered-desc"
},
{
stageId: 846040024,
titleKey: "application-validated",
descriptionKey: "application-validated-desc-callin"
},
{
stageId: 1,
titleKey: "case-in-progress",
descriptionKey: "case-in-progress-desc-callin"
},
{
stageId: 846040025,
titleKey: "lpa-to-notify",
descriptionKey: "lpa-to-notify-desc"
},
{
stageId: 846040018,
titleKey: "representations-period",
descriptionKey: "representations-period-desc"
},
{
stageId: 846040019,
titleKey: "final-comments",
descriptionKey: "final-comments-desc-callin"
},
{
stageId: 846040049,
titleKey: "event",
descriptionKey: "event-desc-callin"
},
{
stageId: 846040021,
titleKey: "site-visit",
descriptionKey: "site-visit-desc"
},
{
stageId: 846040028,
titleKey: "report-issued-to-welsh-ministers",
descriptionKey: "report-issued-to-welsh-ministers-desc"
},
{
stageId: 846040012,
titleKey: "minister-s-decision",
descriptionKey: "minister-s-decision-desc-callin"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-callin"
}
]),
ENFORCEMENT: buildStages([
{
stageId: 846040014,
titleKey: "appeal-submitted",
descriptionKey: "appeal-submitted-desc"
},
{
stageId: 846040015,
titleKey: "appeal-registered",
descriptionKey: "appeal-registered-desc"
},
{
stageId: 846040029,
titleKey: "fee-due",
descriptionKey: "fee-due-desc"
},
{
stageId: 846040030,
titleKey: "validated",
descriptionKey: "appeal-validated-desc"
},
{
stageId: 1,
titleKey: "case-in-progress",
descriptionKey: "case-in-progress-desc"
},
{
stageId: 846040017,
titleKey: "questionnaire-lpa-to-notify",
descriptionKey: "questionnaire-lpa-to-notify-desc"
},
{
stageId: 846040018,
titleKey: "representations-period",
descriptionKey: "representations-period-desc"
},
{
stageId: 846040019,
titleKey: "final-comments",
descriptionKey: "final-comments-desc"
},
{
stageId: 846040020,
titleKey: "event",
descriptionKey: "event-desc"
},
{
stageId: 846040021,
titleKey: "site-visit",
descriptionKey: "site-visit-desc"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc"
}
]),
ENFORCEMENT_LISTED_BUILDING: "ENFORCEMENT",
MAINTENANCE_OF_LAND: "ENFORCEMENT",
RIGHTS_OF_WAY_SCHEDULE_14: buildStages([
{
stageId: 846040014,
titleKey: "appeal-submitted",
descriptionKey: "appeal-submitted-desc"
},
{
stageId: 846040015,
titleKey: "appeal-registered",
descriptionKey: "appeal-registered-desc"
},
{
stageId: 846040016,
titleKey: "appeal-validated",
descriptionKey: "appeal-validated-desc"
},
{
stageId: 846040031,
titleKey: "appeal-start-case-in-progress",
descriptionKey: "case-in-progress-desc"
},
{
stageId: 846040032,
titleKey: "statements-representations-period",
descriptionKey: "statements-representations-period-desc"
},
{
stageId: 846040019,
titleKey: "final-comments",
descriptionKey: "final-comments-desc"
},
{
stageId: 846040021,
titleKey: "site-visit",
descriptionKey: "site-visit-desc"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc"
}
]),
RIGHTS_OF_WAY_ORDERS: buildStages([
{
stageId: 846040033,
titleKey: "order-submitted",
descriptionKey: "order-submitted-desc"
},
{
stageId: 846040034,
titleKey: "order-submission-registered",
descriptionKey: "order-submission-registered-desc"
},
{
stageId: 846040035,
titleKey: "order-submission-validated",
descriptionKey: "order-submission-validated-desc"
},
{
stageId: 846040036,
titleKey: "case-started-case-in-progress",
descriptionKey: "case-started-case-in-progress-desc"
},
{
stageId: 846040062,
titleKey: "statements",
descriptionKey: "statements-desc-order"
},
{
stageId: 846040055,
titleKey: "final-comments",
descriptionKey: "final-comments-desc-cpo"
},
{
stageId: 846040037,
titleKey: "event-site-visit",
descriptionKey: "event-site-visit-desc-order"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-order"
}
]),
REQUESTS_FOR_DIRECTION: buildStages([
{
stageId: 846040042,
titleKey: "application-submitted",
descriptionKey: "application-submitted-desc"
},
{
stageId: 846040043,
titleKey: "application-registered",
descriptionKey: "application-registered-desc"
},
{
stageId: 846040054,
titleKey: "application-start-case-in-progress",
descriptionKey: "application-start-case-in-progress-desc"
},
{
stageId: 846040010,
titleKey: "statements",
descriptionKey: "statements-desc-application"
},
{
stageId: 846040063,
titleKey: "final-comments",
descriptionKey: "final-comments-desc-application"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-application"
}
]),
ADVERTS: buildStages([
{
stageId: 846040014,
titleKey: "appeal-submitted",
descriptionKey: "appeal-submitted-desc"
},
{
stageId: 846040015,
titleKey: "appeal-registered",
descriptionKey: "appeal-registered-desc"
},
{
stageId: 846040016,
titleKey: "appeal-validated",
descriptionKey: "appeal-validated-desc"
},
{
stageId: 846040036,
titleKey: "case-started-case-in-progress",
descriptionKey: "case-in-progress-desc"
},
{
stageId: 846040017,
titleKey: "questionnaire-lpa-to-notify",
descriptionKey: "questionnaire-lpa-to-notify-desc"
},
{
stageId: 846040010,
titleKey: "statements",
descriptionKey: "statements-desc"
},
{
stageId: 846040019,
titleKey: "final-comments",
descriptionKey: "final-comments-desc"
},
{
stageId: 846040021,
titleKey: "site-visit",
descriptionKey: "site-visit-desc"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc"
}
]),
HEDGEROW_TPO: buildStages([
{
stageId: 846040014,
titleKey: "appeal-submitted",
descriptionKey: "appeal-submitted-desc"
},
{
stageId: 846040015,
titleKey: "appeal-registered",
descriptionKey: "appeal-registered-desc"
},
{
stageId: 846040016,
titleKey: "appeal-validated",
descriptionKey: "appeal-validated-desc"
},
{
stageId: 846040031,
titleKey: "appeal-start-case-in-progress",
descriptionKey: "case-in-progress-desc"
},
{
stageId: 846040017,
titleKey: "questionnaire-lpa-to-notify",
descriptionKey: "questionnaire-lpa-to-notify-desc"
},
{
stageId: 846040032,
titleKey: "statements-representations-period",
descriptionKey: "statements-representations-period-desc"
},
{
stageId: 846040019,
titleKey: "final-comments",
descriptionKey: "final-comments-desc"
},
{
stageId: 846040021,
titleKey: "site-visit",
descriptionKey: "site-visit-desc"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc"
}
]),
COMMON_LAND: buildStages([
{
stageId: 846040042,
titleKey: "application-submitted",
descriptionKey: "application-submitted-desc"
},
{
stageId: 846040043,
titleKey: "application-registered",
descriptionKey: "application-registered-desc"
},
{
stageId: 846040024,
titleKey: "application-validated",
descriptionKey: "application-validated-desc"
},
{
stageId: 846040054,
titleKey: "application-start-case-in-progress",
descriptionKey: "application-start-case-in-progress-desc"
},
{
stageId: 846040038,
titleKey: "applicant-statement-on-representations",
descriptionKey: "applicant-statement-on-representations-desc"
},
{
stageId: 846040039,
titleKey: "representatives-comment",
descriptionKey: "representatives-comment-desc"
},
{
stageId: 846040027,
titleKey: "applicants-final-comment",
descriptionKey: "applicants-final-comment-desc"
},
{
stageId: 846040037,
titleKey: "event-site-visit",
descriptionKey: "event-site-visit-desc"
},
{
stageId: 846040022,
titleKey: "decision-issued",
descriptionKey: "decision-issued-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-application"
}
]),
COMPULSORY_PURCHASE_ORDERS: buildStages([
{
stageId: 846040033,
titleKey: "order-submitted",
descriptionKey: "order-submitted-desc"
},
{
stageId: 846040040,
titleKey: "order-registered",
descriptionKey: "order-submission-registered-desc"
},
{
stageId: 846040041,
titleKey: "order-validated",
descriptionKey: "order-submission-validated-desc"
},
{
stageId: 1,
titleKey: "case-in-progress",
descriptionKey: "case-started-case-in-progress-desc"
},
{
stageId: 846040010,
titleKey: "statements",
descriptionKey: "statements-desc-order"
},
{
stageId: 846040019,
titleKey: "final-comments",
descriptionKey: "final-comments-desc-cpo"
},
{
stageId: 846040037,
titleKey: "event-site-visit",
descriptionKey: "event-site-visit-desc-order"
},
{
stageId: 846040011,
titleKey: "report-to-ministers",
descriptionKey: "report-to-ministers-desc-cpo"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-order"
}
]),
ELECTRICITY_ACT: "PLANNING_S78",
HARBOUR_REVISION_ORDER: buildStages([
{
stageId: 846040033,
titleKey: "order-submitted",
descriptionKey: "order-submitted-desc"
},
{
stageId: 846040040,
titleKey: "order-registered",
descriptionKey: "order-submission-registered-desc"
},
{
stageId: 846040041,
titleKey: "order-validated",
descriptionKey: "order-submission-validated-desc"
},
{
stageId: 1,
titleKey: "case-in-progress",
descriptionKey: "case-started-case-in-progress-desc"
},
{
stageId: 846040010,
titleKey: "statements",
descriptionKey: "statements-desc-order"
},
{
stageId: 846040055,
titleKey: "final-comments",
descriptionKey: "final-comments-desc-cpo"
},
{
stageId: 846040037,
titleKey: "event-site-visit",
descriptionKey: "event-site-visit-desc-order"
},
{
stageId: 846040056,
titleKey: "report-to-ministers",
descriptionKey: "report-to-ministers-desc-cpo"
},
{
stageId: 846040060,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-order"
}
]),
TRANSPORT_WORKS: "PLANNING_S78",
WAYLEAVE: buildStages([
{
stageId: 846040042,
titleKey: "application-submitted",
descriptionKey: "application-submitted-desc"
},
{
stageId: 846040043,
titleKey: "application-registered",
descriptionKey: "application-registered-desc"
},
{
stageId: 846040024,
titleKey: "application-validated",
descriptionKey: "application-validated-desc"
},
{
stageId: 1,
titleKey: "case-in-progress",
descriptionKey: "application-start-case-in-progress-desc"
},
{
stageId: 846040021,
titleKey: "site-visit",
descriptionKey: "site-visit-desc"
},
{
stageId: 846040044,
titleKey: "report-to-desnz",
descriptionKey: "report-to-desnz-desc"
},
{
stageId: 846040013,
titleKey: "case-closed",
descriptionKey: "case-closed-desc-application"
}
]),
NON_VALIDATION: buildStages([
{
stageId: 846040014,
titleKey: "appeal-submitted",
descriptionKey: "appeal-submitted-desc"
},
{
stageId: 846040015,
titleKey: "appeal-registered",
descriptionKey: "appeal-registered-desc"
},
{
stageId: 846040016,
titleKey: "appeal-validated",
descriptionKey: "appeal-validated-desc"
},
{
stageId: 846040045,
titleKey: "case-in-progress-assessment",
descriptionKey: "case-in-progress-desc"
},
{
stageId: 846040046,
titleKey: "decision-outcome",
descriptionKey: "decision-outcome-desc"
},
{
stageId: 846040060,
titleKey: "case-closed-nonval",
descriptionKey: "case-closed-desc"
}
])
};
const resolveStages = (caseTypeOrAppealTypeId, specialistProcess) => {
const key = getStageCaseTypeKey(caseTypeOrAppealTypeId, specialistProcess);
return getStagesForCaseTypeKey(key);
};
export const getStagesForAppealType = (
caseType,
currentStageId,
specialistProcess
) => {
const stages = resolveStages(caseType, specialistProcess);
const currentIndex = getLifecycleStageIndex(stages, currentStageId);
return stages.map((stage, index) => ({
...stage,
status: getLifecycleStageStatus(index, currentIndex)
}));
};
@@ -0,0 +1,36 @@
export function isEventLiveNow(item) {
if (!item?.pinswg_dateeventrequested) return false;
const now = new Date();
const start = new Date(item.pinswg_dateeventrequested);
if (isNaN(start.getTime())) return false;
const endDateValue =
item.pinswg_enddateofevent || item.pinswg_enddateoftheevent;
if (endDateValue) {
const end = new Date(endDateValue);
if (isNaN(end.getTime())) return false;
end.setHours(23, 59, 59, 999);
return now >= start && now <= end;
}
const endOfStartDay = new Date(start);
endOfStartDay.setHours(23, 59, 59, 999);
return now >= start && now <= endOfStartDay;
}
export function getLivePublishedEvent(eventsObj) {
const eventsArr = eventsObj?.value || [];
return eventsArr.find(
(item) =>
item.pinswg_eventpublishflag &&
item.pinswg_linktotheevent &&
isEventLiveNow(item)
);
}
@@ -1,18 +1,20 @@
export function showRepsLocal(startDate, endDate) { import {
let date = new Date(); resolveRepresentationWindow,
date = new Date(date.toDateString()); isRepresentationWindowOpen,
const start = new Date(startDate); isRepresentationWindowClosed,
const end = new Date(endDate); canShowRepresentationButtonForAppealType,
canStartHouseholderRepresentation,
canStartCpoRepresentation,
canStartRowRepresentation,
canStartAdvertRepresentation
} from "../../../../lib/domain/representation-policy";
return date >= start && date <= end ? true : false; export function showRepsLocal(startDate, endDate) {
return isRepresentationWindowOpen(startDate, endDate);
} }
export function showRepsEndedLocal(startDate, endDate) { export function showRepsEndedLocal(startDate, endDate) {
let date = new Date(); return isRepresentationWindowClosed(startDate, endDate);
date = new Date(date.toDateString());
const start = new Date(startDate);
const end = new Date(endDate);
return date > start && date > end ? true : false;
} }
export function isConsultationWindowOpen(detailsObj) { export function isConsultationWindowOpen(detailsObj) {
@@ -23,24 +25,7 @@ export function isConsultationWindowOpen(detailsObj) {
} }
export function isGeneralRepresentationWindowOpen(detailsObj) { export function isGeneralRepresentationWindowOpen(detailsObj) {
return ( return resolveRepresentationWindow(detailsObj).isOpen;
(Object.prototype.hasOwnProperty.call(detailsObj, "pinswg_startdate") ||
Object.prototype.hasOwnProperty.call(
detailsObj,
"pinswg_applicationacceptedasvalid"
) ||
Object.prototype.hasOwnProperty.call(
detailsObj,
"pinswg_startdates"
)) &&
showRepsLocal(
detailsObj.pinswg_startdate ||
detailsObj.pinswg_startdates ||
detailsObj.pinswg_applicationacceptedasvalid,
detailsObj.pinswg_finalcommentsduedate ||
detailsObj.pinswg_endofrepresentationperiod
)
);
} }
export function canShowRepButtonForAppealType({ export function canShowRepButtonForAppealType({
@@ -48,44 +33,31 @@ export function canShowRepButtonForAppealType({
isLPA, isLPA,
searchDetailsObj searchDetailsObj
}) { }) {
if (!canShowRepresentationButtonForAppealType(appealType)) {
return false;
}
switch (appealType) { switch (appealType) {
case 846040012:
case 846040013:
case 846040014:
//for ROW case 846040015:
case 846040020:
case 846040021:
case 846040023:
case 846040024:
return false;
case 846040004: case 846040004:
return isLPA ? true : false; return canStartHouseholderRepresentation(appealType, isLPA);
case 846040015: case 846040015:
return searchDetailsObj[0].value[0].pinswg_specialistcaseprocess == return canStartRowRepresentation(
846040001 appealType,
? showRepsLocal( searchDetailsObj[0].value[0]
searchDetailsObj[0].value[0].pinswg_startdate, );
searchDetailsObj[0].value[0].pinswg_finalcommentsduedate
)
: true;
case 846040018: case 846040018:
let shouldShow = return canStartAdvertRepresentation(
searchDetailsObj[0].value[0].pinswg_speacialistcaseprocess == appealType,
846040000 && isLPA searchDetailsObj[0].value[0],
? true isLPA
: searchDetailsObj[0].value[0] );
.pinswg_speacialistcaseprocess == 846040001
? true
: false;
return shouldShow;
case 846040019: case 846040019:
return showRepsLocal( return canStartCpoRepresentation(
searchDetailsObj[0].value[0].pinswg_startdate, appealType,
searchDetailsObj[0].value[0].pinswg_statementduedate searchDetailsObj[0].value[0]
); );
default: default:
@@ -100,6 +72,9 @@ export function getEntryCtaLabelKey(appealType) {
} }
export function shouldSuppressBlockedMessage({ appealType, isLPA }) { export function shouldSuppressBlockedMessage({ appealType, isLPA }) {
if (!canShowRepresentationButtonForAppealType(appealType)) {
return true;
}
return !isLPA && appealType == 846040004; return !isLPA && appealType == 846040004;
} }
+94 -139
View File
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_advertsid = (props) => { const Pinswg_advertsid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,139 +24,94 @@ const Pinswg_advertsid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={"Specialist Case Process"} label={t(
value={ "case:summary-specialist-case-process-label"
router.locale == "cy" )}
? jsonpath({ value={resolveCrmDisplayValue({
path: value: detailsObj[
'$..[?(@ && @.value=="' + "pinswg_speacialistcaseprocess@OData.Community.Display.V1.FormattedValue"
detailsObj[ ],
"pinswg_speacialistcaseprocess@OData.Community.Display.V1.FormattedValue" locale,
] + translations: transLookup,
'")].value_cy', fallbackValue: ""
json: transLookup, })}
eval: true
})
: detailsObj[
"pinswg_speacialistcaseprocess@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-lpa-label")} label={t("case:summary-lpa-label")}
value={ value={
router.locale == "cy" <>
? jsonpath({ {getCaseLpaDisplayLines({
path: casesObj,
'$..[?(@ && @.value=="' + detailsObj,
casesObj[ locale: router.locale,
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" transLookup
] + }).map((name) => (
'")].value_cy', <div key={name}>{name}</div>
json: transLookup, ))}
eval: true </>
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath( "pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
'$..[?(@.value=="' + ],
detailsObj[ locale,
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-to-be-confirmed-label"
transLookup )
) })}
: detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-type-of-event-label")} label={t("case:summary-type-of-event-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "statuscode@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"statuscode@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
@@ -162,23 +119,16 @@ const Pinswg_advertsid = (props) => {
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br /> <br />
{/* <Link href="/"> {/* <Link href="/">
@@ -195,7 +145,9 @@ const Pinswg_advertsid = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -234,7 +186,7 @@ const Pinswg_advertsid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdate") hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -242,7 +194,7 @@ const Pinswg_advertsid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -259,7 +211,10 @@ const Pinswg_advertsid = (props) => {
"case:summary-questionnaire-due-date-label" "case:summary-questionnaire-due-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_questionnaireduedate") hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_questionnaireduedate
) )
@@ -278,7 +233,7 @@ const Pinswg_advertsid = (props) => {
"case:summary-interested-party-date-label" "case:summary-interested-party-date-label"
)} )}
value={ value={
_.has( hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatement" "pinswg_otherpartiesstatement"
) )
@@ -291,7 +246,7 @@ const Pinswg_advertsid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has( : hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatements" "pinswg_otherpartiesstatements"
) )
@@ -311,7 +266,7 @@ const Pinswg_advertsid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_dateeventrequested") hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_dateeventrequested detailsObj.pinswg_dateeventrequested
) )
@@ -328,7 +283,7 @@ const Pinswg_advertsid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")} label={t("case:summary-start-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdateoftheevent") hasOwn(detailsObj, "pinswg_startdateoftheevent")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_startdateoftheevent detailsObj.pinswg_startdateoftheevent
) )
@@ -344,7 +299,7 @@ const Pinswg_advertsid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
_.has(detailsObj, "pinswg_casedecisiondate") hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_callinss77id = (props) => { const Pinswg_callinss77id = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,149 +24,97 @@ const Pinswg_callinss77id = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-lpa-label")} label={t("case:summary-lpa-label")}
value={ value={
router.locale == "cy" <>
? jsonpath({ {getCaseLpaDisplayLines({
path: casesObj,
'$..[?(@ && @.value=="' + detailsObj,
casesObj[ locale: router.locale,
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" transLookup
] + }).map((name) => (
'")].value_cy', <div key={name}>{name}</div>
json: transLookup, ))}
eval: true </>
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath( "pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
'$..[?(@.value=="' + ],
detailsObj[ locale,
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-to-be-confirmed-label"
transLookup )
) })}
: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-type-of-event-label")} label={t("case:summary-type-of-event-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "statuscode@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"statuscode@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br /> <br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -173,7 +123,9 @@ const Pinswg_callinss77id = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -212,7 +164,7 @@ const Pinswg_callinss77id = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdate") hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -220,7 +172,7 @@ const Pinswg_callinss77id = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -236,7 +188,10 @@ const Pinswg_callinss77id = (props) => {
"case:summary-questionnaire-due-date-label" "case:summary-questionnaire-due-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_questionnaireduedate") hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_questionnaireduedate
) )
@@ -249,36 +204,11 @@ const Pinswg_callinss77id = (props) => {
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{/* <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-date-exported-to-iss-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(
detailsObj,
"pinswg_dateexportedtoiss"
)
? !_.isEmpty(
detailsObj.pinswg_dateexportedtoiss
)
? formatDates(
detailsObj.pinswg_dateexportedtoiss
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
</dd>
</div> */}
<SummaryRow <SummaryRow
label={t("case:summary-statement-due-date-label")} label={t("case:summary-statement-due-date-label")}
value={ value={
_.has(detailsObj, "pinswg_statementsduedate") hasOwn(detailsObj, "pinswg_statementsduedate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_statementsduedate detailsObj.pinswg_statementsduedate
) )
@@ -296,7 +226,7 @@ const Pinswg_callinss77id = (props) => {
"case:summary-interested-party-date-label" "case:summary-interested-party-date-label"
)} )}
value={ value={
_.has( hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatement" "pinswg_otherpartiesstatement"
) )
@@ -309,7 +239,7 @@ const Pinswg_callinss77id = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has( : hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatements" "pinswg_otherpartiesstatements"
) )
@@ -330,7 +260,10 @@ const Pinswg_callinss77id = (props) => {
"case:summary-applicant-final-comments-date-label" "case:summary-applicant-final-comments-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_finalcommentsduedate") hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate detailsObj.pinswg_finalcommentsduedate
) )
@@ -343,35 +276,11 @@ const Pinswg_callinss77id = (props) => {
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{/* <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-inquiry-evidence-date-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
</dd>
</div> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_dateeventrequested") hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_dateeventrequested detailsObj.pinswg_dateeventrequested
) )
@@ -387,7 +296,7 @@ const Pinswg_callinss77id = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")} label={t("case:summary-start-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdateofevent") hasOwn(detailsObj, "pinswg_startdateofevent")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_startdateofevent detailsObj.pinswg_startdateofevent
) )
@@ -403,7 +312,7 @@ const Pinswg_callinss77id = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
_.has(detailsObj, "pinswg_casedecisiondate") hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_commonlandid = (props) => { const Pinswg_commonlandid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,149 +24,97 @@ const Pinswg_commonlandid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-lpa-label")} label={t("case:summary-lpa-label")}
value={ value={
router.locale == "cy" <>
? jsonpath({ {getCaseLpaDisplayLines({
path: casesObj,
'$..[?(@ && @.value=="' + detailsObj,
casesObj[ locale: router.locale,
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" transLookup
] + }).map((name) => (
'")].value_cy', <div key={name}>{name}</div>
json: transLookup, ))}
eval: true </>
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath( "pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
'$..[?(@.value=="' + ],
detailsObj[ locale,
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-to-be-confirmed-label"
transLookup )
) })}
: detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-type-of-event-label")} label={t("case:summary-type-of-event-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "statuscode@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"statuscode@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br /> <br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -173,7 +123,9 @@ const Pinswg_commonlandid = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -205,26 +157,14 @@ const Pinswg_commonlandid = (props) => {
label={t( label={t(
"case:summary-case-relevant-authoritylabel" "case:summary-case-relevant-authoritylabel"
)} )}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_relevantauthorityname"
path: ],
'$..[?(@ && @.pinswg_lpa=="' + locale,
detailsObj.pinswg_relevantauthorityname + translations: transLookup,
'")].value_cy', fallbackValue: ""
json: transLookup, })}
eval: true
})
: jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value',
json: transLookup,
eval: true
}) ||
t("case:summary-no-date-entered-label")
}
/> />
</dl> </dl>
</SummaryCard> </SummaryCard>
@@ -237,7 +177,7 @@ const Pinswg_commonlandid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdate") hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -245,7 +185,7 @@ const Pinswg_commonlandid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -262,7 +202,10 @@ const Pinswg_commonlandid = (props) => {
"case:summary-questionnaire-due-date-label" "case:summary-questionnaire-due-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_questionnaireduedate") hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_questionnaireduedate
) )
@@ -279,7 +222,7 @@ const Pinswg_commonlandid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-statement-due-date-label")} label={t("case:summary-statement-due-date-label")}
value={ value={
_.has(detailsObj, "pinswg_statementsduedate") hasOwn(detailsObj, "pinswg_statementsduedate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_statementsduedate detailsObj.pinswg_statementsduedate
) )
@@ -298,7 +241,7 @@ const Pinswg_commonlandid = (props) => {
"case:summary-interested-party-date-label" "case:summary-interested-party-date-label"
)} )}
value={ value={
_.has( hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatement" "pinswg_otherpartiesstatement"
) )
@@ -311,7 +254,7 @@ const Pinswg_commonlandid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has( : hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatements" "pinswg_otherpartiesstatements"
) )
@@ -333,7 +276,10 @@ const Pinswg_commonlandid = (props) => {
"case:summary-applicant-final-comments-date-label" "case:summary-applicant-final-comments-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_finalcommentsduedate") hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate detailsObj.pinswg_finalcommentsduedate
) )
@@ -346,35 +292,11 @@ const Pinswg_commonlandid = (props) => {
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{/* <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-inquiry-evidence-date-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
</dd>
</div> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_dateeventrequested") hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_dateeventrequested detailsObj.pinswg_dateeventrequested
) )
@@ -391,7 +313,7 @@ const Pinswg_commonlandid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")} label={t("case:summary-start-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_starttimeoftheevent") hasOwn(detailsObj, "pinswg_starttimeoftheevent")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_starttimeoftheevent detailsObj.pinswg_starttimeoftheevent
) )
@@ -407,7 +329,7 @@ const Pinswg_commonlandid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
_.has(detailsObj, "pinswg_casedecisiondate") hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_communityinfrastructurelevyid = (props) => { const Pinswg_communityinfrastructurelevyid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,149 +24,97 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-lpa-label")} label={t("case:summary-lpa-label")}
value={ value={
router.locale == "cy" <>
? jsonpath({ {getCaseLpaDisplayLines({
path: casesObj,
'$..[?(@ && @.value=="' + detailsObj,
casesObj[ locale: router.locale,
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" transLookup
] + }).map((name) => (
'")].value_cy', <div key={name}>{name}</div>
json: transLookup, ))}
eval: true </>
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath( "pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
'$..[?(@.value=="' + ],
detailsObj[ locale,
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-to-be-confirmed-label"
transLookup )
) })}
: detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-type-of-event-label")} label={t("case:summary-type-of-event-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "statuscode@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"statuscode@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br /> <br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -173,7 +123,9 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -212,7 +164,7 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdate") hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -220,7 +172,7 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -236,7 +188,7 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
"case:summary-interested-party-date-label" "case:summary-interested-party-date-label"
)} )}
value={ value={
_.has( hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatement" "pinswg_otherpartiesstatement"
) )
@@ -249,7 +201,7 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has( : hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatements" "pinswg_otherpartiesstatements"
) )
@@ -271,7 +223,10 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
"case:summary-applicant-final-comments-date-label" "case:summary-applicant-final-comments-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_finalcommentsduedate") hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate detailsObj.pinswg_finalcommentsduedate
) )
@@ -288,7 +243,7 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_dateeventrequested") hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_dateeventrequested detailsObj.pinswg_dateeventrequested
) )
@@ -305,7 +260,7 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")} label={t("case:summary-start-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdateoftheevent") hasOwn(detailsObj, "pinswg_startdateoftheevent")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_startdateoftheevent detailsObj.pinswg_startdateoftheevent
) )
@@ -321,7 +276,7 @@ const Pinswg_communityinfrastructurelevyid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
_.has(detailsObj, "pinswg_casedecisiondate") hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
@@ -1,10 +1,11 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { hasOwn } from "../../utils";
const Pinswg_compulsorypurchaseordersid = (props) => { const Pinswg_compulsorypurchaseordersid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,131 +23,81 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath( "pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue"
'$..[?(@.value=="' + ],
detailsObj[ locale,
"pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-to-be-confirmed-label"
transLookup )
) })}
: detailsObj[
"pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-type-of-event-label")} label={t("case:summary-type-of-event-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "statuscode@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"statuscode@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -155,7 +106,9 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -187,26 +140,12 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
label={t( label={t(
"case:summary-case-relevant-authoritylabel" "case:summary-case-relevant-authoritylabel"
)} )}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj.pinswg_relevantauthorityname,
? jsonpath({ locale: router.locale,
path: translations: transLookup,
'$..[?(@ && @.pinswg_lpa=="' + fallbackValue: ""
detailsObj.pinswg_relevantauthorityname + })}
'")].value_cy',
json: transLookup,
eval: true
})
: jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value',
json: transLookup,
eval: true
}) ||
t("case:summary-no-date-entered-label")
}
/> />
</dl> </dl>
</SummaryCard> </SummaryCard>
@@ -219,7 +158,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdate") hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -227,7 +166,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -244,7 +183,10 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
"case:summary-questionnaire-due-date-label" "case:summary-questionnaire-due-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_questionnaireduedate") hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_questionnaireduedate
) )
@@ -261,7 +203,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-statement-due-date-label")} label={t("case:summary-statement-due-date-label")}
value={ value={
_.has(detailsObj, "pinswg_statementduedate") hasOwn(detailsObj, "pinswg_statementduedate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_statementduedate detailsObj.pinswg_statementduedate
) )
@@ -280,7 +222,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
"case:summary-interested-party-date-label" "case:summary-interested-party-date-label"
)} )}
value={ value={
_.has( hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatement" "pinswg_otherpartiesstatement"
) )
@@ -293,7 +235,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has( : hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatements" "pinswg_otherpartiesstatements"
) )
@@ -315,7 +257,10 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
"case:summary-applicant-final-comments-date-label" "case:summary-applicant-final-comments-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_finalcommentsduedate") hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate detailsObj.pinswg_finalcommentsduedate
) )
@@ -335,7 +280,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
)} )}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has( {hasOwn(
detailsObj, detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden" "pinswg_proofsofevidencewrittenstatementsofeviden"
) )
@@ -356,7 +301,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_dateeventrequested") hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_dateeventrequested detailsObj.pinswg_dateeventrequested
) )
@@ -373,7 +318,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")} label={t("case:summary-start-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdateofevent") hasOwn(detailsObj, "pinswg_startdateofevent")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_startdateofevent detailsObj.pinswg_startdateofevent
) )
@@ -389,7 +334,7 @@ const Pinswg_compulsorypurchaseordersid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
_.has(detailsObj, "pinswg_casedecisiondate") hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
File diff suppressed because it is too large Load Diff
@@ -3,8 +3,11 @@ import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_electricityactid = (props) => { const Pinswg_electricityactid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -62,82 +65,49 @@ const Pinswg_electricityactid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={
router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)
}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
}
/>
<SummaryRow
label={t( label={t(
"case:summary-eia-required-label" "case:summary-case-type-label"
)} )}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={ value={
<>
router.locale == "cy" {getCaseLpaDisplayLines({
? jsonpath( casesObj,
'$..[?(@.value=="' + detailsObj,
detailsObj[ locale: router.locale,
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" transLookup
] + }).map((name) => (
'")].value_cy', <div key={name}>{name}</div>
transLookup ))}
) </>
: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-to-be-confirmed-label"
)
} }
/>
<SummaryRow
label={t(
"case:summary-eia-required-label"
)}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -146,10 +116,7 @@ const Pinswg_electricityactid = (props) => {
)} )}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{" "} {hasOwn(casesObj, "_ownerid_value")
{/* {casesObj.caseDetails.caseOfficer ||
""} */}
{_.has(casesObj, "_ownerid_value")
? casesObj[ ? casesObj[
"_ownerid_value@OData.Community.Display.V1.FormattedValue" "_ownerid_value@OData.Community.Display.V1.FormattedValue"
] ]
@@ -157,112 +124,59 @@ const Pinswg_electricityactid = (props) => {
</dd> </dd>
</div> </div>
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")}
value={
router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/>
<SummaryRow
label={t( label={t(
"case:summary-type-of-event-label" "case:summary-procedure-label"
)} )}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: ""
detailsObj[ })}
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" />
] + <SummaryRow
'")].value_cy', label={t(
json: transLookup, "case:summary-type-of-event-label"
eval: true, )}
}) value={resolveCrmDisplayValue({
: detailsObj[ value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" "pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || "" ],
locale,
} translations: transLookup,
fallbackValue: ""
})}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value={ value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: t(
casesObj[ "case:summary-no-date-entered-label"
"statuscode@OData.Community.Display.V1.FormattedValue" )
] + })}
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-date-entered-label"
json: transLookup, )
eval: true, })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -273,8 +187,8 @@ const Pinswg_electricityactid = (props) => {
)} )}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, [ {hasOwn(casesObj, [
"numberofchildincidents", "numberofchildincidents"
]) ])
? casesObj.numberofchildincidents > ? casesObj.numberofchildincidents >
0 0
@@ -308,39 +222,26 @@ const Pinswg_electricityactid = (props) => {
"" ""
)} )}
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-case-recommendation-label" "case:summary-case-recommendation-label"
)} )}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_recommendation"
router.locale == "cy" ],
? jsonpath({ locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: t(
detailsObj.pinswg_recommendation + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true,
})
: detailsObj.pinswg_recommendation ||
t(
"case:summary-no-date-entered-label"
)
}
/> />
{detailsObj.pinswg_webaddress != null && ( {detailsObj.pinswg_webaddress != null && (
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-case-website-label" "case:summary-case-website-label"
)} )}
value={ value={
router.locale == "cy" router.locale == "cy"
? jsonpath({ ? jsonpath({
path: path:
@@ -348,15 +249,13 @@ const Pinswg_electricityactid = (props) => {
detailsObj.pinswg_webaddress + detailsObj.pinswg_webaddress +
'")].value_cy', '")].value_cy',
json: transLookup, json: transLookup,
eval: true, eval: true
}) })
: detailsObj.pinswg_webaddress || : detailsObj.pinswg_webaddress ||
t( t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
)} )}
</dl> </dl>
@@ -371,12 +270,11 @@ const Pinswg_electricityactid = (props) => {
</h3> </h3>
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t(
label={t("case:summary-event-date-label")} "case:summary-event-date-label"
)}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateeventrequested" "pinswg_dateeventrequested"
) )
@@ -392,19 +290,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-decision-date-label" "case:summary-decision-date-label"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_casedecisiondate" "pinswg_casedecisiondate"
) )
@@ -420,23 +313,15 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-application-accepted-as-valid" "case:summary-application-accepted-as-valid"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_applicationacceptedasvalid" "pinswg_applicationacceptedasvalid"
) )
@@ -452,21 +337,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-application-rejected-as-invalid" "case:summary-application-rejected-as-invalid"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_applicationrejectedasinvalid" "pinswg_applicationrejectedasinvalid"
) )
@@ -482,19 +360,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-confirm-request-to-vary-application" "case:summary-confirm-request-to-vary-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_confirmrequesttovaryapplication" "pinswg_confirmrequesttovaryapplication"
) )
@@ -510,19 +383,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-decisions" "case:summary-date-of-decisions"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofdecision" "pinswg_dateofdecision"
) )
@@ -538,19 +406,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-request-to-vary" "case:summary-date-of-request-to-vary"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofrequesttovarytheapplication" "pinswg_dateofrequesttovarytheapplication"
) )
@@ -566,19 +429,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-submission-of-application" "case:summary-date-of-submission-of-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofsubmissionofapplication" "pinswg_dateofsubmissionofapplication"
) )
@@ -594,19 +452,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-project-published-to-website" "case:summary-date-project-published-to-website"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateprojectpublishedonwebsite" "pinswg_dateprojectpublishedonwebsite"
) )
@@ -622,19 +475,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-deadline-for-submission-of-application" "case:summary-deadline-for-submission-of-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_deadlineforsubmissionofapplication" "pinswg_deadlineforsubmissionofapplication"
) )
@@ -650,19 +498,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-end-of-representation-period" "case:summary-end-of-representation-period"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_endofrepresentationperiod" "pinswg_endofrepresentationperiod"
) )
@@ -678,19 +521,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-inspector-report-submission-to-welsh-government" "case:summary-inspector-report-submission-to-welsh-government"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_inspectorreportsubmittedtowelshgovernment" "pinswg_inspectorreportsubmittedtowelshgovernment"
) )
@@ -706,19 +544,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-procedure-confirmed" "case:summary-procedure-confirmed"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_procedureconfirmed" "pinswg_procedureconfirmed"
) )
@@ -734,19 +567,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-reject-request-to-vary-application" "case:summary-reject-request-to-vary-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_rejectrequesttovaryapplication" "pinswg_rejectrequesttovaryapplication"
) )
@@ -762,17 +590,12 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-report-due-by")} label={t("case:summary-report-due-by")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_reportdueby" "pinswg_reportdueby"
) )
@@ -788,17 +611,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t(
label={t("case:summary-suspension-dates")} "case:summary-suspension-dates"
)}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensiondates" "pinswg_suspensiondates"
) )
@@ -814,19 +634,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-suspension-end-dates" "case:summary-suspension-end-dates"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensionenddates" "pinswg_suspensionenddates"
) )
@@ -842,19 +657,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-suspension-start-dates" "case:summary-suspension-start-dates"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensionstartdates" "pinswg_suspensionstartdates"
) )
@@ -870,19 +680,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-valid-notice-of-intention-to-submit-an-application" "case:summary-valid-notice-of-intention-to-submit-an-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_validnoticeofintentiontosubmitanapplicati" "pinswg_validnoticeofintentiontosubmitanapplicati"
) )
@@ -898,17 +703,12 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-withdrawn-date")} label={t("case:summary-withdrawn-date")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_withdrawndate" "pinswg_withdrawndate"
) )
@@ -924,19 +724,14 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-written-acceptance-of-notice" "case:summary-written-acceptance-of-notice"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_writtenacceptanceofnotification" "pinswg_writtenacceptanceofnotification"
) )
@@ -952,9 +747,7 @@ const Pinswg_electricityactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
</dl> </dl>
</div> </div>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_enforcementlistedbuildingconseid = (props) => { const Pinswg_enforcementlistedbuildingconseid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,149 +24,97 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-lpa-label")} label={t("case:summary-lpa-label")}
value={ value={
router.locale == "cy" <>
? jsonpath({ {getCaseLpaDisplayLines({
path: casesObj,
'$..[?(@ && @.value=="' + detailsObj,
casesObj[ locale: router.locale,
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" transLookup
] + }).map((name) => (
'")].value_cy', <div key={name}>{name}</div>
json: transLookup, ))}
eval: true </>
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath( "pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
'$..[?(@.value=="' + ],
detailsObj[ locale,
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-to-be-confirmed-label"
transLookup )
) })}
: detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-type-of-event-label")} label={t("case:summary-type-of-event-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "statuscode@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"statuscode@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br /> <br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -173,7 +123,9 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -212,7 +164,7 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdate") hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -220,7 +172,7 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -237,7 +189,10 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
"case:summary-questionnaire-due-date-label" "case:summary-questionnaire-due-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_questionnaireduedate") hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_questionnaireduedate
) )
@@ -254,7 +209,7 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-statement-due-date-label")} label={t("case:summary-statement-due-date-label")}
value={ value={
_.has(detailsObj, "pinswg_statementduedate") hasOwn(detailsObj, "pinswg_statementduedate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_statementduedate detailsObj.pinswg_statementduedate
) )
@@ -273,7 +228,7 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
"case:summary-interested-party-date-label" "case:summary-interested-party-date-label"
)} )}
value={ value={
_.has( hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatement" "pinswg_otherpartiesstatement"
) )
@@ -286,7 +241,7 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has( : hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatements" "pinswg_otherpartiesstatements"
) )
@@ -308,7 +263,10 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
"case:summary-applicant-final-comments-date-label" "case:summary-applicant-final-comments-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_finalcommentsduedate") hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate detailsObj.pinswg_finalcommentsduedate
) )
@@ -321,35 +279,11 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{/* <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-inquiry-evidence-date-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
</dd>
</div> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_dateeventrequested") hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_dateeventrequested detailsObj.pinswg_dateeventrequested
) )
@@ -366,7 +300,7 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")} label={t("case:summary-start-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdateofevent") hasOwn(detailsObj, "pinswg_startdateofevent")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_startdateofevent detailsObj.pinswg_startdateofevent
) )
@@ -382,7 +316,7 @@ const Pinswg_enforcementlistedbuildingconseid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
_.has(detailsObj, "pinswg_casedecisiondate") hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_enforcementnoticeappeals174id = (props) => { const Pinswg_enforcementnoticeappeals174id = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,208 +22,138 @@ const Pinswg_enforcementnoticeappeals174id = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/>
<SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
label={t("case:summary-case-type-label")} <br />
</dd>
value={router.locale == "cy" </div>
? jsonpath({ {casesObj.numberofchildincidents > 0 && (
path: <div className="govuk-summary-list__row">
'$..[?(@ && @.value=="' + <dt className="govuk-summary-list__key">
casesObj[ {t("case:summary-case-link-status-label")}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </dt>
] + <dd className="govuk-summary-list__value">
'")].value_cy', {hasOwn(casesObj, [
json: transLookup, "numberofchildincidents"
eval: true, ])
}) ? casesObj.numberofchildincidents > 0
: casesObj[ ? t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-linked"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={router.locale == "cy"
? jsonpath(
'$..[?(@.value=="' +
detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
transLookup
) )
: detailsObj[ : t(
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ </dl>
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -229,257 +161,175 @@ const Pinswg_enforcementnoticeappeals174id = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
/> <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")}
value={
label={t( hasOwn(detailsObj, "pinswg_startdateoftheevent")
"case:summary-interested-party-date-label" ? !_.isEmpty(
)} detailsObj.pinswg_startdateoftheevent
)
? formatDates(
value={_.has( detailsObj.pinswg_startdateoftheevent
detailsObj, )
"pinswg_otherpartiesstatement" : t(
) "case:summary-no-date-entered-label"
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatement : t("case:summary-no-date-entered-label")
) }
? formatDates( />
detailsObj.pinswg_otherpartiesstatement <SummaryRow
) label={t("case:summary-decision-date-label")}
: t( value={
"case:summary-no-date-entered-label" hasOwn(detailsObj, "pinswg_casedecisiondate")
) ? !_.isEmpty(
: _.has( detailsObj.pinswg_casedecisiondate
detailsObj, )
"pinswg_otherpartiesstatements" ? formatDates(
) detailsObj.pinswg_casedecisiondate
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatements : t(
) "case:summary-no-date-entered-label"
? formatDates( )
detailsObj.pinswg_otherpartiesstatements : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" </dl>
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> */}
<SummaryRow
label={t("case:summary-event-date-label")}
value={_.has(
detailsObj,
"pinswg_dateeventrequested"
)
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-start-event-date-label"
)}
value={_.has(
detailsObj,
"pinswg_startdateoftheevent"
)
? !_.isEmpty(
detailsObj.pinswg_startdateoftheevent
)
? formatDates(
detailsObj.pinswg_startdateoftheevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_environmentalpermittingid = (props) => { const Pinswg_environmentalpermittingid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,236 +22,149 @@ const Pinswg_environmentalpermittingid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/>
<SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
label={t("case:summary-case-type-label")} <br />
</dd>
value={router.locale == "cy" </div>
? jsonpath({ {casesObj.numberofchildincidents > 0 && (
path: <div className="govuk-summary-list__row">
'$..[?(@ && @.value=="' + <dt className="govuk-summary-list__key">
casesObj[ {t("case:summary-case-link-status-label")}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </dt>
] + <dd className="govuk-summary-list__value">
'")].value_cy', {hasOwn(casesObj, [
json: transLookup, "numberofchildincidents"
eval: true, ])
}) ? casesObj.numberofchildincidents > 0
: casesObj[ ? t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-linked"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={router.locale == "cy"
? jsonpath(
'$..[?(@.value=="' +
detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
transLookup
) )
: detailsObj[ : t(
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ <SummaryRow
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" label={t(
] || ""} "case:summary-case-relevant-authoritylabel"
)}
/> value={resolveCrmDisplayValue({
<SummaryRow value: detailsObj.pinswg_relevantauthorityname,
locale: router.locale,
label={t("case:summary-type-of-event-label")} translations: transLookup,
fallbackValue: ""
value={router.locale == "cy" })}
? jsonpath({ />
path: </dl>
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
<SummaryRow
label={t(
"case:summary-case-relevant-authoritylabel"
)}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value_cy',
json: transLookup,
eval: true,
})
: jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value',
json: transLookup,
eval: true,
}) ||
t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -257,168 +172,129 @@ const Pinswg_environmentalpermittingid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
/> label={t(
"case:summary-applicant-final-comments-date-label"
<SummaryRow )}
value={
hasOwn(
label={t( detailsObj,
"case:summary-interested-party-date-label" "pinswg_finalcommentsduedate"
)} )
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
value={_.has( )
detailsObj, ? formatDates(
"pinswg_otherpartiesstatement" detailsObj.pinswg_finalcommentsduedate
) )
? !_.isEmpty( : t(
detailsObj.pinswg_otherpartiesstatement "case:summary-no-date-entered-label"
) )
? formatDates( : t("case:summary-no-date-entered-label")
detailsObj.pinswg_otherpartiesstatement }
) />
: t( {/* <SummaryRow
"case:summary-no-date-entered-label"
)
: _.has(
detailsObj,
"pinswg_otherpartiesstatements"
)
? !_.isEmpty(
detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_otherpartiesstatements
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t( label={t(
"case:summary-inquiry-evidence-date-label" "case:summary-inquiry-evidence-date-label"
)} )}
value={_.has( value={hasOwn(
detailsObj, detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden" "pinswg_proofsofevidencewrittenstatementsofeviden"
) )
@@ -435,79 +311,56 @@ const Pinswg_environmentalpermittingid = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
)} )}
/> */} /> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-event-date-label")} <SummaryRow
label={t("case:summary-start-event-date-label")}
value={_.has( value={
detailsObj, hasOwn(detailsObj, "pinswg_startdateofevent")
"pinswg_dateeventrequested" ? !_.isEmpty(
) detailsObj.pinswg_startdateofevent
? !_.isEmpty( )
detailsObj.pinswg_dateeventrequested ? formatDates(
) detailsObj.pinswg_startdateofevent
? formatDates( )
detailsObj.pinswg_dateeventrequested : t(
) "case:summary-no-date-entered-label"
: t( )
"case:summary-no-date-entered-label" : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" <SummaryRow
)} label={t("case:summary-decision-date-label")}
value={
/> hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty(
<SummaryRow detailsObj.pinswg_casedecisiondate
)
? formatDates(
label={t( detailsObj.pinswg_casedecisiondate
"case:summary-start-event-date-label" )
)} : t(
"case:summary-no-date-entered-label"
)
value={_.has( : t("case:summary-no-date-entered-label")
detailsObj, }
"pinswg_startdateofevent" />
) </dl>
? !_.isEmpty(
detailsObj.pinswg_startdateofevent
)
? formatDates(
detailsObj.pinswg_startdateofevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
@@ -5,6 +5,9 @@ import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
const Pinswg_harbourrevisionorderid = (props) => { const Pinswg_harbourrevisionorderid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -62,82 +65,49 @@ const Pinswg_harbourrevisionorderid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={
router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)
}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
}
/>
<SummaryRow
label={t( label={t(
"case:summary-eia-required-label" "case:summary-case-type-label"
)} )}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={ value={
<>
router.locale == "cy" {getCaseLpaDisplayLines({
? jsonpath( casesObj,
'$..[?(@.value=="' + detailsObj,
detailsObj[ locale: router.locale,
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" transLookup
] + }).map((name) => (
'")].value_cy', <div key={name}>{name}</div>
transLookup ))}
) </>
: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-to-be-confirmed-label"
)
} }
/>
<SummaryRow
label={t(
"case:summary-eia-required-label"
)}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
@@ -146,10 +116,7 @@ const Pinswg_harbourrevisionorderid = (props) => {
)} )}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{" "} {hasOwn(casesObj, "_ownerid_value")
{/* {casesObj.caseDetails.caseOfficer ||
""} */}
{_.has(casesObj, "_ownerid_value")
? casesObj[ ? casesObj[
"_ownerid_value@OData.Community.Display.V1.FormattedValue" "_ownerid_value@OData.Community.Display.V1.FormattedValue"
] ]
@@ -157,86 +124,46 @@ const Pinswg_harbourrevisionorderid = (props) => {
</dd> </dd>
</div> </div>
<SummaryRow <SummaryRow
label={t(
label={t("case:summary-procedure-label")} "case:summary-procedure-label"
)}
value={ value={resolveCrmDisplayValue({
value: detailsObj[
router.locale == "cy" "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
? jsonpath({ ],
path: locale,
'$..[?(@ && @.value=="' + translations: transLookup,
detailsObj[ fallbackValue: ""
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" })}
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value={ value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: t(
casesObj[ "case:summary-no-date-entered-label"
"statuscode@OData.Community.Display.V1.FormattedValue" )
] + })}
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true, })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -247,8 +174,8 @@ const Pinswg_harbourrevisionorderid = (props) => {
)} )}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, [ {hasOwn(casesObj, [
"numberofchildincidents", "numberofchildincidents"
]) ])
? casesObj.numberofchildincidents > ? casesObj.numberofchildincidents >
0 0
@@ -282,39 +209,24 @@ const Pinswg_harbourrevisionorderid = (props) => {
"" ""
)} )}
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-case-recommendation-label" "case:summary-case-recommendation-label"
)} )}
value={resolveCrmDisplayValue({
value={ value: detailsObj.pinswg_recommendation,
locale,
router.locale == "cy" translations: transLookup,
? jsonpath({ fallbackValue: t(
path: "case:summary-no-date-entered-label"
'$..[?(@ && @.value=="' + )
detailsObj.pinswg_recommendation + })}
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj.pinswg_recommendation ||
t(
"case:summary-no-date-entered-label"
)
}
/> />
{detailsObj.pinswg_webaddress != null && ( {detailsObj.pinswg_webaddress != null && (
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-case-website-label" "case:summary-case-website-label"
)} )}
value={ value={
router.locale == "cy" router.locale == "cy"
? jsonpath({ ? jsonpath({
path: path:
@@ -322,15 +234,13 @@ const Pinswg_harbourrevisionorderid = (props) => {
detailsObj.pinswg_webaddress + detailsObj.pinswg_webaddress +
'")].value_cy', '")].value_cy',
json: transLookup, json: transLookup,
eval: true, eval: true
}) })
: detailsObj.pinswg_webaddress || : detailsObj.pinswg_webaddress ||
t( t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
)} )}
</dl> </dl>
@@ -345,12 +255,11 @@ const Pinswg_harbourrevisionorderid = (props) => {
</h3> </h3>
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t(
label={t("case:summary-event-date-label")} "case:summary-event-date-label"
)}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateeventrequested" "pinswg_dateeventrequested"
) )
@@ -366,19 +275,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-decision-date-label" "case:summary-decision-date-label"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_casedecisiondate" "pinswg_casedecisiondate"
) )
@@ -394,23 +298,15 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-application-accepted-as-valid" "case:summary-application-accepted-as-valid"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_applicationacceptedasvalid" "pinswg_applicationacceptedasvalid"
) )
@@ -426,21 +322,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-application-rejected-as-invalid" "case:summary-application-rejected-as-invalid"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_applicationrejectedasinvalid" "pinswg_applicationrejectedasinvalid"
) )
@@ -456,19 +345,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-confirm-request-to-vary-application" "case:summary-confirm-request-to-vary-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_confirmrequesttovaryapplication" "pinswg_confirmrequesttovaryapplication"
) )
@@ -484,19 +368,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-decisions" "case:summary-date-of-decisions"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofdecision" "pinswg_dateofdecision"
) )
@@ -512,19 +391,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-request-to-vary" "case:summary-date-of-request-to-vary"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofrequesttovarytheapplication" "pinswg_dateofrequesttovarytheapplication"
) )
@@ -540,19 +414,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-submission-of-application" "case:summary-date-of-submission-of-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofsubmissionofapplication" "pinswg_dateofsubmissionofapplication"
) )
@@ -568,19 +437,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-project-published-to-website" "case:summary-date-project-published-to-website"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateprojectpublishedonwebsite" "pinswg_dateprojectpublishedonwebsite"
) )
@@ -596,19 +460,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-deadline-for-submission-of-application" "case:summary-deadline-for-submission-of-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_deadlineforsubmissionofapplication" "pinswg_deadlineforsubmissionofapplication"
) )
@@ -624,19 +483,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-end-of-representation-period" "case:summary-end-of-representation-period"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_endofrepresentationperiod" "pinswg_endofrepresentationperiod"
) )
@@ -652,19 +506,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-inspector-report-submission-to-welsh-government" "case:summary-inspector-report-submission-to-welsh-government"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_inspectorreportsubmittedtowelshgovernment" "pinswg_inspectorreportsubmittedtowelshgovernment"
) )
@@ -680,19 +529,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-procedure-confirmed" "case:summary-procedure-confirmed"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_procedureconfirmed" "pinswg_procedureconfirmed"
) )
@@ -708,19 +552,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-reject-request-to-vary-application" "case:summary-reject-request-to-vary-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_rejectrequesttovaryapplication" "pinswg_rejectrequesttovaryapplication"
) )
@@ -736,17 +575,12 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-report-due-by")} label={t("case:summary-report-due-by")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_reportdueby" "pinswg_reportdueby"
) )
@@ -762,17 +596,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t(
label={t("case:summary-suspension-dates")} "case:summary-suspension-dates"
)}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensiondates" "pinswg_suspensiondates"
) )
@@ -788,19 +619,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-suspension-end-dates" "case:summary-suspension-end-dates"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensionenddates" "pinswg_suspensionenddates"
) )
@@ -816,19 +642,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-suspension-start-dates" "case:summary-suspension-start-dates"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensionstartdates" "pinswg_suspensionstartdates"
) )
@@ -844,19 +665,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-valid-notice-of-intention-to-submit-an-application" "case:summary-valid-notice-of-intention-to-submit-an-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_validnoticeofintentiontosubmitanapplicati" "pinswg_validnoticeofintentiontosubmitanapplicati"
) )
@@ -872,17 +688,12 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-withdrawn-date")} label={t("case:summary-withdrawn-date")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_withdrawndate" "pinswg_withdrawndate"
) )
@@ -898,19 +709,14 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-written-acceptance-of-notice" "case:summary-written-acceptance-of-notice"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_writtenacceptanceofnotification" "pinswg_writtenacceptanceofnotification"
) )
@@ -926,9 +732,7 @@ const Pinswg_harbourrevisionorderid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
</dl> </dl>
</div> </div>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_hedgeshedgerowstreepreservatioid = (props) => { const Pinswg_hedgeshedgerowstreepreservatioid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,264 +22,164 @@ const Pinswg_hedgeshedgerowstreepreservatioid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
label={t("case:summary-case-type-label")} <SummaryRow
label={t(
"case:summary-specialist-case-process-label"
)}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_specialistcaseprocess@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
value={router.locale == "cy" <SummaryRow
? jsonpath({ label={t("case:summary-lpa-label")}
path: value={
'$..[?(@ && @.value=="' + <>
casesObj[ {getCaseLpaDisplayLines({
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" casesObj,
] + detailsObj,
'")].value_cy', locale: router.locale,
json: transLookup, transLookup
eval: true, }).map((name) => (
}) <div key={name}>{name}</div>
: casesObj[ ))}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </>
] || }
t( />
"case:summary-no-date-entered-label" <SummaryRow
)} label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/>
<SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
/> <br />
</dd>
<SummaryRow </div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
label={"Specialist Case Process"} <dt className="govuk-summary-list__key">
{t("case:summary-case-link-status-label")}
</dt>
value={router.locale == "cy" <dd className="govuk-summary-list__value">
? jsonpath({ {hasOwn(casesObj, [
path: "numberofchildincidents"
'$..[?(@ && @.value=="' + ])
detailsObj[ ? casesObj.numberofchildincidents > 0
"pinswg_specialistcaseprocess@OData.Community.Display.V1.FormattedValue" ? t(
] + "case:summary-case-link-status-linked"
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_specialistcaseprocess@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={router.locale == "cy"
? jsonpath(
'$..[?(@.value=="' +
detailsObj[
"pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
transLookup
) )
: detailsObj[ : t(
"pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ <SummaryRow
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" label={t(
] || ""} "case:summary-case-relevant-authoritylabel"
)}
/> value={resolveCrmDisplayValue({
<SummaryRow value: detailsObj.pinswg_relevantauthorityname,
locale: router.locale,
label={t("case:summary-type-of-event-label")} translations: transLookup,
fallbackValue: ""
value={router.locale == "cy" })}
? jsonpath({ />
path: </dl>
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
<SummaryRow
label={t(
"case:summary-case-relevant-authoritylabel"
)}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value_cy',
json: transLookup,
eval: true,
})
: jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value',
json: transLookup,
eval: true,
}) ||
t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -285,257 +187,175 @@ const Pinswg_hedgeshedgerowstreepreservatioid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
/> <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")}
value={
label={t( hasOwn(detailsObj, "pinswg_startdateoftheevent")
"case:summary-interested-party-date-label" ? !_.isEmpty(
)} detailsObj.pinswg_startdateoftheevent
)
? formatDates(
value={_.has( detailsObj.pinswg_startdateoftheevent
detailsObj, )
"pinswg_otherpartiesstatement" : t(
) "case:summary-no-date-entered-label"
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatement : t("case:summary-no-date-entered-label")
) }
? formatDates( />
detailsObj.pinswg_otherpartiesstatement <SummaryRow
) label={t("case:summary-decision-date-label")}
: t( value={
"case:summary-no-date-entered-label" hasOwn(detailsObj, "pinswg_casedecisiondate")
) ? !_.isEmpty(
: _.has( detailsObj.pinswg_casedecisiondate
detailsObj, )
"pinswg_otherpartiesstatements" ? formatDates(
) detailsObj.pinswg_casedecisiondate
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatements : t(
) "case:summary-no-date-entered-label"
? formatDates( )
detailsObj.pinswg_otherpartiesstatements : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" </dl>
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> */}
<SummaryRow
label={t("case:summary-event-date-label")}
value={_.has(
detailsObj,
"pinswg_dateeventrequested"
)
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-start-event-date-label"
)}
value={_.has(
detailsObj,
"pinswg_startdateoftheevent"
)
? !_.isEmpty(
detailsObj.pinswg_startdateoftheevent
)
? formatDates(
detailsObj.pinswg_startdateoftheevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_householderappealhasid = (props) => { const Pinswg_householderappealhasid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,130 +24,86 @@ const Pinswg_householderappealhasid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-lpa-label")} label={t("case:summary-lpa-label")}
value={ value={
router.locale == "cy" <>
? jsonpath({ {getCaseLpaDisplayLines({
path: casesObj,
'$..[?(@ && @.value=="' + detailsObj,
casesObj[ locale: router.locale,
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" transLookup
] + }).map((name) => (
'")].value_cy', <div key={name}>{name}</div>
json: transLookup, ))}
eval: true </>
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath( "pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
'$..[?(@.value=="' + ],
detailsObj[ locale,
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-to-be-confirmed-label"
transLookup )
) })}
: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: detailsObj[
? jsonpath({ "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
detailsObj[ translations: transLookup,
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" fallbackValue: ""
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "statuscode@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"statuscode@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br /> <br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -154,7 +112,9 @@ const Pinswg_householderappealhasid = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -193,7 +153,7 @@ const Pinswg_householderappealhasid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdate") hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -201,7 +161,7 @@ const Pinswg_householderappealhasid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -218,7 +178,10 @@ const Pinswg_householderappealhasid = (props) => {
"case:summary-questionnaire-due-date-label" "case:summary-questionnaire-due-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_questionnaireduedate") hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_questionnaireduedate
) )
@@ -235,7 +198,7 @@ const Pinswg_householderappealhasid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-statement-due-date-label")} label={t("case:summary-statement-due-date-label")}
value={ value={
_.has(detailsObj, "pinswg_statementduedate") hasOwn(detailsObj, "pinswg_statementduedate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_statementduedate detailsObj.pinswg_statementduedate
) )
@@ -254,7 +217,7 @@ const Pinswg_householderappealhasid = (props) => {
"case:summary-interested-party-date-label" "case:summary-interested-party-date-label"
)} )}
value={ value={
_.has(detailsObj, "pinswg_otherpartiesstmt") hasOwn(detailsObj, "pinswg_otherpartiesstmt")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_otherpartiesstmt detailsObj.pinswg_otherpartiesstmt
) )
@@ -264,7 +227,7 @@ const Pinswg_householderappealhasid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has( : hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstmt" "pinswg_otherpartiesstmt"
) )
@@ -283,7 +246,7 @@ const Pinswg_householderappealhasid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_dateeventrequested") hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_dateeventrequested detailsObj.pinswg_dateeventrequested
) )
@@ -300,7 +263,7 @@ const Pinswg_householderappealhasid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")} label={t("case:summary-start-event-date-label")}
value={ value={
_.has(detailsObj, "pinswg_startdateofevent") hasOwn(detailsObj, "pinswg_startdateofevent")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_startdateofevent detailsObj.pinswg_startdateofevent
) )
@@ -316,7 +279,7 @@ const Pinswg_householderappealhasid = (props) => {
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
_.has(detailsObj, "pinswg_casedecisiondate") hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_lawfuldevelopmentcertificatappid = (props) => { const Pinswg_lawfuldevelopmentcertificatappid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,208 +22,136 @@ const Pinswg_lawfuldevelopmentcertificatappid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
label={t("case:summary-case-type-label")} value={resolveCrmDisplayValue({
value: casesObj[
value={router.locale == "cy" "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
? jsonpath({ ],
path: locale,
'$..[?(@ && @.value=="' + translations: transLookup,
casesObj[ fallbackValue: t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-no-date-entered-label"
] + )
'")].value_cy', })}
json: transLookup, />
eval: true, <SummaryRow
}) label={t("case:summary-lpa-label")}
: casesObj[ value={
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" <>
] || {getCaseLpaDisplayLines({
t( casesObj,
"case:summary-no-date-entered-label" detailsObj,
)} locale: router.locale,
transLookup
/> }).map((name) => (
<SummaryRow <div key={name}>{name}</div>
))}
label={t("case:summary-lpa-label")} </>
}
value={router.locale == "cy" />
? jsonpath({ <SummaryRow
path: label={t("case:summary-eia-required-label")}
'$..[?(@ && @.value=="' + value={resolveCrmDisplayValue({
casesObj[ value: detailsObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" "pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue"
] + ],
'")].value_cy', locale,
json: transLookup, translations: transLookup,
eval: true, fallbackValue: t(
}) "case:summary-to-be-confirmed-label"
: casesObj[ )
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" })}
] || ""} />
<SummaryRow
/> label={t("case:summary-procedure-label")}
<SummaryRow value={resolveCrmDisplayValue({
value: detailsObj[
label={t("case:summary-eia-required-label")} "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
value={router.locale == "cy" locale,
? jsonpath( translations: transLookup,
'$..[?(@.value=="' + fallbackValue: ""
detailsObj[ })}
"pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue" />
] + <SummaryRow
'")].value_cy', label={t("case:summary-type-of-event-label")}
transLookup value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-case-link-status-label")}
</dt>
<dd className="govuk-summary-list__value">
{hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0
? t(
"case:summary-case-link-status-linked"
) )
: detailsObj[ : t(
"pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ </dl>
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -229,257 +159,175 @@ const Pinswg_lawfuldevelopmentcertificatappid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
/> <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")}
value={
label={t( hasOwn(detailsObj, "pinswg_startdateoftheevent")
"case:summary-interested-party-date-label" ? !_.isEmpty(
)} detailsObj.pinswg_startdateoftheevent
)
? formatDates(
value={_.has( detailsObj.pinswg_startdateoftheevent
detailsObj, )
"pinswg_otherpartiesstatement" : t(
) "case:summary-no-date-entered-label"
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatement : t("case:summary-no-date-entered-label")
) }
? formatDates( />
detailsObj.pinswg_otherpartiesstatement <SummaryRow
) label={t("case:summary-decision-date-label")}
: t( value={
"case:summary-no-date-entered-label" hasOwn(detailsObj, "pinswg_casedecisiondate")
) ? !_.isEmpty(
: _.has( detailsObj.pinswg_casedecisiondate
detailsObj, )
"pinswg_otherpartiesstatements" ? formatDates(
) detailsObj.pinswg_casedecisiondate
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatements : t(
) "case:summary-no-date-entered-label"
? formatDates( )
detailsObj.pinswg_otherpartiesstatements : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" </dl>
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> */}
<SummaryRow
label={t("case:summary-event-date-label")}
value={_.has(
detailsObj,
"pinswg_dateeventrequested"
)
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-start-event-date-label"
)}
value={_.has(
detailsObj,
"pinswg_startdateoftheevent"
)
? !_.isEmpty(
detailsObj.pinswg_startdateoftheevent
)
? formatDates(
detailsObj.pinswg_startdateoftheevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
+281 -426
View File
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_ldpid = (props) => { const Pinswg_ldpid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,191 +22,126 @@ const Pinswg_ldpid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
label={t("case:summary-case-type-label")} <SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
value={router.locale == "cy" <br />
? jsonpath({ </dd>
path: </div>
'$..[?(@ && @.value=="' + {casesObj.numberofchildincidents > 0 && (
casesObj[ <div className="govuk-summary-list__row">
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" <dt className="govuk-summary-list__key">
] + {t("case:summary-case-link-status-label")}
'")].value_cy', </dt>
json: transLookup, <dd className="govuk-summary-list__value">
eval: true, {hasOwn(casesObj, [
}) "numberofchildincidents"
: casesObj[ ])
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" ? casesObj.numberofchildincidents > 0
] || ? t(
t( "case:summary-case-link-status-linked"
"case:summary-no-date-entered-label" )
)} : t(
"case:summary-case-link-status-not-linked"
/> )
<SummaryRow : t(
"case:summary-case-link-status-not-linked"
label={t("case:summary-lpa-label")} )}
</dd>
value={router.locale == "cy" </div>
? jsonpath({ )}
path: {casesObj.numberofchildincidents > 0 ? (
'$..[?(@ && @.value=="' + <div className="govuk-summary-list__row">
casesObj[ <dt className="govuk-summary-list__key">
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" {t("case:summary-linked-cases-label")}
] + </dt>
'")].value_cy', <dd className="govuk-summary-list__value">
json: transLookup, {linkedCasesList(
eval: true, props.currentView.linkedCaseReferences
}) )}
: casesObj[ </dd>
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" </div>
] || ""} ) : (
""
/> )}
</dl>
<SummaryRow
label={t("case:summary-procedure-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -212,257 +149,175 @@ const Pinswg_ldpid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
/> <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")}
value={
label={t( hasOwn(detailsObj, "pinswg_startdateofevent")
"case:summary-interested-party-date-label" ? !_.isEmpty(
)} detailsObj.pinswg_startdateofevent
)
? formatDates(
value={_.has( detailsObj.pinswg_startdateofevent
detailsObj, )
"pinswg_otherpartiesstatement" : t(
) "case:summary-no-date-entered-label"
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatement : t("case:summary-no-date-entered-label")
) }
? formatDates( />
detailsObj.pinswg_otherpartiesstatement <SummaryRow
) label={t("case:summary-decision-date-label")}
: t( value={
"case:summary-no-date-entered-label" hasOwn(detailsObj, "pinswg_casedecisiondate")
) ? !_.isEmpty(
: _.has( detailsObj.pinswg_casedecisiondate
detailsObj, )
"pinswg_otherpartiesstatements" ? formatDates(
) detailsObj.pinswg_casedecisiondate
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatements : t(
) "case:summary-no-date-entered-label"
? formatDates( )
detailsObj.pinswg_otherpartiesstatements : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" </dl>
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> */}
<SummaryRow
label={t("case:summary-event-date-label")}
value={_.has(
detailsObj,
"pinswg_dateeventrequested"
)
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-start-event-date-label"
)}
value={_.has(
detailsObj,
"pinswg_startdateofevent"
)
? !_.isEmpty(
detailsObj.pinswg_startdateofevent
)
? formatDates(
detailsObj.pinswg_startdateofevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_listedbuildingandconservationrid = (props) => { const Pinswg_listedbuildingandconservationrid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,208 +22,138 @@ const Pinswg_listedbuildingandconservationrid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/>
<SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
label={t("case:summary-case-type-label")} <br />
</dd>
value={router.locale == "cy" </div>
? jsonpath({ {casesObj.numberofchildincidents > 0 && (
path: <div className="govuk-summary-list__row">
'$..[?(@ && @.value=="' + <dt className="govuk-summary-list__key">
casesObj[ {t("case:summary-case-link-status-label")}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </dt>
] + <dd className="govuk-summary-list__value">
'")].value_cy', {hasOwn(casesObj, [
json: transLookup, "numberofchildincidents"
eval: true, ])
}) ? casesObj.numberofchildincidents > 0
: casesObj[ ? t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-linked"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={router.locale == "cy"
? jsonpath(
'$..[?(@.value=="' +
detailsObj[
"pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
transLookup
) )
: detailsObj[ : t(
"pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ </dl>
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -229,257 +161,175 @@ const Pinswg_listedbuildingandconservationrid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
/> <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")}
value={
label={t( hasOwn(detailsObj, "pinswg_starttimeofevent")
"case:summary-interested-party-date-label" ? !_.isEmpty(
)} detailsObj.pinswg_starttimeofevent
)
? formatDates(
value={_.has( detailsObj.pinswg_starttimeofevent
detailsObj, )
"pinswg_otherpartiesstatement" : t(
) "case:summary-no-date-entered-label"
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatement : t("case:summary-no-date-entered-label")
) }
? formatDates( />
detailsObj.pinswg_otherpartiesstatement <SummaryRow
) label={t("case:summary-decision-date-label")}
: t( value={
"case:summary-no-date-entered-label" hasOwn(detailsObj, "pinswg_casedecisiondate")
) ? !_.isEmpty(
: _.has( detailsObj.pinswg_casedecisiondate
detailsObj, )
"pinswg_otherpartiesstatements" ? formatDates(
) detailsObj.pinswg_casedecisiondate
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatements : t(
) "case:summary-no-date-entered-label"
? formatDates( )
detailsObj.pinswg_otherpartiesstatements : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" </dl>
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> */}
<SummaryRow
label={t("case:summary-event-date-label")}
value={_.has(
detailsObj,
"pinswg_dateeventrequested"
)
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-start-event-date-label"
)}
value={_.has(
detailsObj,
"pinswg_starttimeofevent"
)
? !_.isEmpty(
detailsObj.pinswg_starttimeofevent
)
? formatDates(
detailsObj.pinswg_starttimeofevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_maintenanceoflands217id = (props) => { const Pinswg_maintenanceoflands217id = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,208 +22,138 @@ const Pinswg_maintenanceoflands217id = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/>
<SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
label={t("case:summary-case-type-label")} <br />
</dd>
value={router.locale == "cy" </div>
? jsonpath({ {casesObj.numberofchildincidents > 0 && (
path: <div className="govuk-summary-list__row">
'$..[?(@ && @.value=="' + <dt className="govuk-summary-list__key">
casesObj[ {t("case:summary-case-link-status-label")}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </dt>
] + <dd className="govuk-summary-list__value">
'")].value_cy', {hasOwn(casesObj, [
json: transLookup, "numberofchildincidents"
eval: true, ])
}) ? casesObj.numberofchildincidents > 0
: casesObj[ ? t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-linked"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={router.locale == "cy"
? jsonpath(
'$..[?(@.value=="' +
detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
transLookup
) )
: detailsObj[ : t(
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ </dl>
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -229,168 +161,129 @@ const Pinswg_maintenanceoflands217id = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
/> label={t(
"case:summary-applicant-final-comments-date-label"
<SummaryRow )}
value={
hasOwn(
label={t( detailsObj,
"case:summary-interested-party-date-label" "pinswg_finalcommentsduedate"
)} )
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
value={_.has( )
detailsObj, ? formatDates(
"pinswg_otherpartiesstatement" detailsObj.pinswg_finalcommentsduedate
) )
? !_.isEmpty( : t(
detailsObj.pinswg_otherpartiesstatement "case:summary-no-date-entered-label"
) )
? formatDates( : t("case:summary-no-date-entered-label")
detailsObj.pinswg_otherpartiesstatement }
) />
: t( {/* <SummaryRow
"case:summary-no-date-entered-label"
)
: _.has(
detailsObj,
"pinswg_otherpartiesstatements"
)
? !_.isEmpty(
detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_otherpartiesstatements
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t( label={t(
"case:summary-inquiry-evidence-date-label" "case:summary-inquiry-evidence-date-label"
)} )}
value={_.has( value={hasOwn(
detailsObj, detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden" "pinswg_proofsofevidencewrittenstatementsofeviden"
) )
@@ -407,79 +300,56 @@ const Pinswg_maintenanceoflands217id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
)} )}
/> */} /> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-event-date-label")} <SummaryRow
label={t("case:summary-start-event-date-label")}
value={_.has( value={
detailsObj, hasOwn(detailsObj, "pinswg_startdateofevent")
"pinswg_dateeventrequested" ? !_.isEmpty(
) detailsObj.pinswg_startdateofevent
? !_.isEmpty( )
detailsObj.pinswg_dateeventrequested ? formatDates(
) detailsObj.pinswg_startdateofevent
? formatDates( )
detailsObj.pinswg_dateeventrequested : t(
) "case:summary-no-date-entered-label"
: t( )
"case:summary-no-date-entered-label" : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" <SummaryRow
)} label={t("case:summary-decision-date-label")}
value={
/> hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty(
<SummaryRow detailsObj.pinswg_casedecisiondate
)
? formatDates(
label={t( detailsObj.pinswg_casedecisiondate
"case:summary-start-event-date-label" )
)} : t(
"case:summary-no-date-entered-label"
)
value={_.has( : t("case:summary-no-date-entered-label")
detailsObj, }
"pinswg_startdateofevent" />
) </dl>
? !_.isEmpty(
detailsObj.pinswg_startdateofevent
)
? formatDates(
detailsObj.pinswg_startdateofevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_miscellaneouscasewordid = (props) => { const Pinswg_miscellaneouscasewordid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,236 +22,149 @@ const Pinswg_miscellaneouscasewordid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/>
<SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
label={t("case:summary-case-type-label")} <br />
</dd>
value={router.locale == "cy" </div>
? jsonpath({ {casesObj.numberofchildincidents > 0 && (
path: <div className="govuk-summary-list__row">
'$..[?(@ && @.value=="' + <dt className="govuk-summary-list__key">
casesObj[ {t("case:summary-case-link-status-label")}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </dt>
] + <dd className="govuk-summary-list__value">
'")].value_cy', {hasOwn(casesObj, [
json: transLookup, "numberofchildincidents"
eval: true, ])
}) ? casesObj.numberofchildincidents > 0
: casesObj[ ? t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-linked"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={router.locale == "cy"
? jsonpath(
'$..[?(@.value=="' +
detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
transLookup
) )
: detailsObj[ : t(
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ <SummaryRow
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" label={t(
] || ""} "case:summary-case-relevant-authoritylabel"
)}
/> value={resolveCrmDisplayValue({
<SummaryRow value: detailsObj.pinswg_relevantauthorityname,
locale: router.locale,
label={t("case:summary-type-of-event-label")} translations: transLookup,
fallbackValue: ""
value={router.locale == "cy" })}
? jsonpath({ />
path: </dl>
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
<SummaryRow
label={t(
"case:summary-case-relevant-authoritylabel"
)}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value_cy',
json: transLookup,
eval: true,
})
: jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value',
json: transLookup,
eval: true,
}) ||
t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -257,168 +172,129 @@ const Pinswg_miscellaneouscasewordid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
/> label={t(
"case:summary-applicant-final-comments-date-label"
<SummaryRow )}
value={
hasOwn(
label={t( detailsObj,
"case:summary-interested-party-date-label" "pinswg_finalcommentsduedate"
)} )
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
value={_.has( )
detailsObj, ? formatDates(
"pinswg_otherpartiesstatement" detailsObj.pinswg_finalcommentsduedate
) )
? !_.isEmpty( : t(
detailsObj.pinswg_otherpartiesstatement "case:summary-no-date-entered-label"
) )
? formatDates( : t("case:summary-no-date-entered-label")
detailsObj.pinswg_otherpartiesstatement }
) />
: t( {/* <SummaryRow
"case:summary-no-date-entered-label"
)
: _.has(
detailsObj,
"pinswg_otherpartiesstatements"
)
? !_.isEmpty(
detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_otherpartiesstatements
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t( label={t(
"case:summary-inquiry-evidence-date-label" "case:summary-inquiry-evidence-date-label"
)} )}
value={_.has( value={hasOwn(
detailsObj, detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden" "pinswg_proofsofevidencewrittenstatementsofeviden"
) )
@@ -435,79 +311,56 @@ const Pinswg_miscellaneouscasewordid = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
)} )}
/> */} /> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-event-date-label")} <SummaryRow
label={t("case:summary-start-event-date-label")}
value={_.has( value={
detailsObj, hasOwn(detailsObj, "pinswg_startdateofevent")
"pinswg_dateeventrequested" ? !_.isEmpty(
) detailsObj.pinswg_startdateofevent
? !_.isEmpty( )
detailsObj.pinswg_dateeventrequested ? formatDates(
) detailsObj.pinswg_startdateofevent
? formatDates( )
detailsObj.pinswg_dateeventrequested : t(
) "case:summary-no-date-entered-label"
: t( )
"case:summary-no-date-entered-label" : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" <SummaryRow
)} label={t("case:summary-decision-date-label")}
value={
/> hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty(
<SummaryRow detailsObj.pinswg_casedecisiondate
)
? formatDates(
label={t( detailsObj.pinswg_casedecisiondate
"case:summary-start-event-date-label" )
)} : t(
"case:summary-no-date-entered-label"
)
value={_.has( : t("case:summary-no-date-entered-label")
detailsObj, }
"pinswg_startdateofevent" />
) </dl>
? !_.isEmpty(
detailsObj.pinswg_startdateofevent
)
? formatDates(
detailsObj.pinswg_startdateofevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_nonvalidationid = (props) => { const Pinswg_nonvalidationid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,136 +22,68 @@ const Pinswg_nonvalidationid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
label={t("case:summary-case-type-label")} <SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decisionissued@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
value={ <br />
</dd>
router.locale == "cy" </div>
? jsonpath({ </dl>
path:
'$..[?(@ && @.value=="' +
casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)
}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
}
/>
{/* <SummaryRow
label={t("case:summary-procedure-label")}
value={
router.locale == "cy"
? jsonpath({path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> */}
<SummaryRow
label={t("case:summary-status-label")}
value={
router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)
}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decisionissued@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decisionissued@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -157,75 +91,46 @@ const Pinswg_nonvalidationid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_validdate")
? !_.isEmpty(detailsObj.pinswg_validdate)
? formatDates(
detailsObj.pinswg_validdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t("case:summary-decision-date-label")}
value={ value={
hasOwn(detailsObj, "pinswg_decisionissueddate")
_.has(detailsObj, "pinswg_validdate") ? !_.isEmpty(
? !_.isEmpty( detailsObj.pinswg_decisionissueddate
detailsObj.pinswg_validdate )
) ? formatDates(
? formatDates( detailsObj.pinswg_decisionissueddate
detailsObj.pinswg_validdate )
) : t(
: t( "case:summary-no-date-entered-label"
"case:summary-no-date-entered-label" )
) : t("case:summary-no-date-entered-label")
: _.has( }
detailsObj, />
"pinswg_startdates" </dl>
)
? !_.isEmpty(
detailsObj.pinswg_startdates
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)
}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={
_.has(
detailsObj,
"pinswg_decisionissueddate"
)
? !_.isEmpty(
detailsObj.pinswg_decisionissueddate
)
? formatDates(
detailsObj.pinswg_decisionissueddate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)
}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
@@ -1,10 +1,16 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import pickListLookup from "../../../data/picklistLookups.json";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import {
getCaseLpaDisplayValue,
getCaseLpaDisplayLines
} from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
const Pinswg_planningappeals78id = (props) => { const Pinswg_planningappeals78id = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,186 +28,105 @@ const Pinswg_planningappeals78id = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale: router.locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-lpa-label")} label={t("case:summary-lpa-label")}
value={ value={
<>
router.locale == "cy" {getCaseLpaDisplayLines({
? jsonpath({ casesObj,
path: detailsObj,
'$..[?(@ && @.value=="' + locale: router.locale,
casesObj[ transLookup
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" }).map((name) => (
] + <div key={name}>{name}</div>
'")].value_cy', ))}
json: transLookup, </>
eval: true
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
} }
/> />
<SummaryRow
<SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath( locale: router.locale,
'$..[?(@.value=="' + translations: transLookup,
detailsObj[ fallbackValue: t(
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" "case:summary-to-be-confirmed-label"
] + )
'")].value_cy', })}
transLookup
)
: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow
<SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale: router.locale,
path: translations: pickListLookup
'$..[?(@ && @.value=="' + })}
detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow
<SummaryRow
label={t("case:summary-type-of-event-label")} label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale: router.locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: t(
detailsObj[ "case:summary-no-information-to-date-label"
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue" )
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value={ value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale: router.locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: t(
casesObj[ "case:summary-no-date-entered-label"
"statuscode@OData.Community.Display.V1.FormattedValue" )
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_dicision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale: router.locale,
"pinswg_dicision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_dicision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
hasOwn(detailsObj, "pinswg_casedecisiondate")
_.has(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
@@ -212,9 +137,7 @@ const Pinswg_planningappeals78id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
@@ -222,7 +145,9 @@ const Pinswg_planningappeals78id = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -259,12 +184,9 @@ const Pinswg_planningappeals78id = (props) => {
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
hasOwn(detailsObj, "pinswg_startdate")
_.has(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -272,7 +194,7 @@ const Pinswg_planningappeals78id = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -281,21 +203,15 @@ const Pinswg_planningappeals78id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
<SummaryRow <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
label={t("case:summary-questionnaire-due-date-label")} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_questionnaireduedate"
) )
@@ -309,25 +225,15 @@ const Pinswg_planningappeals78id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-statement-interested-party-due-date-label" "case:summary-statement-interested-party-due-date-label"
)} )}
value={ value={
hasOwn(detailsObj, "pinswg_statementduedate")
_.has(detailsObj, "pinswg_statementduedate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_statementduedate detailsObj.pinswg_statementduedate
) )
@@ -338,60 +244,13 @@ const Pinswg_planningappeals78id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{/* <SummaryRow
label={t(
"case:summary-interested-party-date-label"
)}
value={
_.has(
detailsObj,
"pinswg_otherpartiesstatement"
)
? !_.isEmpty(
detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: _.has(
detailsObj,
"pinswg_otherpartiesstatements"
)
? !_.isEmpty(
detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_otherpartiesstatements
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)
}
/> */}
<SummaryRow <SummaryRow
label={t("case:summary-final-comments-date-label")} label={t("case:summary-final-comments-date-label")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_finalcommentsduedate" "pinswg_finalcommentsduedate"
) )
@@ -405,67 +264,13 @@ const Pinswg_planningappeals78id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={
_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)
}
/> */}
{/* <SummaryRow
label={t("case:summary-event-date-label")}
value={
_.has(
detailsObj,
"pinswg_dateeventrequested"
)
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)
}
/> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_startdatetimeiftheevent" "pinswg_startdatetimeiftheevent"
) )
@@ -479,23 +284,16 @@ const Pinswg_planningappeals78id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{detailsObj.pinswg_typeofevent == 846040002 || {detailsObj.pinswg_typeofevent == 846040002 ||
detailsObj.pinswg_typeofevent == 846040007 || detailsObj.pinswg_typeofevent == 846040007 ||
detailsObj.pinswg_typeofevent == 846040012 || detailsObj.pinswg_typeofevent == 846040012 ||
detailsObj.pinswg_typeofevent == 846040009 ? ( detailsObj.pinswg_typeofevent == 846040009 ? (
<SummaryRow <SummaryRow
label={t("case:summary-start-event-time-label")} label={t("case:summary-start-event-time-label")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_startdatetimeiftheevent" "pinswg_startdatetimeiftheevent"
) )
@@ -512,9 +310,7 @@ const Pinswg_planningappeals78id = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
) : ( ) : (
"" ""
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_planningconditionss73s79id = (props) => { const Pinswg_planningconditionss73s79id = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -22,174 +24,97 @@ const Pinswg_planningconditionss73s79id = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")} label={t("case:summary-case-type-label")}
value={ value={resolveCrmDisplayValue({
router.locale == "cy" value: casesObj[
? jsonpath({ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
path: ],
'$..[?(@ && @.value=="' + locale,
casesObj[ translations: transLookup,
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" fallbackValue: t(
] + "case:summary-no-date-entered-label"
'")].value_cy', )
json: transLookup, })}
eval: true
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-lpa-label")} label={t("case:summary-lpa-label")}
value={ value={
<>
router.locale == "cy" {getCaseLpaDisplayLines({
? jsonpath({ casesObj,
path: detailsObj,
'$..[?(@ && @.value=="' + locale: router.locale,
casesObj[ transLookup
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" }).map((name) => (
] + <div key={name}>{name}</div>
'")].value_cy', ))}
json: transLookup, </>
eval: true
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-eia-required-label")} label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath( locale,
'$..[?(@.value=="' + translations: transLookup,
detailsObj[ fallbackValue: t(
"pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue" "case:summary-to-be-confirmed-label"
] + )
'")].value_cy', })}
transLookup
)
: detailsObj[
"pinswg_detailedeiascreeningrequiered@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-to-be-confirmed-label")
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-procedure-label")} label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: ""
detailsObj[ })}
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-type-of-event-label")} label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: ""
detailsObj[ })}
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""
}
/> />
<SummaryRow <SummaryRow
label={t("case:summary-status-label")} label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value={ value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath({ locale,
path: translations: transLookup,
'$..[?(@ && @.value=="' + fallbackValue: t(
casesObj[ "case:summary-no-date-entered-label"
"statuscode@OData.Community.Display.V1.FormattedValue" )
] + })}
'")].value_cy',
json: transLookup,
eval: true
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t("case:summary-no-date-entered-label")
}
/> />
<div className="govuk-summary-list__row"> <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{t("case:summary-decision-label")} {t("case:summary-decision-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{router.locale == "cy" {resolveCrmDisplayValue({
? jsonpath({ value: detailsObj[
path: "pinswg_decision@OData.Community.Display.V1.FormattedValue"
'$..[?(@ && @.value=="' + ],
detailsObj[ locale,
"pinswg_decision@OData.Community.Display.V1.FormattedValue" translations: transLookup,
] + fallbackValue: t(
'")].value_cy', "case:summary-no-information-to-date-label"
json: transLookup, )
eval: true })}
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br /> <br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd> </dd>
</div> </div>
{casesObj.numberofchildincidents > 0 && ( {casesObj.numberofchildincidents > 0 && (
@@ -198,7 +123,9 @@ const Pinswg_planningconditionss73s79id = (props) => {
{t("case:summary-case-link-status-label")} {t("case:summary-case-link-status-label")}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{_.has(casesObj, ["numberofchildincidents"]) {hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0 ? casesObj.numberofchildincidents > 0
? t( ? t(
"case:summary-case-link-status-linked" "case:summary-case-link-status-linked"
@@ -235,12 +162,9 @@ const Pinswg_planningconditionss73s79id = (props) => {
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")} label={t("case:summary-start-date-label")}
value={ value={
hasOwn(detailsObj, "pinswg_startdate")
_.has(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate) ? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates( ? formatDates(
detailsObj.pinswg_startdate detailsObj.pinswg_startdate
@@ -248,7 +172,7 @@ const Pinswg_planningconditionss73s79id = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has(detailsObj, "pinswg_startdates") : hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates) ? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates( ? formatDates(
detailsObj.pinswg_startdates detailsObj.pinswg_startdates
@@ -257,21 +181,15 @@ const Pinswg_planningconditionss73s79id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
<SummaryRow <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
label={t("case:summary-questionnaire-due-date-label")} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_questionnaireduedate"
) )
@@ -285,23 +203,13 @@ const Pinswg_planningconditionss73s79id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-statement-due-date-label")} label={t("case:summary-statement-due-date-label")}
value={ value={
hasOwn(detailsObj, "pinswg_statementduedate")
_.has(detailsObj, "pinswg_statementduedate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_statementduedate detailsObj.pinswg_statementduedate
) )
@@ -312,23 +220,15 @@ const Pinswg_planningconditionss73s79id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
<SummaryRow <SummaryRow
label={t(
"case:summary-interested-party-date-label"
label={t("case:summary-interested-party-date-label")} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_otherpartiesstatement" "pinswg_otherpartiesstatement"
) )
@@ -341,7 +241,7 @@ const Pinswg_planningconditionss73s79id = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: _.has( : hasOwn(
detailsObj, detailsObj,
"pinswg_otherpartiesstatements" "pinswg_otherpartiesstatements"
) )
@@ -355,25 +255,15 @@ const Pinswg_planningconditionss73s79id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-applicant-final-comments-date-label" "case:summary-applicant-final-comments-date-label"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_finalcommentsduedate" "pinswg_finalcommentsduedate"
) )
@@ -387,42 +277,13 @@ const Pinswg_planningconditionss73s79id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={
_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)
}
/> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")} label={t("case:summary-event-date-label")}
value={ value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
_.has(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_dateeventrequested detailsObj.pinswg_dateeventrequested
) )
@@ -433,21 +294,13 @@ const Pinswg_planningconditionss73s79id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")} label={t("case:summary-start-event-date-label")}
value={ value={
hasOwn(detailsObj, "pinswg_startdateofevent")
_.has(detailsObj, "pinswg_startdateofevent")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_startdateofevent detailsObj.pinswg_startdateofevent
) )
@@ -458,19 +311,12 @@ const Pinswg_planningconditionss73s79id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-decision-date-label")} label={t("case:summary-decision-date-label")}
value={ value={
hasOwn(detailsObj, "pinswg_casedecisiondate")
_.has(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_casedecisiondate detailsObj.pinswg_casedecisiondate
) )
@@ -481,9 +327,7 @@ const Pinswg_planningconditionss73s79id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
: t("case:summary-no-date-entered-label") : t("case:summary-no-date-entered-label")
} }
/> />
</dl> </dl>
</SummaryCard> </SummaryCard>
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_planningobligationappeals106id = (props) => { const Pinswg_planningobligationappeals106id = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,208 +22,138 @@ const Pinswg_planningobligationappeals106id = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/>
<SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
label={t("case:summary-case-type-label")} <br />
</dd>
value={router.locale == "cy" </div>
? jsonpath({ {casesObj.numberofchildincidents > 0 && (
path: <div className="govuk-summary-list__row">
'$..[?(@ && @.value=="' + <dt className="govuk-summary-list__key">
casesObj[ {t("case:summary-case-link-status-label")}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </dt>
] + <dd className="govuk-summary-list__value">
'")].value_cy', {hasOwn(casesObj, [
json: transLookup, "numberofchildincidents"
eval: true, ])
}) ? casesObj.numberofchildincidents > 0
: casesObj[ ? t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-linked"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={router.locale == "cy"
? jsonpath(
'$..[?(@.value=="' +
detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
transLookup
) )
: detailsObj[ : t(
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ </dl>
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -229,168 +161,129 @@ const Pinswg_planningobligationappeals106id = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
/> label={t(
"case:summary-applicant-final-comments-date-label"
<SummaryRow )}
value={
hasOwn(
label={t( detailsObj,
"case:summary-interested-party-date-label" "pinswg_finalcommentsduedate"
)} )
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
value={_.has( )
detailsObj, ? formatDates(
"pinswg_otherpartiesstatement" detailsObj.pinswg_finalcommentsduedate
) )
? !_.isEmpty( : t(
detailsObj.pinswg_otherpartiesstatement "case:summary-no-date-entered-label"
) )
? formatDates( : t("case:summary-no-date-entered-label")
detailsObj.pinswg_otherpartiesstatement }
) />
: t( {/* <SummaryRow
"case:summary-no-date-entered-label"
)
: _.has(
detailsObj,
"pinswg_otherpartiesstatements"
)
? !_.isEmpty(
detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_otherpartiesstatements
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t( label={t(
"case:summary-inquiry-evidence-date-label" "case:summary-inquiry-evidence-date-label"
)} )}
value={_.has( value={hasOwn(
detailsObj, detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden" "pinswg_proofsofevidencewrittenstatementsofeviden"
) )
@@ -407,79 +300,56 @@ const Pinswg_planningobligationappeals106id = (props) => {
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
)} )}
/> */} /> */}
<SummaryRow <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-event-date-label")} <SummaryRow
label={t("case:summary-start-event-date-label")}
value={_.has( value={
detailsObj, hasOwn(detailsObj, "pinswg_startdateoftheevent")
"pinswg_dateeventrequested" ? !_.isEmpty(
) detailsObj.pinswg_startdateoftheevent
? !_.isEmpty( )
detailsObj.pinswg_dateeventrequested ? formatDates(
) detailsObj.pinswg_startdateoftheevent
? formatDates( )
detailsObj.pinswg_dateeventrequested : t(
) "case:summary-no-date-entered-label"
: t( )
"case:summary-no-date-entered-label" : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" <SummaryRow
)} label={t("case:summary-decision-date-label")}
value={
/> hasOwn(detailsObj, "pinswg_casedecisiondate")
? !_.isEmpty(
<SummaryRow detailsObj.pinswg_casedecisiondate
)
? formatDates(
label={t( detailsObj.pinswg_casedecisiondate
"case:summary-start-event-date-label" )
)} : t(
"case:summary-no-date-entered-label"
)
value={_.has( : t("case:summary-no-date-entered-label")
detailsObj, }
"pinswg_startdateoftheevent" />
) </dl>
? !_.isEmpty(
detailsObj.pinswg_startdateoftheevent
)
? formatDates(
detailsObj.pinswg_startdateoftheevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
+316 -498
View File
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
const Pinswg_rowid = (props) => { const Pinswg_rowid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,264 +22,162 @@ const Pinswg_rowid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
label={t("case:summary-case-type-label")} <SummaryRow
label={t(
"case:summary-specialist-case-process-label"
)}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_specialistcaseprocess@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
value={router.locale == "cy" <SummaryRow
? jsonpath({ label={t("case:summary-lpa-label")}
path: value={
'$..[?(@ && @.value=="' + <>
casesObj[ {getCaseLpaDisplayLines({
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" casesObj,
] + detailsObj,
'")].value_cy', locale: router.locale,
json: transLookup, transLookup
eval: true, }).map((name) => (
}) <div key={name}>{name}</div>
: casesObj[ ))}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </>
] || }
t( />
"case:summary-no-date-entered-label" <SummaryRow
)} label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
/> value: detailsObj[
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue"
<SummaryRow ],
locale,
translations: transLookup,
label={"Specialist Case Process"} fallbackValue: t(
t("case:summary-to-be-confirmed-label")
)
value={router.locale == "cy" })}
? jsonpath({ />
path: <SummaryRow
'$..[?(@ && @.value=="' + label={t("case:summary-procedure-label")}
detailsObj[ value={resolveCrmDisplayValue({
"pinswg_specialistcaseprocess@OData.Community.Display.V1.FormattedValue" value: detailsObj[
] + "pinswg_procedure@OData.Community.Display.V1.FormattedValue"
'")].value_cy', ],
json: transLookup, locale,
eval: true, translations: transLookup,
}) fallbackValue: ""
: detailsObj[ })}
"pinswg_specialistcaseprocess@OData.Community.Display.V1.FormattedValue" />
] || ""} <SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
/> value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
<SummaryRow ],
locale,
translations: transLookup,
label={t("case:summary-lpa-label")} fallbackValue: ""
})}
/>
value={router.locale == "cy" <SummaryRow
? jsonpath({ label={t("case:summary-status-label")}
path: value={resolveCrmDisplayValue({
'$..[?(@ && @.value=="' + value: casesObj[
casesObj[ "statuscode@OData.Community.Display.V1.FormattedValue"
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" ],
] + locale: router.locale,
'")].value_cy', translations: transLookup,
json: transLookup, fallbackValue: t(
eval: true, t("case:summary-no-date-entered-label")
}) )
: casesObj[ })}
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" />
] || ""} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
/> </dt>
<SummaryRow <dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
label={t("case:summary-eia-required-label")} value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
value={router.locale == "cy" ],
? jsonpath( locale: router.locale,
'$..[?(@.value=="' + translations: transLookup,
detailsObj[ fallbackValue: t(
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue" "case:summary-no-information-to-date-label"
] + )
'")].value_cy', })}
transLookup </dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-case-link-status-label")}
</dt>
<dd className="govuk-summary-list__value">
{hasOwn(casesObj, [
"numberofchildincidents"
])
? casesObj.numberofchildincidents > 0
? t(
"case:summary-case-link-status-linked"
) )
: detailsObj[ : t(
"pinswg_detailedeiascreeningrequired@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ <SummaryRow
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" label={t(
] || ""} "case:summary-case-relevant-authoritylabel"
)}
/> value={resolveCrmDisplayValue({
<SummaryRow value: detailsObj.pinswg_relevantauthorityname,
locale: router.locale,
label={t("case:summary-type-of-event-label")} translations: transLookup,
fallbackValue: ""
value={router.locale == "cy" })}
? jsonpath({ />
path: </dl>
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
<SummaryRow
label={t(
"case:summary-case-relevant-authoritylabel"
)}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value_cy',
json: transLookup,
eval: true,
})
: jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value',
json: transLookup,
eval: true,
}) ||
t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -285,257 +185,175 @@ const Pinswg_rowid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
/> <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")}
value={
label={t( hasOwn(detailsObj, "pinswg_startdateoftheevent")
"case:summary-interested-party-date-label" ? !_.isEmpty(
)} detailsObj.pinswg_startdateoftheevent
)
? formatDates(
value={_.has( detailsObj.pinswg_startdateoftheevent
detailsObj, )
"pinswg_otherpartiesstatement" : t(
) "case:summary-no-date-entered-label"
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatement : t("case:summary-no-date-entered-label")
) }
? formatDates( />
detailsObj.pinswg_otherpartiesstatement <SummaryRow
) label={t("case:summary-decision-date-label")}
: t( value={
"case:summary-no-date-entered-label" hasOwn(detailsObj, "pinswg_casedecisiondate")
) ? !_.isEmpty(
: _.has( detailsObj.pinswg_casedecisiondate
detailsObj, )
"pinswg_otherpartiesstatements" ? formatDates(
) detailsObj.pinswg_casedecisiondate
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatements : t(
) "case:summary-no-date-entered-label"
? formatDates( )
detailsObj.pinswg_otherpartiesstatements : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" </dl>
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> */}
<SummaryRow
label={t("case:summary-event-date-label")}
value={_.has(
detailsObj,
"pinswg_dateeventrequested"
)
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-start-event-date-label"
)}
value={_.has(
detailsObj,
"pinswg_startdateoftheevent"
)
? !_.isEmpty(
detailsObj.pinswg_startdateoftheevent
)
? formatDates(
detailsObj.pinswg_startdateoftheevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
File diff suppressed because it is too large Load Diff
@@ -5,6 +5,8 @@ import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_transportandworkactid = (props) => { const Pinswg_transportandworkactid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -62,99 +64,53 @@ const Pinswg_transportandworkactid = (props) => {
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t(
label={t("case:summary-case-type-label")} "case:summary-case-type-label"
)}
value={ value={resolveCrmDisplayValue({
value: casesObj[
router.locale == "cy" "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
? jsonpath({ ],
path: locale: router.locale,
'$..[?(@ && @.value=="' + translations: transLookup,
casesObj[ fallbackValue: t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-no-date-entered-label"
] + )
'")].value_cy', })}
json: transLookup,
eval: true,
})
: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)
}
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-eia-required-label" "case:summary-eia-required-label"
)} )}
value={resolveCrmDisplayValue({
value={ value: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
router.locale == "cy" ],
? jsonpath( locale: router.locale,
'$..[?(@.value=="' + translations: transLookup,
detailsObj[ fallbackValue: t(
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue" "case:summary-to-be-confirmed-label"
] + )
'")].value_cy', })}
transLookup
)
: detailsObj[
"pinswg_eiarequired@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-to-be-confirmed-label"
)
}
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-case-recommendation-label" "case:summary-case-recommendation-label"
)} )}
value={resolveCrmDisplayValue({
value: detailsObj.pinswg_recommendation,
value={ locale: router.locale,
translations: transLookup,
fallbackValue: ""
router.locale == "cy" })}
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj.pinswg_recommendation +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj.pinswg_recommendation ||
t(
"case:summary-no-date-entered-label"
)
}
/> />
{detailsObj.pinswg_webaddress != null && ( {detailsObj.pinswg_webaddress != null && (
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-case-website-label" "case:summary-case-website-label"
)} )}
value={ value={
router.locale == "cy" router.locale == "cy"
? jsonpath({ ? jsonpath({
path: path:
@@ -162,15 +118,13 @@ const Pinswg_transportandworkactid = (props) => {
detailsObj.pinswg_webaddress + detailsObj.pinswg_webaddress +
'")].value_cy', '")].value_cy',
json: transLookup, json: transLookup,
eval: true, eval: true
}) })
: detailsObj.pinswg_webaddress || : detailsObj.pinswg_webaddress ||
t( t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
)} )}
</dl> </dl>
@@ -185,12 +139,11 @@ const Pinswg_transportandworkactid = (props) => {
</h3> </h3>
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t(
label={t("case:summary-event-date-label")} "case:summary-event-date-label"
)}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateeventrequested" "pinswg_dateeventrequested"
) )
@@ -206,19 +159,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-decision-date-label" "case:summary-decision-date-label"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_casedecisiondate" "pinswg_casedecisiondate"
) )
@@ -234,23 +182,15 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-application-accepted-as-valid" "case:summary-application-accepted-as-valid"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_applicationacceptedasvalid" "pinswg_applicationacceptedasvalid"
) )
@@ -266,21 +206,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-application-rejected-as-invalid" "case:summary-application-rejected-as-invalid"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_applicationrejectedasinvalid" "pinswg_applicationrejectedasinvalid"
) )
@@ -296,19 +229,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-confirm-request-to-vary-application" "case:summary-confirm-request-to-vary-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_confirmrequesttovaryapplication" "pinswg_confirmrequesttovaryapplication"
) )
@@ -324,19 +252,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-decisions" "case:summary-date-of-decisions"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofdecision" "pinswg_dateofdecision"
) )
@@ -352,19 +275,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-request-to-vary" "case:summary-date-of-request-to-vary"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofrequesttovarytheapplication" "pinswg_dateofrequesttovarytheapplication"
) )
@@ -380,19 +298,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-of-submission-of-application" "case:summary-date-of-submission-of-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateofsubmissionofapplication" "pinswg_dateofsubmissionofapplication"
) )
@@ -408,19 +321,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-date-project-published-to-website" "case:summary-date-project-published-to-website"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_dateprojectpublishedonwebsite" "pinswg_dateprojectpublishedonwebsite"
) )
@@ -436,19 +344,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-deadline-for-submission-of-application" "case:summary-deadline-for-submission-of-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_deadlineforsubmissionofapplication" "pinswg_deadlineforsubmissionofapplication"
) )
@@ -464,19 +367,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-end-of-representation-period" "case:summary-end-of-representation-period"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_endofrepresentationperiod" "pinswg_endofrepresentationperiod"
) )
@@ -492,19 +390,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-inspector-report-submission-to-welsh-government" "case:summary-inspector-report-submission-to-welsh-government"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_inspectorreportsubmittedtowelshgovernment" "pinswg_inspectorreportsubmittedtowelshgovernment"
) )
@@ -520,19 +413,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-procedure-confirmed" "case:summary-procedure-confirmed"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_procedureconfirmed" "pinswg_procedureconfirmed"
) )
@@ -548,19 +436,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-reject-request-to-vary-application" "case:summary-reject-request-to-vary-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_rejectrequesttovaryapplication" "pinswg_rejectrequesttovaryapplication"
) )
@@ -576,17 +459,12 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-report-due-by")} label={t("case:summary-report-due-by")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_reportdueby" "pinswg_reportdueby"
) )
@@ -602,17 +480,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t(
label={t("case:summary-suspension-dates")} "case:summary-suspension-dates"
)}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensiondates" "pinswg_suspensiondates"
) )
@@ -628,19 +503,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-suspension-end-dates" "case:summary-suspension-end-dates"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensionenddates" "pinswg_suspensionenddates"
) )
@@ -656,19 +526,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-suspension-start-dates" "case:summary-suspension-start-dates"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_suspensionstartdates" "pinswg_suspensionstartdates"
) )
@@ -684,19 +549,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-valid-notice-of-intention-to-submit-an-application" "case:summary-valid-notice-of-intention-to-submit-an-application"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_validnoticeofintentiontosubmitanapplicati" "pinswg_validnoticeofintentiontosubmitanapplicati"
) )
@@ -712,17 +572,12 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t("case:summary-withdrawn-date")} label={t("case:summary-withdrawn-date")}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_withdrawndate" "pinswg_withdrawndate"
) )
@@ -738,19 +593,14 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
<SummaryRow <SummaryRow
label={t( label={t(
"case:summary-written-acceptance-of-notice" "case:summary-written-acceptance-of-notice"
)} )}
value={ value={
hasOwn(
_.has(
detailsObj, detailsObj,
"pinswg_writtenacceptanceofnotification" "pinswg_writtenacceptanceofnotification"
) )
@@ -766,9 +616,7 @@ const Pinswg_transportandworkactid = (props) => {
: t( : t(
"case:summary-no-date-entered-label" "case:summary-no-date-entered-label"
) )
} }
/> />
</dl> </dl>
</div> </div>
+304 -471
View File
@@ -1,10 +1,12 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import transLookup from "../../../data/lookuptranslations.json"; import transLookup from "../../../data/lookuptranslations.json";
import resolveCrmDisplayValue from "../../../lib/i18n/crmDisplay/resolveCrmDisplayValue";
import SummaryCard from "../summary/components/SummaryCard"; import SummaryCard from "../summary/components/SummaryCard";
import SummaryRow from "../summary/components/SummaryRow"; import SummaryRow from "../summary/components/SummaryRow";
import { getCaseLpaDisplayLines } from "../../utils/getCaseLpaDisplayValue";
import { hasOwn } from "../../utils";
const Pinswg_wayleaveid = (props) => { const Pinswg_wayleaveid = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -20,236 +22,149 @@ const Pinswg_wayleaveid = (props) => {
title={t("case:summary-case-details-label")} title={t("case:summary-case-details-label")}
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-case-type-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={
<>
{getCaseLpaDisplayLines({
casesObj,
detailsObj,
locale: router.locale,
transLookup
}).map((name) => (
<div key={name}>{name}</div>
))}
</>
}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-to-be-confirmed-label"
)
})}
/>
<SummaryRow
label={t("case:summary-procedure-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-type-of-event-label")}
value={resolveCrmDisplayValue({
value: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: ""
})}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={resolveCrmDisplayValue({
value: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-date-entered-label"
)
})}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{resolveCrmDisplayValue({
value: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
],
locale,
translations: transLookup,
fallbackValue: t(
"case:summary-no-information-to-date-label"
)
})}
label={t("case:summary-case-type-label")} <br />
</dd>
value={router.locale == "cy" </div>
? jsonpath({ {casesObj.numberofchildincidents > 0 && (
path: <div className="govuk-summary-list__row">
'$..[?(@ && @.value=="' + <dt className="govuk-summary-list__key">
casesObj[ {t("case:summary-case-link-status-label")}
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" </dt>
] + <dd className="govuk-summary-list__value">
'")].value_cy', {hasOwn(casesObj, [
json: transLookup, "numberofchildincidents"
eval: true, ])
}) ? casesObj.numberofchildincidents > 0
: casesObj[ ? t(
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-linked"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-lpa-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-eia-required-label")}
value={router.locale == "cy"
? jsonpath(
'$..[?(@.value=="' +
detailsObj[
"pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
transLookup
) )
: detailsObj[ : t(
"pinswg_detailedeiascreening@OData.Community.Display.V1.FormattedValue" "case:summary-case-link-status-not-linked"
] || )
t( : t(
"case:summary-to-be-confirmed-label" "case:summary-case-link-status-not-linked"
)} )}
</dd>
/> </div>
<SummaryRow )}
{casesObj.numberofchildincidents > 0 ? (
label={t("case:summary-procedure-label")} <div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
value={router.locale == "cy" {t("case:summary-linked-cases-label")}
? jsonpath({ </dt>
path: <dd className="govuk-summary-list__value">
'$..[?(@ && @.value=="' + {linkedCasesList(
detailsObj[ props.currentView.linkedCaseReferences
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" )}
] + </dd>
'")].value_cy', </div>
json: transLookup, ) : (
eval: true, ""
}) )}
: detailsObj[ <SummaryRow
"pinswg_procedure@OData.Community.Display.V1.FormattedValue" label={t(
] || ""} "case:summary-case-relevant-authoritylabel"
)}
/> value={resolveCrmDisplayValue({
<SummaryRow value: detailsObj.pinswg_relevantauthorityname,
locale: router.locale,
label={t("case:summary-type-of-event-label")} translations: transLookup,
fallbackValue: ""
value={router.locale == "cy" })}
? jsonpath({ />
path: </dl>
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_typeofevent@OData.Community.Display.V1.FormattedValue"
] || ""}
/>
<SummaryRow
label={t("case:summary-status-label")}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-date-entered-label"
)}
/>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.value=="' +
detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] +
'")].value_cy',
json: transLookup,
eval: true,
})
: detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
] ||
t(
"case:summary-no-information-to-date-label"
)}
<br />
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link> */}
</dd>
</div>
{casesObj.numberofchildincidents > 0 && (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-case-link-status-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{_.has(casesObj, [
"numberofchildincidents",
])
? casesObj.numberofchildincidents >
0
? t(
"case:summary-case-link-status-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)
: t(
"case:summary-case-link-status-not-linked"
)}
</dd>
</div>
)}
{casesObj.numberofchildincidents > 0 ? (
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t(
"case:summary-linked-cases-label"
)}
</dt>
<dd className="govuk-summary-list__value">
{linkedCasesList(
props.currentView
.linkedCaseReferences
)}
</dd>
</div>
) : (
""
)}
<SummaryRow
label={t(
"case:summary-case-relevant-authoritylabel"
)}
value={router.locale == "cy"
? jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value_cy',
json: transLookup,
eval: true,
})
: jsonpath({
path:
'$..[?(@ && @.pinswg_lpa=="' +
detailsObj.pinswg_relevantauthorityname +
'")].value',
json: transLookup,
eval: true,
}) ||
t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
<SummaryCard <SummaryCard
id="key-dates-card" id="key-dates-card"
@@ -257,257 +172,175 @@ const Pinswg_wayleaveid = (props) => {
headingTag="h3" headingTag="h3"
> >
<dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9"> <dl className="govuk-summary-list govuk-!-font-size-16 govuk-!-margin-bottom-9">
<SummaryRow <SummaryRow
label={t("case:summary-start-date-label")}
value={
hasOwn(detailsObj, "pinswg_startdate")
? !_.isEmpty(detailsObj.pinswg_startdate)
? formatDates(
detailsObj.pinswg_startdate
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(detailsObj, "pinswg_startdates")
? !_.isEmpty(detailsObj.pinswg_startdates)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
label={t("case:summary-start-date-label")} <SummaryRow
label={t(
"case:summary-questionnaire-due-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_questionnaireduedate"
)
? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
value={_.has(detailsObj, "pinswg_startdate") <SummaryRow
? !_.isEmpty( label={t("case:summary-statement-due-date-label")}
detailsObj.pinswg_startdate value={
) hasOwn(detailsObj, "pinswg_statementduedate")
? formatDates( ? !_.isEmpty(
detailsObj.pinswg_startdate detailsObj.pinswg_statementduedate
) )
: t( ? formatDates(
"case:summary-no-date-entered-label" detailsObj.pinswg_statementduedate
) )
: _.has( : t(
detailsObj, "case:summary-no-date-entered-label"
"pinswg_startdates" )
) : t("case:summary-no-date-entered-label")
? !_.isEmpty( }
detailsObj.pinswg_startdates />
)
? formatDates(
detailsObj.pinswg_startdates
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> <SummaryRow
label={t(
<SummaryRow "case:summary-interested-party-date-label"
)}
value={
label={t( hasOwn(
"case:summary-questionnaire-due-date-label" detailsObj,
)} "pinswg_otherpartiesstatement"
)
? !_.isEmpty(
value={_.has( detailsObj.pinswg_otherpartiesstatement
)
? formatDates(
detailsObj.pinswg_otherpartiesstatement
)
: t(
"case:summary-no-date-entered-label"
)
: hasOwn(
detailsObj, detailsObj,
"pinswg_questionnaireduedate" "pinswg_otherpartiesstatements"
) )
? !_.isEmpty( ? !_.isEmpty(
detailsObj.pinswg_questionnaireduedate detailsObj.pinswg_otherpartiesstatements
)
? formatDates(
detailsObj.pinswg_questionnaireduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-statement-due-date-label"
)}
value={_.has(
detailsObj,
"pinswg_statementduedate"
) )
? !_.isEmpty( ? formatDates(
detailsObj.pinswg_statementduedate detailsObj.pinswg_otherpartiesstatements
) )
? formatDates( : t(
detailsObj.pinswg_statementduedate "case:summary-no-date-entered-label"
) )
: t( : t("case:summary-no-date-entered-label")
"case:summary-no-date-entered-label" }
) />
: t(
"case:summary-no-date-entered-label"
)}
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={
hasOwn(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
/> <SummaryRow
label={t("case:summary-event-date-label")}
value={
hasOwn(detailsObj, "pinswg_dateeventrequested")
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t("case:summary-no-date-entered-label")
}
/>
<SummaryRow <SummaryRow
label={t("case:summary-start-event-date-label")}
value={
label={t( hasOwn(detailsObj, "pinswg_startdateofevent")
"case:summary-interested-party-date-label" ? !_.isEmpty(
)} detailsObj.pinswg_startdateofevent
)
? formatDates(
value={_.has( detailsObj.pinswg_startdateofevent
detailsObj, )
"pinswg_otherpartiesstatement" : t(
) "case:summary-no-date-entered-label"
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatement : t("case:summary-no-date-entered-label")
) }
? formatDates( />
detailsObj.pinswg_otherpartiesstatement <SummaryRow
) label={t("case:summary-decision-date-label")}
: t( value={
"case:summary-no-date-entered-label" hasOwn(detailsObj, "pinswg_casedecisiondate")
) ? !_.isEmpty(
: _.has( detailsObj.pinswg_casedecisiondate
detailsObj, )
"pinswg_otherpartiesstatements" ? formatDates(
) detailsObj.pinswg_casedecisiondate
? !_.isEmpty( )
detailsObj.pinswg_otherpartiesstatements : t(
) "case:summary-no-date-entered-label"
? formatDates( )
detailsObj.pinswg_otherpartiesstatements : t("case:summary-no-date-entered-label")
) }
: t( />
"case:summary-no-date-entered-label" </dl>
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-applicant-final-comments-date-label"
)}
value={_.has(
detailsObj,
"pinswg_finalcommentsduedate"
)
? !_.isEmpty(
detailsObj.pinswg_finalcommentsduedate
)
? formatDates(
detailsObj.pinswg_finalcommentsduedate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
{/* <SummaryRow
label={t(
"case:summary-inquiry-evidence-date-label"
)}
value={_.has(
detailsObj,
"pinswg_proofsofevidencewrittenstatementsofeviden"
)
? !_.isEmpty(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
? formatDates(
detailsObj.pinswg_proofsofevidencewrittenstatementsofeviden
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/> */}
<SummaryRow
label={t("case:summary-event-date-label")}
value={_.has(
detailsObj,
"pinswg_dateeventrequested"
)
? !_.isEmpty(
detailsObj.pinswg_dateeventrequested
)
? formatDates(
detailsObj.pinswg_dateeventrequested
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t(
"case:summary-start-event-date-label"
)}
value={_.has(
detailsObj,
"pinswg_startdateofevent"
)
? !_.isEmpty(
detailsObj.pinswg_startdateofevent
)
? formatDates(
detailsObj.pinswg_startdateofevent
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
<SummaryRow
label={t("case:summary-decision-date-label")}
value={_.has(
detailsObj,
"pinswg_casedecisiondate"
)
? !_.isEmpty(
detailsObj.pinswg_casedecisiondate
)
? formatDates(
detailsObj.pinswg_casedecisiondate
)
: t(
"case:summary-no-date-entered-label"
)
: t(
"case:summary-no-date-entered-label"
)}
/>
</dl>
</SummaryCard> </SummaryCard>
</div> </div>
</div> </div>
+1 -1
View File
@@ -2,7 +2,7 @@ import { signOut } from "next-auth/react";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { destroyCookie, parseCookies, setCookie } from "nookies"; import { destroyCookie, parseCookies, setCookie } from "../../lib/cookies";
import { signIn, useSession } from "next-auth/react"; import { signIn, useSession } from "next-auth/react";
const WatchModal = (props) => { const WatchModal = (props) => {
+1 -1
View File
@@ -1,7 +1,7 @@
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { parseCookies } from "nookies"; import { parseCookies } from "../../lib/cookies";
import { useState } from "react"; import { useState } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { reduxForm } from "redux-form"; import { reduxForm } from "redux-form";
+2 -1
View File
@@ -1,5 +1,6 @@
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { hasOwn } from "./utils";
const CRMError = (props) => { const CRMError = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
@@ -9,7 +10,7 @@ const CRMError = (props) => {
const router = useRouter(); const router = useRouter();
const { locale } = router; const { locale } = router;
const errorSwitch = _.has(props, "whichError") const errorSwitch = hasOwn(props, "whichError")
? "LPAData" ? "LPAData"
: "searchResultsObj"; : "searchResultsObj";
+4 -1
View File
@@ -2,6 +2,7 @@ import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import CRMError from "./crmError"; import CRMError from "./crmError";
import DNSSearchResults from "./search/dnssearchresults"; import DNSSearchResults from "./search/dnssearchresults";
import { hasOwn } from "./utils";
export default function Search(props) { export default function Search(props) {
const { const {
@@ -11,13 +12,14 @@ export default function Search(props) {
watchedCases, watchedCases,
showMap, showMap,
showLoginCheck, showLoginCheck,
mapTarget
} = props; } = props;
let { t } = useTranslation(); let { t } = useTranslation();
const router = useRouter(); const router = useRouter();
const { locale } = router; const { locale } = router;
var hasError = _.has(searchResultsObj.searchResultsObj, "errorCode") var hasError = hasOwn(searchResultsObj.searchResultsObj, "errorCode")
? true ? true
: false; : false;
@@ -48,6 +50,7 @@ export default function Search(props) {
watchedCases={watchedCases} watchedCases={watchedCases}
showMap={showMap} showMap={showMap}
showLoginCheck={showLoginCheck} showLoginCheck={showLoginCheck}
mapTarget={mapTarget}
/> />
</div> </div>
</div> </div>
@@ -4,6 +4,7 @@ import useTranslation from "next-translate/useTranslation";
import { Field } from "redux-form"; import { Field } from "redux-form";
import { RenderDatePicker } from "./renderDatePicker"; import { RenderDatePicker } from "./renderDatePicker";
import { validateField } from "../validationUtils"; import { validateField } from "../validationUtils";
import { hasOwn } from "../../utils";
const dateDiffInDays = (a, b) => { const dateDiffInDays = (a, b) => {
const _MS_PER_DAY = 1000 * 60 * 60 * 24; const _MS_PER_DAY = 1000 * 60 * 60 * 24;
@@ -31,7 +32,7 @@ export function DateFieldPicker(props) {
const showIfHasParentShowValue = const showIfHasParentShowValue =
parentField != false && parentField != false &&
!_.isEmpty(formProps[form]) && !_.isEmpty(formProps[form]) &&
_.has(formProps[form].values, parentField) && hasOwn(formProps[form].values, parentField) &&
formProps[form].values[parentField] == parentFieldShowOnValue; formProps[form].values[parentField] == parentFieldShowOnValue;
const requiredMessage = t("newappeal:is-required-label"); const requiredMessage = t("newappeal:is-required-label");
+2 -2
View File
@@ -5,7 +5,7 @@ import { Field } from "redux-form";
import { RenderTextfield } from "./renderTextfield"; import { RenderTextfield } from "./renderTextfield";
import { RenderDecimalField } from "./renderDecimalField"; import { RenderDecimalField } from "./renderDecimalField";
import { validateField } from "../validationUtils"; import { validateField } from "../validationUtils";
import { hasOwn } from "../../utils";
const isVisibleByInclusion = ({ const isVisibleByInclusion = ({
parentField, parentField,
form, form,
@@ -14,7 +14,7 @@ const isVisibleByInclusion = ({
}) => }) =>
parentField != false && parentField != false &&
!_.isEmpty(formProps[form]) && !_.isEmpty(formProps[form]) &&
_.has(formProps[form].values, parentField) && hasOwn(formProps[form].values, parentField) &&
parentFieldShowOnValue.indexOf( parentFieldShowOnValue.indexOf(
formProps[form].values[parentField].toString() formProps[form].values[parentField].toString()
) > -1; ) > -1;
+2 -2
View File
@@ -3,7 +3,7 @@ import _ from "lodash";
import { FieldArray, change } from "redux-form"; import { FieldArray, change } from "redux-form";
import { useDispatch } from "react-redux"; import { useDispatch } from "react-redux";
import { RenderSubFields } from "./renderSubFields"; import { RenderSubFields } from "./renderSubFields";
import { hasOwn } from "../../utils";
export const FieldArrayForm = (props) => { export const FieldArrayForm = (props) => {
const { const {
name, name,
@@ -19,7 +19,7 @@ export const FieldArrayForm = (props) => {
var showIfHasParentShowValue = var showIfHasParentShowValue =
parentField != false && parentField != false &&
!_.isEmpty(formProps[form]) && !_.isEmpty(formProps[form]) &&
_.has(formProps[form].values, parentField) && hasOwn(formProps[form].values, parentField) &&
parentFieldShowOnValue.indexOf( parentFieldShowOnValue.indexOf(
formProps[form].values[parentField].toString() formProps[form].values[parentField].toString()
) > -1; ) > -1;
+2 -2
View File
@@ -4,7 +4,7 @@ import useTranslation from "next-translate/useTranslation";
import { Field } from "redux-form"; import { Field } from "redux-form";
import { RenderTextfield } from "./renderTextfield"; import { RenderTextfield } from "./renderTextfield";
import { validateField } from "../validationUtils"; import { validateField } from "../validationUtils";
import { hasOwn } from "../../utils";
const isVisibleByInclusion = ({ const isVisibleByInclusion = ({
parentField, parentField,
form, form,
@@ -13,7 +13,7 @@ const isVisibleByInclusion = ({
}) => }) =>
parentField != false && parentField != false &&
!_.isEmpty(formProps[form]) && !_.isEmpty(formProps[form]) &&
_.has(formProps[form].values, parentField) && hasOwn(formProps[form].values, parentField) &&
parentFieldShowOnValue.indexOf( parentFieldShowOnValue.indexOf(
formProps[form].values[parentField].toString() formProps[form].values[parentField].toString()
) > -1; ) > -1;
+2 -1
View File
@@ -4,6 +4,7 @@ import useTranslation from "next-translate/useTranslation";
import { Field } from "redux-form"; import { Field } from "redux-form";
import { RenderRadio } from "./renderRadio"; import { RenderRadio } from "./renderRadio";
import { validateField } from "../validationUtils"; import { validateField } from "../validationUtils";
import { hasOwn } from "../../utils";
const isVisibleByInclusion = ({ const isVisibleByInclusion = ({
parentField, parentField,
@@ -13,7 +14,7 @@ const isVisibleByInclusion = ({
}) => }) =>
parentField != false && parentField != false &&
!_.isEmpty(formProps[form]) && !_.isEmpty(formProps[form]) &&
_.has(formProps[form].values, parentField) && hasOwn(formProps[form].values, parentField) &&
parentFieldShowOnValue.indexOf( parentFieldShowOnValue.indexOf(
formProps[form].values[parentField].toString() formProps[form].values[parentField].toString()
) > -1; ) > -1;
+4 -3
View File
@@ -4,6 +4,7 @@ import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { Field } from "redux-form"; import { Field } from "redux-form";
import { RenderYesNo } from "./renderYesNo"; import { RenderYesNo } from "./renderYesNo";
import { hasOwn } from "../../utils";
export function YesNofield(props) { export function YesNofield(props) {
const router = useRouter(); const router = useRouter();
@@ -17,7 +18,7 @@ export function YesNofield(props) {
const showIfHasParentShowValue = const showIfHasParentShowValue =
parentField != false && parentField != false &&
!_.isEmpty(formProps[form]) && !_.isEmpty(formProps[form]) &&
_.has(formProps[form].values, parentField) && hasOwn(formProps[form].values, parentField) &&
parentFieldShowOnValue.indexOf( parentFieldShowOnValue.indexOf(
formProps[form].values[parentField].toString() formProps[form].values[parentField].toString()
) > -1; ) > -1;
@@ -36,7 +37,7 @@ export function YesNofield(props) {
validate={[required]} validate={[required]}
errorMsg={t("newappeal:select-an-option-label")} errorMsg={t("newappeal:select-an-option-label")}
component={RenderYesNo} component={RenderYesNo}
inline={_.has(props, "inline") ? props.inline : "true"} inline={hasOwn(props, "inline") ? props.inline : "true"}
requiredDocumentLabel={props.requiredDocumentLabel} requiredDocumentLabel={props.requiredDocumentLabel}
requiredDocumentValue={props.requiredDocumentValue} requiredDocumentValue={props.requiredDocumentValue}
setDocumentsList={props.setDocumentsList} setDocumentsList={props.setDocumentsList}
@@ -54,7 +55,7 @@ export function YesNofield(props) {
validate={[required]} validate={[required]}
errorMsg={t("newappeal:select-an-option-label")} errorMsg={t("newappeal:select-an-option-label")}
component={RenderYesNo} component={RenderYesNo}
inline={_.has(props, "inline") ? props.inline : "true"} inline={hasOwn(props, "inline") ? props.inline : "true"}
requiredDocumentLabel={props.requiredDocumentLabel} requiredDocumentLabel={props.requiredDocumentLabel}
requiredDocumentValue={props.requiredDocumentValue} requiredDocumentValue={props.requiredDocumentValue}
setDocumentsList={props.setDocumentsList} setDocumentsList={props.setDocumentsList}
+2 -1
View File
@@ -1,4 +1,5 @@
import _ from "lodash"; import _ from "lodash";
import { hasOwn } from "../utils";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import React, { useEffect } from "react"; import React, { useEffect } from "react";
@@ -40,7 +41,7 @@ const getValidationMessages = (t) => ({
const hasParentFieldValue = ({ parentField, form, formProps }) => const hasParentFieldValue = ({ parentField, form, formProps }) =>
parentField != false && parentField != false &&
!_.isEmpty(formProps[form]) && !_.isEmpty(formProps[form]) &&
_.has(formProps[form].values, parentField); hasOwn(formProps[form].values, parentField);
const isVisibleByEquality = ({ const isVisibleByEquality = ({
parentField, parentField,
+27 -14
View File
@@ -108,7 +108,7 @@ export default function Footer(props) {
> >
<span className="vo_hidden"> <span className="vo_hidden">
{t( {t(
"common:social-bar-share-via-link", "common:social-bar-share-via-link"
)}{" "} )}{" "}
</span> </span>
Twitter Twitter
@@ -186,37 +186,37 @@ export default function Footer(props) {
<li className="govuk-footer__inline-list-item govuk-!-font-weight-bold govuk-!-margin-right-7"> <li className="govuk-footer__inline-list-item govuk-!-font-weight-bold govuk-!-margin-right-7">
<a <a
href={t( href={t(
"common:footer-guidance-link", "common:footer-guidance-link"
)} )}
className="nav-link" className="nav-link"
> >
{t( {t(
"common:footer-guidance-link-label", "common:footer-guidance-link-label"
)} )}
</a> </a>
</li> </li>
<li className="govuk-footer__inline-list-item govuk-!-font-weight-bold govuk-!-margin-right-7"> <li className="govuk-footer__inline-list-item govuk-!-font-weight-bold govuk-!-margin-right-7">
<a <a
href={t( href={t(
"common:footer-announcements-link", "common:footer-announcements-link"
)} )}
className="nav-link" className="nav-link"
> >
{t( {t(
"common:footer-announcements-link-label", "common:footer-announcements-link-label"
)} )}
</a> </a>
</li> </li>
<li className="govuk-footer__inline-list-item govuk-!-font-weight-bold"> <li className="govuk-footer__inline-list-item govuk-!-font-weight-bold">
<a <a
href={t( href={t(
"common:footer-contact-us-link", "common:footer-contact-us-link"
)} )}
className="govuk-footer__link" className="govuk-footer__link"
id="aContactUs" id="aContactUs"
> >
{t( {t(
"common:footer-contact-us-link-label", "common:footer-contact-us-link-label"
)} )}
</a> </a>
</li> </li>
@@ -236,7 +236,7 @@ export default function Footer(props) {
id="aAccessibility" id="aAccessibility"
> >
{t( {t(
"common:footer-accessibility-link-label", "common:footer-accessibility-link-label"
)} )}
</Link> </Link>
</li> </li>
@@ -257,13 +257,13 @@ export default function Footer(props) {
<li className="govuk-footer__inline-list-item"> <li className="govuk-footer__inline-list-item">
<a <a
href={t( href={t(
"common:footer-copyright-link", "common:footer-copyright-link"
)} )}
className="govuk-footer__link" className="govuk-footer__link"
id="Access" id="Access"
> >
{t( {t(
"common:footer-copyright-link-label", "common:footer-copyright-link-label"
)} )}
</a> </a>
</li> </li>
@@ -271,13 +271,13 @@ export default function Footer(props) {
<li className="govuk-footer__inline-list-item"> <li className="govuk-footer__inline-list-item">
<Link <Link
href={t( href={t(
"common:footer-privacy-link", "common:footer-privacy-link"
)} )}
id="aPrivacy" id="aPrivacy"
className="govuk-footer__link" className="govuk-footer__link"
> >
{t( {t(
"common:footer-privacy-link-label", "common:footer-privacy-link-label"
)} )}
</Link> </Link>
</li> </li>
@@ -285,13 +285,26 @@ export default function Footer(props) {
<li className="govuk-footer__inline-list-item"> <li className="govuk-footer__inline-list-item">
<Link <Link
href={t( href={t(
"common:footer-terms-conditions-link", "common:footer-terms-conditions-link"
)} )}
id="aTermsConds" id="aTermsConds"
className="govuk-footer__link" className="govuk-footer__link"
> >
{t( {t(
"common:footer-terms-conditions-link-label", "common:footer-terms-conditions-link-label"
)}
</Link>
</li>
<li className="govuk-footer__inline-list-item">
<Link
href={t(
"common:footer-pedw-use-ai-link"
)}
id="aHowToAI"
className="govuk-footer__link"
>
{t(
"common:footer-pedw-use-ai-label"
)} )}
</Link> </Link>
</li> </li>
+3 -4
View File
@@ -2,12 +2,12 @@ import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { setCookie } from "nookies"; import { destroyCookie, setCookie } from "../lib/cookies";
import { connect } from "react-redux"; import { connect } from "react-redux";
import Banner from "../components/banner"; import Banner from "../components/banner";
import { setLogout } from "../store/accountDetails/action"; import { setLogout } from "../store/accountDetails/action";
import { logoutClient } from "../lib/auth/logoutClient"; import { performPortalSignOut } from "../lib/auth/sessionClient";
const Header = (props) => { const Header = (props) => {
let { t, lang } = useTranslation(); let { t, lang } = useTranslation();
@@ -84,8 +84,7 @@ const Header = (props) => {
} }
const handleLogout = () => { const handleLogout = () => {
console.info("////////////\n" + "logout" + "\n////////////"); performPortalSignOut(locale);
logoutClient(locale);
}; };
//const switchLocale = locale === "en" ? "cy" : "en"; //const switchLocale = locale === "en" ? "cy" : "en";

Some files were not shown because too many files have changed in this diff Show More