From 87684bc76bcd28d4d2623e017a7a509cb87fbde5 Mon Sep 17 00:00:00 2001 From: Vitalii Kiiko Date: Tue, 27 Aug 2024 17:02:16 +0200 Subject: [PATCH] - added bando preview page; - added bando form preview; --- package-lock.json | 6 + package.json | 1 + src/assets/scss/components/appForm.scss | 1 + src/assets/scss/components/appPage.scss | 177 ++++++++-- src/assets/scss/components/formBuilder.scss | 36 +- src/assets/scss/components/layout.scss | 20 +- src/assets/scss/components/misc.scss | 8 + src/assets/scss/components/pageBando.scss | 4 - src/assets/scss/theme.scss | 2 + .../FormField/components/TextArea/index.js | 18 +- src/components/FormFieldRepeater/index.js | 1 + .../FormFieldRepeaterCriteria/index.js | 3 +- src/components/FormFieldRepeaterFaq/index.js | 11 - .../UnsavedChangesDetector/index.js | 2 +- src/helpers/getDateFromISOstring.js | 6 + src/helpers/getNumberFormatted.js | 5 + src/helpers/getNumberWithCurrency.js | 11 + src/layouts/DefaultLayout/index.js | 4 + .../components/BandoEditFormActions/index.js | 2 +- .../components/BandoEditFormStep1/index.js | 14 +- .../components/BandoEditFormStep2/index.js | 14 +- src/pages/BandoEdit/index.js | 66 +--- src/pages/BandoForms/index.js | 69 +++- .../components/BuilderDropzone/index.js | 26 ++ .../components/BuilderElement/index.js | 22 +- .../components/BuilderElementItem/index.js | 2 +- .../BuilderElementProperLabel/index.js | 24 ++ .../BuilderElementSettings/index.js | 67 ++++ .../components/FormBuilder/index.js | 51 +-- src/pages/BandoFormsEdit/index.js | 68 ++-- src/pages/BandoFormsPreview/index.js | 121 +++++++ src/pages/BandoView/index.js | 249 ++++++++++--- src/routes.js | 6 +- src/store/actions.js | 25 +- src/store/initial.js | 4 +- src/tempData.js | 330 ++++++++++++++++++ yarn.lock | 5 + 37 files changed, 1235 insertions(+), 246 deletions(-) create mode 100644 src/helpers/getDateFromISOstring.js create mode 100644 src/helpers/getNumberFormatted.js create mode 100644 src/helpers/getNumberWithCurrency.js create mode 100644 src/pages/BandoFormsEdit/components/BuilderDropzone/index.js create mode 100644 src/pages/BandoFormsEdit/components/BuilderElementProperLabel/index.js create mode 100644 src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js create mode 100644 src/pages/BandoFormsPreview/index.js create mode 100644 src/tempData.js diff --git a/package-lock.json b/package-lock.json index 25754b2..792dac3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@emotion/styled": "11.13.0", "@wordpress/i18n": "^5.5.0", "@wordpress/react-i18n": "^4.5.0", + "deep-object-diff": "^1.1.9", "dompurify": "3.1.6", "fast-deep-equal": "^3.1.3", "html-react-parser": "5.1.12", @@ -6765,6 +6766,11 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "node_modules/deep-object-diff": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==" + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", diff --git a/package.json b/package.json index d9a6b0a..f7b721c 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@emotion/styled": "11.13.0", "@wordpress/i18n": "^5.5.0", "@wordpress/react-i18n": "^4.5.0", + "deep-object-diff": "^1.1.9", "dompurify": "3.1.6", "fast-deep-equal": "^3.1.3", "html-react-parser": "5.1.12", diff --git a/src/assets/scss/components/appForm.scss b/src/assets/scss/components/appForm.scss index a66d7ce..8288a60 100644 --- a/src/assets/scss/components/appForm.scss +++ b/src/assets/scss/components/appForm.scss @@ -8,6 +8,7 @@ flex-direction: column; gap: 14px; padding: 5px 0; + width: 100%; label { font-size: 14px; diff --git a/src/assets/scss/components/appPage.scss b/src/assets/scss/components/appPage.scss index bfa5513..5bc3d58 100644 --- a/src/assets/scss/components/appPage.scss +++ b/src/assets/scss/components/appPage.scss @@ -12,30 +12,6 @@ } } -.appPageSection { - display: flex; - flex-direction: column; - align-items: flex-start; - - h2 { - color: var(--Black); - font-size: 21px; - font-style: normal; - font-weight: 600; - line-height: normal; - margin: 0 0 24px; - } -} - -.appPageSection__table { - width: 100%; -} - -.appTableHeader { - display: flex; - justify-content: space-between; -} - .appPage__pageHeader { display: flex; flex-direction: column; @@ -55,7 +31,7 @@ line-height: 120%; margin: 0; } - + span { margin-left: 10px; text-transform: uppercase; @@ -67,6 +43,157 @@ padding: 24px 0; } +.appPageSection__hr { + position: relative; + width: 100%; + padding: 0 0 0 30px; + + &:before { + position: absolute; + width: 100%; + height: 1px; + content: ''; + top: 50%; + left: 0; + z-index: 1; + background-color: #E5E7EB; + } + + span { + font-size: 14px; + font-style: normal; + font-weight: 700; + line-height: normal; + padding: 0 10px; + background-color: white; + z-index: 9; + position: relative; + } +} + +.appPage__content { + display: flex; + flex-direction: column; + gap: 48px; +} + +.appPageSection { + display: flex; + flex-direction: column; + align-items: flex-start; + + h2 { + color: var(--global-textColor); + font-size: 21px; + font-style: normal; + font-weight: 600; + line-height: normal; + margin: 0 0 24px; + } +} + +.appPageSection__withBorder { + display: flex; + flex-direction: column; + gap: 7px; + width: 100%; + padding: 17px; + border-radius: 6px; + border: 1px solid var(--card-borderColor-color); + + &.disabled { + filter: grayscale(1); + opacity: 0.8; + } + + h2 { + color: var(--global-textColor); + font-size: 21px; + font-style: normal; + font-weight: 600; + line-height: normal; + margin: 0; + } + + .row { + display: flex; + gap: 1rem; + align-items: center; + padding: 5px 0; + + &.rowContent { + padding: 17px 0; + } + + p { + margin: 0; + flex: 1 1 100%; + } + + ul { + padding-left: 1rem; + } + + button { + flex: 0 0 auto; + } + } +} + +.appPageSection__hero { + display: flex; + height: 172px; + width: 100%; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } +} + +.appPageSection__preview { + padding: 17px 0; + background: repeating-linear-gradient( + 45deg, + transparent, + transparent 10px, + #f8d282 10px, + #f8d282 20px + ); + + .p-button { + background: white; + } +} + +.appPageSection__row { + display: flex; + gap: 1rem; +} + +.appPageSection__pMeta { + display: flex; + gap: 0.5rem; + justify-content: space-between; + + span { + font-size: 14px; + font-style: normal; + font-weight: 600; + line-height: normal; + } +} + +.appPageSection__table { + width: 100%; +} + +.appTableHeader { + display: flex; + justify-content: space-between; +} + .appPageSection__actions { display: flex; gap: 24px; diff --git a/src/assets/scss/components/formBuilder.scss b/src/assets/scss/components/formBuilder.scss index 5cf3f3d..1989538 100644 --- a/src/assets/scss/components/formBuilder.scss +++ b/src/assets/scss/components/formBuilder.scss @@ -27,7 +27,14 @@ padding: 20px; border: 1px #DDD; background: var(--surface-50); - box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 0.10); + box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.10); + + .dropzone { + width: 100%; + height: 100%; + border-radius: 1rem; + border: 3px dashed #bdbdbd; + } } .formBuilder__element { @@ -36,11 +43,23 @@ align-items: center; gap: 1rem; padding: 10px 20px; - border: 1px dashed var(--button-secondary-borderColor); + border: 1px solid var(--button-secondary-borderColor); font-size: 14px; font-style: normal; font-weight: 400; line-height: 21px; + + .meta { + display: flex; + flex-direction: column; + gap: 5px; + align-items: flex-start; + } + + .actions { + display: flex; + gap: 1rem; + } } .formBuilder__aside { @@ -81,4 +100,17 @@ .formBuilder__elementSettings { width: 40rem; +} + +.formElementSettings { + display: flex; + flex-direction: column; + gap: 1rem; + align-items: flex-start; +} + +.formElementSettings__field { + display: flex; + flex-direction: column; + gap: 0.5rem; } \ No newline at end of file diff --git a/src/assets/scss/components/layout.scss b/src/assets/scss/components/layout.scss index 92f3e9b..70704e4 100644 --- a/src/assets/scss/components/layout.scss +++ b/src/assets/scss/components/layout.scss @@ -12,8 +12,7 @@ body { margin: 0; font-family: 'Montserrat'; - p, span, input, label:not(.p-error), textarea, a, li, h1, h2, h3, h4, h5, h6, div, th, td, button { - font-family: 'Montserrat'; + p, span:not(.p-button-label, .p-button-icon, .p-badge), input, label:not(.p-error), textarea, a, li, h1, h2, h3, h4, h5, h6, div, th, td { color: var(--global-textColor); } } @@ -84,6 +83,21 @@ body { > main { flex: 1 1 auto; box-sizing: border-box; - padding: 0 24px 50px; + padding: 0 24px 20px; + display: flex; + flex-direction: column; + + > footer { + margin-top: auto; + padding: 100px 0 0; + + p { + text-align: center; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: normal; + } + } } } \ No newline at end of file diff --git a/src/assets/scss/components/misc.scss b/src/assets/scss/components/misc.scss index 0b01490..d71840d 100644 --- a/src/assets/scss/components/misc.scss +++ b/src/assets/scss/components/misc.scss @@ -46,6 +46,14 @@ } } +.p-accordion { + width: 100%; +} + +.p-steps .p-steps-item.p-highlight .p-steps-number { + background: var(--theme-highlight-background); + color: var(--primary-text); +} .mb-2 { diff --git a/src/assets/scss/components/pageBando.scss b/src/assets/scss/components/pageBando.scss index df41696..6522e82 100644 --- a/src/assets/scss/components/pageBando.scss +++ b/src/assets/scss/components/pageBando.scss @@ -3,10 +3,6 @@ gap: 14px; align-items: flex-end; - .appForm__field { - width: 100%; - } - button { flex: 0 0 auto; } diff --git a/src/assets/scss/theme.scss b/src/assets/scss/theme.scss index 190ee23..37289c3 100644 --- a/src/assets/scss/theme.scss +++ b/src/assets/scss/theme.scss @@ -13,6 +13,8 @@ --button-secondary-borderColor: #C79807; --button-secondary-background: var(--menu-borderColor); --global-textColor: #4B5563; + --theme-highlight-background: #BADEBE; + --primary-text: #3B7C43; --card-full-background-color-2: #EEC137; --card-full-background-color-3: #FA8E42; diff --git a/src/components/FormField/components/TextArea/index.js b/src/components/FormField/components/TextArea/index.js index 1bf00c8..89d113c 100644 --- a/src/components/FormField/components/TextArea/index.js +++ b/src/components/FormField/components/TextArea/index.js @@ -4,14 +4,15 @@ import { Controller } from 'react-hook-form'; import { InputTextarea } from 'primereact/inputtextarea'; const TextArea = ({ - fieldName, - label, - control, - errors, - defaultValue, - config = {}, - infoText = null - }) => { + fieldName, + label, + control, + rows = 4, + errors, + defaultValue, + config = {}, + infoText = null + }) => { return ( <>