diff --git a/.github/labeler.yml b/.github/labeler.yml index e47f5f5b9bb..bca8b139d67 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -43,7 +43,7 @@ User dashboard: ⚙️ Settings: - changed-files: - - any-glob-to-any-file: 'src/views/UserSettings.vue' + - any-glob-to-any-file: 'src/views/Settings.vue' Action menus: - changed-files: diff --git a/CHANGELOG.md b/CHANGELOG.md index fdf47d10caa..5b3986fd8d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [1.112.2](https://github.com/openfoodfacts/open-prices-frontend/compare/v1.112.1...v1.112.2) (2025-01-15) + + +### Bug Fixes + +* **Price add multiple:** fix hide ProofCard close button in the top-right. ref [#1254](https://github.com/openfoodfacts/open-prices-frontend/issues/1254) ([d2a94d5](https://github.com/openfoodfacts/open-prices-frontend/commit/d2a94d5fde7969020af6d80b2f3c58e01c56a3c1)) + + +### Technical + +* **Contribution assistant:** button block on mobile. Small fixes. ref [#1271](https://github.com/openfoodfacts/open-prices-frontend/issues/1271) ([ae34c0a](https://github.com/openfoodfacts/open-prices-frontend/commit/ae34c0a787c9bf657c040899431ffa6c91b0a131)) +* **User dashboard:** remove unused UserSettings page. ref [#950](https://github.com/openfoodfacts/open-prices-frontend/issues/950) ([c78bb03](https://github.com/openfoodfacts/open-prices-frontend/commit/c78bb03b4f265b3ff392b313855faf3d49183795)) +* **User dashboard:** Use 'My dashboard' wording instead of 'Dashboard' ([dea64ba](https://github.com/openfoodfacts/open-prices-frontend/commit/dea64bacd9cadf234f0839be28a7de2b9c64799c)) + ## [1.112.1](https://github.com/openfoodfacts/open-prices-frontend/compare/v1.112.0...v1.112.1) (2025-01-15) diff --git a/src/components/Header.vue b/src/components/Header.vue index 0028c201961..5f79c5e07d3 100644 --- a/src/components/Header.vue +++ b/src/components/Header.vue @@ -23,8 +23,8 @@ diff --git a/src/components/PriceAlreadyUploadedListCard.vue b/src/components/PriceAlreadyUploadedListCard.vue index 4f5bef09af6..8aebfb78686 100644 --- a/src/components/PriceAlreadyUploadedListCard.vue +++ b/src/components/PriceAlreadyUploadedListCard.vue @@ -77,7 +77,7 @@ export default { }, proofPriceUploadedListSum() { return this.proofPriceUploadedList.reduce((acc, priceUploaded) => { - return acc + parseFloat(priceUploaded.price)*parseInt(priceUploaded.receipt_quantity) + return acc + parseFloat(priceUploaded.price)*parseFloat(priceUploaded.receipt_quantity) }, 0) } }, diff --git a/src/components/PriceInputRow.vue b/src/components/PriceInputRow.vue index 3c3fbcefce0..afd3b2453df 100644 --- a/src/components/PriceInputRow.vue +++ b/src/components/PriceInputRow.vue @@ -64,7 +64,7 @@ density="compact" :label="$t('Common.QuantityBought')" type="text" - inputmode="numeric" + inputmode="decimal" :rules="receiptQuantityRules" :prepend-inner-icon="PROOF_TYPE_RECEIPT_ICON" hide-details="auto" @@ -143,7 +143,8 @@ export default { if (!this.priceForm.receipt_quantity) return [() => true] // optional field return [ value => !isNaN(value) || this.$t('PriceRules.Number'), - value => Number(value) >= 1 || this.$t('PriceRules.Positive'), + value => Number(value) >= 0 || this.$t('PriceRules.Positive'), + value => !value.match(/\.\d{3}/) || this.$t('PriceRules.TwoDecimals'), ] }, productIsTypeCategory() { diff --git a/src/components/PricePriceRow.vue b/src/components/PricePriceRow.vue index bd55b7450a5..99eff78bb87 100644 --- a/src/components/PricePriceRow.vue +++ b/src/components/PricePriceRow.vue @@ -9,7 +9,7 @@ {{ $t('PriceCard.FullPrice') }} {{ getPriceValueDisplay(price.price_without_discount) }} - + x{{ price.receipt_quantity }} diff --git a/src/router.js b/src/router.js index 0beb0eb4bba..19ec9ef46ed 100644 --- a/src/router.js +++ b/src/router.js @@ -6,10 +6,9 @@ import localeManager from './i18n/localeManager.js' const routes = [ { path: '/', name: 'home', component: () => import('./views/Home.vue'), meta: { title: 'Home', icon: 'mdi-home', drawerMenu: true } }, { path: '/sign-in', name: 'sign-in', component: () => import('./views/SignIn.vue'), meta: { title: 'SignIn', icon: 'mdi-login', drawerMenu: true, requiresAuth: false, breadcrumbs: [{title: 'SignIn', disabled: true }] } }, - { path: '/dashboard', name: 'dashboard', component: () => import('./views/UserDashboard.vue'), meta: { title: 'Dashboard', icon: 'mdi-account-circle', drawerMenu: true, requiresAuth: true, breadcrumbs: [{title: 'Dashboard', disabled: true }] } }, - { path: '/dashboard/prices', name: 'dashboard-prices', component: () => import('./views/UserDashboardPriceList.vue'), meta: { title: 'MyPrices', requiresAuth: true, breadcrumbs: [{title: 'Dashboard', disabled: false, to: '/dashboard' }, {title: 'MyPrices', disabled: true}] } }, - { path: '/dashboard/proofs', name: 'dashboard-proofs', component: () => import('./views/UserDashboardProofList.vue'), meta: { title: 'MyProofs', requiresAuth: true, breadcrumbs: [{title: 'Dashboard', disabled: false, to: '/dashboard' }, {title: 'MyProofs', disabled: true}] } }, - { path: '/dashboard/settings', name: 'dashboard-settings', component: () => import('./views/UserSettings.vue'), meta: { title: 'Settings', requiresAuth: true, breadcrumbs: [{title: 'Settings', disabled: true }] } }, // not used anymore + { path: '/dashboard', name: 'dashboard', component: () => import('./views/UserDashboard.vue'), meta: { title: 'MyDashboard', icon: 'mdi-account-circle', drawerMenu: true, requiresAuth: true, breadcrumbs: [{title: 'MyDashboard', disabled: true }] } }, + { path: '/dashboard/prices', name: 'dashboard-prices', component: () => import('./views/UserDashboardPriceList.vue'), meta: { title: 'MyPrices', requiresAuth: true, breadcrumbs: [{title: 'MyDashboard', disabled: false, to: '/dashboard' }, {title: 'MyPrices', disabled: true}] } }, + { path: '/dashboard/proofs', name: 'dashboard-proofs', component: () => import('./views/UserDashboardProofList.vue'), meta: { title: 'MyProofs', requiresAuth: true, breadcrumbs: [{title: 'MyDashboard', disabled: false, to: '/dashboard' }, {title: 'MyProofs', disabled: true}] } }, { path: '/prices/add', name: 'add-price', component: () => import('./views/PriceAddHome.vue'), meta: { title: 'AddPrice', requiresAuth: true, breadcrumbs: [{title: 'AddPrice', disabled: true }] }}, // not used anymore { path: '/prices/add/single', name: 'price-add-single', component: () => import('./views/PriceAddSingle.vue'), meta: { title: 'Add a single price (price tag)', icon: 'mdi-tag-plus-outline', requiresAuth: true, breadcrumbs: [{title: 'Experiments', disabled: false, to: '/experiments' }, {title: 'PriceAddSingle', disabled: true }] }}, { path: '/prices/add/multiple', name: 'price-add-multiple', component: () => import('./views/PriceAddMultiple.vue'), meta: { title: 'AddPrices', icon: 'mdi-tag-plus-outline', drawerMenu: true, requiresAuth: true, breadcrumbs: [{title: 'AddPrices', disabled: true }] }}, diff --git a/src/views/ContributionAssistant.vue b/src/views/ContributionAssistant.vue index 211748b582e..dac910da129 100644 --- a/src/views/ContributionAssistant.vue +++ b/src/views/ContributionAssistant.vue @@ -57,11 +57,11 @@ - +

{{ $t('ContributionAssistant.LabelsExtractionSteps.SendLabels') }}

- + {{ $t('ContributionAssistant.LabelsExtractionSteps.SendLabelsButton') }}
@@ -106,7 +106,7 @@ {{ $t('ContributionAssistant.PriceAddConfirmationMessage', { numberOfPricesAdded: productPriceFormsWithoutPriceId.length, date: proofObject.date, locationName: locationName }) }}

- + {{ $t('Common.UploadMultiplePrices', productPriceFormsWithoutPriceId.length) }}
@@ -129,19 +129,29 @@ > {{ $t('ContributionAssistant.PriceAddProgress', { numberOfPricesAdded: numberOfPricesAdded, totalNumberOfPrices: productPriceFormsWithoutPriceId.length }) }} - - {{ $t('ContributionAssistant.GoToDashboard') }} - - + +
+ + + {{ $t('ContributionAssistant.GoToProof') }} - + + + {{ $t('ContributionAssistant.AddNewProof') }} - + + + {{ $t('ContributionAssistant.NextProof') }} + + + {{ $t('ContributionAssistant.GoToDashboard') }} + + diff --git a/src/views/PriceAddMultiple.vue b/src/views/PriceAddMultiple.vue index f8d1b047f83..f7f6add34b4 100644 --- a/src/views/PriceAddMultiple.vue +++ b/src/views/PriceAddMultiple.vue @@ -22,7 +22,7 @@ - + @@ -129,9 +129,9 @@ color="primary" :block="!$vuetify.display.smAndUp" prepend-icon="mdi-account-circle" - @click="goToDashboard" + @click="goToUserDashboard" > - {{ $t('Common.Dashboard') }} + {{ $t('Common.MyDashboard') }} @@ -316,7 +316,7 @@ export default { reloadPage() { window.location.reload() }, - goToDashboard() { + goToUserDashboard() { this.$router.push({ path: '/dashboard', query: { multipleSuccess: 'true' } }) } } diff --git a/src/views/PriceAddSingle.vue b/src/views/PriceAddSingle.vue index a9f2fb31bff..dfc0490e369 100644 --- a/src/views/PriceAddSingle.vue +++ b/src/views/PriceAddSingle.vue @@ -130,7 +130,7 @@ export default { if (!data['id']) { alert(`Form error: ${JSON.stringify(data)}`) } else { - this.goToDashboard() + this.goToUserDashboard() } this.loading = false }) @@ -140,7 +140,7 @@ export default { this.loading = false }) }, - goToDashboard() { + goToUserDashboard() { this.$router.push({ path: '/dashboard', query: { singleSuccess: 'true' } }) } } diff --git a/src/views/ProofAddMultiple.vue b/src/views/ProofAddMultiple.vue index 3b7a88160bb..29d5d9ce64b 100644 --- a/src/views/ProofAddMultiple.vue +++ b/src/views/ProofAddMultiple.vue @@ -55,9 +55,9 @@ color="primary" :block="!$vuetify.display.smAndUp" prepend-icon="mdi-account-circle" - @click="goToDashboard" + @click="goToUserDashboard" > - {{ $t('Common.Dashboard') }} + {{ $t('Common.MyDashboard') }} @@ -101,7 +101,7 @@ export default { reloadPage() { window.location.reload() }, - goToDashboard() { + goToUserDashboard() { this.$router.push({ path: '/dashboard', query: { proofSingleSuccess: 'true' } }) } } diff --git a/src/views/ProofAddSingle.vue b/src/views/ProofAddSingle.vue index 0d97fd64f73..86fb908ff7a 100644 --- a/src/views/ProofAddSingle.vue +++ b/src/views/ProofAddSingle.vue @@ -41,9 +41,9 @@ color="primary" :block="!$vuetify.display.smAndUp" prepend-icon="mdi-account-circle" - @click="goToDashboard" + @click="goToUserDashboard" > - {{ $t('Common.Dashboard') }} + {{ $t('Common.MyDashboard') }} @@ -84,7 +84,7 @@ export default { reloadPage() { window.location.reload() }, - goToDashboard() { + goToUserDashboard() { this.$router.push({ path: '/dashboard', query: { proofSingleSuccess: 'true' } }) } } diff --git a/src/views/UserSettings.vue b/src/views/UserSettings.vue deleted file mode 100644 index 2f8a3317e38..00000000000 --- a/src/views/UserSettings.vue +++ /dev/null @@ -1,185 +0,0 @@ - - -