diff --git a/.github/workflows/theme-ci.yml b/.github/workflows/theme-ci.yml index acebe9fe94..82bd46d3e2 100644 --- a/.github/workflows/theme-ci.yml +++ b/.github/workflows/theme-ci.yml @@ -101,6 +101,15 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + - name: Check Locales + run: | + set -o pipefail + yarn check-locales 2>&1 | tee check-locales.log + if grep -q "Warning:" check-locales.log; then + echo "Locale check completed with warnings." + exit 1 + fi + - name: Build run: | yarn build diff --git a/README.md b/README.md index 1f05637365..82888eae3f 100644 --- a/README.md +++ b/README.md @@ -243,6 +243,13 @@ yarn generate:dependency-graph client-app/main.ts client-app/shared/account/comp ``` The generated graph will also be saved in the `artifacts` folder. +``` +yarn check-locales -- path/to/locales_folder path/to/**/locales +``` +The command is used to ensure that all locale files have consistent keys across different languages. This helps in maintaining uniformity and avoiding missing translations. + +The script will output warnings for any missing keys in the locale files. Review these warnings to ensure all necessary translations are present. Also added to the CI pipeline. + ### Troubleshooting If you encounter an error such as `dot command not found` on Windows, ensure that [Graphviz](https://graphviz.gitlab.io/download/) is installed on your system. diff --git a/client-app/public/static/icons/basic/academic-cap.svg b/client-app/assets/icons/basic/academic-cap.svg similarity index 100% rename from client-app/public/static/icons/basic/academic-cap.svg rename to client-app/assets/icons/basic/academic-cap.svg diff --git a/client-app/public/static/icons/basic/activate.svg b/client-app/assets/icons/basic/activate.svg similarity index 100% rename from client-app/public/static/icons/basic/activate.svg rename to client-app/assets/icons/basic/activate.svg diff --git a/client-app/public/static/icons/basic/add-circle.svg b/client-app/assets/icons/basic/add-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/add-circle.svg rename to client-app/assets/icons/basic/add-circle.svg diff --git a/client-app/public/static/icons/basic/adjustments.svg b/client-app/assets/icons/basic/adjustments.svg similarity index 100% rename from client-app/public/static/icons/basic/adjustments.svg rename to client-app/assets/icons/basic/adjustments.svg diff --git a/client-app/public/static/icons/basic/ai.svg b/client-app/assets/icons/basic/ai.svg similarity index 100% rename from client-app/public/static/icons/basic/ai.svg rename to client-app/assets/icons/basic/ai.svg diff --git a/client-app/public/static/icons/basic/annotation.svg b/client-app/assets/icons/basic/annotation.svg similarity index 100% rename from client-app/public/static/icons/basic/annotation.svg rename to client-app/assets/icons/basic/annotation.svg diff --git a/client-app/public/static/icons/basic/apply.svg b/client-app/assets/icons/basic/apply.svg similarity index 100% rename from client-app/public/static/icons/basic/apply.svg rename to client-app/assets/icons/basic/apply.svg diff --git a/client-app/public/static/icons/basic/archive.svg b/client-app/assets/icons/basic/archive.svg similarity index 100% rename from client-app/public/static/icons/basic/archive.svg rename to client-app/assets/icons/basic/archive.svg diff --git a/client-app/public/static/icons/basic/arrow-circle-down.svg b/client-app/assets/icons/basic/arrow-circle-down.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-circle-down.svg rename to client-app/assets/icons/basic/arrow-circle-down.svg diff --git a/client-app/public/static/icons/basic/arrow-circle-left.svg b/client-app/assets/icons/basic/arrow-circle-left.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-circle-left.svg rename to client-app/assets/icons/basic/arrow-circle-left.svg diff --git a/client-app/public/static/icons/basic/arrow-circle-right.svg b/client-app/assets/icons/basic/arrow-circle-right.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-circle-right.svg rename to client-app/assets/icons/basic/arrow-circle-right.svg diff --git a/client-app/public/static/icons/basic/arrow-circle-up.svg b/client-app/assets/icons/basic/arrow-circle-up.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-circle-up.svg rename to client-app/assets/icons/basic/arrow-circle-up.svg diff --git a/client-app/public/static/icons/basic/arrow-down.svg b/client-app/assets/icons/basic/arrow-down.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-down.svg rename to client-app/assets/icons/basic/arrow-down.svg diff --git a/client-app/public/static/icons/basic/arrow-left-bold.svg b/client-app/assets/icons/basic/arrow-left-bold.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-left-bold.svg rename to client-app/assets/icons/basic/arrow-left-bold.svg diff --git a/client-app/public/static/icons/basic/arrow-left.svg b/client-app/assets/icons/basic/arrow-left.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-left.svg rename to client-app/assets/icons/basic/arrow-left.svg diff --git a/client-app/public/static/icons/basic/arrow-narrow-down.svg b/client-app/assets/icons/basic/arrow-narrow-down.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-narrow-down.svg rename to client-app/assets/icons/basic/arrow-narrow-down.svg diff --git a/client-app/public/static/icons/basic/arrow-narrow-left.svg b/client-app/assets/icons/basic/arrow-narrow-left.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-narrow-left.svg rename to client-app/assets/icons/basic/arrow-narrow-left.svg diff --git a/client-app/public/static/icons/basic/arrow-narrow-right.svg b/client-app/assets/icons/basic/arrow-narrow-right.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-narrow-right.svg rename to client-app/assets/icons/basic/arrow-narrow-right.svg diff --git a/client-app/public/static/icons/basic/arrow-narrow-up.svg b/client-app/assets/icons/basic/arrow-narrow-up.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-narrow-up.svg rename to client-app/assets/icons/basic/arrow-narrow-up.svg diff --git a/client-app/public/static/icons/basic/arrow-right.svg b/client-app/assets/icons/basic/arrow-right.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-right.svg rename to client-app/assets/icons/basic/arrow-right.svg diff --git a/client-app/public/static/icons/basic/arrow-up.svg b/client-app/assets/icons/basic/arrow-up.svg similarity index 100% rename from client-app/public/static/icons/basic/arrow-up.svg rename to client-app/assets/icons/basic/arrow-up.svg diff --git a/client-app/public/static/icons/basic/arrows-expand.svg b/client-app/assets/icons/basic/arrows-expand.svg similarity index 100% rename from client-app/public/static/icons/basic/arrows-expand.svg rename to client-app/assets/icons/basic/arrows-expand.svg diff --git a/client-app/public/static/icons/basic/at-symbol.svg b/client-app/assets/icons/basic/at-symbol.svg similarity index 100% rename from client-app/public/static/icons/basic/at-symbol.svg rename to client-app/assets/icons/basic/at-symbol.svg diff --git a/client-app/public/static/icons/basic/backspace.svg b/client-app/assets/icons/basic/backspace.svg similarity index 100% rename from client-app/public/static/icons/basic/backspace.svg rename to client-app/assets/icons/basic/backspace.svg diff --git a/client-app/public/static/icons/basic/badge-check.svg b/client-app/assets/icons/basic/badge-check.svg similarity index 100% rename from client-app/public/static/icons/basic/badge-check.svg rename to client-app/assets/icons/basic/badge-check.svg diff --git a/client-app/public/static/icons/basic/ban.svg b/client-app/assets/icons/basic/ban.svg similarity index 100% rename from client-app/public/static/icons/basic/ban.svg rename to client-app/assets/icons/basic/ban.svg diff --git a/client-app/public/static/icons/basic/beaker.svg b/client-app/assets/icons/basic/beaker.svg similarity index 100% rename from client-app/public/static/icons/basic/beaker.svg rename to client-app/assets/icons/basic/beaker.svg diff --git a/client-app/public/static/icons/basic/book-open.svg b/client-app/assets/icons/basic/book-open.svg similarity index 100% rename from client-app/public/static/icons/basic/book-open.svg rename to client-app/assets/icons/basic/book-open.svg diff --git a/client-app/public/static/icons/basic/bookmark-alt.svg b/client-app/assets/icons/basic/bookmark-alt.svg similarity index 100% rename from client-app/public/static/icons/basic/bookmark-alt.svg rename to client-app/assets/icons/basic/bookmark-alt.svg diff --git a/client-app/public/static/icons/basic/bookmark.svg b/client-app/assets/icons/basic/bookmark.svg similarity index 100% rename from client-app/public/static/icons/basic/bookmark.svg rename to client-app/assets/icons/basic/bookmark.svg diff --git a/client-app/public/static/icons/basic/bulk.svg b/client-app/assets/icons/basic/bulk.svg similarity index 100% rename from client-app/public/static/icons/basic/bulk.svg rename to client-app/assets/icons/basic/bulk.svg diff --git a/client-app/public/static/icons/basic/cake.svg b/client-app/assets/icons/basic/cake.svg similarity index 100% rename from client-app/public/static/icons/basic/cake.svg rename to client-app/assets/icons/basic/cake.svg diff --git a/client-app/public/static/icons/basic/calculator.svg b/client-app/assets/icons/basic/calculator.svg similarity index 100% rename from client-app/public/static/icons/basic/calculator.svg rename to client-app/assets/icons/basic/calculator.svg diff --git a/client-app/public/static/icons/basic/calendar.svg b/client-app/assets/icons/basic/calendar.svg similarity index 100% rename from client-app/public/static/icons/basic/calendar.svg rename to client-app/assets/icons/basic/calendar.svg diff --git a/client-app/public/static/icons/basic/camera.svg b/client-app/assets/icons/basic/camera.svg similarity index 100% rename from client-app/public/static/icons/basic/camera.svg rename to client-app/assets/icons/basic/camera.svg diff --git a/client-app/public/static/icons/basic/cart-2.svg b/client-app/assets/icons/basic/cart-2.svg similarity index 100% rename from client-app/public/static/icons/basic/cart-2.svg rename to client-app/assets/icons/basic/cart-2.svg diff --git a/client-app/public/static/icons/basic/cart.svg b/client-app/assets/icons/basic/cart.svg similarity index 100% rename from client-app/public/static/icons/basic/cart.svg rename to client-app/assets/icons/basic/cart.svg diff --git a/client-app/public/static/icons/basic/case.svg b/client-app/assets/icons/basic/case.svg similarity index 100% rename from client-app/public/static/icons/basic/case.svg rename to client-app/assets/icons/basic/case.svg diff --git a/client-app/public/static/icons/basic/cash.svg b/client-app/assets/icons/basic/cash.svg similarity index 100% rename from client-app/public/static/icons/basic/cash.svg rename to client-app/assets/icons/basic/cash.svg diff --git a/client-app/public/static/icons/basic/chart-bar.svg b/client-app/assets/icons/basic/chart-bar.svg similarity index 100% rename from client-app/public/static/icons/basic/chart-bar.svg rename to client-app/assets/icons/basic/chart-bar.svg diff --git a/client-app/public/static/icons/basic/chart-pie.svg b/client-app/assets/icons/basic/chart-pie.svg similarity index 100% rename from client-app/public/static/icons/basic/chart-pie.svg rename to client-app/assets/icons/basic/chart-pie.svg diff --git a/client-app/public/static/icons/basic/chart-square-bar.svg b/client-app/assets/icons/basic/chart-square-bar.svg similarity index 100% rename from client-app/public/static/icons/basic/chart-square-bar.svg rename to client-app/assets/icons/basic/chart-square-bar.svg diff --git a/client-app/public/static/icons/basic/chat-alt-2.svg b/client-app/assets/icons/basic/chat-alt-2.svg similarity index 100% rename from client-app/public/static/icons/basic/chat-alt-2.svg rename to client-app/assets/icons/basic/chat-alt-2.svg diff --git a/client-app/public/static/icons/basic/chat-alt.svg b/client-app/assets/icons/basic/chat-alt.svg similarity index 100% rename from client-app/public/static/icons/basic/chat-alt.svg rename to client-app/assets/icons/basic/chat-alt.svg diff --git a/client-app/public/static/icons/basic/chat.svg b/client-app/assets/icons/basic/chat.svg similarity index 100% rename from client-app/public/static/icons/basic/chat.svg rename to client-app/assets/icons/basic/chat.svg diff --git a/client-app/public/static/icons/basic/check-bold.svg b/client-app/assets/icons/basic/check-bold.svg similarity index 100% rename from client-app/public/static/icons/basic/check-bold.svg rename to client-app/assets/icons/basic/check-bold.svg diff --git a/client-app/public/static/icons/basic/check-circle.svg b/client-app/assets/icons/basic/check-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/check-circle.svg rename to client-app/assets/icons/basic/check-circle.svg diff --git a/client-app/public/static/icons/basic/check.svg b/client-app/assets/icons/basic/check.svg similarity index 100% rename from client-app/public/static/icons/basic/check.svg rename to client-app/assets/icons/basic/check.svg diff --git a/client-app/public/static/icons/basic/chevron-double-down.svg b/client-app/assets/icons/basic/chevron-double-down.svg similarity index 100% rename from client-app/public/static/icons/basic/chevron-double-down.svg rename to client-app/assets/icons/basic/chevron-double-down.svg diff --git a/client-app/public/static/icons/basic/chevron-double-left.svg b/client-app/assets/icons/basic/chevron-double-left.svg similarity index 100% rename from client-app/public/static/icons/basic/chevron-double-left.svg rename to client-app/assets/icons/basic/chevron-double-left.svg diff --git a/client-app/public/static/icons/basic/chevron-double-right.svg b/client-app/assets/icons/basic/chevron-double-right.svg similarity index 100% rename from client-app/public/static/icons/basic/chevron-double-right.svg rename to client-app/assets/icons/basic/chevron-double-right.svg diff --git a/client-app/public/static/icons/basic/chevron-double-up.svg b/client-app/assets/icons/basic/chevron-double-up.svg similarity index 100% rename from client-app/public/static/icons/basic/chevron-double-up.svg rename to client-app/assets/icons/basic/chevron-double-up.svg diff --git a/client-app/public/static/icons/basic/chevron-down.svg b/client-app/assets/icons/basic/chevron-down.svg similarity index 100% rename from client-app/public/static/icons/basic/chevron-down.svg rename to client-app/assets/icons/basic/chevron-down.svg diff --git a/client-app/public/static/icons/basic/chevron-left.svg b/client-app/assets/icons/basic/chevron-left.svg similarity index 100% rename from client-app/public/static/icons/basic/chevron-left.svg rename to client-app/assets/icons/basic/chevron-left.svg diff --git a/client-app/public/static/icons/basic/chevron-right.svg b/client-app/assets/icons/basic/chevron-right.svg similarity index 100% rename from client-app/public/static/icons/basic/chevron-right.svg rename to client-app/assets/icons/basic/chevron-right.svg diff --git a/client-app/public/static/icons/basic/chevron-up.svg b/client-app/assets/icons/basic/chevron-up.svg similarity index 100% rename from client-app/public/static/icons/basic/chevron-up.svg rename to client-app/assets/icons/basic/chevron-up.svg diff --git a/client-app/public/static/icons/basic/chip.svg b/client-app/assets/icons/basic/chip.svg similarity index 100% rename from client-app/public/static/icons/basic/chip.svg rename to client-app/assets/icons/basic/chip.svg diff --git a/client-app/public/static/icons/basic/clear.svg b/client-app/assets/icons/basic/clear.svg similarity index 100% rename from client-app/public/static/icons/basic/clear.svg rename to client-app/assets/icons/basic/clear.svg diff --git a/client-app/public/static/icons/basic/clipboard-arrow.svg b/client-app/assets/icons/basic/clipboard-arrow.svg similarity index 100% rename from client-app/public/static/icons/basic/clipboard-arrow.svg rename to client-app/assets/icons/basic/clipboard-arrow.svg diff --git a/client-app/public/static/icons/basic/clipboard-check.svg b/client-app/assets/icons/basic/clipboard-check.svg similarity index 100% rename from client-app/public/static/icons/basic/clipboard-check.svg rename to client-app/assets/icons/basic/clipboard-check.svg diff --git a/client-app/public/static/icons/basic/clipboard-list.svg b/client-app/assets/icons/basic/clipboard-list.svg similarity index 100% rename from client-app/public/static/icons/basic/clipboard-list.svg rename to client-app/assets/icons/basic/clipboard-list.svg diff --git a/client-app/public/static/icons/basic/clipboard.svg b/client-app/assets/icons/basic/clipboard.svg similarity index 100% rename from client-app/public/static/icons/basic/clipboard.svg rename to client-app/assets/icons/basic/clipboard.svg diff --git a/client-app/public/static/icons/basic/clock.svg b/client-app/assets/icons/basic/clock.svg similarity index 100% rename from client-app/public/static/icons/basic/clock.svg rename to client-app/assets/icons/basic/clock.svg diff --git a/client-app/public/static/icons/basic/cloud-download.svg b/client-app/assets/icons/basic/cloud-download.svg similarity index 100% rename from client-app/public/static/icons/basic/cloud-download.svg rename to client-app/assets/icons/basic/cloud-download.svg diff --git a/client-app/public/static/icons/basic/cloud-upload.svg b/client-app/assets/icons/basic/cloud-upload.svg similarity index 100% rename from client-app/public/static/icons/basic/cloud-upload.svg rename to client-app/assets/icons/basic/cloud-upload.svg diff --git a/client-app/public/static/icons/basic/cloud.svg b/client-app/assets/icons/basic/cloud.svg similarity index 100% rename from client-app/public/static/icons/basic/cloud.svg rename to client-app/assets/icons/basic/cloud.svg diff --git a/client-app/public/static/icons/basic/code.svg b/client-app/assets/icons/basic/code.svg similarity index 100% rename from client-app/public/static/icons/basic/code.svg rename to client-app/assets/icons/basic/code.svg diff --git a/client-app/public/static/icons/basic/cog.svg b/client-app/assets/icons/basic/cog.svg similarity index 100% rename from client-app/public/static/icons/basic/cog.svg rename to client-app/assets/icons/basic/cog.svg diff --git a/client-app/public/static/icons/basic/collection.svg b/client-app/assets/icons/basic/collection.svg similarity index 100% rename from client-app/public/static/icons/basic/collection.svg rename to client-app/assets/icons/basic/collection.svg diff --git a/client-app/public/static/icons/basic/color-swatch.svg b/client-app/assets/icons/basic/color-swatch.svg similarity index 100% rename from client-app/public/static/icons/basic/color-swatch.svg rename to client-app/assets/icons/basic/color-swatch.svg diff --git a/client-app/public/static/icons/basic/compare.svg b/client-app/assets/icons/basic/compare.svg similarity index 100% rename from client-app/public/static/icons/basic/compare.svg rename to client-app/assets/icons/basic/compare.svg diff --git a/client-app/public/static/icons/basic/credit-card.svg b/client-app/assets/icons/basic/credit-card.svg similarity index 100% rename from client-app/public/static/icons/basic/credit-card.svg rename to client-app/assets/icons/basic/credit-card.svg diff --git a/client-app/public/static/icons/basic/cube-transparent.svg b/client-app/assets/icons/basic/cube-transparent.svg similarity index 100% rename from client-app/public/static/icons/basic/cube-transparent.svg rename to client-app/assets/icons/basic/cube-transparent.svg diff --git a/client-app/public/static/icons/basic/cube.svg b/client-app/assets/icons/basic/cube.svg similarity index 100% rename from client-app/public/static/icons/basic/cube.svg rename to client-app/assets/icons/basic/cube.svg diff --git a/client-app/public/static/icons/basic/cup.svg b/client-app/assets/icons/basic/cup.svg similarity index 100% rename from client-app/public/static/icons/basic/cup.svg rename to client-app/assets/icons/basic/cup.svg diff --git a/client-app/public/static/icons/basic/currency-dollar.svg b/client-app/assets/icons/basic/currency-dollar.svg similarity index 100% rename from client-app/public/static/icons/basic/currency-dollar.svg rename to client-app/assets/icons/basic/currency-dollar.svg diff --git a/client-app/public/static/icons/basic/currency-euro.svg b/client-app/assets/icons/basic/currency-euro.svg similarity index 100% rename from client-app/public/static/icons/basic/currency-euro.svg rename to client-app/assets/icons/basic/currency-euro.svg diff --git a/client-app/public/static/icons/basic/currency-frank.svg b/client-app/assets/icons/basic/currency-frank.svg similarity index 100% rename from client-app/public/static/icons/basic/currency-frank.svg rename to client-app/assets/icons/basic/currency-frank.svg diff --git a/client-app/public/static/icons/basic/currency-pound.svg b/client-app/assets/icons/basic/currency-pound.svg similarity index 100% rename from client-app/public/static/icons/basic/currency-pound.svg rename to client-app/assets/icons/basic/currency-pound.svg diff --git a/client-app/public/static/icons/basic/currency-rupee.svg b/client-app/assets/icons/basic/currency-rupee.svg similarity index 100% rename from client-app/public/static/icons/basic/currency-rupee.svg rename to client-app/assets/icons/basic/currency-rupee.svg diff --git a/client-app/public/static/icons/basic/currency-yen.svg b/client-app/assets/icons/basic/currency-yen.svg similarity index 100% rename from client-app/public/static/icons/basic/currency-yen.svg rename to client-app/assets/icons/basic/currency-yen.svg diff --git a/client-app/public/static/icons/basic/cursor-click.svg b/client-app/assets/icons/basic/cursor-click.svg similarity index 100% rename from client-app/public/static/icons/basic/cursor-click.svg rename to client-app/assets/icons/basic/cursor-click.svg diff --git a/client-app/public/static/icons/basic/cut.svg b/client-app/assets/icons/basic/cut.svg similarity index 100% rename from client-app/public/static/icons/basic/cut.svg rename to client-app/assets/icons/basic/cut.svg diff --git a/client-app/public/static/icons/basic/dashboard-2.svg b/client-app/assets/icons/basic/dashboard-2.svg similarity index 100% rename from client-app/public/static/icons/basic/dashboard-2.svg rename to client-app/assets/icons/basic/dashboard-2.svg diff --git a/client-app/public/static/icons/basic/database.svg b/client-app/assets/icons/basic/database.svg similarity index 100% rename from client-app/public/static/icons/basic/database.svg rename to client-app/assets/icons/basic/database.svg diff --git a/client-app/public/static/icons/basic/delete-2.svg b/client-app/assets/icons/basic/delete-2.svg similarity index 100% rename from client-app/public/static/icons/basic/delete-2.svg rename to client-app/assets/icons/basic/delete-2.svg diff --git a/client-app/public/static/icons/basic/delete-thin.svg b/client-app/assets/icons/basic/delete-thin.svg similarity index 100% rename from client-app/public/static/icons/basic/delete-thin.svg rename to client-app/assets/icons/basic/delete-thin.svg diff --git a/client-app/public/static/icons/basic/delete.svg b/client-app/assets/icons/basic/delete.svg similarity index 100% rename from client-app/public/static/icons/basic/delete.svg rename to client-app/assets/icons/basic/delete.svg diff --git a/client-app/public/static/icons/basic/desktop-computer.svg b/client-app/assets/icons/basic/desktop-computer.svg similarity index 100% rename from client-app/public/static/icons/basic/desktop-computer.svg rename to client-app/assets/icons/basic/desktop-computer.svg diff --git a/client-app/public/static/icons/basic/device-mobile.svg b/client-app/assets/icons/basic/device-mobile.svg similarity index 100% rename from client-app/public/static/icons/basic/device-mobile.svg rename to client-app/assets/icons/basic/device-mobile.svg diff --git a/client-app/public/static/icons/basic/device-tablet.svg b/client-app/assets/icons/basic/device-tablet.svg similarity index 100% rename from client-app/public/static/icons/basic/device-tablet.svg rename to client-app/assets/icons/basic/device-tablet.svg diff --git a/client-app/public/static/icons/basic/direct-login.svg b/client-app/assets/icons/basic/direct-login.svg similarity index 100% rename from client-app/public/static/icons/basic/direct-login.svg rename to client-app/assets/icons/basic/direct-login.svg diff --git a/client-app/public/static/icons/basic/document-add.svg b/client-app/assets/icons/basic/document-add.svg similarity index 100% rename from client-app/public/static/icons/basic/document-add.svg rename to client-app/assets/icons/basic/document-add.svg diff --git a/client-app/public/static/icons/basic/document-download.svg b/client-app/assets/icons/basic/document-download.svg similarity index 100% rename from client-app/public/static/icons/basic/document-download.svg rename to client-app/assets/icons/basic/document-download.svg diff --git a/client-app/public/static/icons/basic/document-duplicate.svg b/client-app/assets/icons/basic/document-duplicate.svg similarity index 100% rename from client-app/public/static/icons/basic/document-duplicate.svg rename to client-app/assets/icons/basic/document-duplicate.svg diff --git a/client-app/public/static/icons/basic/document-remove.svg b/client-app/assets/icons/basic/document-remove.svg similarity index 100% rename from client-app/public/static/icons/basic/document-remove.svg rename to client-app/assets/icons/basic/document-remove.svg diff --git a/client-app/public/static/icons/basic/document-report.svg b/client-app/assets/icons/basic/document-report.svg similarity index 100% rename from client-app/public/static/icons/basic/document-report.svg rename to client-app/assets/icons/basic/document-report.svg diff --git a/client-app/public/static/icons/basic/document-search.svg b/client-app/assets/icons/basic/document-search.svg similarity index 100% rename from client-app/public/static/icons/basic/document-search.svg rename to client-app/assets/icons/basic/document-search.svg diff --git a/client-app/public/static/icons/basic/document-text.svg b/client-app/assets/icons/basic/document-text.svg similarity index 100% rename from client-app/public/static/icons/basic/document-text.svg rename to client-app/assets/icons/basic/document-text.svg diff --git a/client-app/public/static/icons/basic/document.svg b/client-app/assets/icons/basic/document.svg similarity index 100% rename from client-app/public/static/icons/basic/document.svg rename to client-app/assets/icons/basic/document.svg diff --git a/client-app/public/static/icons/basic/dots-circle-horizontal.svg b/client-app/assets/icons/basic/dots-circle-horizontal.svg similarity index 100% rename from client-app/public/static/icons/basic/dots-circle-horizontal.svg rename to client-app/assets/icons/basic/dots-circle-horizontal.svg diff --git a/client-app/public/static/icons/basic/dots-horizontal.svg b/client-app/assets/icons/basic/dots-horizontal.svg similarity index 100% rename from client-app/public/static/icons/basic/dots-horizontal.svg rename to client-app/assets/icons/basic/dots-horizontal.svg diff --git a/client-app/public/static/icons/basic/dots-vertical.svg b/client-app/assets/icons/basic/dots-vertical.svg similarity index 100% rename from client-app/public/static/icons/basic/dots-vertical.svg rename to client-app/assets/icons/basic/dots-vertical.svg diff --git a/client-app/public/static/icons/basic/download.svg b/client-app/assets/icons/basic/download.svg similarity index 100% rename from client-app/public/static/icons/basic/download.svg rename to client-app/assets/icons/basic/download.svg diff --git a/client-app/public/static/icons/basic/drag-dots.svg b/client-app/assets/icons/basic/drag-dots.svg similarity index 100% rename from client-app/public/static/icons/basic/drag-dots.svg rename to client-app/assets/icons/basic/drag-dots.svg diff --git a/client-app/public/static/icons/basic/drag.svg b/client-app/assets/icons/basic/drag.svg similarity index 100% rename from client-app/public/static/icons/basic/drag.svg rename to client-app/assets/icons/basic/drag.svg diff --git a/client-app/public/static/icons/basic/duplicate.svg b/client-app/assets/icons/basic/duplicate.svg similarity index 100% rename from client-app/public/static/icons/basic/duplicate.svg rename to client-app/assets/icons/basic/duplicate.svg diff --git a/client-app/public/static/icons/basic/edit.svg b/client-app/assets/icons/basic/edit.svg similarity index 100% rename from client-app/public/static/icons/basic/edit.svg rename to client-app/assets/icons/basic/edit.svg diff --git a/client-app/public/static/icons/basic/emoji-happy.svg b/client-app/assets/icons/basic/emoji-happy.svg similarity index 100% rename from client-app/public/static/icons/basic/emoji-happy.svg rename to client-app/assets/icons/basic/emoji-happy.svg diff --git a/client-app/public/static/icons/basic/emoji-sad.svg b/client-app/assets/icons/basic/emoji-sad.svg similarity index 100% rename from client-app/public/static/icons/basic/emoji-sad.svg rename to client-app/assets/icons/basic/emoji-sad.svg diff --git a/client-app/public/static/icons/basic/exclamation-circle.svg b/client-app/assets/icons/basic/exclamation-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/exclamation-circle.svg rename to client-app/assets/icons/basic/exclamation-circle.svg diff --git a/client-app/public/static/icons/basic/exclamation.svg b/client-app/assets/icons/basic/exclamation.svg similarity index 100% rename from client-app/public/static/icons/basic/exclamation.svg rename to client-app/assets/icons/basic/exclamation.svg diff --git a/client-app/public/static/icons/basic/expand.svg b/client-app/assets/icons/basic/expand.svg similarity index 100% rename from client-app/public/static/icons/basic/expand.svg rename to client-app/assets/icons/basic/expand.svg diff --git a/client-app/public/static/icons/basic/export.svg b/client-app/assets/icons/basic/export.svg similarity index 100% rename from client-app/public/static/icons/basic/export.svg rename to client-app/assets/icons/basic/export.svg diff --git a/client-app/public/static/icons/basic/external-link.svg b/client-app/assets/icons/basic/external-link.svg similarity index 100% rename from client-app/public/static/icons/basic/external-link.svg rename to client-app/assets/icons/basic/external-link.svg diff --git a/client-app/public/static/icons/basic/eye-off.svg b/client-app/assets/icons/basic/eye-off.svg similarity index 100% rename from client-app/public/static/icons/basic/eye-off.svg rename to client-app/assets/icons/basic/eye-off.svg diff --git a/client-app/public/static/icons/basic/eye.svg b/client-app/assets/icons/basic/eye.svg similarity index 100% rename from client-app/public/static/icons/basic/eye.svg rename to client-app/assets/icons/basic/eye.svg diff --git a/client-app/public/static/icons/basic/fast-forward.svg b/client-app/assets/icons/basic/fast-forward.svg similarity index 100% rename from client-app/public/static/icons/basic/fast-forward.svg rename to client-app/assets/icons/basic/fast-forward.svg diff --git a/client-app/public/static/icons/basic/filter.svg b/client-app/assets/icons/basic/filter.svg similarity index 100% rename from client-app/public/static/icons/basic/filter.svg rename to client-app/assets/icons/basic/filter.svg diff --git a/client-app/public/static/icons/basic/finger-print.svg b/client-app/assets/icons/basic/finger-print.svg similarity index 100% rename from client-app/public/static/icons/basic/finger-print.svg rename to client-app/assets/icons/basic/finger-print.svg diff --git a/client-app/public/static/icons/basic/fire.svg b/client-app/assets/icons/basic/fire.svg similarity index 100% rename from client-app/public/static/icons/basic/fire.svg rename to client-app/assets/icons/basic/fire.svg diff --git a/client-app/public/static/icons/basic/flag.svg b/client-app/assets/icons/basic/flag.svg similarity index 100% rename from client-app/public/static/icons/basic/flag.svg rename to client-app/assets/icons/basic/flag.svg diff --git a/client-app/public/static/icons/basic/folder-add.svg b/client-app/assets/icons/basic/folder-add.svg similarity index 100% rename from client-app/public/static/icons/basic/folder-add.svg rename to client-app/assets/icons/basic/folder-add.svg diff --git a/client-app/public/static/icons/basic/folder-download.svg b/client-app/assets/icons/basic/folder-download.svg similarity index 100% rename from client-app/public/static/icons/basic/folder-download.svg rename to client-app/assets/icons/basic/folder-download.svg diff --git a/client-app/public/static/icons/basic/folder-open.svg b/client-app/assets/icons/basic/folder-open.svg similarity index 100% rename from client-app/public/static/icons/basic/folder-open.svg rename to client-app/assets/icons/basic/folder-open.svg diff --git a/client-app/public/static/icons/basic/folder-remove.svg b/client-app/assets/icons/basic/folder-remove.svg similarity index 100% rename from client-app/public/static/icons/basic/folder-remove.svg rename to client-app/assets/icons/basic/folder-remove.svg diff --git a/client-app/public/static/icons/basic/folder.svg b/client-app/assets/icons/basic/folder.svg similarity index 100% rename from client-app/public/static/icons/basic/folder.svg rename to client-app/assets/icons/basic/folder.svg diff --git a/client-app/public/static/icons/basic/gift.svg b/client-app/assets/icons/basic/gift.svg similarity index 100% rename from client-app/public/static/icons/basic/gift.svg rename to client-app/assets/icons/basic/gift.svg diff --git a/client-app/public/static/icons/basic/globe-alt.svg b/client-app/assets/icons/basic/globe-alt.svg similarity index 100% rename from client-app/public/static/icons/basic/globe-alt.svg rename to client-app/assets/icons/basic/globe-alt.svg diff --git a/client-app/public/static/icons/basic/globe.svg b/client-app/assets/icons/basic/globe.svg similarity index 100% rename from client-app/public/static/icons/basic/globe.svg rename to client-app/assets/icons/basic/globe.svg diff --git a/client-app/public/static/icons/basic/grid.svg b/client-app/assets/icons/basic/grid.svg similarity index 100% rename from client-app/public/static/icons/basic/grid.svg rename to client-app/assets/icons/basic/grid.svg diff --git a/client-app/public/static/icons/basic/hand.svg b/client-app/assets/icons/basic/hand.svg similarity index 100% rename from client-app/public/static/icons/basic/hand.svg rename to client-app/assets/icons/basic/hand.svg diff --git a/client-app/public/static/icons/basic/hashtag.svg b/client-app/assets/icons/basic/hashtag.svg similarity index 100% rename from client-app/public/static/icons/basic/hashtag.svg rename to client-app/assets/icons/basic/hashtag.svg diff --git a/client-app/public/static/icons/basic/heart.svg b/client-app/assets/icons/basic/heart.svg similarity index 100% rename from client-app/public/static/icons/basic/heart.svg rename to client-app/assets/icons/basic/heart.svg diff --git a/client-app/public/static/icons/basic/home.svg b/client-app/assets/icons/basic/home.svg similarity index 100% rename from client-app/public/static/icons/basic/home.svg rename to client-app/assets/icons/basic/home.svg diff --git a/client-app/public/static/icons/basic/import.svg b/client-app/assets/icons/basic/import.svg similarity index 100% rename from client-app/public/static/icons/basic/import.svg rename to client-app/assets/icons/basic/import.svg diff --git a/client-app/public/static/icons/basic/inbox-in.svg b/client-app/assets/icons/basic/inbox-in.svg similarity index 100% rename from client-app/public/static/icons/basic/inbox-in.svg rename to client-app/assets/icons/basic/inbox-in.svg diff --git a/client-app/public/static/icons/basic/inbox.svg b/client-app/assets/icons/basic/inbox.svg similarity index 100% rename from client-app/public/static/icons/basic/inbox.svg rename to client-app/assets/icons/basic/inbox.svg diff --git a/client-app/public/static/icons/basic/information-circle.svg b/client-app/assets/icons/basic/information-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/information-circle.svg rename to client-app/assets/icons/basic/information-circle.svg diff --git a/client-app/public/static/icons/basic/information.svg b/client-app/assets/icons/basic/information.svg similarity index 100% rename from client-app/public/static/icons/basic/information.svg rename to client-app/assets/icons/basic/information.svg diff --git a/client-app/public/static/icons/basic/library.svg b/client-app/assets/icons/basic/library.svg similarity index 100% rename from client-app/public/static/icons/basic/library.svg rename to client-app/assets/icons/basic/library.svg diff --git a/client-app/public/static/icons/basic/light-bulb.svg b/client-app/assets/icons/basic/light-bulb.svg similarity index 100% rename from client-app/public/static/icons/basic/light-bulb.svg rename to client-app/assets/icons/basic/light-bulb.svg diff --git a/client-app/public/static/icons/basic/lightning-bolt.svg b/client-app/assets/icons/basic/lightning-bolt.svg similarity index 100% rename from client-app/public/static/icons/basic/lightning-bolt.svg rename to client-app/assets/icons/basic/lightning-bolt.svg diff --git a/client-app/public/static/icons/basic/link.svg b/client-app/assets/icons/basic/link.svg similarity index 100% rename from client-app/public/static/icons/basic/link.svg rename to client-app/assets/icons/basic/link.svg diff --git a/client-app/public/static/icons/basic/list-2.svg b/client-app/assets/icons/basic/list-2.svg similarity index 100% rename from client-app/public/static/icons/basic/list-2.svg rename to client-app/assets/icons/basic/list-2.svg diff --git a/client-app/public/static/icons/basic/list-v2.svg b/client-app/assets/icons/basic/list-v2.svg similarity index 100% rename from client-app/public/static/icons/basic/list-v2.svg rename to client-app/assets/icons/basic/list-v2.svg diff --git a/client-app/public/static/icons/basic/list.svg b/client-app/assets/icons/basic/list.svg similarity index 100% rename from client-app/public/static/icons/basic/list.svg rename to client-app/assets/icons/basic/list.svg diff --git a/client-app/public/static/icons/basic/location-marker.svg b/client-app/assets/icons/basic/location-marker.svg similarity index 100% rename from client-app/public/static/icons/basic/location-marker.svg rename to client-app/assets/icons/basic/location-marker.svg diff --git a/client-app/public/static/icons/basic/lock-closed.svg b/client-app/assets/icons/basic/lock-closed.svg similarity index 100% rename from client-app/public/static/icons/basic/lock-closed.svg rename to client-app/assets/icons/basic/lock-closed.svg diff --git a/client-app/public/static/icons/basic/lock-open.svg b/client-app/assets/icons/basic/lock-open.svg similarity index 100% rename from client-app/public/static/icons/basic/lock-open.svg rename to client-app/assets/icons/basic/lock-open.svg diff --git a/client-app/public/static/icons/basic/login.svg b/client-app/assets/icons/basic/login.svg similarity index 100% rename from client-app/public/static/icons/basic/login.svg rename to client-app/assets/icons/basic/login.svg diff --git a/client-app/public/static/icons/basic/logout.svg b/client-app/assets/icons/basic/logout.svg similarity index 100% rename from client-app/public/static/icons/basic/logout.svg rename to client-app/assets/icons/basic/logout.svg diff --git a/client-app/public/static/icons/basic/mail-open.svg b/client-app/assets/icons/basic/mail-open.svg similarity index 100% rename from client-app/public/static/icons/basic/mail-open.svg rename to client-app/assets/icons/basic/mail-open.svg diff --git a/client-app/public/static/icons/basic/mail.svg b/client-app/assets/icons/basic/mail.svg similarity index 100% rename from client-app/public/static/icons/basic/mail.svg rename to client-app/assets/icons/basic/mail.svg diff --git a/client-app/public/static/icons/basic/map.svg b/client-app/assets/icons/basic/map.svg similarity index 100% rename from client-app/public/static/icons/basic/map.svg rename to client-app/assets/icons/basic/map.svg diff --git a/client-app/public/static/icons/basic/menu-alt-1.svg b/client-app/assets/icons/basic/menu-alt-1.svg similarity index 100% rename from client-app/public/static/icons/basic/menu-alt-1.svg rename to client-app/assets/icons/basic/menu-alt-1.svg diff --git a/client-app/public/static/icons/basic/menu-alt-2.svg b/client-app/assets/icons/basic/menu-alt-2.svg similarity index 100% rename from client-app/public/static/icons/basic/menu-alt-2.svg rename to client-app/assets/icons/basic/menu-alt-2.svg diff --git a/client-app/public/static/icons/basic/menu-alt-3.svg b/client-app/assets/icons/basic/menu-alt-3.svg similarity index 100% rename from client-app/public/static/icons/basic/menu-alt-3.svg rename to client-app/assets/icons/basic/menu-alt-3.svg diff --git a/client-app/public/static/icons/basic/menu-alt-4.svg b/client-app/assets/icons/basic/menu-alt-4.svg similarity index 100% rename from client-app/public/static/icons/basic/menu-alt-4.svg rename to client-app/assets/icons/basic/menu-alt-4.svg diff --git a/client-app/public/static/icons/basic/menu.svg b/client-app/assets/icons/basic/menu.svg similarity index 100% rename from client-app/public/static/icons/basic/menu.svg rename to client-app/assets/icons/basic/menu.svg diff --git a/client-app/public/static/icons/basic/microphone.svg b/client-app/assets/icons/basic/microphone.svg similarity index 100% rename from client-app/public/static/icons/basic/microphone.svg rename to client-app/assets/icons/basic/microphone.svg diff --git a/client-app/public/static/icons/basic/minus-circle.svg b/client-app/assets/icons/basic/minus-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/minus-circle.svg rename to client-app/assets/icons/basic/minus-circle.svg diff --git a/client-app/public/static/icons/basic/minus.svg b/client-app/assets/icons/basic/minus.svg similarity index 100% rename from client-app/public/static/icons/basic/minus.svg rename to client-app/assets/icons/basic/minus.svg diff --git a/client-app/public/static/icons/basic/moon.svg b/client-app/assets/icons/basic/moon.svg similarity index 100% rename from client-app/public/static/icons/basic/moon.svg rename to client-app/assets/icons/basic/moon.svg diff --git a/client-app/public/static/icons/basic/music-note.svg b/client-app/assets/icons/basic/music-note.svg similarity index 100% rename from client-app/public/static/icons/basic/music-note.svg rename to client-app/assets/icons/basic/music-note.svg diff --git a/client-app/public/static/icons/basic/newspaper.svg b/client-app/assets/icons/basic/newspaper.svg similarity index 100% rename from client-app/public/static/icons/basic/newspaper.svg rename to client-app/assets/icons/basic/newspaper.svg diff --git a/client-app/public/static/icons/basic/notification-non-active.svg b/client-app/assets/icons/basic/notification-non-active.svg similarity index 100% rename from client-app/public/static/icons/basic/notification-non-active.svg rename to client-app/assets/icons/basic/notification-non-active.svg diff --git a/client-app/public/static/icons/basic/notification-v2.svg b/client-app/assets/icons/basic/notification-v2.svg similarity index 100% rename from client-app/public/static/icons/basic/notification-v2.svg rename to client-app/assets/icons/basic/notification-v2.svg diff --git a/client-app/public/static/icons/basic/notification.svg b/client-app/assets/icons/basic/notification.svg similarity index 100% rename from client-app/public/static/icons/basic/notification.svg rename to client-app/assets/icons/basic/notification.svg diff --git a/client-app/public/static/icons/basic/office-building.svg b/client-app/assets/icons/basic/office-building.svg similarity index 100% rename from client-app/public/static/icons/basic/office-building.svg rename to client-app/assets/icons/basic/office-building.svg diff --git a/client-app/public/static/icons/basic/order-approve.svg b/client-app/assets/icons/basic/order-approve.svg similarity index 100% rename from client-app/public/static/icons/basic/order-approve.svg rename to client-app/assets/icons/basic/order-approve.svg diff --git a/client-app/public/static/icons/basic/order.svg b/client-app/assets/icons/basic/order.svg similarity index 100% rename from client-app/public/static/icons/basic/order.svg rename to client-app/assets/icons/basic/order.svg diff --git a/client-app/public/static/icons/basic/page-first.svg b/client-app/assets/icons/basic/page-first.svg similarity index 100% rename from client-app/public/static/icons/basic/page-first.svg rename to client-app/assets/icons/basic/page-first.svg diff --git a/client-app/public/static/icons/basic/page-last.svg b/client-app/assets/icons/basic/page-last.svg similarity index 100% rename from client-app/public/static/icons/basic/page-last.svg rename to client-app/assets/icons/basic/page-last.svg diff --git a/client-app/public/static/icons/basic/paper-airplane.svg b/client-app/assets/icons/basic/paper-airplane.svg similarity index 100% rename from client-app/public/static/icons/basic/paper-airplane.svg rename to client-app/assets/icons/basic/paper-airplane.svg diff --git a/client-app/public/static/icons/basic/paper-circle.svg b/client-app/assets/icons/basic/paper-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/paper-circle.svg rename to client-app/assets/icons/basic/paper-circle.svg diff --git a/client-app/public/static/icons/basic/paper-clip.svg b/client-app/assets/icons/basic/paper-clip.svg similarity index 100% rename from client-app/public/static/icons/basic/paper-clip.svg rename to client-app/assets/icons/basic/paper-clip.svg diff --git a/client-app/public/static/icons/basic/pass.svg b/client-app/assets/icons/basic/pass.svg similarity index 100% rename from client-app/public/static/icons/basic/pass.svg rename to client-app/assets/icons/basic/pass.svg diff --git a/client-app/public/static/icons/basic/paste.svg b/client-app/assets/icons/basic/paste.svg similarity index 100% rename from client-app/public/static/icons/basic/paste.svg rename to client-app/assets/icons/basic/paste.svg diff --git a/client-app/public/static/icons/basic/pause.svg b/client-app/assets/icons/basic/pause.svg similarity index 100% rename from client-app/public/static/icons/basic/pause.svg rename to client-app/assets/icons/basic/pause.svg diff --git a/client-app/public/static/icons/basic/pencil-alt.svg b/client-app/assets/icons/basic/pencil-alt.svg similarity index 100% rename from client-app/public/static/icons/basic/pencil-alt.svg rename to client-app/assets/icons/basic/pencil-alt.svg diff --git a/client-app/public/static/icons/basic/phone-incoming.svg b/client-app/assets/icons/basic/phone-incoming.svg similarity index 100% rename from client-app/public/static/icons/basic/phone-incoming.svg rename to client-app/assets/icons/basic/phone-incoming.svg diff --git a/client-app/public/static/icons/basic/phone-missed-call.svg b/client-app/assets/icons/basic/phone-missed-call.svg similarity index 100% rename from client-app/public/static/icons/basic/phone-missed-call.svg rename to client-app/assets/icons/basic/phone-missed-call.svg diff --git a/client-app/public/static/icons/basic/phone-outgoing.svg b/client-app/assets/icons/basic/phone-outgoing.svg similarity index 100% rename from client-app/public/static/icons/basic/phone-outgoing.svg rename to client-app/assets/icons/basic/phone-outgoing.svg diff --git a/client-app/public/static/icons/basic/phone.svg b/client-app/assets/icons/basic/phone.svg similarity index 100% rename from client-app/public/static/icons/basic/phone.svg rename to client-app/assets/icons/basic/phone.svg diff --git a/client-app/public/static/icons/basic/photograph.svg b/client-app/assets/icons/basic/photograph.svg similarity index 100% rename from client-app/public/static/icons/basic/photograph.svg rename to client-app/assets/icons/basic/photograph.svg diff --git a/client-app/public/static/icons/basic/play.svg b/client-app/assets/icons/basic/play.svg similarity index 100% rename from client-app/public/static/icons/basic/play.svg rename to client-app/assets/icons/basic/play.svg diff --git a/client-app/public/static/icons/basic/plus-circle-outlined.svg b/client-app/assets/icons/basic/plus-circle-outlined.svg similarity index 100% rename from client-app/public/static/icons/basic/plus-circle-outlined.svg rename to client-app/assets/icons/basic/plus-circle-outlined.svg diff --git a/client-app/public/static/icons/basic/plus-circle.svg b/client-app/assets/icons/basic/plus-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/plus-circle.svg rename to client-app/assets/icons/basic/plus-circle.svg diff --git a/client-app/public/static/icons/basic/plus.svg b/client-app/assets/icons/basic/plus.svg similarity index 100% rename from client-app/public/static/icons/basic/plus.svg rename to client-app/assets/icons/basic/plus.svg diff --git a/client-app/public/static/icons/basic/presentation-chart-bar.svg b/client-app/assets/icons/basic/presentation-chart-bar.svg similarity index 100% rename from client-app/public/static/icons/basic/presentation-chart-bar.svg rename to client-app/assets/icons/basic/presentation-chart-bar.svg diff --git a/client-app/public/static/icons/basic/presentation-chart-line.svg b/client-app/assets/icons/basic/presentation-chart-line.svg similarity index 100% rename from client-app/public/static/icons/basic/presentation-chart-line.svg rename to client-app/assets/icons/basic/presentation-chart-line.svg diff --git a/client-app/public/static/icons/basic/printer.svg b/client-app/assets/icons/basic/printer.svg similarity index 100% rename from client-app/public/static/icons/basic/printer.svg rename to client-app/assets/icons/basic/printer.svg diff --git a/client-app/public/static/icons/basic/profile.svg b/client-app/assets/icons/basic/profile.svg similarity index 100% rename from client-app/public/static/icons/basic/profile.svg rename to client-app/assets/icons/basic/profile.svg diff --git a/client-app/public/static/icons/basic/purchase-request.svg b/client-app/assets/icons/basic/purchase-request.svg similarity index 100% rename from client-app/public/static/icons/basic/purchase-request.svg rename to client-app/assets/icons/basic/purchase-request.svg diff --git a/client-app/public/static/icons/basic/puzzle.svg b/client-app/assets/icons/basic/puzzle.svg similarity index 100% rename from client-app/public/static/icons/basic/puzzle.svg rename to client-app/assets/icons/basic/puzzle.svg diff --git a/client-app/public/static/icons/basic/qrcode.svg b/client-app/assets/icons/basic/qrcode.svg similarity index 100% rename from client-app/public/static/icons/basic/qrcode.svg rename to client-app/assets/icons/basic/qrcode.svg diff --git a/client-app/public/static/icons/basic/question-mark-circle.svg b/client-app/assets/icons/basic/question-mark-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/question-mark-circle.svg rename to client-app/assets/icons/basic/question-mark-circle.svg diff --git a/client-app/public/static/icons/basic/quick.svg b/client-app/assets/icons/basic/quick.svg similarity index 100% rename from client-app/public/static/icons/basic/quick.svg rename to client-app/assets/icons/basic/quick.svg diff --git a/client-app/public/static/icons/basic/receipt-refund.svg b/client-app/assets/icons/basic/receipt-refund.svg similarity index 100% rename from client-app/public/static/icons/basic/receipt-refund.svg rename to client-app/assets/icons/basic/receipt-refund.svg diff --git a/client-app/public/static/icons/basic/receipt-tax.svg b/client-app/assets/icons/basic/receipt-tax.svg similarity index 100% rename from client-app/public/static/icons/basic/receipt-tax.svg rename to client-app/assets/icons/basic/receipt-tax.svg diff --git a/client-app/public/static/icons/basic/refresh.svg b/client-app/assets/icons/basic/refresh.svg similarity index 100% rename from client-app/public/static/icons/basic/refresh.svg rename to client-app/assets/icons/basic/refresh.svg diff --git a/client-app/public/static/icons/basic/reload-circle.svg b/client-app/assets/icons/basic/reload-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/reload-circle.svg rename to client-app/assets/icons/basic/reload-circle.svg diff --git a/client-app/public/static/icons/basic/reply.svg b/client-app/assets/icons/basic/reply.svg similarity index 100% rename from client-app/public/static/icons/basic/reply.svg rename to client-app/assets/icons/basic/reply.svg diff --git a/client-app/public/static/icons/basic/reset.svg b/client-app/assets/icons/basic/reset.svg similarity index 100% rename from client-app/public/static/icons/basic/reset.svg rename to client-app/assets/icons/basic/reset.svg diff --git a/client-app/public/static/icons/basic/restricted-shipping-2.svg b/client-app/assets/icons/basic/restricted-shipping-2.svg similarity index 100% rename from client-app/public/static/icons/basic/restricted-shipping-2.svg rename to client-app/assets/icons/basic/restricted-shipping-2.svg diff --git a/client-app/public/static/icons/basic/restricted-shipping-3.svg b/client-app/assets/icons/basic/restricted-shipping-3.svg similarity index 100% rename from client-app/public/static/icons/basic/restricted-shipping-3.svg rename to client-app/assets/icons/basic/restricted-shipping-3.svg diff --git a/client-app/public/static/icons/basic/restricted-shipping-6.svg b/client-app/assets/icons/basic/restricted-shipping-6.svg similarity index 100% rename from client-app/public/static/icons/basic/restricted-shipping-6.svg rename to client-app/assets/icons/basic/restricted-shipping-6.svg diff --git a/client-app/public/static/icons/basic/restricted-shipping.svg b/client-app/assets/icons/basic/restricted-shipping.svg similarity index 100% rename from client-app/public/static/icons/basic/restricted-shipping.svg rename to client-app/assets/icons/basic/restricted-shipping.svg diff --git a/client-app/public/static/icons/basic/rewind.svg b/client-app/assets/icons/basic/rewind.svg similarity index 100% rename from client-app/public/static/icons/basic/rewind.svg rename to client-app/assets/icons/basic/rewind.svg diff --git a/client-app/public/static/icons/basic/rss.svg b/client-app/assets/icons/basic/rss.svg similarity index 100% rename from client-app/public/static/icons/basic/rss.svg rename to client-app/assets/icons/basic/rss.svg diff --git a/client-app/public/static/icons/basic/save-as.svg b/client-app/assets/icons/basic/save-as.svg similarity index 100% rename from client-app/public/static/icons/basic/save-as.svg rename to client-app/assets/icons/basic/save-as.svg diff --git a/client-app/public/static/icons/basic/save-v2.svg b/client-app/assets/icons/basic/save-v2.svg similarity index 100% rename from client-app/public/static/icons/basic/save-v2.svg rename to client-app/assets/icons/basic/save-v2.svg diff --git a/client-app/public/static/icons/basic/save.svg b/client-app/assets/icons/basic/save.svg similarity index 100% rename from client-app/public/static/icons/basic/save.svg rename to client-app/assets/icons/basic/save.svg diff --git a/client-app/public/static/icons/basic/scale.svg b/client-app/assets/icons/basic/scale.svg similarity index 100% rename from client-app/public/static/icons/basic/scale.svg rename to client-app/assets/icons/basic/scale.svg diff --git a/client-app/public/static/icons/basic/scissors.svg b/client-app/assets/icons/basic/scissors.svg similarity index 100% rename from client-app/public/static/icons/basic/scissors.svg rename to client-app/assets/icons/basic/scissors.svg diff --git a/client-app/public/static/icons/basic/search-bold.svg b/client-app/assets/icons/basic/search-bold.svg similarity index 100% rename from client-app/public/static/icons/basic/search-bold.svg rename to client-app/assets/icons/basic/search-bold.svg diff --git a/client-app/public/static/icons/basic/search-circle.svg b/client-app/assets/icons/basic/search-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/search-circle.svg rename to client-app/assets/icons/basic/search-circle.svg diff --git a/client-app/public/static/icons/basic/search-not-found.svg b/client-app/assets/icons/basic/search-not-found.svg similarity index 100% rename from client-app/public/static/icons/basic/search-not-found.svg rename to client-app/assets/icons/basic/search-not-found.svg diff --git a/client-app/public/static/icons/basic/search.svg b/client-app/assets/icons/basic/search.svg similarity index 100% rename from client-app/public/static/icons/basic/search.svg rename to client-app/assets/icons/basic/search.svg diff --git a/client-app/public/static/icons/basic/selector.svg b/client-app/assets/icons/basic/selector.svg similarity index 100% rename from client-app/public/static/icons/basic/selector.svg rename to client-app/assets/icons/basic/selector.svg diff --git a/client-app/public/static/icons/basic/send.svg b/client-app/assets/icons/basic/send.svg similarity index 100% rename from client-app/public/static/icons/basic/send.svg rename to client-app/assets/icons/basic/send.svg diff --git a/client-app/public/static/icons/basic/server.svg b/client-app/assets/icons/basic/server.svg similarity index 100% rename from client-app/public/static/icons/basic/server.svg rename to client-app/assets/icons/basic/server.svg diff --git a/client-app/public/static/icons/basic/service.svg b/client-app/assets/icons/basic/service.svg similarity index 100% rename from client-app/public/static/icons/basic/service.svg rename to client-app/assets/icons/basic/service.svg diff --git a/client-app/public/static/icons/basic/share.svg b/client-app/assets/icons/basic/share.svg similarity index 100% rename from client-app/public/static/icons/basic/share.svg rename to client-app/assets/icons/basic/share.svg diff --git a/client-app/public/static/icons/basic/shield-check.svg b/client-app/assets/icons/basic/shield-check.svg similarity index 100% rename from client-app/public/static/icons/basic/shield-check.svg rename to client-app/assets/icons/basic/shield-check.svg diff --git a/client-app/public/static/icons/basic/shield-exclamation.svg b/client-app/assets/icons/basic/shield-exclamation.svg similarity index 100% rename from client-app/public/static/icons/basic/shield-exclamation.svg rename to client-app/assets/icons/basic/shield-exclamation.svg diff --git a/client-app/public/static/icons/basic/shopping-bag.svg b/client-app/assets/icons/basic/shopping-bag.svg similarity index 100% rename from client-app/public/static/icons/basic/shopping-bag.svg rename to client-app/assets/icons/basic/shopping-bag.svg diff --git a/client-app/public/static/icons/basic/social-dribbble.svg b/client-app/assets/icons/basic/social-dribbble.svg similarity index 100% rename from client-app/public/static/icons/basic/social-dribbble.svg rename to client-app/assets/icons/basic/social-dribbble.svg diff --git a/client-app/public/static/icons/basic/social-facebook.svg b/client-app/assets/icons/basic/social-facebook.svg similarity index 100% rename from client-app/public/static/icons/basic/social-facebook.svg rename to client-app/assets/icons/basic/social-facebook.svg diff --git a/client-app/public/static/icons/basic/social-github.svg b/client-app/assets/icons/basic/social-github.svg similarity index 100% rename from client-app/public/static/icons/basic/social-github.svg rename to client-app/assets/icons/basic/social-github.svg diff --git a/client-app/public/static/icons/basic/social-google.svg b/client-app/assets/icons/basic/social-google.svg similarity index 100% rename from client-app/public/static/icons/basic/social-google.svg rename to client-app/assets/icons/basic/social-google.svg diff --git a/client-app/public/static/icons/basic/social-microoft.svg b/client-app/assets/icons/basic/social-microoft.svg similarity index 100% rename from client-app/public/static/icons/basic/social-microoft.svg rename to client-app/assets/icons/basic/social-microoft.svg diff --git a/client-app/public/static/icons/basic/social-pinterest.svg b/client-app/assets/icons/basic/social-pinterest.svg similarity index 100% rename from client-app/public/static/icons/basic/social-pinterest.svg rename to client-app/assets/icons/basic/social-pinterest.svg diff --git a/client-app/public/static/icons/basic/social-telegram.svg b/client-app/assets/icons/basic/social-telegram.svg similarity index 100% rename from client-app/public/static/icons/basic/social-telegram.svg rename to client-app/assets/icons/basic/social-telegram.svg diff --git a/client-app/public/static/icons/basic/social-twitter.svg b/client-app/assets/icons/basic/social-twitter.svg similarity index 100% rename from client-app/public/static/icons/basic/social-twitter.svg rename to client-app/assets/icons/basic/social-twitter.svg diff --git a/client-app/public/static/icons/basic/sort-ascending.svg b/client-app/assets/icons/basic/sort-ascending.svg similarity index 100% rename from client-app/public/static/icons/basic/sort-ascending.svg rename to client-app/assets/icons/basic/sort-ascending.svg diff --git a/client-app/public/static/icons/basic/sort-descending.svg b/client-app/assets/icons/basic/sort-descending.svg similarity index 100% rename from client-app/public/static/icons/basic/sort-descending.svg rename to client-app/assets/icons/basic/sort-descending.svg diff --git a/client-app/public/static/icons/basic/sparkles.svg b/client-app/assets/icons/basic/sparkles.svg similarity index 100% rename from client-app/public/static/icons/basic/sparkles.svg rename to client-app/assets/icons/basic/sparkles.svg diff --git a/client-app/public/static/icons/basic/speakerphone.svg b/client-app/assets/icons/basic/speakerphone.svg similarity index 100% rename from client-app/public/static/icons/basic/speakerphone.svg rename to client-app/assets/icons/basic/speakerphone.svg diff --git a/client-app/public/static/icons/basic/star.svg b/client-app/assets/icons/basic/star.svg similarity index 100% rename from client-app/public/static/icons/basic/star.svg rename to client-app/assets/icons/basic/star.svg diff --git a/client-app/public/static/icons/basic/status-offline.svg b/client-app/assets/icons/basic/status-offline.svg similarity index 100% rename from client-app/public/static/icons/basic/status-offline.svg rename to client-app/assets/icons/basic/status-offline.svg diff --git a/client-app/public/static/icons/basic/status-online.svg b/client-app/assets/icons/basic/status-online.svg similarity index 100% rename from client-app/public/static/icons/basic/status-online.svg rename to client-app/assets/icons/basic/status-online.svg diff --git a/client-app/public/static/icons/basic/stop.svg b/client-app/assets/icons/basic/stop.svg similarity index 100% rename from client-app/public/static/icons/basic/stop.svg rename to client-app/assets/icons/basic/stop.svg diff --git a/client-app/public/static/icons/basic/sun.svg b/client-app/assets/icons/basic/sun.svg similarity index 100% rename from client-app/public/static/icons/basic/sun.svg rename to client-app/assets/icons/basic/sun.svg diff --git a/client-app/public/static/icons/basic/supplier.svg b/client-app/assets/icons/basic/supplier.svg similarity index 100% rename from client-app/public/static/icons/basic/supplier.svg rename to client-app/assets/icons/basic/supplier.svg diff --git a/client-app/public/static/icons/basic/support.svg b/client-app/assets/icons/basic/support.svg similarity index 100% rename from client-app/public/static/icons/basic/support.svg rename to client-app/assets/icons/basic/support.svg diff --git a/client-app/public/static/icons/basic/switch-horizontal.svg b/client-app/assets/icons/basic/switch-horizontal.svg similarity index 100% rename from client-app/public/static/icons/basic/switch-horizontal.svg rename to client-app/assets/icons/basic/switch-horizontal.svg diff --git a/client-app/public/static/icons/basic/switch-vertical.svg b/client-app/assets/icons/basic/switch-vertical.svg similarity index 100% rename from client-app/public/static/icons/basic/switch-vertical.svg rename to client-app/assets/icons/basic/switch-vertical.svg diff --git a/client-app/public/static/icons/basic/table.svg b/client-app/assets/icons/basic/table.svg similarity index 100% rename from client-app/public/static/icons/basic/table.svg rename to client-app/assets/icons/basic/table.svg diff --git a/client-app/public/static/icons/basic/tag.svg b/client-app/assets/icons/basic/tag.svg similarity index 100% rename from client-app/public/static/icons/basic/tag.svg rename to client-app/assets/icons/basic/tag.svg diff --git a/client-app/public/static/icons/basic/tax-doc.svg b/client-app/assets/icons/basic/tax-doc.svg similarity index 100% rename from client-app/public/static/icons/basic/tax-doc.svg rename to client-app/assets/icons/basic/tax-doc.svg diff --git a/client-app/public/static/icons/basic/terminal.svg b/client-app/assets/icons/basic/terminal.svg similarity index 100% rename from client-app/public/static/icons/basic/terminal.svg rename to client-app/assets/icons/basic/terminal.svg diff --git a/client-app/public/static/icons/basic/thin-address.svg b/client-app/assets/icons/basic/thin-address.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-address.svg rename to client-app/assets/icons/basic/thin-address.svg diff --git a/client-app/public/static/icons/basic/thin-courier.svg b/client-app/assets/icons/basic/thin-courier.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-courier.svg rename to client-app/assets/icons/basic/thin-courier.svg diff --git a/client-app/public/static/icons/basic/thin-feedback.svg b/client-app/assets/icons/basic/thin-feedback.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-feedback.svg rename to client-app/assets/icons/basic/thin-feedback.svg diff --git a/client-app/public/static/icons/basic/thin-list.svg b/client-app/assets/icons/basic/thin-list.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-list.svg rename to client-app/assets/icons/basic/thin-list.svg diff --git a/client-app/public/static/icons/basic/thin-lists.svg b/client-app/assets/icons/basic/thin-lists.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-lists.svg rename to client-app/assets/icons/basic/thin-lists.svg diff --git a/client-app/public/static/icons/basic/thin-notifications.svg b/client-app/assets/icons/basic/thin-notifications.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-notifications.svg rename to client-app/assets/icons/basic/thin-notifications.svg diff --git a/client-app/public/static/icons/basic/thin-order.svg b/client-app/assets/icons/basic/thin-order.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-order.svg rename to client-app/assets/icons/basic/thin-order.svg diff --git a/client-app/public/static/icons/basic/thin-quotes.svg b/client-app/assets/icons/basic/thin-quotes.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-quotes.svg rename to client-app/assets/icons/basic/thin-quotes.svg diff --git a/client-app/public/static/icons/basic/thin-stock.svg b/client-app/assets/icons/basic/thin-stock.svg similarity index 100% rename from client-app/public/static/icons/basic/thin-stock.svg rename to client-app/assets/icons/basic/thin-stock.svg diff --git a/client-app/public/static/icons/basic/thumb-down.svg b/client-app/assets/icons/basic/thumb-down.svg similarity index 100% rename from client-app/public/static/icons/basic/thumb-down.svg rename to client-app/assets/icons/basic/thumb-down.svg diff --git a/client-app/public/static/icons/basic/thumb-up.svg b/client-app/assets/icons/basic/thumb-up.svg similarity index 100% rename from client-app/public/static/icons/basic/thumb-up.svg rename to client-app/assets/icons/basic/thumb-up.svg diff --git a/client-app/public/static/icons/basic/ticket.svg b/client-app/assets/icons/basic/ticket.svg similarity index 100% rename from client-app/public/static/icons/basic/ticket.svg rename to client-app/assets/icons/basic/ticket.svg diff --git a/client-app/public/static/icons/basic/translate.svg b/client-app/assets/icons/basic/translate.svg similarity index 100% rename from client-app/public/static/icons/basic/translate.svg rename to client-app/assets/icons/basic/translate.svg diff --git a/client-app/public/static/icons/basic/trash.svg b/client-app/assets/icons/basic/trash.svg similarity index 100% rename from client-app/public/static/icons/basic/trash.svg rename to client-app/assets/icons/basic/trash.svg diff --git a/client-app/public/static/icons/basic/trending-down.svg b/client-app/assets/icons/basic/trending-down.svg similarity index 100% rename from client-app/public/static/icons/basic/trending-down.svg rename to client-app/assets/icons/basic/trending-down.svg diff --git a/client-app/public/static/icons/basic/trending-up.svg b/client-app/assets/icons/basic/trending-up.svg similarity index 100% rename from client-app/public/static/icons/basic/trending-up.svg rename to client-app/assets/icons/basic/trending-up.svg diff --git a/client-app/public/static/icons/basic/truck.svg b/client-app/assets/icons/basic/truck.svg similarity index 100% rename from client-app/public/static/icons/basic/truck.svg rename to client-app/assets/icons/basic/truck.svg diff --git a/client-app/public/static/icons/basic/up-page-arrow-filled.svg b/client-app/assets/icons/basic/up-page-arrow-filled.svg similarity index 100% rename from client-app/public/static/icons/basic/up-page-arrow-filled.svg rename to client-app/assets/icons/basic/up-page-arrow-filled.svg diff --git a/client-app/public/static/icons/basic/up-page-arrow-outline.svg b/client-app/assets/icons/basic/up-page-arrow-outline.svg similarity index 100% rename from client-app/public/static/icons/basic/up-page-arrow-outline.svg rename to client-app/assets/icons/basic/up-page-arrow-outline.svg diff --git a/client-app/public/static/icons/basic/upload.svg b/client-app/assets/icons/basic/upload.svg similarity index 100% rename from client-app/public/static/icons/basic/upload.svg rename to client-app/assets/icons/basic/upload.svg diff --git a/client-app/public/static/icons/basic/user-add.svg b/client-app/assets/icons/basic/user-add.svg similarity index 100% rename from client-app/public/static/icons/basic/user-add.svg rename to client-app/assets/icons/basic/user-add.svg diff --git a/client-app/public/static/icons/basic/user-circle.svg b/client-app/assets/icons/basic/user-circle.svg similarity index 100% rename from client-app/public/static/icons/basic/user-circle.svg rename to client-app/assets/icons/basic/user-circle.svg diff --git a/client-app/public/static/icons/basic/user-group.svg b/client-app/assets/icons/basic/user-group.svg similarity index 100% rename from client-app/public/static/icons/basic/user-group.svg rename to client-app/assets/icons/basic/user-group.svg diff --git a/client-app/public/static/icons/basic/user-remove.svg b/client-app/assets/icons/basic/user-remove.svg similarity index 100% rename from client-app/public/static/icons/basic/user-remove.svg rename to client-app/assets/icons/basic/user-remove.svg diff --git a/client-app/public/static/icons/basic/user.svg b/client-app/assets/icons/basic/user.svg similarity index 100% rename from client-app/public/static/icons/basic/user.svg rename to client-app/assets/icons/basic/user.svg diff --git a/client-app/public/static/icons/basic/users.svg b/client-app/assets/icons/basic/users.svg similarity index 100% rename from client-app/public/static/icons/basic/users.svg rename to client-app/assets/icons/basic/users.svg diff --git a/client-app/public/static/icons/basic/variable.svg b/client-app/assets/icons/basic/variable.svg similarity index 100% rename from client-app/public/static/icons/basic/variable.svg rename to client-app/assets/icons/basic/variable.svg diff --git a/client-app/public/static/icons/basic/variations.svg b/client-app/assets/icons/basic/variations.svg similarity index 100% rename from client-app/public/static/icons/basic/variations.svg rename to client-app/assets/icons/basic/variations.svg diff --git a/client-app/public/static/icons/basic/vendor.svg b/client-app/assets/icons/basic/vendor.svg similarity index 100% rename from client-app/public/static/icons/basic/vendor.svg rename to client-app/assets/icons/basic/vendor.svg diff --git a/client-app/public/static/icons/basic/video-camera.svg b/client-app/assets/icons/basic/video-camera.svg similarity index 100% rename from client-app/public/static/icons/basic/video-camera.svg rename to client-app/assets/icons/basic/video-camera.svg diff --git a/client-app/public/static/icons/basic/video.svg b/client-app/assets/icons/basic/video.svg similarity index 100% rename from client-app/public/static/icons/basic/video.svg rename to client-app/assets/icons/basic/video.svg diff --git a/client-app/public/static/icons/basic/view-boards.svg b/client-app/assets/icons/basic/view-boards.svg similarity index 100% rename from client-app/public/static/icons/basic/view-boards.svg rename to client-app/assets/icons/basic/view-boards.svg diff --git a/client-app/public/static/icons/basic/view-grid-add.svg b/client-app/assets/icons/basic/view-grid-add.svg similarity index 100% rename from client-app/public/static/icons/basic/view-grid-add.svg rename to client-app/assets/icons/basic/view-grid-add.svg diff --git a/client-app/public/static/icons/basic/view-grid.svg b/client-app/assets/icons/basic/view-grid.svg similarity index 100% rename from client-app/public/static/icons/basic/view-grid.svg rename to client-app/assets/icons/basic/view-grid.svg diff --git a/client-app/public/static/icons/basic/volume-off.svg b/client-app/assets/icons/basic/volume-off.svg similarity index 100% rename from client-app/public/static/icons/basic/volume-off.svg rename to client-app/assets/icons/basic/volume-off.svg diff --git a/client-app/public/static/icons/basic/volume-up.svg b/client-app/assets/icons/basic/volume-up.svg similarity index 100% rename from client-app/public/static/icons/basic/volume-up.svg rename to client-app/assets/icons/basic/volume-up.svg diff --git a/client-app/public/static/icons/basic/warning-2.svg b/client-app/assets/icons/basic/warning-2.svg similarity index 100% rename from client-app/public/static/icons/basic/warning-2.svg rename to client-app/assets/icons/basic/warning-2.svg diff --git a/client-app/public/static/icons/basic/warning.svg b/client-app/assets/icons/basic/warning.svg similarity index 100% rename from client-app/public/static/icons/basic/warning.svg rename to client-app/assets/icons/basic/warning.svg diff --git a/client-app/public/static/icons/basic/whishlist.svg b/client-app/assets/icons/basic/whishlist.svg similarity index 100% rename from client-app/public/static/icons/basic/whishlist.svg rename to client-app/assets/icons/basic/whishlist.svg diff --git a/client-app/public/static/icons/basic/wifi.svg b/client-app/assets/icons/basic/wifi.svg similarity index 100% rename from client-app/public/static/icons/basic/wifi.svg rename to client-app/assets/icons/basic/wifi.svg diff --git a/client-app/public/static/icons/basic/zoom-in.svg b/client-app/assets/icons/basic/zoom-in.svg similarity index 100% rename from client-app/public/static/icons/basic/zoom-in.svg rename to client-app/assets/icons/basic/zoom-in.svg diff --git a/client-app/public/static/icons/basic/zoom-out.svg b/client-app/assets/icons/basic/zoom-out.svg similarity index 100% rename from client-app/public/static/icons/basic/zoom-out.svg rename to client-app/assets/icons/basic/zoom-out.svg diff --git a/client-app/assets/styles/preflight.scss b/client-app/assets/styles/preflight.scss index 86a465c9a8..65823b0ad0 100644 --- a/client-app/assets/styles/preflight.scss +++ b/client-app/assets/styles/preflight.scss @@ -9,12 +9,6 @@ body { @apply text-[--body-text-color]; } - - .builder-block { - .vc-container { - --body-bg-color: transparent; - } - } } /* Chrome, Safari, Edge, Opera */ diff --git a/client-app/assets/styles/vendors.scss b/client-app/assets/styles/vendors.scss index b26abb00f8..75eafb64e2 100644 --- a/client-app/assets/styles/vendors.scss +++ b/client-app/assets/styles/vendors.scss @@ -1 +1,2 @@ @use "vendors/swiper"; +@use "vendors/builder-io"; diff --git a/client-app/assets/styles/vendors/_builder-io.scss b/client-app/assets/styles/vendors/_builder-io.scss new file mode 100644 index 0000000000..4e87fd7359 --- /dev/null +++ b/client-app/assets/styles/vendors/_builder-io.scss @@ -0,0 +1,49 @@ +.builder-block { + .vc-container { + --body-bg-color: transparent; + } + + h1 { + @apply text-2xl tracking-wide font-bold uppercase; + + @media (min-width: theme("screens.lg")) { + @apply text-3xl; + } + } + + h2 { + @apply text-xl tracking-wide font-bold uppercase; + + @media (min-width: theme("screens.lg")) { + @apply text-2xl; + } + } + + h3 { + @apply text-lg tracking-wide font-bold uppercase; + + @media (min-width: theme("screens.lg")) { + @apply text-xl; + } + } + + h4 { + @apply text-base font-bold uppercase; + + @media (min-width: theme("screens.lg")) { + @apply text-lg; + } + } + + h5 { + @apply text-base font-bold uppercase; + } + + h6 { + @apply text-base font-bold uppercase; + } + + p { + @apply text-base; + } +} diff --git a/client-app/broadcast.ts b/client-app/broadcast.ts index 1c1ef1842c..e5be9a1494 100644 --- a/client-app/broadcast.ts +++ b/client-app/broadcast.ts @@ -20,6 +20,7 @@ import { passwordExpiredEvent, reloadAndOpenMainPage, graphqlErrorEvent, + dataChangedEvent, } from "@/shared/broadcast"; import { useNotifications } from "@/shared/notification"; @@ -32,6 +33,8 @@ export function setupBroadcastGlobalListeners() { installed = true; + const { t } = globals.i18n.global; + const { client } = useApolloClient(); const router = useRouter(); const { on } = useBroadcast(); @@ -83,7 +86,6 @@ export function setupBroadcastGlobalListeners() { throw error; }); on(unhandledErrorEvent, () => { - const { t } = globals.i18n.global; notifications.error({ duration: DEFAULT_NOTIFICATION_DURATION, group: "UnhandledError", @@ -105,4 +107,10 @@ export function setupBroadcastGlobalListeners() { location.href = `/change-password?returnUrl=${pathname + search + hash}`; } }); + + on(dataChangedEvent, () => { + notifications.warning({ + text: t("common.messages.data_changed"), + }); + }); } diff --git a/client-app/core/api/graphql/cart/mutations/changeCartConfiguredItem/index.ts b/client-app/core/api/graphql/cart/mutations/changeCartConfiguredItem/index.ts index 1a263e6edb..52119c588b 100644 --- a/client-app/core/api/graphql/cart/mutations/changeCartConfiguredItem/index.ts +++ b/client-app/core/api/graphql/cart/mutations/changeCartConfiguredItem/index.ts @@ -6,7 +6,7 @@ import type { ConfigurationSectionInput } from "@/core/api/graphql/types"; type MutationVariablesType = { lineItemId: string; configurationSections: ConfigurationSectionInput[]; - quantity: number; + quantity?: number; }; export function useChangeCartConfiguredItemMutation() { diff --git a/client-app/core/utilities/common/index.test.ts b/client-app/core/utilities/common/index.test.ts index ad8da15986..ba6107d88d 100644 --- a/client-app/core/utilities/common/index.test.ts +++ b/client-app/core/utilities/common/index.test.ts @@ -104,6 +104,18 @@ describe("getReturnUrlValue", () => { const result = getReturnUrlValue(); expect(result).toBeNull(); }); + + it("should return null when returnUrl points to a different hostname", () => { + Object.defineProperty(window, "location", { + configurable: true, + value: { + href: "http://example.com?returnUrl=http://malicious.com/home", + }, + }); + + const result = getReturnUrlValue(); + expect(result).toBeNull(); + }); }); describe("extractHostname", () => { diff --git a/client-app/core/utilities/common/index.ts b/client-app/core/utilities/common/index.ts index 48c0c10346..6e5fa8feb0 100644 --- a/client-app/core/utilities/common/index.ts +++ b/client-app/core/utilities/common/index.ts @@ -7,8 +7,16 @@ export function getBaseUrl(supportedLocales: string[]): string { } export function getReturnUrlValue(): string | null { - const { searchParams } = new URL(location.href); - return searchParams.get("returnUrl") || searchParams.get("ReturnUrl"); + const { searchParams, origin, hostname } = new URL(location.href); + const returnUrl = searchParams.get("returnUrl") || searchParams.get("ReturnUrl"); + + if (returnUrl) { + const returnUrlObj = new URL(returnUrl, origin); + if (returnUrlObj.hostname === hostname) { + return returnUrl; + } + } + return null; } export function extractHostname(url: string) { diff --git a/client-app/core/utilities/tests/index.ts b/client-app/core/utilities/tests/index.ts new file mode 100644 index 0000000000..1fb70021ee --- /dev/null +++ b/client-app/core/utilities/tests/index.ts @@ -0,0 +1,63 @@ +import merge from "lodash/merge"; +import { createI18n } from "vue-i18n"; +import type { Component } from "vue"; + +const i18n = createI18n({ + locale: "en", + legacy: false, + messages: {}, + missingWarn: false, +}); + +const defaults = { + global: { + mocks: { + $t: (key: string, ...args: unknown[]) => `${key} ${args.join(", ")}`, + $n: (count: number) => count, + $d: (date: unknown) => date, + $route: { + path: "/", + name: "home", + params: {}, + query: {}, + }, + $router: { + push: () => {}, + replace: () => {}, + }, + }, + stubs: { + "router-link": true, + "router-view": true, + transition: true, + "transition-group": true, + }, + directives: { + "html-safe": true, + }, + plugins: [i18n], + renderStubDefaultSlot: true, + }, +}; + +export function createWrapperFactory( + mount: typeof import("@vue/test-utils").mount, + component: T, + globalOverrides: Parameters[1] = {}, +) { + return (overrides: Parameters>[1] = {}) => + mount(component, { + ...merge({}, defaults, globalOverrides, overrides), + }); +} + +export function createShallowWrapperFactory( + shallowMount: typeof import("@vue/test-utils").shallowMount, + component: T, + globalOverrides: Parameters[1] = {}, +) { + return (overrides: Parameters>[1] = {}) => + shallowMount(component, { + ...merge({}, defaults, globalOverrides, overrides), + }); +} diff --git a/client-app/modules/customer-reviews/locales/es.json b/client-app/modules/customer-reviews/locales/es.json new file mode 100644 index 0000000000..df591547aa --- /dev/null +++ b/client-app/modules/customer-reviews/locales/es.json @@ -0,0 +1,23 @@ +{ + "common": { + "buttons": { + "leave_feedback": "Dejar comentario" + }, + "labels": { + "feedback": "Comentario", + "rating": "Calificación", + "rate_product": "Calificar producto", + "item_as_described_by_vendor": "¿El artículo es como lo describe el vendedor?" + }, + "messages": { + "thanks_for_feedback": "Tu comentario ha sido enviado y está pendiente de confirmación. ¡Gracias!" + } + }, + "validation_errors": { + "INVALID_ENTITY_TYPE": "Solo se pueden dejar reseñas para productos.", + "PRODUCT_MUST_BE_PURCHASED": "Solo los usuarios que han comprado el producto pueden dejar una reseña.", + "DUPLICATE_REVIEW": "El usuario ya ha dejado una reseña para este producto.", + "INVALID_RATING": "La calificación debe estar entre 1 y 5.", + "REVIEW_IS_EMPTY": "La propiedad 'Comentario' debe estar llena." + } +} diff --git a/client-app/modules/customer-reviews/locales/it.json b/client-app/modules/customer-reviews/locales/it.json new file mode 100644 index 0000000000..8138983aa3 --- /dev/null +++ b/client-app/modules/customer-reviews/locales/it.json @@ -0,0 +1,23 @@ +{ + "common": { + "buttons": { + "leave_feedback": "Lascia un commento" + }, + "labels": { + "feedback": "Commento", + "rating": "Valutazione", + "rate_product": "Valuta prodotto", + "item_as_described_by_vendor": "L'articolo è come descritto dal venditore?" + }, + "messages": { + "thanks_for_feedback": "Il tuo commento è stato inviato ed è in attesa di conferma. Grazie!" + } + }, + "validation_errors": { + "INVALID_ENTITY_TYPE": "Le recensioni possono essere lasciate solo per i prodotti.", + "PRODUCT_MUST_BE_PURCHASED": "Solo gli utenti che hanno acquistato il prodotto possono lasciare una recensione.", + "DUPLICATE_REVIEW": "L'utente ha già lasciato una recensione per questo prodotto.", + "INVALID_RATING": "La valutazione deve essere compresa tra 1 e 5.", + "REVIEW_IS_EMPTY": "La proprietà 'Commento' deve essere compilata." + } +} diff --git a/client-app/modules/customer-reviews/locales/ja.json b/client-app/modules/customer-reviews/locales/ja.json new file mode 100644 index 0000000000..642829f133 --- /dev/null +++ b/client-app/modules/customer-reviews/locales/ja.json @@ -0,0 +1,23 @@ +{ + "common": { + "buttons": { + "leave_feedback": "フィードバックを残す" + }, + "labels": { + "feedback": "フィードバック", + "rating": "評価", + "rate_product": "商品を評価する", + "item_as_described_by_vendor": "商品はベンダーの説明通りですか?" + }, + "messages": { + "thanks_for_feedback": "フィードバックが送信され、確認待ちです。ありがとうございます!" + } + }, + "validation_errors": { + "INVALID_ENTITY_TYPE": "レビューは商品のみ可能です。", + "PRODUCT_MUST_BE_PURCHASED": "購入したユーザーのみレビューを残せます。", + "DUPLICATE_REVIEW": "この商品には既にレビューを残しています。", + "INVALID_RATING": "評価は1から5の範囲である必要があります。", + "REVIEW_IS_EMPTY": "「フィードバック」フィールドを入力してください。" + } +} diff --git a/client-app/modules/customer-reviews/locales/pl.json b/client-app/modules/customer-reviews/locales/pl.json new file mode 100644 index 0000000000..524c589d99 --- /dev/null +++ b/client-app/modules/customer-reviews/locales/pl.json @@ -0,0 +1,23 @@ +{ + "common": { + "buttons": { + "leave_feedback": "Zostaw opinię" + }, + "labels": { + "feedback": "Opinia", + "rating": "Ocena", + "rate_product": "Oceń produkt", + "item_as_described_by_vendor": "Czy produkt jest zgodny z opisem sprzedawcy?" + }, + "messages": { + "thanks_for_feedback": "Twoja opinia została przesłana i oczekuje na potwierdzenie. Dziękujemy!" + } + }, + "validation_errors": { + "INVALID_ENTITY_TYPE": "Recenzje można zostawiać tylko dla produktów.", + "PRODUCT_MUST_BE_PURCHASED": "Tylko użytkownicy, którzy kupili produkt, mogą zostawić recenzję.", + "DUPLICATE_REVIEW": "Użytkownik już zostawił recenzję dla tego produktu.", + "INVALID_RATING": "Ocena powinna być w zakresie od 1 do 5.", + "REVIEW_IS_EMPTY": "Pole 'Opinia' musi być wypełnione." + } +} diff --git a/client-app/modules/customer-reviews/locales/pt.json b/client-app/modules/customer-reviews/locales/pt.json new file mode 100644 index 0000000000..b4f1499cd1 --- /dev/null +++ b/client-app/modules/customer-reviews/locales/pt.json @@ -0,0 +1,23 @@ +{ + "common": { + "buttons": { + "leave_feedback": "Deixar feedback" + }, + "labels": { + "feedback": "Feedback", + "rating": "Avaliação", + "rate_product": "Avaliar produto", + "item_as_described_by_vendor": "O item é como descrito pelo vendedor?" + }, + "messages": { + "thanks_for_feedback": "Seu feedback foi enviado e está aguardando confirmação. Obrigado!" + } + }, + "validation_errors": { + "INVALID_ENTITY_TYPE": "As avaliações só podem ser deixadas para produtos.", + "PRODUCT_MUST_BE_PURCHASED": "Apenas usuários que compraram o produto podem deixar uma avaliação.", + "DUPLICATE_REVIEW": "O usuário já deixou uma avaliação para este produto.", + "INVALID_RATING": "A avaliação deve estar entre 1 e 5.", + "REVIEW_IS_EMPTY": "A propriedade 'Feedback' deve ser preenchida." + } +} diff --git a/client-app/modules/customer-reviews/locales/ru.json b/client-app/modules/customer-reviews/locales/ru.json new file mode 100644 index 0000000000..026db6e158 --- /dev/null +++ b/client-app/modules/customer-reviews/locales/ru.json @@ -0,0 +1,23 @@ +{ + "common": { + "buttons": { + "leave_feedback": "Оставить отзыв" + }, + "labels": { + "feedback": "Отзыв", + "rating": "Рейтинг", + "rate_product": "Оценить продукт", + "item_as_described_by_vendor": "Товар соответствует описанию продавца?" + }, + "messages": { + "thanks_for_feedback": "Ваш отзыв успешно отправлен и ожидает подтверждения. Спасибо!" + } + }, + "validation_errors": { + "INVALID_ENTITY_TYPE": "Отзывы можно оставлять только для продуктов.", + "PRODUCT_MUST_BE_PURCHASED": "Только пользователи, купившие продукт, могут оставить отзыв.", + "DUPLICATE_REVIEW": "Пользователь уже оставил отзыв на этот продукт.", + "INVALID_RATING": "Рейтинг должен быть в диапазоне от 1 до 5.", + "REVIEW_IS_EMPTY": "Поле 'Отзыв' должно быть заполнено." + } +} diff --git a/client-app/modules/customer-reviews/locales/zh.json b/client-app/modules/customer-reviews/locales/zh.json new file mode 100644 index 0000000000..7431088bd9 --- /dev/null +++ b/client-app/modules/customer-reviews/locales/zh.json @@ -0,0 +1,23 @@ +{ + "common": { + "buttons": { + "leave_feedback": "留下反馈" + }, + "labels": { + "feedback": "反馈", + "rating": "评分", + "rate_product": "评价产品", + "item_as_described_by_vendor": "商品是否如卖家描述?" + }, + "messages": { + "thanks_for_feedback": "您的反馈已成功提交,正在等待确认。谢谢!" + } + }, + "validation_errors": { + "INVALID_ENTITY_TYPE": "只能对产品留下评论。", + "PRODUCT_MUST_BE_PURCHASED": "只有购买过产品的用户才能留下评论。", + "DUPLICATE_REVIEW": "用户已对该产品留下评论。", + "INVALID_RATING": "评分应在1到5之间。", + "REVIEW_IS_EMPTY": "“反馈”字段必须填写。" + } +} diff --git a/client-app/modules/purchase-requests/locales/de.json b/client-app/modules/purchase-requests/locales/de.json new file mode 100644 index 0000000000..b55b2b3e7f --- /dev/null +++ b/client-app/modules/purchase-requests/locales/de.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "kaufanfragen.titel", + "table_description": "Liste der Kaufanfragen" + }, + "title": "Kaufanfragen", + "no_purchase_requests_message": "Es gibt noch keine Kaufanfragen", + "no_purchase_requests_img_alt": "Keine Bestellungen", + "purchase_request_number_label": "Kaufanfragenummer", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "Kaufanfragen" + } + } + }, + "purchase_request": { + "title": "Kaufanfrage #{0}", + "failed_or_used_description": "Es tut uns leid, aber wir konnten die Kaufanfrage nicht erstellen oder Sie haben sie bereits verwendet, um eine Bestellung zu erstellen", + "try_again": "Bitte versuchen Sie es erneut", + "files_section": { + "title": "Dateien" + }, + "from_file": { + "title": "Datei hochladen", + "upload": { + "message": "Laden Sie Fotos von Dokumenten, Screenshots oder handschriftlichen Notizen hoch, um Daten für eine neue Bestellung zu erhalten.", + "examples": { + "title": "Beispiele", + "alt": "Beispiele" + } + }, + "processing": { + "message": "Sie können Bilddateien oder PDF-Dateien mit Produktlisten in beliebiger Form hochladen, um Artikel schnell zu bestellen", + "loading_message": "Hochgeladenes Dokument wird erkannt...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "Zum Angebot gehen" + }, + "pages": { + "bulk_order": { + "from_file_tab": "Aus Datei" + } + } +} diff --git a/client-app/modules/purchase-requests/locales/es.json b/client-app/modules/purchase-requests/locales/es.json new file mode 100644 index 0000000000..bd619bfe12 --- /dev/null +++ b/client-app/modules/purchase-requests/locales/es.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "solicitudes_de_compra.título", + "table_description": "lista de solicitudes de compra" + }, + "title": "Solicitudes de Compra", + "no_purchase_requests_message": "Aún no hay solicitudes de compra", + "no_purchase_requests_img_alt": "Sin pedidos", + "purchase_request_number_label": "Número de solicitud de compra", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "Solicitudes de Compra" + } + } + }, + "purchase_request": { + "title": "Solicitud de compra #{0}", + "failed_or_used_description": "Lo sentimos, no pudimos crear la solicitud de compra o ya la usaste para crear un pedido", + "try_again": "Por favor, inténtalo de nuevo", + "files_section": { + "title": "Archivos" + }, + "from_file": { + "title": "Subir archivo", + "upload": { + "message": "Sube fotos de documentos, capturas de pantalla o notas manuscritas para obtener datos para un nuevo pedido.", + "examples": { + "title": "Ejemplos", + "alt": "Ejemplos" + } + }, + "processing": { + "message": "Puedes subir archivos de imagen o pdf con listados de productos en cualquier forma para un pedido rápido de artículos", + "loading_message": "Reconociendo un documento subido...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "Proceder a la cotización" + }, + "pages": { + "bulk_order": { + "from_file_tab": "Desde archivo" + } + } +} diff --git a/client-app/modules/purchase-requests/locales/fr.json b/client-app/modules/purchase-requests/locales/fr.json new file mode 100644 index 0000000000..e70f625516 --- /dev/null +++ b/client-app/modules/purchase-requests/locales/fr.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "demandes_d'achat.titre", + "table_description": "liste des demandes d'achat" + }, + "title": "Demandes d'Achat", + "no_purchase_requests_message": "Il n'y a pas encore de demandes d'achat", + "no_purchase_requests_img_alt": "Pas de commandes", + "purchase_request_number_label": "Numéro de demande d'achat", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "Demandes d'Achat" + } + } + }, + "purchase_request": { + "title": "Demande d'achat #{0}", + "failed_or_used_description": "Désolé, nous n'avons pas pu créer la demande d'achat ou vous l'avez déjà utilisée pour créer une commande", + "try_again": "Veuillez réessayer", + "files_section": { + "title": "Fichiers" + }, + "from_file": { + "title": "Télécharger le fichier", + "upload": { + "message": "Téléchargez des photos de documents, des captures d'écran ou des notes manuscrites pour obtenir des données pour une nouvelle commande.", + "examples": { + "title": "Exemples", + "alt": "Exemples" + } + }, + "processing": { + "message": "Vous pouvez télécharger des fichiers image ou pdf avec des listes de produits sous n'importe quelle forme pour une commande rapide d'articles", + "loading_message": "Reconnaissance d'un document téléchargé...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "Passer au devis" + }, + "pages": { + "bulk_order": { + "from_file_tab": "Depuis le fichier" + } + } +} diff --git a/client-app/modules/purchase-requests/locales/it.json b/client-app/modules/purchase-requests/locales/it.json new file mode 100644 index 0000000000..dd2deaa1eb --- /dev/null +++ b/client-app/modules/purchase-requests/locales/it.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "richieste_di_acquisto.titolo", + "table_description": "elenco delle richieste di acquisto" + }, + "title": "Richieste di Acquisto", + "no_purchase_requests_message": "Non ci sono ancora richieste di acquisto", + "no_purchase_requests_img_alt": "Nessun ordine", + "purchase_request_number_label": "Numero richiesta di acquisto", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "Richieste di Acquisto" + } + } + }, + "purchase_request": { + "title": "Richiesta di acquisto #{0}", + "failed_or_used_description": "Ci dispiace, ma non siamo riusciti a creare la richiesta di acquisto o l'hai già utilizzata per creare un ordine", + "try_again": "Per favore, riprova", + "files_section": { + "title": "File" + }, + "from_file": { + "title": "Carica file", + "upload": { + "message": "Carica foto di documenti, screenshot o note scritte a mano per ottenere dati per un nuovo ordine.", + "examples": { + "title": "Esempi", + "alt": "Esempi" + } + }, + "processing": { + "message": "Puoi caricare file immagine o pdf con elenchi di prodotti in qualsiasi forma per un ordine rapido di articoli", + "loading_message": "Riconoscimento di un documento caricato...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "Procedi al preventivo" + }, + "pages": { + "bulk_order": { + "from_file_tab": "Da file" + } + } +} diff --git a/client-app/modules/purchase-requests/locales/ja.json b/client-app/modules/purchase-requests/locales/ja.json new file mode 100644 index 0000000000..15317803bf --- /dev/null +++ b/client-app/modules/purchase-requests/locales/ja.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "購入リクエスト.タイトル", + "table_description": "購入リクエストのリスト" + }, + "title": "購入リクエスト", + "no_purchase_requests_message": "まだ購入リクエストはありません", + "no_purchase_requests_img_alt": "注文なし", + "purchase_request_number_label": "購入リクエスト番号", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "購入リクエスト" + } + } + }, + "purchase_request": { + "title": "購入リクエスト #{0}", + "failed_or_used_description": "申し訳ありませんが、購入リクエストを作成できなかったか、すでに注文を作成するために使用しました", + "try_again": "もう一度お試しください", + "files_section": { + "title": "ファイル" + }, + "from_file": { + "title": "ファイルをアップロード", + "upload": { + "message": "新しい注文のデータを取得するために、ドキュメントの写真、スクリーンショット、または手書きのメモをアップロードしてください。", + "examples": { + "title": "例", + "alt": "例" + } + }, + "processing": { + "message": "商品リストを含む画像ファイルまたはpdfファイルをアップロードして、アイテムを迅速に注文できます", + "loading_message": "アップロードされたドキュメントを認識中...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "見積もりに進む" + }, + "pages": { + "bulk_order": { + "from_file_tab": "ファイルから" + } + } +} diff --git a/client-app/modules/purchase-requests/locales/pl.json b/client-app/modules/purchase-requests/locales/pl.json new file mode 100644 index 0000000000..b5c329ad88 --- /dev/null +++ b/client-app/modules/purchase-requests/locales/pl.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "żądania_zakupu.tytuł", + "table_description": "lista żądań zakupu" + }, + "title": "Żądania Zakupu", + "no_purchase_requests_message": "Nie ma jeszcze żądań zakupu", + "no_purchase_requests_img_alt": "Brak zamówień", + "purchase_request_number_label": "Numer żądania zakupu", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "Żądania Zakupu" + } + } + }, + "purchase_request": { + "title": "Żądanie zakupu #{0}", + "failed_or_used_description": "Przepraszamy, ale nie udało się utworzyć żądania zakupu lub już go użyłeś do utworzenia zamówienia", + "try_again": "Proszę spróbować ponownie", + "files_section": { + "title": "Pliki" + }, + "from_file": { + "title": "Prześlij plik", + "upload": { + "message": "Prześlij zdjęcia dokumentów, zrzuty ekranu lub odręczne notatki, aby uzyskać dane do nowego zamówienia.", + "examples": { + "title": "Przykłady", + "alt": "Przykłady" + } + }, + "processing": { + "message": "Możesz przesłać pliki graficzne lub pdf z listami produktów w dowolnej formie, aby szybko zamówić przedmioty", + "loading_message": "Rozpoznawanie przesłanego dokumentu...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "Przejdź do wyceny" + }, + "pages": { + "bulk_order": { + "from_file_tab": "Z pliku" + } + } +} diff --git a/client-app/modules/purchase-requests/locales/pt.json b/client-app/modules/purchase-requests/locales/pt.json new file mode 100644 index 0000000000..9b0b9a3b84 --- /dev/null +++ b/client-app/modules/purchase-requests/locales/pt.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "solicitações_de_compra.título", + "table_description": "lista de solicitações de compra" + }, + "title": "Solicitações de Compra", + "no_purchase_requests_message": "Ainda não há solicitações de compra", + "no_purchase_requests_img_alt": "Sem pedidos", + "purchase_request_number_label": "Número da solicitação de compra", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "Solicitações de Compra" + } + } + }, + "purchase_request": { + "title": "Solicitação de compra #{0}", + "failed_or_used_description": "Desculpe, mas não conseguimos criar a solicitação de compra ou você já a usou para criar um pedido", + "try_again": "Por favor, tente novamente", + "files_section": { + "title": "Arquivos" + }, + "from_file": { + "title": "Carregar arquivo", + "upload": { + "message": "Carregue fotos de documentos, capturas de tela ou notas manuscritas para obter dados para um novo pedido.", + "examples": { + "title": "Exemplos", + "alt": "Exemplos" + } + }, + "processing": { + "message": "Você pode carregar arquivos de imagem ou pdf com listas de produtos em qualquer forma para um pedido rápido de itens", + "loading_message": "Reconhecendo um documento carregado...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "Ir para cotação" + }, + "pages": { + "bulk_order": { + "from_file_tab": "Do arquivo" + } + } +} diff --git a/client-app/modules/purchase-requests/locales/ru.json b/client-app/modules/purchase-requests/locales/ru.json new file mode 100644 index 0000000000..420879af6f --- /dev/null +++ b/client-app/modules/purchase-requests/locales/ru.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "запросы_на_покупку.заголовок", + "table_description": "список запросов на покупку" + }, + "title": "Запросы на Покупку", + "no_purchase_requests_message": "Запросов на покупку пока нет", + "no_purchase_requests_img_alt": "Нет заказов", + "purchase_request_number_label": "Номер запроса на покупку", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "Запросы на Покупку" + } + } + }, + "purchase_request": { + "title": "Запрос на покупку #{0}", + "failed_or_used_description": "Извините, но мы не смогли создать запрос на покупку или вы уже использовали его для создания заказа", + "try_again": "Пожалуйста, попробуйте снова", + "files_section": { + "title": "Файлы" + }, + "from_file": { + "title": "Загрузить файл", + "upload": { + "message": "Загрузите фотографии документов, скриншоты или рукописные заметки, чтобы получить данные для нового заказа.", + "examples": { + "title": "Примеры", + "alt": "Примеры" + } + }, + "processing": { + "message": "Вы можете загрузить файлы изображений или pdf с перечнями товаров в любой форме для быстрого заказа товаров", + "loading_message": "Распознавание загруженного документа...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "Перейти к котировке" + }, + "pages": { + "bulk_order": { + "from_file_tab": "Из файла" + } + } +} diff --git a/client-app/modules/purchase-requests/locales/zh.json b/client-app/modules/purchase-requests/locales/zh.json new file mode 100644 index 0000000000..1ecbd0ca5d --- /dev/null +++ b/client-app/modules/purchase-requests/locales/zh.json @@ -0,0 +1,47 @@ +{ + "purchase_requests": { + "meta": { + "title": "采购请求.标题", + "table_description": "采购请求列表" + }, + "title": "采购请求", + "no_purchase_requests_message": "目前还没有采购请求", + "no_purchase_requests_img_alt": "无订单", + "purchase_request_number_label": "采购请求编号", + "date_label": "@:common.labels.date", + "menu": { + "link": { + "title": "采购请求" + } + } + }, + "purchase_request": { + "title": "采购请求 #{0}", + "failed_or_used_description": "很抱歉,我们无法创建采购请求或您已使用它创建订单", + "try_again": "请再试一次", + "files_section": { + "title": "文件" + }, + "from_file": { + "title": "上传文件", + "upload": { + "message": "上传文件、截图或手写笔记的照片以获取新订单的数据。", + "examples": { + "title": "示例", + "alt": "示例" + } + }, + "processing": { + "message": "您可以上传包含产品列表的图像文件或pdf文件,以便快速订购商品", + "loading_message": "识别上传的文档...", + "cancel": "@:common.buttons.cancel" + } + }, + "go_to_quote": "前往报价" + }, + "pages": { + "bulk_order": { + "from_file_tab": "从文件" + } + } +} diff --git a/client-app/modules/push-messages/locales/es.json b/client-app/modules/push-messages/locales/es.json new file mode 100644 index 0000000000..b9fa464660 --- /dev/null +++ b/client-app/modules/push-messages/locales/es.json @@ -0,0 +1,18 @@ +{ + "push_messages": { + "title": "Notificaciones", + "menu_item_name": "Notificaciones", + "empty_list": "No tienes nuevas notificaciones en este momento", + "options": { + "make_all_as_read": "Marcar todo como leído", + "make_all_as_unread": "Marcar todo como no leído" + }, + "empty": { + "title": "No hay nuevas notificaciones por el momento.", + "description": "Mantente atento a las actualizaciones y mensajes importantes." + }, + "clear_all": "Borrar todo", + "view_all": "Ver todas las notificaciones", + "show_unread_only": "Mostrar solo no leídos" + } +} diff --git a/client-app/modules/push-messages/locales/it.json b/client-app/modules/push-messages/locales/it.json new file mode 100644 index 0000000000..c302b63621 --- /dev/null +++ b/client-app/modules/push-messages/locales/it.json @@ -0,0 +1,18 @@ +{ + "push_messages": { + "title": "Notifiche", + "menu_item_name": "Notifiche", + "empty_list": "Non hai nuove notifiche al momento", + "options": { + "make_all_as_read": "Segna tutto come letto", + "make_all_as_unread": "Segna tutto come non letto" + }, + "empty": { + "title": "Nessuna nuova notifica al momento.", + "description": "Rimani aggiornato su novità e messaggi importanti." + }, + "clear_all": "Cancella tutto", + "view_all": "Visualizza tutte le notifiche", + "show_unread_only": "Mostra solo non letti" + } +} diff --git a/client-app/modules/push-messages/locales/ja.json b/client-app/modules/push-messages/locales/ja.json new file mode 100644 index 0000000000..6e3a2d3add --- /dev/null +++ b/client-app/modules/push-messages/locales/ja.json @@ -0,0 +1,18 @@ +{ + "push_messages": { + "title": "通知", + "menu_item_name": "通知", + "empty_list": "現在、新しい通知はありません", + "options": { + "make_all_as_read": "すべて既読にする", + "make_all_as_unread": "すべて未読にする" + }, + "empty": { + "title": "現在、新しい通知はありません。", + "description": "更新情報や重要なメッセージをお待ちください。" + }, + "clear_all": "すべてクリア", + "view_all": "すべての通知を表示", + "show_unread_only": "未読のみ表示" + } +} diff --git a/client-app/modules/push-messages/locales/pl.json b/client-app/modules/push-messages/locales/pl.json new file mode 100644 index 0000000000..97209cbb21 --- /dev/null +++ b/client-app/modules/push-messages/locales/pl.json @@ -0,0 +1,18 @@ +{ + "push_messages": { + "title": "Powiadomienia", + "menu_item_name": "Powiadomienia", + "empty_list": "Nie masz nowych powiadomień w tej chwili", + "options": { + "make_all_as_read": "Oznacz wszystko jako przeczytane", + "make_all_as_unread": "Oznacz wszystko jako nieprzeczytane" + }, + "empty": { + "title": "Brak nowych powiadomień w tej chwili.", + "description": "Bądź na bieżąco z aktualizacjami i ważnymi wiadomościami." + }, + "clear_all": "Wyczyść wszystko", + "view_all": "Zobacz wszystkie powiadomienia", + "show_unread_only": "Pokaż tylko nieprzeczytane" + } +} diff --git a/client-app/modules/push-messages/locales/pt.json b/client-app/modules/push-messages/locales/pt.json new file mode 100644 index 0000000000..be3d9270f2 --- /dev/null +++ b/client-app/modules/push-messages/locales/pt.json @@ -0,0 +1,18 @@ +{ + "push_messages": { + "title": "Notificações", + "menu_item_name": "Notificações", + "empty_list": "Você não tem novas notificações no momento", + "options": { + "make_all_as_read": "Marcar tudo como lido", + "make_all_as_unread": "Marcar tudo como não lido" + }, + "empty": { + "title": "Sem novas notificações no momento.", + "description": "Fique atento a atualizações e mensagens importantes." + }, + "clear_all": "Limpar tudo", + "view_all": "Ver todas as notificações", + "show_unread_only": "Mostrar apenas não lidas" + } +} diff --git a/client-app/modules/push-messages/locales/ru.json b/client-app/modules/push-messages/locales/ru.json new file mode 100644 index 0000000000..8cd3641b61 --- /dev/null +++ b/client-app/modules/push-messages/locales/ru.json @@ -0,0 +1,18 @@ +{ + "push_messages": { + "title": "Уведомления", + "menu_item_name": "Уведомления", + "empty_list": "У вас нет новых уведомлений в данный момент", + "options": { + "make_all_as_read": "Отметить все как прочитанные", + "make_all_as_unread": "Отметить все как непрочитанные" + }, + "empty": { + "title": "На данный момент новых уведомлений нет.", + "description": "Следите за обновлениями и важными сообщениями." + }, + "clear_all": "Очистить все", + "view_all": "Просмотреть все уведомления", + "show_unread_only": "Показать только непрочитанные" + } +} diff --git a/client-app/modules/push-messages/locales/zh.json b/client-app/modules/push-messages/locales/zh.json new file mode 100644 index 0000000000..83834481e6 --- /dev/null +++ b/client-app/modules/push-messages/locales/zh.json @@ -0,0 +1,18 @@ +{ + "push_messages": { + "title": "通知", + "menu_item_name": "通知", + "empty_list": "您目前没有新通知", + "options": { + "make_all_as_read": "全部标记为已读", + "make_all_as_unread": "全部标记为未读" + }, + "empty": { + "title": "目前没有新通知。", + "description": "请关注更新和重要消息。" + }, + "clear_all": "清除所有", + "view_all": "查看所有通知", + "show_unread_only": "仅显示未读" + } +} diff --git a/client-app/modules/quotes/locales/de.json b/client-app/modules/quotes/locales/de.json index 47668b0cf1..0b09ccab45 100644 --- a/client-app/modules/quotes/locales/de.json +++ b/client-app/modules/quotes/locales/de.json @@ -1,8 +1,69 @@ { "quotes": { - "request_quote_button": "Artikel zum Angebot hinzufügen", + "meta": { + "title": "@:quotes.title", + "table_description": "angeforderte Angebote" + }, + "title": "Angebotsanfragen", + "no_quotes_message": "Es gibt noch keine Angebotsanfragen", + "quote_number_label": "Angebotsnummer", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "Stichwort eingeben...", + "no_results_message": "Keine Ergebnisse gefunden", + "request_quote_button": "Angebot anfordern", + "search_quote_requests": "Angebotsanfragen suchen", + "reset_search": "Suche zurücksetzen", + "cart_widget": { + "quote_request_hint": "Sie können Artikel in Ihrem Warenkorb über einen speziellen Service anfordern", + "create_quote_button": "Warenkorbartikel zum Angebot hinzufügen", + "title": "Angebotsanfrage" + }, "navigation": { "route_name": "Angebotsanfragen" + }, + "errors": { + "creating_quote_error": "Fehler beim Erstellen eines Angebots" + } + }, + "quote_details": { + "quote_request_comment": "Kommentar zur Angebotsanfrage", + "title": "Angebotsanfrage #{0}", + "comment": "Kommentar", + "comment_field_label": "Haben Sie eine allgemeine Bemerkung zu dieser Angebotsanfrage?", + "products": "Produkte", + "shipping_address": "Lieferadresse", + "billing_address": "Rechnungsadresse", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "Sie haben keine Adresse angegeben. Bitte geben Sie eine an.", + "same_as_shipping_address": "Gleich wie Lieferadresse", + "quote_summary": "Angebotsübersicht", + "quote_data": "Angebotsdaten", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "Die Angebotsanfrage enthält keine Artikel", + "save_changes_notification_success": "Die Angebotsanfrage wurde erfolgreich gespeichert", + "select_shipping_address": "Lieferadresse auswählen", + "select_billing_address": "Rechnungsadresse auswählen", + "files": "Dateien", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "Das Angebot kann nicht genehmigt werden", + "decline": "Das Angebot kann nicht abgelehnt werden" } } } diff --git a/client-app/modules/quotes/locales/es.json b/client-app/modules/quotes/locales/es.json new file mode 100644 index 0000000000..2089763743 --- /dev/null +++ b/client-app/modules/quotes/locales/es.json @@ -0,0 +1,69 @@ +{ + "quotes": { + "meta": { + "title": "@:quotes.title", + "table_description": "cotizaciones solicitadas" + }, + "title": "Solicitudes de Cotización", + "no_quotes_message": "No hay solicitudes de cotización aún", + "quote_number_label": "Número de cotización", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "Ingrese palabra clave...", + "no_results_message": "No se encontraron resultados", + "request_quote_button": "Solicitar Cotización", + "search_quote_requests": "Buscar solicitudes de cotización", + "reset_search": "Restablecer búsqueda", + "cart_widget": { + "quote_request_hint": "Puede solicitar artículos en su carrito a través de un servicio especial", + "create_quote_button": "Agregar artículos del carrito a la cotización", + "title": "Solicitud de cotización" + }, + "navigation": { + "route_name": "Solicitudes de Cotización" + }, + "errors": { + "creating_quote_error": "Error al crear una cotización" + } + }, + "quote_details": { + "quote_request_comment": "Comentario de solicitud de cotización", + "title": "Solicitud de Cotización #{0}", + "comment": "Comentario", + "comment_field_label": "¿Tiene algún comentario general para esta solicitud de cotización?", + "products": "Productos", + "shipping_address": "Dirección de Envío", + "billing_address": "Dirección de Facturación", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "No ha establecido una dirección. Por favor, especifique una.", + "same_as_shipping_address": "Igual que la dirección de envío", + "quote_summary": "Resumen de Cotización", + "quote_data": "Datos de Cotización", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "La solicitud de cotización no tiene artículos", + "save_changes_notification_success": "La solicitud de cotización se ha guardado con éxito", + "select_shipping_address": "Seleccione una dirección de envío", + "select_billing_address": "Seleccione una dirección de facturación", + "files": "Archivos", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "La cotización no puede ser aprobada", + "decline": "La cotización no puede ser rechazada" + } + } +} diff --git a/client-app/modules/quotes/locales/fr.json b/client-app/modules/quotes/locales/fr.json index 670c894e0d..665cf48fc3 100644 --- a/client-app/modules/quotes/locales/fr.json +++ b/client-app/modules/quotes/locales/fr.json @@ -1,8 +1,69 @@ { "quotes": { - "request_quote_button": "Ajouter des articles au devis", + "meta": { + "title": "@:quotes.title", + "table_description": "devis demandés" + }, + "title": "Demandes de Devis", + "no_quotes_message": "Il n'y a pas encore de demandes de devis", + "quote_number_label": "Numéro de devis", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "Entrez un mot-clé...", + "no_results_message": "Aucun résultat trouvé", + "request_quote_button": "Demander un Devis", + "search_quote_requests": "Rechercher des demandes de devis", + "reset_search": "Réinitialiser la recherche", + "cart_widget": { + "quote_request_hint": "Vous pouvez demander des articles dans votre panier via un service spécial", + "create_quote_button": "Ajouter les articles du panier au devis", + "title": "Demande de devis" + }, "navigation": { - "route_name": "Demandes de devis" + "route_name": "Demandes de Devis" + }, + "errors": { + "creating_quote_error": "Erreur lors de la création d'un devis" + } + }, + "quote_details": { + "quote_request_comment": "Commentaire sur la demande de devis", + "title": "Demande de Devis #{0}", + "comment": "Commentaire", + "comment_field_label": "Avez-vous une remarque générale pour cette demande de devis ?", + "products": "Produits", + "shipping_address": "Adresse de Livraison", + "billing_address": "Adresse de Facturation", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "Vous n'avez pas défini d'adresse. Veuillez en spécifier une.", + "same_as_shipping_address": "Identique à l'adresse de livraison", + "quote_summary": "Résumé du Devis", + "quote_data": "Données du Devis", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "La demande de devis ne contient pas d'articles", + "save_changes_notification_success": "La demande de devis a été enregistrée avec succès", + "select_shipping_address": "Sélectionnez une adresse de livraison", + "select_billing_address": "Sélectionnez une adresse de facturation", + "files": "Fichiers", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "Le devis ne peut pas être approuvé", + "decline": "Le devis ne peut pas être refusé" } } } diff --git a/client-app/modules/quotes/locales/it.json b/client-app/modules/quotes/locales/it.json new file mode 100644 index 0000000000..20722d39e4 --- /dev/null +++ b/client-app/modules/quotes/locales/it.json @@ -0,0 +1,69 @@ +{ + "quotes": { + "meta": { + "title": "@:quotes.title", + "table_description": "preventivi richiesti" + }, + "title": "Richieste di Preventivo", + "no_quotes_message": "Non ci sono ancora richieste di preventivo", + "quote_number_label": "Numero di preventivo", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "Inserisci parola chiave...", + "no_results_message": "Nessun risultato trovato", + "request_quote_button": "Richiedi Preventivo", + "search_quote_requests": "Cerca richieste di preventivo", + "reset_search": "Reimposta ricerca", + "cart_widget": { + "quote_request_hint": "Puoi richiedere articoli nel tuo carrello tramite un servizio speciale", + "create_quote_button": "Aggiungi articoli del carrello al preventivo", + "title": "Richiesta di preventivo" + }, + "navigation": { + "route_name": "Richieste di Preventivo" + }, + "errors": { + "creating_quote_error": "Errore nella creazione di un preventivo" + } + }, + "quote_details": { + "quote_request_comment": "Commento alla richiesta di preventivo", + "title": "Richiesta di Preventivo #{0}", + "comment": "Commento", + "comment_field_label": "Hai un commento generale per questa richiesta di preventivo?", + "products": "Prodotti", + "shipping_address": "Indirizzo di Spedizione", + "billing_address": "Indirizzo di Fatturazione", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "Non hai impostato un indirizzo. Si prega di specificarne uno.", + "same_as_shipping_address": "Uguale all'indirizzo di spedizione", + "quote_summary": "Riepilogo Preventivo", + "quote_data": "Dati Preventivo", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "La richiesta di preventivo non ha articoli", + "save_changes_notification_success": "La richiesta di preventivo è stata salvata con successo", + "select_shipping_address": "Seleziona un indirizzo di spedizione", + "select_billing_address": "Seleziona un indirizzo di fatturazione", + "files": "File", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "Il preventivo non può essere approvato", + "decline": "Il preventivo non può essere rifiutato" + } + } +} diff --git a/client-app/modules/quotes/locales/ja.json b/client-app/modules/quotes/locales/ja.json new file mode 100644 index 0000000000..42bd2eb4ae --- /dev/null +++ b/client-app/modules/quotes/locales/ja.json @@ -0,0 +1,69 @@ +{ + "quotes": { + "meta": { + "title": "@:quotes.title", + "table_description": "リクエストされた見積もり" + }, + "title": "見積もりリクエスト", + "no_quotes_message": "まだ見積もりリクエストはありません", + "quote_number_label": "見積もり番号", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "キーワードを入力...", + "no_results_message": "結果が見つかりません", + "request_quote_button": "見積もりをリクエスト", + "search_quote_requests": "見積もりリクエストを検索", + "reset_search": "検索をリセット", + "cart_widget": { + "quote_request_hint": "特別なサービスを通じてカート内のアイテムをリクエストできます", + "create_quote_button": "カートのアイテムを見積もりに追加", + "title": "見積もりリクエスト" + }, + "navigation": { + "route_name": "見積もりリクエスト" + }, + "errors": { + "creating_quote_error": "見積もりの作成中にエラーが発生しました" + } + }, + "quote_details": { + "quote_request_comment": "見積もりリクエストコメント", + "title": "見積もりリクエスト #{0}", + "comment": "コメント", + "comment_field_label": "この見積もりリクエストに対する一般的なコメントはありますか?", + "products": "製品", + "shipping_address": "配送先住所", + "billing_address": "請求先住所", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "住所が設定されていません。指定してください。", + "same_as_shipping_address": "配送先住所と同じ", + "quote_summary": "見積もり概要", + "quote_data": "見積もりデータ", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "見積もりリクエストにアイテムがありません", + "save_changes_notification_success": "見積もりリクエストが正常に保存されました", + "select_shipping_address": "配送先住所を選択", + "select_billing_address": "請求先住所を選択", + "files": "ファイル", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "見積もりを承認できません", + "decline": "見積もりを拒否できません" + } + } +} diff --git a/client-app/modules/quotes/locales/pl.json b/client-app/modules/quotes/locales/pl.json new file mode 100644 index 0000000000..54f080f7ac --- /dev/null +++ b/client-app/modules/quotes/locales/pl.json @@ -0,0 +1,69 @@ +{ + "quotes": { + "meta": { + "title": "@:quotes.title", + "table_description": "żądane oferty" + }, + "title": "Żądania Ofert", + "no_quotes_message": "Nie ma jeszcze żądań ofert", + "quote_number_label": "Numer oferty", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "Wpisz słowo kluczowe...", + "no_results_message": "Nie znaleziono wyników", + "request_quote_button": "Poproś o Ofertę", + "search_quote_requests": "Szukaj żądań ofert", + "reset_search": "Zresetuj wyszukiwanie", + "cart_widget": { + "quote_request_hint": "Możesz poprosić o przedmioty w koszyku za pomocą specjalnej usługi", + "create_quote_button": "Dodaj przedmioty z koszyka do oferty", + "title": "Żądanie oferty" + }, + "navigation": { + "route_name": "Żądania Ofert" + }, + "errors": { + "creating_quote_error": "Błąd podczas tworzenia oferty" + } + }, + "quote_details": { + "quote_request_comment": "Komentarz do żądania oferty", + "title": "Żądanie Oferty #{0}", + "comment": "Komentarz", + "comment_field_label": "Czy masz ogólną uwagę do tego żądania oferty?", + "products": "Produkty", + "shipping_address": "Adres Dostawy", + "billing_address": "Adres Rozliczeniowy", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "Nie ustawiłeś adresu. Proszę podać jeden.", + "same_as_shipping_address": "Taki sam jak adres dostawy", + "quote_summary": "Podsumowanie Oferty", + "quote_data": "Dane Oferty", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "Żądanie oferty nie zawiera przedmiotów", + "save_changes_notification_success": "Żądanie oferty zostało pomyślnie zapisane", + "select_shipping_address": "Wybierz adres dostawy", + "select_billing_address": "Wybierz adres rozliczeniowy", + "files": "Pliki", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "Oferty nie można zatwierdzić", + "decline": "Oferty nie można odrzucić" + } + } +} diff --git a/client-app/modules/quotes/locales/pt.json b/client-app/modules/quotes/locales/pt.json new file mode 100644 index 0000000000..3526c9aca0 --- /dev/null +++ b/client-app/modules/quotes/locales/pt.json @@ -0,0 +1,69 @@ +{ + "quotes": { + "meta": { + "title": "@:quotes.title", + "table_description": "cotações solicitadas" + }, + "title": "Solicitações de Cotação", + "no_quotes_message": "Ainda não há solicitações de cotação", + "quote_number_label": "Número da cotação", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "Digite a palavra-chave...", + "no_results_message": "Nenhum resultado encontrado", + "request_quote_button": "Solicitar Cotação", + "search_quote_requests": "Pesquisar solicitações de cotação", + "reset_search": "Redefinir pesquisa", + "cart_widget": { + "quote_request_hint": "Você pode solicitar itens no seu carrinho através de um serviço especial", + "create_quote_button": "Adicionar itens do carrinho à cotação", + "title": "Solicitação de cotação" + }, + "navigation": { + "route_name": "Solicitações de Cotação" + }, + "errors": { + "creating_quote_error": "Erro ao criar uma cotação" + } + }, + "quote_details": { + "quote_request_comment": "Comentário da solicitação de cotação", + "title": "Solicitação de Cotação #{0}", + "comment": "Comentário", + "comment_field_label": "Você tem algum comentário geral para esta solicitação de cotação?", + "products": "Produtos", + "shipping_address": "Endereço de Entrega", + "billing_address": "Endereço de Cobrança", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "Você não definiu um endereço. Por favor, especifique um.", + "same_as_shipping_address": "Igual ao endereço de entrega", + "quote_summary": "Resumo da Cotação", + "quote_data": "Dados da Cotação", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "A solicitação de cotação não possui itens", + "save_changes_notification_success": "A solicitação de cotação foi salva com sucesso", + "select_shipping_address": "Selecione um endereço de entrega", + "select_billing_address": "Selecione um endereço de cobrança", + "files": "Arquivos", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "A cotação não pode ser aprovada", + "decline": "A cotação não pode ser recusada" + } + } +} diff --git a/client-app/modules/quotes/locales/ru.json b/client-app/modules/quotes/locales/ru.json new file mode 100644 index 0000000000..801966d311 --- /dev/null +++ b/client-app/modules/quotes/locales/ru.json @@ -0,0 +1,69 @@ +{ + "quotes": { + "meta": { + "title": "@:quotes.title", + "table_description": "запрошенные квоты" + }, + "title": "Запросы квот", + "no_quotes_message": "Запросов квот пока нет", + "quote_number_label": "Номер квоты", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "Введите ключевое слово...", + "no_results_message": "Результаты не найдены", + "request_quote_button": "Запросить квоту", + "search_quote_requests": "Поиск запросов квот", + "reset_search": "Сбросить поиск", + "cart_widget": { + "quote_request_hint": "Вы можете запросить товары в вашей корзине через специальную услугу", + "create_quote_button": "Добавить товары из корзины в квоту", + "title": "Запрос квоты" + }, + "navigation": { + "route_name": "Запросы квот" + }, + "errors": { + "creating_quote_error": "Ошибка при создании квоты" + } + }, + "quote_details": { + "quote_request_comment": "Комментарий к запросу квоты", + "title": "Запрос квоты #{0}", + "comment": "Комментарий", + "comment_field_label": "У вас есть общий комментарий к этому запросу квоты?", + "products": "Продукты", + "shipping_address": "Адрес доставки", + "billing_address": "Адрес для выставления счета", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "Вы не указали адрес. Пожалуйста, укажите его.", + "same_as_shipping_address": "Такой же, как адрес доставки", + "quote_summary": "Сводка квоты", + "quote_data": "Данные квоты", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "Запрос квоты не содержит товаров", + "save_changes_notification_success": "Запрос квоты успешно сохранен", + "select_shipping_address": "Выберите адрес доставки", + "select_billing_address": "Выберите адрес для выставления счета", + "files": "Файлы", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "Квота не может быть утверждена", + "decline": "Квота не может быть отклонена" + } + } +} diff --git a/client-app/modules/quotes/locales/zh.json b/client-app/modules/quotes/locales/zh.json new file mode 100644 index 0000000000..ad942b6919 --- /dev/null +++ b/client-app/modules/quotes/locales/zh.json @@ -0,0 +1,69 @@ +{ + "quotes": { + "meta": { + "title": "@:quotes.title", + "table_description": "请求的报价" + }, + "title": "报价请求", + "no_quotes_message": "尚无报价请求", + "quote_number_label": "报价编号", + "date_label": "@:common.labels.date", + "status_label": "@:common.labels.status", + "total_label": "@:common.labels.total", + "search_placeholder": "输入关键词...", + "no_results_message": "未找到结果", + "request_quote_button": "请求报价", + "search_quote_requests": "搜索报价请求", + "reset_search": "重置搜索", + "cart_widget": { + "quote_request_hint": "您可以通过特殊服务请求购物车中的商品", + "create_quote_button": "将购物车商品添加到报价", + "title": "报价请求" + }, + "navigation": { + "route_name": "报价请求" + }, + "errors": { + "creating_quote_error": "创建报价时出错" + } + }, + "quote_details": { + "quote_request_comment": "报价请求评论", + "title": "报价请求 #{0}", + "comment": "评论", + "comment_field_label": "您对这个报价请求有一般性评论吗?", + "products": "产品", + "shipping_address": "送货地址", + "billing_address": "账单地址", + "save_changes": "@:common.buttons.save_changes", + "submit": "@:common.buttons.submit", + "no_address_message": "您尚未设置地址。请指定一个。", + "same_as_shipping_address": "与送货地址相同", + "quote_summary": "报价摘要", + "quote_data": "报价数据", + "subTotal": "@:common.labels.subtotal", + "discountTotal": "@:common.labels.discount", + "shippingTotal": "@:common.labels.shipping_cost", + "taxTotal": "@:common.labels.tax", + "total": "@:common.labels.total", + "created": "@:common.labels.created", + "status": "@:common.labels.status", + "no_items_message": "报价请求没有商品", + "save_changes_notification_success": "报价请求已成功保存", + "select_shipping_address": "选择送货地址", + "select_billing_address": "选择账单地址", + "files": "文件", + "line_items": { + "product": "@:common.labels.product", + "properties": "@:common.labels.properties", + "price_per_item": "@:common.labels.price_per_item", + "quantity": "@:common.labels.quantity", + "total": "@:common.labels.total", + "subtotal": "@:common.labels.subtotal" + }, + "error": { + "approve": "报价无法批准", + "decline": "报价无法拒绝" + } + } +} diff --git a/client-app/pages/account/list-details.vue b/client-app/pages/account/list-details.vue index 835a3c04e0..e1daa11564 100644 --- a/client-app/pages/account/list-details.vue +++ b/client-app/pages/account/list-details.vue @@ -115,9 +115,10 @@ import { useAnalytics, useHistoricalEvents, usePageHead } from "@/core/composabl import { PAGE_LIMIT } from "@/core/constants"; import { globals } from "@/core/globals"; import { prepareLineItem } from "@/core/utilities"; -import { productsInWishlistEvent, useBroadcast } from "@/shared/broadcast"; +import { dataChangedEvent, useBroadcast } from "@/shared/broadcast"; import { useShortCart, getItemsForAddBulkItemsToCartResultsModal } from "@/shared/cart"; import { ProductSkeletonGrid } from "@/shared/catalog"; +import { SaveChangesModal } from "@/shared/common"; import { BackButtonInHeader } from "@/shared/layout"; import { useModal } from "@/shared/modal"; import { @@ -126,7 +127,6 @@ import { DeleteWishlistProductModal, WishlistLineItems, WishlistProductItemSkeleton, - SaveWishlistChangesModal, } from "@/shared/wishlists"; import type { InputUpdateWishlistItemsType, @@ -233,8 +233,10 @@ async function updateItems() { async function openSaveChangesModal(): Promise { return await new Promise((resolve) => { const closeModal = openModal({ - component: SaveWishlistChangesModal, + component: SaveChangesModal, props: { + title: t("pages.account.list_details.save_changes"), + message: t("pages.account.list_details.save_changes_message"), onConfirm: async () => { closeModal(); await updateItems(); @@ -313,7 +315,7 @@ function openDeleteProductModal(values: string[]): void { async onResult(): Promise { const previousPagesCount = pagesCount.value; - void broadcast.emit(productsInWishlistEvent, [{ productId: item.productId, inWishlist: false }]); + void broadcast.emit(dataChangedEvent); wishlistItems.value = wishlistItems.value?.filter((listItem) => listItem.id !== item.id); diff --git a/client-app/pages/cart.vue b/client-app/pages/cart.vue index db0955a5bf..e25ee6d694 100644 --- a/client-app/pages/cart.vue +++ b/client-app/pages/cart.vue @@ -129,7 +129,7 @@
{{ $t("common.labels.total") }}: diff --git a/client-app/public/favicon.ico b/client-app/public/favicon.ico new file mode 100644 index 0000000000..06e667e670 Binary files /dev/null and b/client-app/public/favicon.ico differ diff --git a/client-app/shared/broadcast/index.ts b/client-app/shared/broadcast/index.ts index 5d23fe24cf..f2ea4e4b76 100644 --- a/client-app/shared/broadcast/index.ts +++ b/client-app/shared/broadcast/index.ts @@ -1,3 +1,2 @@ export * from "./composables"; -export * from "./types"; export * from "./utils"; diff --git a/client-app/shared/broadcast/types/index.ts b/client-app/shared/broadcast/types/index.ts deleted file mode 100644 index 325172a4e1..0000000000 --- a/client-app/shared/broadcast/types/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type ProductInWishlistEventDataType = { productId: string; inWishlist: boolean }; diff --git a/client-app/shared/broadcast/utils/events.ts b/client-app/shared/broadcast/utils/events.ts index 2abf2df5ab..99ef8da51f 100644 --- a/client-app/shared/broadcast/utils/events.ts +++ b/client-app/shared/broadcast/utils/events.ts @@ -11,12 +11,12 @@ * broadcast.emit(testEvent, 123); // Error */ +export const dataChangedEvent = "data_changed" as string; export const pageReloadEvent = "page_reload" as string; export const userReloadEvent = "user_reload" as string; export const userBeforeUnauthorizeEvent = "user_before_unauthorize" as string; export const userLockedEvent = "user_locked" as string; export const cartReloadEvent = "cart_reload" as string; -export const productsInWishlistEvent = "products_in_wishlist" as string; export const unauthorizedErrorEvent = "unauthorized_error" as string; export const unhandledErrorEvent = "unhandled_error" as string; export const openReturnUrl = "open_return_url" as string; diff --git a/client-app/shared/cart/components/add-to-cart.vue b/client-app/shared/cart/components/add-to-cart.vue index 3f8aaa96ef..211370a9a6 100644 --- a/client-app/shared/cart/components/add-to-cart.vue +++ b/client-app/shared/cart/components/add-to-cart.vue @@ -6,6 +6,7 @@ :min-quantity="product.minQuantity" :max-quantity="maxQty" :pack-size="product.packSize" + :is-active="product.availabilityData?.isActive" :is-available="product.availabilityData?.isAvailable" :is-buyable="product.availabilityData?.isBuyable" :is-in-stock="product.availabilityData?.isInStock" @@ -56,12 +57,12 @@ interface IProps { } const product = toRef(props, "product"); -const { cart, addToCart, changeItemQuantity, changeCartConfiguredItem } = useShortCart(); +const { cart, addToCart, changeItemQuantity } = useShortCart(); const { t } = useI18n(); const { analytics } = useAnalytics(); const { translate } = useErrorsTranslator("validation_error"); const configurableLineItemId = getUrlSearchParam(LINE_ITEM_ID_URL_SEARCH_PARAM); -const { selectedConfigurationInput } = useConfigurableProduct(product.value.id); +const { selectedConfigurationInput, changeCartConfiguredItem } = useConfigurableProduct(product.value.id); const loading = ref(false); const errorMessage = ref(); diff --git a/client-app/shared/cart/composables/useCart.ts b/client-app/shared/cart/composables/useCart.ts index 182076836b..f6d08620f2 100644 --- a/client-app/shared/cart/composables/useCart.ts +++ b/client-app/shared/cart/composables/useCart.ts @@ -28,7 +28,6 @@ import { useUnselectCartItemsMutation, useValidateCouponQuery, generateCacheIdIfNew, - useChangeCartConfiguredItemMutation, } from "@/core/api/graphql"; import { useAnalytics, useSyncMutationBatchers } from "@/core/composables"; import { getMergeStrategyUniqueBy, useMutationBatcher } from "@/core/composables/useMutationBatcher"; @@ -126,21 +125,6 @@ export function useShortCart() { } } - const { mutate: _changeCartConfiguredItem, loading: changeCartConfiguredItemLoading } = - useChangeCartConfiguredItemMutation(); - async function changeCartConfiguredItem( - lineItemId: string, - quantity: number, - configurationSections?: DeepReadonly, - ): Promise { - const result = await _changeCartConfiguredItem({ - lineItemId, - quantity, - configurationSections: configurationSections as ConfigurationSectionInput[], - }); - return result?.data?.changeCartConfiguredItem; - } - function getItemsTotal(productIds: string[]): number { if (!cart.value?.items.length) { return 0; @@ -158,7 +142,6 @@ export function useShortCart() { addItemsToCart, addBulkItemsToCart, changeItemQuantity, - changeCartConfiguredItem, getItemsTotal, loading, changing: computed( @@ -166,8 +149,7 @@ export function useShortCart() { addToCartLoading.value || addItemsToCartLoading.value || addBulkItemsToCartLoading.value || - changeItemQuantityLoading.value || - changeCartConfiguredItemLoading.value, + changeItemQuantityLoading.value, ), }; } diff --git a/client-app/shared/catalog/components/product-configuration.vue b/client-app/shared/catalog/components/product-configuration.vue index 2466351896..60991b79ce 100644 --- a/client-app/shared/catalog/components/product-configuration.vue +++ b/client-app/shared/catalog/components/product-configuration.vue @@ -86,17 +86,24 @@ diff --git a/client-app/shared/layout/components/footer/vc-footer.vue b/client-app/shared/layout/components/footer/vc-footer.vue index 0043425745..22cfee0dd5 100644 --- a/client-app/shared/layout/components/footer/vc-footer.vue +++ b/client-app/shared/layout/components/footer/vc-footer.vue @@ -3,14 +3,14 @@