From 2a2dd96d8d13fc851ab5b86dd6a286fd3580daae Mon Sep 17 00:00:00 2001 From: Salah Eddine Lalami <50052356+idurar@users.noreply.github.com> Date: Fri, 27 Oct 2023 15:41:40 +0100 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=8C=90=20Add=20new=20Language=20File?= =?UTF-8?q?=20for=20all=20pages=20=F0=9F=90=9B=20Fix=20Controller=20Model?= =?UTF-8?q?=20name=20bugs=20in=20offer=20and=20quote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../offerController/paginatedList.js | 2 +- .../appControllers/offerController/read.js | 2 +- .../quoteController/paginatedList.js | 2 +- .../appControllers/quoteController/read.js | 2 +- frontend/src/lang/language.js | 386 ++++++++++++++++++ frontend/src/pages/Admin/config/index.js | 19 + .../src/pages/{Admin.jsx => Admin/index.jsx} | 17 +- .../pages/AdvancedSettings/config/index.js | 19 + .../index.jsx} | 19 +- frontend/src/pages/Currency/config/index.js | 19 + .../{Currency.jsx => Currency/index.jsx} | 20 +- frontend/src/pages/Customer/config/index.js | 19 + .../{Customer.jsx => Customer/index.jsx} | 19 +- frontend/src/pages/Email/config/index.js | 18 +- frontend/src/pages/EmailTemplates.jsx | 74 ---- frontend/src/pages/Employee/config/index.js | 19 + .../{Employee.jsx => Employee/index.jsx} | 17 +- frontend/src/pages/Inventory/config/index.js | 15 +- frontend/src/pages/Invoice/config/index.js | 17 +- frontend/src/pages/Kyc.jsx | 88 ---- frontend/src/pages/Lead/config/index.js | 15 +- frontend/src/pages/Offer/config/index.js | 15 +- frontend/src/pages/Order/config/index.js | 19 + .../src/pages/{Order.jsx => Order/index.jsx} | 17 +- frontend/src/pages/Payment/config/index.js | 14 +- .../src/pages/PaymentMode/config/index.js | 19 + .../index.jsx} | 19 +- frontend/src/pages/Profile.jsx | 15 +- frontend/src/pages/Quote/config/index.js | 15 +- frontend/src/pages/Settings/config/index.js | 15 +- 30 files changed, 621 insertions(+), 335 deletions(-) create mode 100644 frontend/src/lang/language.js create mode 100644 frontend/src/pages/Admin/config/index.js rename frontend/src/pages/{Admin.jsx => Admin/index.jsx} (72%) create mode 100644 frontend/src/pages/AdvancedSettings/config/index.js rename frontend/src/pages/{AdvancedSettings.jsx => AdvancedSettings/index.jsx} (81%) create mode 100644 frontend/src/pages/Currency/config/index.js rename frontend/src/pages/{Currency.jsx => Currency/index.jsx} (82%) create mode 100644 frontend/src/pages/Customer/config/index.js rename frontend/src/pages/{Customer.jsx => Customer/index.jsx} (76%) delete mode 100644 frontend/src/pages/EmailTemplates.jsx create mode 100644 frontend/src/pages/Employee/config/index.js rename frontend/src/pages/{Employee.jsx => Employee/index.jsx} (83%) delete mode 100644 frontend/src/pages/Kyc.jsx create mode 100644 frontend/src/pages/Order/config/index.js rename frontend/src/pages/{Order.jsx => Order/index.jsx} (76%) create mode 100644 frontend/src/pages/PaymentMode/config/index.js rename frontend/src/pages/{PaymentMode.jsx => PaymentMode/index.jsx} (82%) diff --git a/backend/controllers/appControllers/offerController/paginatedList.js b/backend/controllers/appControllers/offerController/paginatedList.js index d42190425..e62d6816c 100644 --- a/backend/controllers/appControllers/offerController/paginatedList.js +++ b/backend/controllers/appControllers/offerController/paginatedList.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); -const Model = mongoose.model('Invoice'); +const Model = mongoose.model('Offer'); const paginatedList = async (req, res) => { const page = req.query.page || 1; diff --git a/backend/controllers/appControllers/offerController/read.js b/backend/controllers/appControllers/offerController/read.js index 18cc88441..9d4aea2c0 100644 --- a/backend/controllers/appControllers/offerController/read.js +++ b/backend/controllers/appControllers/offerController/read.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); -const Model = mongoose.model('Invoice'); +const Model = mongoose.model('Offer'); const read = async (req, res) => { try { diff --git a/backend/controllers/appControllers/quoteController/paginatedList.js b/backend/controllers/appControllers/quoteController/paginatedList.js index d42190425..b0c710c26 100644 --- a/backend/controllers/appControllers/quoteController/paginatedList.js +++ b/backend/controllers/appControllers/quoteController/paginatedList.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); -const Model = mongoose.model('Invoice'); +const Model = mongoose.model('Quote'); const paginatedList = async (req, res) => { const page = req.query.page || 1; diff --git a/backend/controllers/appControllers/quoteController/read.js b/backend/controllers/appControllers/quoteController/read.js index 18cc88441..04ac9aee3 100644 --- a/backend/controllers/appControllers/quoteController/read.js +++ b/backend/controllers/appControllers/quoteController/read.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); -const Model = mongoose.model('Invoice'); +const Model = mongoose.model('Quote'); const read = async (req, res) => { try { diff --git a/frontend/src/lang/language.js b/frontend/src/lang/language.js new file mode 100644 index 000000000..476f3e48d --- /dev/null +++ b/frontend/src/lang/language.js @@ -0,0 +1,386 @@ +const lang = { + edit: 'Edit', + save: 'Save', + cancel: 'Cancel', + delete: 'Delete', + create: 'Create', + update: 'Update', + search: 'Search', + select: 'Select', + view: 'View', + submit: 'Submit', + add: 'Add', + remove: 'Remove', + close: 'Close', + next: 'Next', + previous: 'Previous', + filter: 'Filter', + sort: 'Sort', + clear: 'Clear', + assign: 'Assign', + manage: 'Manage', + import: 'Import', + export: 'Export', + download: 'Download', + upload: 'Upload', + print: 'Print', + send: 'Send', + receive: 'Receive', + approve: 'Approve', + reject: 'Reject', + complete: 'Complete', + confirm: 'Confirm', + error: 'Error', + warning: 'Warning', + success: 'Success', + information: 'Information', + status: 'Status', + settings: 'Settings', + preferences: 'Preferences', + notification: 'Notification', + navigation: 'Navigation', + home: 'Home', + dashboard: 'Dashboard', + profile: 'Profile', + user: 'User', + account: 'Account', + supplier: 'Supplier', + product: 'Product', + order: 'Order', + payment: 'Payment', + report: 'Report', + analytics: 'Analytics', + audit: 'Audit', + history: 'History', + documentation: 'Documentation', + support: 'Support', + chat: 'Chat', + email: 'Email', + phone: 'Phone', + address: 'Address', + city: 'City', + state: 'State', + country: 'Country', + task: 'Task', + event: 'Event', + meeting: 'Meeting', + reminder: 'Reminder', + schedule: 'Schedule', + calendar: 'Calendar', + logout: 'Logout', + overview: 'Overview', + details: 'Details', + actions: 'Actions', + events: 'Events', + tasks: 'Tasks', + notes: 'Notes', + comments: 'Comments', + attachments: 'Attachments', + help: 'Help', + feedback: 'Feedback', + about: 'About', + contact: 'Contact', + notifications: 'Notifications', + privacy: 'Privacy', + security: 'Security', + appearance: 'Appearance', + language: 'Language', + timezone: 'Timezone', + date: 'Date', + time: 'Time', + quantity: 'Quantity', + price: 'Price', + amount: 'Amount', + discount: 'Discount', + subtotal: 'Subtotal', + total: 'Total', + cvv: 'CVV', + checkout: 'Checkout', + processing: 'Processing', + shipped: 'Shipped', + delivered: 'Delivered', + pending: 'Pending', + cancelled: 'Cancelled', + returned: 'Returned', + exchange: 'Exchange', + refund: 'Refund', + login: 'Login', + register: 'Register', + sale: 'Sale', + tax: 'Tax', + item: 'Item', + description: 'Description', + failure: 'Failure', + approved: 'Approved', + rejected: 'Rejected', + completed: 'Completed', + urgent: 'Urgent', + overdue: 'Overdue', + today: 'Today', + tomorrow: 'Tomorrow', + recurring: 'Recurring', + daily: 'Daily', + weekly: 'Weekly', + monthly: 'Monthly', + yearly: 'Yearly', + day: 'Day', + week: 'Week', + month: 'Month', + year: 'Year', + until: 'Until', + attachment: 'Attachment', + recipient: 'Recipient', + from: 'From', + to: 'To', + subject: 'Subject', + message: 'Message', + reply: 'Reply', + forward: 'Forward', + spam: 'Spam', + inbox: 'Inbox', + sent: 'Sent', + drafts: 'Drafts', + archived: 'Archived', + trash: 'Trash', + enable: 'Enable', + disable: 'Disable', + on: 'On', + off: 'Off', + quarterly: 'Quarterly', + loading: 'Loading', + refreshing: 'Refreshing', + submitting: 'Submitting', + saving: 'Saving', + deleting: 'Deleting', + updating: 'Updating', + creating: 'Creating', + info: 'Info!', + confirmation: 'Confirmation', + yes: 'Yes', + no: 'No', + hello: 'Hello!', + welcome: 'Welcome!', + goodbye: 'Goodbye!', + + invoice: 'Invoice', + quote: 'Quote', + offer: 'Offer', + lead: 'Lead', + customer: 'Customer', + admin: 'Admin', + employee: 'Employee', + currency: 'Currency', + + invoice_list: 'Invoice List', + add_new_invoice: 'Add New Invoice', + record_payment: 'Record Payment', + quote_list: 'Quote List', + add_new_quote: 'Add New Quote', + offer_list: 'Offer List', + add_new_offer: 'Add New Offer', + lead_list: 'Lead List', + add_new_lead: 'Add New Lead', + customer_list: 'Customer List', + add_new_customer: 'Add New Customer', + payment_list: 'Payment List', + add_new_payment: 'Add New Payment', + settings_list: 'Settings List', + add_new_settings: 'Add New Settings', + admin_list: 'Admin List', + add_new_admin: 'Add New Admin', + employee_list: 'Employee List', + add_new_employee: 'Add New Employee', + currency_list: 'Currency List', + add_new_currency: 'Add New Currency', + payment_mode: 'Payment Mode', + payment_mode_list: 'Payment Mode List', + add_new_payment_mode: 'Add New Payment Mode', + email_template: 'Email Template', + email_template_list: 'Email Template List', + add_new_email_template: 'Add New Email Template', + product_list: 'Product List', + add_new_product: 'Add New Product', + order_list: 'Order List', + add_new_order: 'Add New Order', + // long description + postal_code: 'Postal Code', + phone_number: 'Phone Number', + email_address: 'Email Address', + notification_settings: 'Notification Settings', + language_settings: 'Language Settings', + theme_settings: 'Theme Settings', + account_settings: 'Account Settings', + privacy_settings: 'Privacy Settings', + security_settings: 'Security Settings', + accessibility_settings: 'Accessibility Settings', + view_all: 'View All', + create_new: 'Create New', + edit_profile: 'Edit Profile', + change_password: 'Change Password', + account_details: 'Account Details', + billing_address: 'Billing Address', + shipping_address: 'Shipping Address', + order_details: 'Order Details', + payment_details: 'Payment Details', + item_details: 'Item Details', + currency_code: 'Currency Code', + tax_rate: 'Tax Rate', + terms_and_conditions: 'Terms and Conditions', + delivery_date: 'Delivery Date', + order_summary: 'Order Summary', + invoice_details: 'Invoice Details', + payment_method: 'Payment Method', + card_number: 'Card Number', + expiration_date: 'Expiration Date', + payment_status: 'Payment Status', + report_details: 'Report Details', + analytics_details: 'Analytics Details', + audit_trail: 'Audit Trail', + history_log: 'History Log', + documentation_details: 'Documentation Details', + support_details: 'Support Details', + chat_with_us: 'Chat with Us', + email_us: 'Email Us', + call_us: 'Call Us', + mailing_address: 'Mailing Address', + task_details: 'Task Details', + event_details: 'Event Details', + meeting_details: 'Meeting Details', + reminder_details: 'Reminder Details', + schedule_details: 'Schedule Details', + calendar_details: 'Calendar Details', + add_to_cart: 'Add to Cart', + continue_shopping: 'Continue Shopping', + product_details: 'Product Details', + customer_details: 'Customer Details', + shipping_details: 'Shipping Details', + billing_details: 'Billing Details', + payment_confirmation: 'Payment Confirmation', + order_confirmation: 'Order Confirmation', + thank_you: 'Thank You', + track_order: 'Track Order', + order_history: 'Order History', + delivery_options: 'Delivery Options', + shipping_method: 'Shipping Method', + order_status: 'Order Status', + on_hold: 'On Hold', + back_to_shop: 'Back to Shop', + my_account: 'My Account', + forgot_password: 'Forgot Password', + reset_password: 'Reset Password', + change_email: 'Change Email', + change_username: 'Change Username', + change_avatar: 'Change Avatar', + account_verification: 'Account Verification', + terms_of_service: 'Terms of Service', + privacy_policy: 'Privacy Policy', + cookie_policy: 'Cookie Policy', + data_protection: 'Data Protection', + accessibility_statement: 'Accessibility Statement', + error_404: 'Error 404 - Page Not Found', + error_500: 'Error 500 - Internal Server Error', + invalid_credentials: 'Invalid Credentials', + username_taken: 'Username Already Taken', + email_taken: 'Email Already Taken', + password_length: 'Password Length', + password_strength: 'Password Strength', + password_match: "Passwords Don't Match", + email_incorrect_format: 'Incorrect Email Format', + username_required: 'Username is Required', + email_required: 'Email is Required', + password_required: 'Password is Required', + confirm_password_required: 'Confirm Password is Required', + first_name_required: 'First Name is Required', + last_name_required: 'Last Name is Required', + phone_number_required: 'Phone Number is Required', + address_required: 'Address is Required', + city_required: 'City is Required', + state_required: 'State is Required', + postal_code_required: 'Postal Code is Required', + card_number_required: 'Card Number is Required', + expiration_date_required: 'Expiration Date is Required', + cvv_required: 'CVV is Required', + quantity_greater_than_zero: 'Quantity should be greater than zero', + invalid_card_number: 'Invalid Card Number', + invalid_expiration_date: 'Invalid Expiration Date', + invalid_cvv: 'Invalid CVV', + payment_declined: 'Payment Declined', + payment_pending: 'Payment Pending', + payment_failed: 'Payment Failed', + payment_success: 'Payment Success', + invalid_email_format: 'Invalid Email Format', + invalid_phone_number: 'Invalid Phone Number', + invalid_postal_code: 'Invalid Postal Code', + invalid_coupon_code: 'Invalid Coupon Code', + expired_coupon_code: 'Expired Coupon Code', + coupon_already_applied: 'Coupon Already Applied', + coupon_limit_reached: 'Coupon Limit Reached', + coupon_not_applicable: 'Coupon Not Applicable', + coupon_applied: 'Coupon Applied', + coupon_removed: 'Coupon Removed', + coupon_discount: 'Coupon Discount', + discount_percent: 'Discount Percent', + discount_amount: 'Discount Amount', + tax_percent: 'Tax Percent', + sub_total: 'Sub Total', + purchase_history: 'Purchase History', + order_number: 'Order Number', + date_ordered: 'Date Ordered', + payment_due: 'Payment Due', + due_date: 'Due Date', + payment_received: 'Payment Received', + received_date: 'Received Date', + unit_price: 'Unit Price', + transaction_id: 'Transaction ID', + in_progress: 'In Progress', + refund_requested: 'Refund Requested', + exchange_requested: 'Exchange Requested', + high_priority: 'High Priority', + medium_priority: 'Medium Priority', + low_priority: 'Low Priority', + this_week: 'This Week', + this_month: 'This Month', + select_date: 'Select Date', + select_time: 'Select Time', + start_date: 'Start Date', + end_date: 'End Date', + repeat_every: 'Repeat Every', + select_file: 'Select File', + upload_file: 'Upload File', + download_file: 'Download File', + file_size_limit: 'File Size Limit', + invalid_file_type: 'Invalid File Type', + file_upload_failed: 'File Upload Failed', + file_download_failed: 'File Download Failed', + file_not_found: 'File Not Found', + file_removed: 'File Removed', + send_message: 'Send Message', + mark_as_read: 'Mark as Read', + mark_as_unread: 'Mark as Unread', + mark_as_important: 'Mark as Important', + mark_as_not_important: 'Mark as Not Important', + delete_message: 'Delete Message', + email_notification: 'Email Notification', + push_notification: 'Push Notification', + sms_notification: 'SMS Notification', + web_notification: 'Web Notification', + notification_sound: 'Notification Sound', + search_placeholder: 'Search', + no_results_found: 'No Results Found', + please_wait: 'Please Wait', + are_you_sure: 'Are you sure?', + confirm_password: 'Confirm Password', + current_password: 'Current Password', + new_password: 'New Password', + remember_me: 'Remember Me', + thank_you_exclamation: 'Thank you!', + welcome_back: 'Welcome Back!', + account_activation: 'Account Activation', + email_verification: 'Email Verification', + password_reset: 'Password Reset', + order_tracking: 'Order Tracking', + contact_us: 'Contact Us', + live_chat: 'Live Chat', +}; + +module.exports = lang; diff --git a/frontend/src/pages/Admin/config/index.js b/frontend/src/pages/Admin/config/index.js new file mode 100644 index 000000000..be74033b2 --- /dev/null +++ b/frontend/src/pages/Admin/config/index.js @@ -0,0 +1,19 @@ +import lang from '@/lang/language'; + +const entity = 'admin'; + +const Labels = { + PANEL_TITLE: lang.admin, + DATATABLE_TITLE: lang.admin_list, + ADD_NEW_ENTITY: lang.add_new_admin, + ENTITY_NAME: lang.admin, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, +}; + +const configPage = { + entity, + ...Labels, +}; + +export default configPage; diff --git a/frontend/src/pages/Admin.jsx b/frontend/src/pages/Admin/index.jsx similarity index 72% rename from frontend/src/pages/Admin.jsx rename to frontend/src/pages/Admin/index.jsx index bb0b93ba8..a241eed90 100644 --- a/frontend/src/pages/Admin.jsx +++ b/frontend/src/pages/Admin/index.jsx @@ -1,5 +1,6 @@ import React from 'react'; +import configPage from './config'; import AdminCrudModule from '@/modules/AdminCrudModule'; import AdminForm from '@/forms/AdminForm'; @@ -11,8 +12,6 @@ export default function Admin() { outputValue: '_id', }; - const PANEL_TITLE = 'Admin Panel'; - const dataTableTitle = 'Admin Lists'; const entityDisplayLabels = ['email']; const readColumns = [ @@ -28,21 +27,9 @@ export default function Admin() { { title: 'Email', dataIndex: 'email' }, { title: "Role d'utilisateur", dataIndex: 'role' }, ]; - const ADD_NEW_ENTITY = 'Add new admin'; - const DATATABLE_TITLE = 'Admins List'; - const ENTITY_NAME = 'admin'; - const CREATE_ENTITY = 'Create admin'; - const UPDATE_ENTITY = 'Update admin'; const config = { - entity, - PANEL_TITLE, - dataTableTitle, - ENTITY_NAME, - CREATE_ENTITY, - ADD_NEW_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, + ...configPage, readColumns, dataTableColumns, searchConfig, diff --git a/frontend/src/pages/AdvancedSettings/config/index.js b/frontend/src/pages/AdvancedSettings/config/index.js new file mode 100644 index 000000000..ba1e549b2 --- /dev/null +++ b/frontend/src/pages/AdvancedSettings/config/index.js @@ -0,0 +1,19 @@ +import lang from '@/lang/language'; + +const entity = 'setting'; + +const Labels = { + PANEL_TITLE: lang.settings, + DATATABLE_TITLE: lang.settings_list, + ADD_NEW_ENTITY: lang.add_new_settings, + ENTITY_NAME: lang.settings, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, +}; + +const configPage = { + entity, + ...Labels, +}; + +export default configPage; diff --git a/frontend/src/pages/AdvancedSettings.jsx b/frontend/src/pages/AdvancedSettings/index.jsx similarity index 81% rename from frontend/src/pages/AdvancedSettings.jsx rename to frontend/src/pages/AdvancedSettings/index.jsx index c874042f7..840c27ec6 100644 --- a/frontend/src/pages/AdvancedSettings.jsx +++ b/frontend/src/pages/AdvancedSettings/index.jsx @@ -1,11 +1,13 @@ import React from 'react'; + +import configPage from './config'; + import { Switch } from 'antd'; import { CloseOutlined, CheckOutlined } from '@ant-design/icons'; import CrudModule from '@/modules/CrudModule'; import AdvancedSettingsForm from '@/forms/AdvancedSettingsForm'; export default function AdvancedSettings() { - const entity = 'setting'; const searchConfig = { displayLabels: ['name'], searchFields: 'name', @@ -68,21 +70,8 @@ export default function AdvancedSettings() { }, ]; - const ADD_NEW_ENTITY = 'Add new Setting'; - const DATATABLE_TITLE = 'Settings List'; - const ENTITY_NAME = 'advanced settings'; - const CREATE_ENTITY = 'Create a setting'; - const UPDATE_ENTITY = 'Update a setting'; - const PANEL_TITLE = 'Settings Panel'; - const config = { - entity, - PANEL_TITLE, - ENTITY_NAME, - CREATE_ENTITY, - ADD_NEW_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, + ...configPage, readColumns, dataTableColumns, searchConfig, diff --git a/frontend/src/pages/Currency/config/index.js b/frontend/src/pages/Currency/config/index.js new file mode 100644 index 000000000..8ef12171e --- /dev/null +++ b/frontend/src/pages/Currency/config/index.js @@ -0,0 +1,19 @@ +import lang from '@/lang/language'; + +const entity = 'currency'; + +const Labels = { + PANEL_TITLE: lang.currency, + DATATABLE_TITLE: lang.currency_list, + ADD_NEW_ENTITY: lang.add_new_currency, + ENTITY_NAME: lang.currency, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, +}; + +const configPage = { + entity, + ...Labels, +}; + +export default configPage; diff --git a/frontend/src/pages/Currency.jsx b/frontend/src/pages/Currency/index.jsx similarity index 82% rename from frontend/src/pages/Currency.jsx rename to frontend/src/pages/Currency/index.jsx index cef29238c..a70cc80d8 100644 --- a/frontend/src/pages/Currency.jsx +++ b/frontend/src/pages/Currency/index.jsx @@ -1,11 +1,13 @@ import React from 'react'; + +import configPage from './config'; + import { Switch } from 'antd'; import { CloseOutlined, CheckOutlined } from '@ant-design/icons'; import CrudModule from '@/modules/CrudModule'; import CurrencyForm from '@/forms/CurrencyForm'; export default function Currency() { - const entity = 'currency'; const searchConfig = { displayLabels: ['name'], searchFields: 'name', @@ -76,26 +78,14 @@ export default function Currency() { }, ]; - const ADD_NEW_ENTITY = 'Add new currency'; - const DATATABLE_TITLE = 'Currencies List'; - const ENTITY_NAME = 'currency'; - const CREATE_ENTITY = 'Create currency'; - const UPDATE_ENTITY = 'Update currency'; - const PANEL_TITLE = 'Currency Panel'; - const config = { - entity, - PANEL_TITLE, - ENTITY_NAME, - CREATE_ENTITY, - ADD_NEW_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, + ...configPage, readColumns, dataTableColumns, searchConfig, entityDisplayLabels, }; + return ( } diff --git a/frontend/src/pages/Customer/config/index.js b/frontend/src/pages/Customer/config/index.js new file mode 100644 index 000000000..88c6d1445 --- /dev/null +++ b/frontend/src/pages/Customer/config/index.js @@ -0,0 +1,19 @@ +import lang from '@/lang/language'; + +const entity = 'client'; + +const Labels = { + PANEL_TITLE: lang.customer, + DATATABLE_TITLE: lang.customer_list, + ADD_NEW_ENTITY: lang.add_new_customer, + ENTITY_NAME: lang.customer, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, +}; + +const configPage = { + entity, + ...Labels, +}; + +export default configPage; diff --git a/frontend/src/pages/Customer.jsx b/frontend/src/pages/Customer/index.jsx similarity index 76% rename from frontend/src/pages/Customer.jsx rename to frontend/src/pages/Customer/index.jsx index e1a95c0ea..c2e0117fc 100644 --- a/frontend/src/pages/Customer.jsx +++ b/frontend/src/pages/Customer/index.jsx @@ -3,8 +3,9 @@ import React from 'react'; import CrudModule from '@/modules/CrudModule'; import CustomerForm from '@/forms/CustomerForm'; +import configPage from './config'; + function Customer() { - const entity = 'client'; const searchConfig = { displayLabels: ['company'], searchFields: 'company,managerSurname,managerName', @@ -54,26 +55,14 @@ function Customer() { }, ]; - const ADD_NEW_ENTITY = 'Add new customer'; - const DATATABLE_TITLE = 'Customers List'; - const ENTITY_NAME = 'customer'; - const CREATE_ENTITY = 'Create customer'; - const UPDATE_ENTITY = 'Update customer'; - const PANEL_TITLE = 'Customer Panel'; - const config = { - entity, - PANEL_TITLE, - ENTITY_NAME, - CREATE_ENTITY, - ADD_NEW_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, + ...configPage, readColumns, dataTableColumns, searchConfig, entityDisplayLabels, }; + return ( } diff --git a/frontend/src/pages/Email/config/index.js b/frontend/src/pages/Email/config/index.js index 702950de9..2d2abd8ff 100644 --- a/frontend/src/pages/Email/config/index.js +++ b/frontend/src/pages/Email/config/index.js @@ -1,19 +1,19 @@ +import lang from '@/lang/language'; + const entity = 'email'; const Labels = { - PANEL_TITLE: 'Email Templates', - dataTableTitle: 'Templates Lists', - DATATABLE_TITLE: 'Templates List', - ENTITY_NAME: 'Email', - CREATE_ENTITY: 'Save Email Template', - UPDATE_ENTITY: 'Update Email Template', - - create: false, - + PANEL_TITLE: lang.email_template, + DATATABLE_TITLE: lang.email_template_list, + ADD_NEW_ENTITY: lang.add_new_email_template, + ENTITY_NAME: lang.email_template, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; const configPage = { entity, + create: false, ...Labels, }; diff --git a/frontend/src/pages/EmailTemplates.jsx b/frontend/src/pages/EmailTemplates.jsx deleted file mode 100644 index 2394f1b9a..000000000 --- a/frontend/src/pages/EmailTemplates.jsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react'; -import { Switch } from 'antd'; -import { CloseOutlined, CheckOutlined } from '@ant-design/icons'; -import CrudModule from '@/modules/CrudModule'; -import AdvancedSettingsForm from '@/forms/AdvancedSettingsForm'; - -export default function AdvancedSettings() { - const entity = 'email'; - const searchConfig = { - displayLabels: ['name'], - searchFields: 'name', - outputValue: '_id', - }; - - const entityDisplayLabels = ['name']; - - const readColumns = [ - { - title: 'Template Name', - dataIndex: 'emailName', - }, - { - title: 'Subject', - dataIndex: 'emailSubject', - }, - { - title: 'Body', - dataIndex: 'emailBody', - }, - ]; - const dataTableColumns = [ - { - title: 'Template Name', - dataIndex: 'emailName', - }, - { - title: 'Subject', - dataIndex: 'emailSubject', - key: 'emailSubject', - render: (text, row) => { - return { - children: {text}, - }; - }, - }, - ]; - - const ADD_NEW_ENTITY = 'Add new Setting'; - const DATATABLE_TITLE = 'Email Templates'; - const ENTITY_NAME = 'template settings'; - const CREATE_ENTITY = 'Create a setting'; - const UPDATE_ENTITY = 'Update a Template'; - const PANEL_TITLE = 'Email Template Panel'; - - const config = { - entity, - PANEL_TITLE, - ENTITY_NAME, - CREATE_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, - readColumns, - dataTableColumns, - searchConfig, - entityDisplayLabels, - }; - return ( - } - updateForm={} - config={config} - /> - ); -} diff --git a/frontend/src/pages/Employee/config/index.js b/frontend/src/pages/Employee/config/index.js new file mode 100644 index 000000000..9dde58bf3 --- /dev/null +++ b/frontend/src/pages/Employee/config/index.js @@ -0,0 +1,19 @@ +import lang from '@/lang/language'; + +const entity = 'employee'; + +const Labels = { + PANEL_TITLE: lang.employee, + DATATABLE_TITLE: lang.employee_list, + ADD_NEW_ENTITY: lang.add_new_employee, + ENTITY_NAME: lang.employee, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, +}; + +const configPage = { + entity, + ...Labels, +}; + +export default configPage; diff --git a/frontend/src/pages/Employee.jsx b/frontend/src/pages/Employee/index.jsx similarity index 83% rename from frontend/src/pages/Employee.jsx rename to frontend/src/pages/Employee/index.jsx index 20d151747..e6dec8e70 100644 --- a/frontend/src/pages/Employee.jsx +++ b/frontend/src/pages/Employee/index.jsx @@ -1,10 +1,10 @@ import React from 'react'; +import configPage from './config'; import CrudModule from '@/modules/CrudModule'; import EmployeeForm from '@/forms/EmployeeForm'; import dayjs from 'dayjs'; export default function Employee() { - const entity = 'employee'; const searchConfig = { displayLabels: ['name', 'surname'], searchFields: 'name,surname,birthday', @@ -95,21 +95,8 @@ export default function Employee() { }, ]; - const ADD_NEW_ENTITY = 'Add new employee'; - const DATATABLE_TITLE = 'Employees List'; - const ENTITY_NAME = 'employee'; - const CREATE_ENTITY = 'Create employee'; - const UPDATE_ENTITY = 'Update employee'; - const PANEL_TITLE = 'Employee Panel'; - const config = { - entity, - PANEL_TITLE, - ENTITY_NAME, - CREATE_ENTITY, - ADD_NEW_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, + ...configPage, readColumns, dataTableColumns, searchConfig, diff --git a/frontend/src/pages/Inventory/config/index.js b/frontend/src/pages/Inventory/config/index.js index a667d17c5..2f9400f2f 100644 --- a/frontend/src/pages/Inventory/config/index.js +++ b/frontend/src/pages/Inventory/config/index.js @@ -1,13 +1,14 @@ +import lang from '@/lang/language'; + const entity = 'inventory'; // Updated entity name const Labels = { - PANEL_TITLE: 'Inventory Management', - dataTableTitle: 'Inventory List', - ADD_NEW_ENTITY: 'Add New Item', - DATATABLE_TITLE: 'Inventory List', - ENTITY_NAME: 'Inventory Item', - CREATE_ENTITY: 'Add Item', - UPDATE_ENTITY: 'Update Item', + PANEL_TITLE: lang.product, + DATATABLE_TITLE: lang.product_list, + ADD_NEW_ENTITY: lang.add_new_product, + ENTITY_NAME: lang.product, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; const configPage = { diff --git a/frontend/src/pages/Invoice/config/index.js b/frontend/src/pages/Invoice/config/index.js index 84b4c397d..81372e9df 100644 --- a/frontend/src/pages/Invoice/config/index.js +++ b/frontend/src/pages/Invoice/config/index.js @@ -1,14 +1,15 @@ +import lang from '@/lang/language'; + const entity = 'invoice'; const Labels = { - PANEL_TITLE: 'Invoice', - dataTableTitle: 'Invoices Lists', - ADD_NEW_ENTITY: 'Add new invoice', - DATATABLE_TITLE: 'Invoices List', - ENTITY_NAME: 'Invoice', - CREATE_ENTITY: 'Save invoice', - UPDATE_ENTITY: 'Update invoice', - RECORD_ENTITY: 'Record Payment', + PANEL_TITLE: lang.invoice, + DATATABLE_TITLE: lang.invoice_list, + ADD_NEW_ENTITY: lang.add_new_invoice, + ENTITY_NAME: lang.invoice, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + RECORD_ENTITY: lang.record_payment, }; const configPage = { diff --git a/frontend/src/pages/Kyc.jsx b/frontend/src/pages/Kyc.jsx deleted file mode 100644 index 409442e5a..000000000 --- a/frontend/src/pages/Kyc.jsx +++ /dev/null @@ -1,88 +0,0 @@ -import React from 'react'; -import { Button } from 'antd'; - -import CrudModule from '@/modules/CrudModule'; -import KycForm from '@/forms/KycForm'; // Ensure to create this form -import { BASE_URL } from '@/config/serverApiConfig'; - -function Kyc() { - const entity = 'kyc'; // Keeping entity value as 'order' - const searchConfig = { - displayLabels: ['name', 'contact'], - searchFields: 'name,contact', - outputValue: '_id', - }; - - const entityDisplayLabels = ['name']; - - const readColumns = [ - { - title: 'Name', - dataIndex: 'name', - }, - { - title: 'Address', - dataIndex: 'address', - }, - { - title: 'Contact', - dataIndex: 'contact', - }, - ]; - const dataTableColumns = [ - { - title: 'Name', - dataIndex: 'name', - }, - { - title: 'Address', - dataIndex: 'address', - }, - { - title: 'Contact', - dataIndex: 'contact', - }, - { - title: 'File', - dataIndex: 'filePath', - render: (filePath) => { - return ( - - ); - }, - }, - ]; - - const ADD_NEW_ENTITY = 'Add new KYC entry'; - const DATATABLE_TITLE = 'KYC List'; - const ENTITY_NAME = 'KYC entry'; - const CREATE_ENTITY = 'Create KYC entry'; - const UPDATE_ENTITY = 'Update KYC entry'; - const PANEL_TITLE = 'KYC Panel'; - - const config = { - entity, - PANEL_TITLE, - ENTITY_NAME, - CREATE_ENTITY, - ADD_NEW_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, - readColumns, - dataTableColumns, - searchConfig, - entityDisplayLabels, - }; - return ( - } - updateForm={} - config={config} - withUpload={true} - /> - ); -} - -export default Kyc; diff --git a/frontend/src/pages/Lead/config/index.js b/frontend/src/pages/Lead/config/index.js index 348e60edb..f3f074832 100644 --- a/frontend/src/pages/Lead/config/index.js +++ b/frontend/src/pages/Lead/config/index.js @@ -1,13 +1,14 @@ +import lang from '@/lang/language'; + const entity = 'lead'; const Labels = { - PANEL_TITLE: 'Lead', - dataTableTitle: 'Lead List', - ADD_NEW_ENTITY: 'Add New Lead', - DATATABLE_TITLE: 'Lead List', - ENTITY_NAME: 'Lead', - CREATE_ENTITY: 'Save Lead', - UPDATE_ENTITY: 'Update Lead', + PANEL_TITLE: lang.lead, + DATATABLE_TITLE: lang.lead_list, + ADD_NEW_ENTITY: lang.add_new_lead, + ENTITY_NAME: lang.lead, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; const configPage = { diff --git a/frontend/src/pages/Offer/config/index.js b/frontend/src/pages/Offer/config/index.js index de96b2d7b..558b3ebd6 100644 --- a/frontend/src/pages/Offer/config/index.js +++ b/frontend/src/pages/Offer/config/index.js @@ -1,13 +1,14 @@ +import lang from '@/lang/language'; + const entity = 'offer'; const Labels = { - PANEL_TITLE: 'Offer', - dataTableTitle: 'Offer Lists', - ADD_NEW_ENTITY: 'Add New Offer', - DATATABLE_TITLE: 'Offer List', - ENTITY_NAME: 'Offer', - CREATE_ENTITY: 'Save Offer', - UPDATE_ENTITY: 'Update Offer', + PANEL_TITLE: lang.offer, + DATATABLE_TITLE: lang.offer_list, + ADD_NEW_ENTITY: lang.add_new_offer, + ENTITY_NAME: lang.offer, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; const configPage = { diff --git a/frontend/src/pages/Order/config/index.js b/frontend/src/pages/Order/config/index.js new file mode 100644 index 000000000..a1302013c --- /dev/null +++ b/frontend/src/pages/Order/config/index.js @@ -0,0 +1,19 @@ +import lang from '@/lang/language'; + +const entity = 'order'; // Keeping entity value as 'order' + +const Labels = { + PANEL_TITLE: lang.order, + DATATABLE_TITLE: lang.order_list, + ADD_NEW_ENTITY: lang.add_new_order, + ENTITY_NAME: lang.order, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, +}; + +const configPage = { + entity, + ...Labels, +}; + +export default configPage; diff --git a/frontend/src/pages/Order.jsx b/frontend/src/pages/Order/index.jsx similarity index 76% rename from frontend/src/pages/Order.jsx rename to frontend/src/pages/Order/index.jsx index 69f4b0894..b92ee18a9 100644 --- a/frontend/src/pages/Order.jsx +++ b/frontend/src/pages/Order/index.jsx @@ -2,9 +2,9 @@ import React from 'react'; import CrudModule from '@/modules/CrudModule'; import OrderForm from '@/forms/OrderForm'; // Ensure to create this form +import configPage from './config'; function Order() { - const entity = 'order'; // Keeping entity value as 'order' const searchConfig = { displayLabels: ['orderId', 'status'], searchFields: 'orderId,status', @@ -67,21 +67,8 @@ function Order() { }, ]; - const ADD_NEW_ENTITY = 'Add new shipping entry'; - const DATATABLE_TITLE = 'Shipping List'; - const ENTITY_NAME = 'shipping entry'; - const CREATE_ENTITY = 'Create shipping entry'; - const UPDATE_ENTITY = 'Update shipping entry'; - const PANEL_TITLE = 'Shipping Panel'; - const config = { - entity, - PANEL_TITLE, - ENTITY_NAME, - CREATE_ENTITY, - ADD_NEW_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, + ...configPage, readColumns, dataTableColumns, searchConfig, diff --git a/frontend/src/pages/Payment/config/index.js b/frontend/src/pages/Payment/config/index.js index 299267dd0..d34c02899 100644 --- a/frontend/src/pages/Payment/config/index.js +++ b/frontend/src/pages/Payment/config/index.js @@ -1,12 +1,14 @@ +import lang from '@/lang/language'; + const entity = 'payment'; const Labels = { - PANEL_TITLE: 'Payment Invoice', - dataTableTitle: 'Payment Invoices Lists', - DATATABLE_TITLE: 'Payment Invoices List', - ENTITY_NAME: 'Payment Invoice', - CREATE_ENTITY: 'Save payment invoice', - UPDATE_ENTITY: 'Update payment invoice', + PANEL_TITLE: lang.payment, + DATATABLE_TITLE: lang.payment_list, + ADD_NEW_ENTITY: lang.add_new_payment, + ENTITY_NAME: lang.payment, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; const configPage = { diff --git a/frontend/src/pages/PaymentMode/config/index.js b/frontend/src/pages/PaymentMode/config/index.js new file mode 100644 index 000000000..1f36d526b --- /dev/null +++ b/frontend/src/pages/PaymentMode/config/index.js @@ -0,0 +1,19 @@ +import lang from '@/lang/language'; + +const entity = 'paymentMode'; + +const Labels = { + PANEL_TITLE: lang.payment_mode, + DATATABLE_TITLE: lang.payment_mode_list, + ADD_NEW_ENTITY: lang.add_new_payment_mode, + ENTITY_NAME: lang.payment_mode, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, +}; + +const configPage = { + entity, + ...Labels, +}; + +export default configPage; diff --git a/frontend/src/pages/PaymentMode.jsx b/frontend/src/pages/PaymentMode/index.jsx similarity index 82% rename from frontend/src/pages/PaymentMode.jsx rename to frontend/src/pages/PaymentMode/index.jsx index c645d0083..1efd25f26 100644 --- a/frontend/src/pages/PaymentMode.jsx +++ b/frontend/src/pages/PaymentMode/index.jsx @@ -1,11 +1,13 @@ import React from 'react'; + +import configPage from './config'; + import { Switch } from 'antd'; import { CloseOutlined, CheckOutlined } from '@ant-design/icons'; import CrudModule from '@/modules/CrudModule'; import PaymentModeForm from '@/forms/PaymentModeForm'; export default function PaymentMode() { - const entity = 'paymentMode'; const searchConfig = { displayLabels: ['name'], searchFields: 'name', @@ -85,21 +87,8 @@ export default function PaymentMode() { }, ]; - const ADD_NEW_ENTITY = 'Add new payment mode'; - const DATATABLE_TITLE = 'Payment Modes List'; - const ENTITY_NAME = 'payment mode'; - const CREATE_ENTITY = 'Create payment mode'; - const UPDATE_ENTITY = 'Update payment mode'; - const PANEL_TITLE = 'Currency Panel'; - const config = { - entity, - PANEL_TITLE, - ENTITY_NAME, - CREATE_ENTITY, - ADD_NEW_ENTITY, - UPDATE_ENTITY, - DATATABLE_TITLE, + ...configPage, readColumns, dataTableColumns, searchConfig, diff --git a/frontend/src/pages/Profile.jsx b/frontend/src/pages/Profile.jsx index abea83f90..acf44efba 100644 --- a/frontend/src/pages/Profile.jsx +++ b/frontend/src/pages/Profile.jsx @@ -1,18 +1,21 @@ import React from 'react'; import ProfileModule from '@/modules/ProfileModule'; +import lang from '@/lang/language'; + export default function Profile() { const entity = 'profile'; - const PANEL_TITLE = 'profile'; - const ENTITY_NAME = 'Profile'; - const UPDATE_ENTITY = 'Update profile'; + const Labels = { + PANEL_TITLE: lang.profile, + ENTITY_NAME: lang.profile, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; const config = { entity, - PANEL_TITLE, - ENTITY_NAME, - UPDATE_ENTITY, + ...Labels, }; return ; } diff --git a/frontend/src/pages/Quote/config/index.js b/frontend/src/pages/Quote/config/index.js index d266d88a7..5221e10db 100644 --- a/frontend/src/pages/Quote/config/index.js +++ b/frontend/src/pages/Quote/config/index.js @@ -1,13 +1,14 @@ +import lang from '@/lang/language'; + const entity = 'quote'; const Labels = { - PANEL_TITLE: 'Quote', - dataTableTitle: 'Quotes Lists', - ADD_NEW_ENTITY: 'Add new quote', - DATATABLE_TITLE: 'Quotes List', - ENTITY_NAME: 'Quote', - CREATE_ENTITY: 'Save quote', - UPDATE_ENTITY: 'Update quote', + PANEL_TITLE: lang.quote, + DATATABLE_TITLE: lang.quote_list, + ADD_NEW_ENTITY: lang.add_new_quote, + ENTITY_NAME: lang.quote, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; const configPage = { diff --git a/frontend/src/pages/Settings/config/index.js b/frontend/src/pages/Settings/config/index.js index 6dad31744..ba1e549b2 100644 --- a/frontend/src/pages/Settings/config/index.js +++ b/frontend/src/pages/Settings/config/index.js @@ -1,13 +1,14 @@ +import lang from '@/lang/language'; + const entity = 'setting'; const Labels = { - PANEL_TITLE: 'Settings', - dataTableTitle: 'Settings List', - ADD_NEW_ENTITY: 'Add New Settings', - DATATABLE_TITLE: 'Settings List', - ENTITY_NAME: 'Settings', - CREATE_ENTITY: 'Save Settings', - UPDATE_ENTITY: 'Update Settings', + PANEL_TITLE: lang.settings, + DATATABLE_TITLE: lang.settings_list, + ADD_NEW_ENTITY: lang.add_new_settings, + ENTITY_NAME: lang.settings, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; const configPage = { From ef0cc51f00a9b1d17433b306882d2dbfbde31f88 Mon Sep 17 00:00:00 2001 From: Salah Eddine Lalami <50052356+idurar@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:36:55 +0100 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=8C=90=20Add=20Language=20State=20to?= =?UTF-8?q?=20Redux=20Store?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/app/HeaderContent/index.jsx | 9 +- frontend/src/lang/default.js | 386 +++++++++++++++++ frontend/src/lang/fr_fr.js | 206 +++++++++ frontend/src/lang/language.js | 390 +----------------- frontend/src/pages/Admin/config/index.js | 19 - frontend/src/pages/Admin/index.jsx | 19 +- .../pages/AdvancedSettings/config/index.js | 19 - frontend/src/pages/AdvancedSettings/index.jsx | 20 +- frontend/src/pages/Currency/index.jsx | 20 +- frontend/src/pages/Customer/index.jsx | 19 +- frontend/src/pages/Email/EmailRead.jsx | 25 +- frontend/src/pages/Email/EmailUpdate.jsx | 26 +- frontend/src/pages/Email/index.jsx | 20 +- frontend/src/pages/Employee/index.jsx | 19 +- frontend/src/pages/Inventory/index.jsx | 20 +- frontend/src/pages/Invoice/InvoiceCreate.jsx | 29 +- frontend/src/pages/Invoice/InvoiceRead.jsx | 24 +- .../pages/Invoice/InvoiceRecordPayment.jsx | 24 +- frontend/src/pages/Invoice/InvoiceUpdate.jsx | 24 +- frontend/src/pages/Invoice/config/index.js | 2 - frontend/src/pages/Invoice/index.jsx | 22 +- frontend/src/pages/Lead/index.jsx | 20 +- frontend/src/pages/Offer/OfferCreate.jsx | 26 +- frontend/src/pages/Offer/OfferRead.jsx | 23 +- frontend/src/pages/Offer/OfferUpdate.jsx | 22 +- frontend/src/pages/Offer/index.jsx | 19 +- frontend/src/pages/Order/index.jsx | 25 +- frontend/src/pages/Payment/PaymentRead.jsx | 25 +- frontend/src/pages/Payment/PaymentUpdate.jsx | 23 +- frontend/src/pages/Payment/index.jsx | 20 +- frontend/src/pages/PaymentMode/index.jsx | 19 +- frontend/src/pages/Quote/QuoteCreate.jsx | 30 +- frontend/src/pages/Quote/QuoteRead.jsx | 25 +- frontend/src/pages/Quote/QuoteUpdate.jsx | 25 +- frontend/src/pages/Quote/index.jsx | 19 +- frontend/src/pages/Settings/AppSettings.jsx | 30 +- .../src/pages/Settings/GeneralSettings.jsx | 29 +- .../src/pages/Settings/InvoiceSettings.jsx | 29 +- .../pages/Settings/MoneyFormatSettings.jsx | 29 +- .../src/pages/Settings/PaymentSettings.jsx | 29 +- frontend/src/redux/lang/actions.js | 32 ++ frontend/src/redux/lang/index.js | 1 + frontend/src/redux/lang/reducer.js | 44 ++ frontend/src/redux/lang/selectors.js | 6 + frontend/src/redux/lang/types.js | 5 + frontend/src/redux/rootReducer.js | 2 + frontend/src/redux/store.js | 3 + 47 files changed, 1326 insertions(+), 576 deletions(-) create mode 100644 frontend/src/lang/default.js create mode 100644 frontend/src/lang/fr_fr.js delete mode 100644 frontend/src/pages/Admin/config/index.js delete mode 100644 frontend/src/pages/AdvancedSettings/config/index.js create mode 100644 frontend/src/redux/lang/actions.js create mode 100644 frontend/src/redux/lang/index.js create mode 100644 frontend/src/redux/lang/reducer.js create mode 100644 frontend/src/redux/lang/selectors.js create mode 100644 frontend/src/redux/lang/types.js diff --git a/frontend/src/app/HeaderContent/index.jsx b/frontend/src/app/HeaderContent/index.jsx index 899b2885c..67e2a12ed 100644 --- a/frontend/src/app/HeaderContent/index.jsx +++ b/frontend/src/app/HeaderContent/index.jsx @@ -16,6 +16,7 @@ import photo from '@/style/images/photo.png'; import { checkImage } from '@/request'; import { selectCurrentAdmin } from '@/redux/auth/selectors'; +import { langAction } from '@/redux/lang/actions'; import history from '@/utils/history'; import uniqueId from '@/utils/uinqueId'; @@ -23,6 +24,7 @@ import { BASE_URL } from '@/config/serverApiConfig'; export default function HeaderContent() { const currentAdmin = useSelector(selectCurrentAdmin); + const dispatch = useDispatch(); const srcImgProfile = checkImage(BASE_URL + currentAdmin?.photo) ? BASE_URL + currentAdmin?.photo @@ -94,7 +96,12 @@ export default function HeaderContent() { {/* */} - } /> + } + onClick={() => { + dispatch(langAction.translate()); + }} + /> } trigger={['click']} placement="bottomRight"> {/* */} diff --git a/frontend/src/lang/default.js b/frontend/src/lang/default.js new file mode 100644 index 000000000..1c8fb99f6 --- /dev/null +++ b/frontend/src/lang/default.js @@ -0,0 +1,386 @@ +const lang = { + edit: 'Edit', + save: 'Save', + cancel: 'Cancel', + delete: 'Delete', + create: 'Create', + update: 'Update', + search: 'Search', + select: 'Select', + view: 'View', + submit: 'Submit', + add: 'Add', + remove: 'Remove', + close: 'Close', + next: 'Next', + previous: 'Previous', + filter: 'Filter', + sort: 'Sort', + clear: 'Clear', + assign: 'Assign', + manage: 'Manage', + import: 'Import', + export: 'Export', + download: 'Download', + upload: 'Upload', + print: 'Print', + send: 'Send', + receive: 'Receive', + approve: 'Approve', + reject: 'Reject', + complete: 'Complete', + confirm: 'Confirm', + error: 'Error', + warning: 'Warning', + success: 'Success', + information: 'Information', + status: 'Status', + settings: 'Settings', + preferences: 'Preferences', + notification: 'Notification', + navigation: 'Navigation', + home: 'Home', + dashboard: 'Dashboard', + profile: 'Profile', + user: 'User', + account: 'Account', + supplier: 'Supplier', + product: 'Product', + order: 'Order', + payment: 'Payment', + report: 'Report', + analytics: 'Analytics', + audit: 'Audit', + history: 'History', + documentation: 'Documentation', + support: 'Support', + chat: 'Chat', + email: 'Email', + phone: 'Phone', + address: 'Address', + city: 'City', + state: 'State', + country: 'Country', + task: 'Task', + event: 'Event', + meeting: 'Meeting', + reminder: 'Reminder', + schedule: 'Schedule', + calendar: 'Calendar', + logout: 'Logout', + overview: 'Overview', + details: 'Details', + actions: 'Actions', + events: 'Events', + tasks: 'Tasks', + notes: 'Notes', + comments: 'Comments', + attachments: 'Attachments', + help: 'Help', + feedback: 'Feedback', + about: 'About', + contact: 'Contact', + notifications: 'Notifications', + privacy: 'Privacy', + security: 'Security', + appearance: 'Appearance', + language: 'Language', + timezone: 'Timezone', + date: 'Date', + time: 'Time', + quantity: 'Quantity', + price: 'Price', + amount: 'Amount', + discount: 'Discount', + subtotal: 'Subtotal', + total: 'Total', + cvv: 'CVV', + checkout: 'Checkout', + processing: 'Processing', + shipped: 'Shipped', + delivered: 'Delivered', + pending: 'Pending', + cancelled: 'Cancelled', + returned: 'Returned', + exchange: 'Exchange', + refund: 'Refund', + login: 'Login', + register: 'Register', + sale: 'Sale', + tax: 'Tax', + item: 'Item', + description: 'Description', + failure: 'Failure', + approved: 'Approved', + rejected: 'Rejected', + completed: 'Completed', + urgent: 'Urgent', + overdue: 'Overdue', + today: 'Today', + tomorrow: 'Tomorrow', + recurring: 'Recurring', + daily: 'Daily', + weekly: 'Weekly', + monthly: 'Monthly', + yearly: 'Yearly', + day: 'Day', + week: 'Week', + month: 'Month', + year: 'Year', + until: 'Until', + attachment: 'Attachment', + recipient: 'Recipient', + from: 'From', + to: 'To', + subject: 'Subject', + message: 'Message', + reply: 'Reply', + forward: 'Forward', + spam: 'Spam', + inbox: 'Inbox', + sent: 'Sent', + drafts: 'Drafts', + archived: 'Archived', + trash: 'Trash', + enable: 'Enable', + disable: 'Disable', + on: 'On', + off: 'Off', + quarterly: 'Quarterly', + loading: 'Loading', + refreshing: 'Refreshing', + submitting: 'Submitting', + saving: 'Saving', + deleting: 'Deleting', + updating: 'Updating', + creating: 'Creating', + info: 'Info!', + confirmation: 'Confirmation', + yes: 'Yes', + no: 'No', + hello: 'Hello!', + welcome: 'Welcome!', + goodbye: 'Goodbye!', + + invoice: 'Invoice', + quote: 'Quote', + offer: 'Offer', + lead: 'Lead', + customer: 'Customer', + admin: 'Admin', + employee: 'Employee', + currency: 'Currency', + + invoice_list: 'Invoice List', + add_new_invoice: 'Add New Invoice', + record_payment: 'Record Payment', + quote_list: 'Quote List', + add_new_quote: 'Add New Quote', + offer_list: 'Offer List', + add_new_offer: 'Add New Offer', + lead_list: 'Lead List', + add_new_lead: 'Add New Lead', + customer_list: 'Customer List', + add_new_customer: 'Add New Customer', + payment_list: 'Payment List', + add_new_payment: 'Add New Payment', + settings_list: 'Settings List', + add_new_settings: 'Add New Settings', + admin_list: 'Admin List', + add_new_admin: 'Add New Admin', + employee_list: 'Employee List', + add_new_employee: 'Add New Employee', + currency_list: 'Currency List', + add_new_currency: 'Add New Currency', + payment_mode: 'Payment Mode', + payment_mode_list: 'Payment Mode List', + add_new_payment_mode: 'Add New Payment Mode', + email_template: 'Email Template', + email_template_list: 'Email Template List', + add_new_email_template: 'Add New Email Template', + product_list: 'Product List', + add_new_product: 'Add New Product', + order_list: 'Order List', + add_new_order: 'Add New Order', + // long description + // postal_code: 'Postal Code', + // phone_number: 'Phone Number', + // email_address: 'Email Address', + // notification_settings: 'Notification Settings', + // language_settings: 'Language Settings', + // theme_settings: 'Theme Settings', + // account_settings: 'Account Settings', + // privacy_settings: 'Privacy Settings', + // security_settings: 'Security Settings', + // accessibility_settings: 'Accessibility Settings', + // view_all: 'View All', + // create_new: 'Create New', + // edit_profile: 'Edit Profile', + // change_password: 'Change Password', + // account_details: 'Account Details', + // billing_address: 'Billing Address', + // shipping_address: 'Shipping Address', + // order_details: 'Order Details', + // payment_details: 'Payment Details', + // item_details: 'Item Details', + // currency_code: 'Currency Code', + // tax_rate: 'Tax Rate', + // terms_and_conditions: 'Terms and Conditions', + // delivery_date: 'Delivery Date', + // order_summary: 'Order Summary', + // invoice_details: 'Invoice Details', + // payment_method: 'Payment Method', + // card_number: 'Card Number', + // expiration_date: 'Expiration Date', + // payment_status: 'Payment Status', + // report_details: 'Report Details', + // analytics_details: 'Analytics Details', + // audit_trail: 'Audit Trail', + // history_log: 'History Log', + // documentation_details: 'Documentation Details', + // support_details: 'Support Details', + // chat_with_us: 'Chat with Us', + // email_us: 'Email Us', + // call_us: 'Call Us', + // mailing_address: 'Mailing Address', + // task_details: 'Task Details', + // event_details: 'Event Details', + // meeting_details: 'Meeting Details', + // reminder_details: 'Reminder Details', + // schedule_details: 'Schedule Details', + // calendar_details: 'Calendar Details', + // add_to_cart: 'Add to Cart', + // continue_shopping: 'Continue Shopping', + // product_details: 'Product Details', + // customer_details: 'Customer Details', + // shipping_details: 'Shipping Details', + // billing_details: 'Billing Details', + // payment_confirmation: 'Payment Confirmation', + // order_confirmation: 'Order Confirmation', + // thank_you: 'Thank You', + // track_order: 'Track Order', + // order_history: 'Order History', + // delivery_options: 'Delivery Options', + // shipping_method: 'Shipping Method', + // order_status: 'Order Status', + // on_hold: 'On Hold', + // back_to_shop: 'Back to Shop', + // my_account: 'My Account', + // forgot_password: 'Forgot Password', + // reset_password: 'Reset Password', + // change_email: 'Change Email', + // change_username: 'Change Username', + // change_avatar: 'Change Avatar', + // account_verification: 'Account Verification', + // terms_of_service: 'Terms of Service', + // privacy_policy: 'Privacy Policy', + // cookie_policy: 'Cookie Policy', + // data_protection: 'Data Protection', + // accessibility_statement: 'Accessibility Statement', + // error_404: 'Error 404 - Page Not Found', + // error_500: 'Error 500 - Internal Server Error', + // invalid_credentials: 'Invalid Credentials', + // username_taken: 'Username Already Taken', + // email_taken: 'Email Already Taken', + // password_length: 'Password Length', + // password_strength: 'Password Strength', + // password_match: "Passwords Don't Match", + // email_incorrect_format: 'Incorrect Email Format', + // username_required: 'Username is Required', + // email_required: 'Email is Required', + // password_required: 'Password is Required', + // confirm_password_required: 'Confirm Password is Required', + // first_name_required: 'First Name is Required', + // last_name_required: 'Last Name is Required', + // phone_number_required: 'Phone Number is Required', + // address_required: 'Address is Required', + // city_required: 'City is Required', + // state_required: 'State is Required', + // postal_code_required: 'Postal Code is Required', + // card_number_required: 'Card Number is Required', + // expiration_date_required: 'Expiration Date is Required', + // cvv_required: 'CVV is Required', + // quantity_greater_than_zero: 'Quantity should be greater than zero', + // invalid_card_number: 'Invalid Card Number', + // invalid_expiration_date: 'Invalid Expiration Date', + // invalid_cvv: 'Invalid CVV', + // payment_declined: 'Payment Declined', + // payment_pending: 'Payment Pending', + // payment_failed: 'Payment Failed', + // payment_success: 'Payment Success', + // invalid_email_format: 'Invalid Email Format', + // invalid_phone_number: 'Invalid Phone Number', + // invalid_postal_code: 'Invalid Postal Code', + // invalid_coupon_code: 'Invalid Coupon Code', + // expired_coupon_code: 'Expired Coupon Code', + // coupon_already_applied: 'Coupon Already Applied', + // coupon_limit_reached: 'Coupon Limit Reached', + // coupon_not_applicable: 'Coupon Not Applicable', + // coupon_applied: 'Coupon Applied', + // coupon_removed: 'Coupon Removed', + // coupon_discount: 'Coupon Discount', + // discount_percent: 'Discount Percent', + // discount_amount: 'Discount Amount', + // tax_percent: 'Tax Percent', + // sub_total: 'Sub Total', + // purchase_history: 'Purchase History', + // order_number: 'Order Number', + // date_ordered: 'Date Ordered', + // payment_due: 'Payment Due', + // due_date: 'Due Date', + // payment_received: 'Payment Received', + // received_date: 'Received Date', + // unit_price: 'Unit Price', + // transaction_id: 'Transaction ID', + // in_progress: 'In Progress', + // refund_requested: 'Refund Requested', + // exchange_requested: 'Exchange Requested', + // high_priority: 'High Priority', + // medium_priority: 'Medium Priority', + // low_priority: 'Low Priority', + // this_week: 'This Week', + // this_month: 'This Month', + // select_date: 'Select Date', + // select_time: 'Select Time', + // start_date: 'Start Date', + // end_date: 'End Date', + // repeat_every: 'Repeat Every', + // select_file: 'Select File', + // upload_file: 'Upload File', + // download_file: 'Download File', + // file_size_limit: 'File Size Limit', + // invalid_file_type: 'Invalid File Type', + // file_upload_failed: 'File Upload Failed', + // file_download_failed: 'File Download Failed', + // file_not_found: 'File Not Found', + // file_removed: 'File Removed', + // send_message: 'Send Message', + // mark_as_read: 'Mark as Read', + // mark_as_unread: 'Mark as Unread', + // mark_as_important: 'Mark as Important', + // mark_as_not_important: 'Mark as Not Important', + // delete_message: 'Delete Message', + // email_notification: 'Email Notification', + // push_notification: 'Push Notification', + // sms_notification: 'SMS Notification', + // web_notification: 'Web Notification', + // notification_sound: 'Notification Sound', + // search_placeholder: 'Search', + // no_results_found: 'No Results Found', + // please_wait: 'Please Wait', + // are_you_sure: 'Are you sure?', + // confirm_password: 'Confirm Password', + // current_password: 'Current Password', + // new_password: 'New Password', + // remember_me: 'Remember Me', + // thank_you_exclamation: 'Thank you!', + // welcome_back: 'Welcome Back!', + // account_activation: 'Account Activation', + // email_verification: 'Email Verification', + // password_reset: 'Password Reset', + // order_tracking: 'Order Tracking', + // contact_us: 'Contact Us', + // live_chat: 'Live Chat', +}; + +export default lang; diff --git a/frontend/src/lang/fr_fr.js b/frontend/src/lang/fr_fr.js new file mode 100644 index 000000000..92ea373c2 --- /dev/null +++ b/frontend/src/lang/fr_fr.js @@ -0,0 +1,206 @@ +const lang = { + edit: 'Modifier', + save: 'Sauvegarder', + cancel: 'Annuler', + delete: 'Supprimer', + create: 'Créer', + update: 'Mettre à jour', + search: 'Rechercher', + select: 'Sélectionner', + view: 'Voir', + submit: 'Soumettre', + add: 'Ajouter', + remove: 'Supprimer', + close: 'Fermer', + next: 'Suivant', + previous: 'Précédent', + filter: 'Filtrer', + sort: 'Trier', + clear: 'Effacer', + assign: 'Assigner', + manage: 'Gérer', + import: 'Importer', + export: 'Exporter', + download: 'Télécharger', + upload: 'Uploader', + print: 'Imprimer', + send: 'Envoyer', + receive: 'Recevoir', + approve: 'Approuver', + reject: 'Rejeter', + complete: 'Terminer', + confirm: 'Confirmer', + error: 'Erreur', + warning: 'Avertissement', + success: 'Succès', + information: 'Information', + status: 'Statut', + settings: 'Paramètres', + preferences: 'Préférences', + notification: 'Notification', + navigation: 'Navigation', + home: 'Accueil', + dashboard: 'Tableau de bord', + profile: 'Profil', + user: 'Utilisateur', + account: 'Compte', + supplier: 'Fournisseur', + product: 'Produit', + order: 'Commande', + payment: 'Paiement', + report: 'Rapport', + analytics: 'Analytiques', + audit: 'Audit', + history: 'Historique', + documentation: 'Documentation', + support: 'Support', + chat: 'Chat', + email: 'Email', + phone: 'Téléphone', + address: 'Adresse', + city: 'Ville', + state: 'État', + country: 'Pays', + task: 'Tâche', + event: 'Événement', + meeting: 'Réunion', + reminder: 'Rappel', + schedule: 'Calendrier', + calendar: 'Calendrier', + logout: 'Déconnexion', + overview: 'Aperçu', + details: 'Détails', + actions: 'Actions', + events: 'Événements', + tasks: 'Tâches', + notes: 'Notes', + comments: 'Commentaires', + attachments: 'Pièces jointes', + help: 'Aide', + feedback: 'Retour', + about: 'À propos', + contact: 'Contact', + notifications: 'Notifications', + privacy: 'Confidentialité', + security: 'Sécurité', + appearance: 'Apparence', + language: 'Langue', + timezone: 'Fuseau horaire', + date: 'Date', + time: 'Heure', + quantity: 'Quantité', + price: 'Prix', + amount: 'Montant', + discount: 'Remise', + subtotal: 'Sous-total', + total: 'Total', + cvv: 'CVV', + checkout: 'Payer', + processing: 'En cours de traitement', + shipped: 'Expédié', + delivered: 'Livré', + pending: 'En attente', + cancelled: 'Annulé', + returned: 'Retourné', + exchange: 'Échange', + refund: 'Remboursement', + login: 'Connexion', + register: "S'inscrire", + sale: 'Vente', + tax: 'Taxe', + item: 'Article', + description: 'Description', + failure: 'Échec', + approved: 'Approuvé', + rejected: 'Rejeté', + completed: 'Terminé', + urgent: 'Urgent', + overdue: 'En retard', + today: "Aujourd'hui", + tomorrow: 'Demain', + recurring: 'Récurrent', + daily: 'Quotidien', + weekly: 'Hebdomadaire', + monthly: 'Mensuel', + yearly: 'Annuel', + day: 'Jour', + week: 'Semaine', + month: 'Mois', + year: 'An', + until: "Jusqu'à", + attachment: 'Pièce jointe', + recipient: 'Destinataire', + from: 'De', + to: 'À', + subject: 'Sujet', + message: 'Message', + reply: 'Répondre', + forward: 'Transférer', + spam: 'Spam', + inbox: 'Boîte de réception', + sent: 'Envoyé', + drafts: 'Brouillons', + archived: 'Archivé', + trash: 'Corbeille', + enable: 'Activer', + disable: 'Désactiver', + on: 'Activé', + off: 'Désactivé', + quarterly: 'Trimestriel', + loading: 'Chargement', + refreshing: 'Actualisation', + submitting: 'Soumission en cours', + saving: 'Enregistrement en cours', + deleting: 'Suppression en cours', + updating: 'Mise à jour en cours', + creating: 'Création en cours', + info: 'Info !', + confirmation: 'Confirmation', + yes: 'Oui', + no: 'Non', + hello: 'Bonjour !', + welcome: 'Bienvenue !', + goodbye: 'Au revoir !', + + invoice: 'Facture', + quote: 'Devis', + offer: 'Offre', + lead: 'Prospect', + customer: 'Client', + admin: 'Administrateur', + employee: 'Employé', + currency: 'Devise', + + invoice_list: 'Liste des factures', + add_new_invoice: 'Ajouter une nouvelle facture', + record_payment: 'Enregistrer un paiement', + quote_list: 'Liste des devis', + add_new_quote: 'Ajouter un nouveau devis', + offer_list: 'Liste des offres', + add_new_offer: 'Ajouter une nouvelle offre', + lead_list: 'Liste des prospects', + add_new_lead: 'Ajouter un nouveau prospect', + customer_list: 'Liste des clients', + add_new_customer: 'Ajouter un nouveau client', + payment_list: 'Liste des paiements', + add_new_payment: 'Ajouter un nouveau paiement', + settings_list: 'Liste des paramètres', + add_new_settings: 'Ajouter de nouveaux paramètres', + admin_list: 'Liste des administrateurs', + add_new_admin: 'Ajouter un nouvel administrateur', + employee_list: 'Liste des employés', + add_new_employee: 'Ajouter un nouvel employé', + currency_list: 'Liste des devises', + add_new_currency: 'Ajouter une nouvelle devise', + payment_mode: 'Mode de paiement', + payment_mode_list: 'Liste des modes de paiement', + add_new_payment_mode: 'Ajouter un nouveau mode de paiement', + email_template: "Modèle d'email", + email_template_list: "Liste des modèles d'e-mails", + add_new_email_template: "Ajouter un nouveau modèle d'email", + product_list: 'Liste des produits', + add_new_product: 'Ajouter un nouveau produit', + order_list: 'Liste des commandes', + add_new_order: 'Ajouter une nouvelle commande', +}; +export default lang; diff --git a/frontend/src/lang/language.js b/frontend/src/lang/language.js index 476f3e48d..327e3304a 100644 --- a/frontend/src/lang/language.js +++ b/frontend/src/lang/language.js @@ -1,386 +1,10 @@ -const lang = { - edit: 'Edit', - save: 'Save', - cancel: 'Cancel', - delete: 'Delete', - create: 'Create', - update: 'Update', - search: 'Search', - select: 'Select', - view: 'View', - submit: 'Submit', - add: 'Add', - remove: 'Remove', - close: 'Close', - next: 'Next', - previous: 'Previous', - filter: 'Filter', - sort: 'Sort', - clear: 'Clear', - assign: 'Assign', - manage: 'Manage', - import: 'Import', - export: 'Export', - download: 'Download', - upload: 'Upload', - print: 'Print', - send: 'Send', - receive: 'Receive', - approve: 'Approve', - reject: 'Reject', - complete: 'Complete', - confirm: 'Confirm', - error: 'Error', - warning: 'Warning', - success: 'Success', - information: 'Information', - status: 'Status', - settings: 'Settings', - preferences: 'Preferences', - notification: 'Notification', - navigation: 'Navigation', - home: 'Home', - dashboard: 'Dashboard', - profile: 'Profile', - user: 'User', - account: 'Account', - supplier: 'Supplier', - product: 'Product', - order: 'Order', - payment: 'Payment', - report: 'Report', - analytics: 'Analytics', - audit: 'Audit', - history: 'History', - documentation: 'Documentation', - support: 'Support', - chat: 'Chat', - email: 'Email', - phone: 'Phone', - address: 'Address', - city: 'City', - state: 'State', - country: 'Country', - task: 'Task', - event: 'Event', - meeting: 'Meeting', - reminder: 'Reminder', - schedule: 'Schedule', - calendar: 'Calendar', - logout: 'Logout', - overview: 'Overview', - details: 'Details', - actions: 'Actions', - events: 'Events', - tasks: 'Tasks', - notes: 'Notes', - comments: 'Comments', - attachments: 'Attachments', - help: 'Help', - feedback: 'Feedback', - about: 'About', - contact: 'Contact', - notifications: 'Notifications', - privacy: 'Privacy', - security: 'Security', - appearance: 'Appearance', - language: 'Language', - timezone: 'Timezone', - date: 'Date', - time: 'Time', - quantity: 'Quantity', - price: 'Price', - amount: 'Amount', - discount: 'Discount', - subtotal: 'Subtotal', - total: 'Total', - cvv: 'CVV', - checkout: 'Checkout', - processing: 'Processing', - shipped: 'Shipped', - delivered: 'Delivered', - pending: 'Pending', - cancelled: 'Cancelled', - returned: 'Returned', - exchange: 'Exchange', - refund: 'Refund', - login: 'Login', - register: 'Register', - sale: 'Sale', - tax: 'Tax', - item: 'Item', - description: 'Description', - failure: 'Failure', - approved: 'Approved', - rejected: 'Rejected', - completed: 'Completed', - urgent: 'Urgent', - overdue: 'Overdue', - today: 'Today', - tomorrow: 'Tomorrow', - recurring: 'Recurring', - daily: 'Daily', - weekly: 'Weekly', - monthly: 'Monthly', - yearly: 'Yearly', - day: 'Day', - week: 'Week', - month: 'Month', - year: 'Year', - until: 'Until', - attachment: 'Attachment', - recipient: 'Recipient', - from: 'From', - to: 'To', - subject: 'Subject', - message: 'Message', - reply: 'Reply', - forward: 'Forward', - spam: 'Spam', - inbox: 'Inbox', - sent: 'Sent', - drafts: 'Drafts', - archived: 'Archived', - trash: 'Trash', - enable: 'Enable', - disable: 'Disable', - on: 'On', - off: 'Off', - quarterly: 'Quarterly', - loading: 'Loading', - refreshing: 'Refreshing', - submitting: 'Submitting', - saving: 'Saving', - deleting: 'Deleting', - updating: 'Updating', - creating: 'Creating', - info: 'Info!', - confirmation: 'Confirmation', - yes: 'Yes', - no: 'No', - hello: 'Hello!', - welcome: 'Welcome!', - goodbye: 'Goodbye!', +import store from '@/redux/store'; - invoice: 'Invoice', - quote: 'Quote', - offer: 'Offer', - lead: 'Lead', - customer: 'Customer', - admin: 'Admin', - employee: 'Employee', - currency: 'Currency', - - invoice_list: 'Invoice List', - add_new_invoice: 'Add New Invoice', - record_payment: 'Record Payment', - quote_list: 'Quote List', - add_new_quote: 'Add New Quote', - offer_list: 'Offer List', - add_new_offer: 'Add New Offer', - lead_list: 'Lead List', - add_new_lead: 'Add New Lead', - customer_list: 'Customer List', - add_new_customer: 'Add New Customer', - payment_list: 'Payment List', - add_new_payment: 'Add New Payment', - settings_list: 'Settings List', - add_new_settings: 'Add New Settings', - admin_list: 'Admin List', - add_new_admin: 'Add New Admin', - employee_list: 'Employee List', - add_new_employee: 'Add New Employee', - currency_list: 'Currency List', - add_new_currency: 'Add New Currency', - payment_mode: 'Payment Mode', - payment_mode_list: 'Payment Mode List', - add_new_payment_mode: 'Add New Payment Mode', - email_template: 'Email Template', - email_template_list: 'Email Template List', - add_new_email_template: 'Add New Email Template', - product_list: 'Product List', - add_new_product: 'Add New Product', - order_list: 'Order List', - add_new_order: 'Add New Order', - // long description - postal_code: 'Postal Code', - phone_number: 'Phone Number', - email_address: 'Email Address', - notification_settings: 'Notification Settings', - language_settings: 'Language Settings', - theme_settings: 'Theme Settings', - account_settings: 'Account Settings', - privacy_settings: 'Privacy Settings', - security_settings: 'Security Settings', - accessibility_settings: 'Accessibility Settings', - view_all: 'View All', - create_new: 'Create New', - edit_profile: 'Edit Profile', - change_password: 'Change Password', - account_details: 'Account Details', - billing_address: 'Billing Address', - shipping_address: 'Shipping Address', - order_details: 'Order Details', - payment_details: 'Payment Details', - item_details: 'Item Details', - currency_code: 'Currency Code', - tax_rate: 'Tax Rate', - terms_and_conditions: 'Terms and Conditions', - delivery_date: 'Delivery Date', - order_summary: 'Order Summary', - invoice_details: 'Invoice Details', - payment_method: 'Payment Method', - card_number: 'Card Number', - expiration_date: 'Expiration Date', - payment_status: 'Payment Status', - report_details: 'Report Details', - analytics_details: 'Analytics Details', - audit_trail: 'Audit Trail', - history_log: 'History Log', - documentation_details: 'Documentation Details', - support_details: 'Support Details', - chat_with_us: 'Chat with Us', - email_us: 'Email Us', - call_us: 'Call Us', - mailing_address: 'Mailing Address', - task_details: 'Task Details', - event_details: 'Event Details', - meeting_details: 'Meeting Details', - reminder_details: 'Reminder Details', - schedule_details: 'Schedule Details', - calendar_details: 'Calendar Details', - add_to_cart: 'Add to Cart', - continue_shopping: 'Continue Shopping', - product_details: 'Product Details', - customer_details: 'Customer Details', - shipping_details: 'Shipping Details', - billing_details: 'Billing Details', - payment_confirmation: 'Payment Confirmation', - order_confirmation: 'Order Confirmation', - thank_you: 'Thank You', - track_order: 'Track Order', - order_history: 'Order History', - delivery_options: 'Delivery Options', - shipping_method: 'Shipping Method', - order_status: 'Order Status', - on_hold: 'On Hold', - back_to_shop: 'Back to Shop', - my_account: 'My Account', - forgot_password: 'Forgot Password', - reset_password: 'Reset Password', - change_email: 'Change Email', - change_username: 'Change Username', - change_avatar: 'Change Avatar', - account_verification: 'Account Verification', - terms_of_service: 'Terms of Service', - privacy_policy: 'Privacy Policy', - cookie_policy: 'Cookie Policy', - data_protection: 'Data Protection', - accessibility_statement: 'Accessibility Statement', - error_404: 'Error 404 - Page Not Found', - error_500: 'Error 500 - Internal Server Error', - invalid_credentials: 'Invalid Credentials', - username_taken: 'Username Already Taken', - email_taken: 'Email Already Taken', - password_length: 'Password Length', - password_strength: 'Password Strength', - password_match: "Passwords Don't Match", - email_incorrect_format: 'Incorrect Email Format', - username_required: 'Username is Required', - email_required: 'Email is Required', - password_required: 'Password is Required', - confirm_password_required: 'Confirm Password is Required', - first_name_required: 'First Name is Required', - last_name_required: 'Last Name is Required', - phone_number_required: 'Phone Number is Required', - address_required: 'Address is Required', - city_required: 'City is Required', - state_required: 'State is Required', - postal_code_required: 'Postal Code is Required', - card_number_required: 'Card Number is Required', - expiration_date_required: 'Expiration Date is Required', - cvv_required: 'CVV is Required', - quantity_greater_than_zero: 'Quantity should be greater than zero', - invalid_card_number: 'Invalid Card Number', - invalid_expiration_date: 'Invalid Expiration Date', - invalid_cvv: 'Invalid CVV', - payment_declined: 'Payment Declined', - payment_pending: 'Payment Pending', - payment_failed: 'Payment Failed', - payment_success: 'Payment Success', - invalid_email_format: 'Invalid Email Format', - invalid_phone_number: 'Invalid Phone Number', - invalid_postal_code: 'Invalid Postal Code', - invalid_coupon_code: 'Invalid Coupon Code', - expired_coupon_code: 'Expired Coupon Code', - coupon_already_applied: 'Coupon Already Applied', - coupon_limit_reached: 'Coupon Limit Reached', - coupon_not_applicable: 'Coupon Not Applicable', - coupon_applied: 'Coupon Applied', - coupon_removed: 'Coupon Removed', - coupon_discount: 'Coupon Discount', - discount_percent: 'Discount Percent', - discount_amount: 'Discount Amount', - tax_percent: 'Tax Percent', - sub_total: 'Sub Total', - purchase_history: 'Purchase History', - order_number: 'Order Number', - date_ordered: 'Date Ordered', - payment_due: 'Payment Due', - due_date: 'Due Date', - payment_received: 'Payment Received', - received_date: 'Received Date', - unit_price: 'Unit Price', - transaction_id: 'Transaction ID', - in_progress: 'In Progress', - refund_requested: 'Refund Requested', - exchange_requested: 'Exchange Requested', - high_priority: 'High Priority', - medium_priority: 'Medium Priority', - low_priority: 'Low Priority', - this_week: 'This Week', - this_month: 'This Month', - select_date: 'Select Date', - select_time: 'Select Time', - start_date: 'Start Date', - end_date: 'End Date', - repeat_every: 'Repeat Every', - select_file: 'Select File', - upload_file: 'Upload File', - download_file: 'Download File', - file_size_limit: 'File Size Limit', - invalid_file_type: 'Invalid File Type', - file_upload_failed: 'File Upload Failed', - file_download_failed: 'File Download Failed', - file_not_found: 'File Not Found', - file_removed: 'File Removed', - send_message: 'Send Message', - mark_as_read: 'Mark as Read', - mark_as_unread: 'Mark as Unread', - mark_as_important: 'Mark as Important', - mark_as_not_important: 'Mark as Not Important', - delete_message: 'Delete Message', - email_notification: 'Email Notification', - push_notification: 'Push Notification', - sms_notification: 'SMS Notification', - web_notification: 'Web Notification', - notification_sound: 'Notification Sound', - search_placeholder: 'Search', - no_results_found: 'No Results Found', - please_wait: 'Please Wait', - are_you_sure: 'Are you sure?', - confirm_password: 'Confirm Password', - current_password: 'Current Password', - new_password: 'New Password', - remember_me: 'Remember Me', - thank_you_exclamation: 'Thank you!', - welcome_back: 'Welcome Back!', - account_activation: 'Account Activation', - email_verification: 'Email Verification', - password_reset: 'Password Reset', - order_tracking: 'Order Tracking', - contact_us: 'Contact Us', - live_chat: 'Live Chat', +const getLanguage = () => { + const result = store.getState().lang.result; + console.log('🚀 ~ file: language.js:5 ~ lang ~ result:', result); + return result; }; -module.exports = lang; +const lang = getLanguage(); +export default lang; diff --git a/frontend/src/pages/Admin/config/index.js b/frontend/src/pages/Admin/config/index.js deleted file mode 100644 index be74033b2..000000000 --- a/frontend/src/pages/Admin/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'admin'; - -const Labels = { - PANEL_TITLE: lang.admin, - DATATABLE_TITLE: lang.admin_list, - ADD_NEW_ENTITY: lang.add_new_admin, - ENTITY_NAME: lang.admin, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Admin/index.jsx b/frontend/src/pages/Admin/index.jsx index a241eed90..0b896c33c 100644 --- a/frontend/src/pages/Admin/index.jsx +++ b/frontend/src/pages/Admin/index.jsx @@ -1,6 +1,7 @@ import React from 'react'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import AdminCrudModule from '@/modules/AdminCrudModule'; import AdminForm from '@/forms/AdminForm'; @@ -28,6 +29,22 @@ export default function Admin() { { title: "Role d'utilisateur", dataIndex: 'role' }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.admin, + DATATABLE_TITLE: lang.admin_list, + ADD_NEW_ENTITY: lang.add_new_admin, + ENTITY_NAME: lang.admin, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + RECORD_ENTITY: lang.record_payment, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, readColumns, diff --git a/frontend/src/pages/AdvancedSettings/config/index.js b/frontend/src/pages/AdvancedSettings/config/index.js deleted file mode 100644 index ba1e549b2..000000000 --- a/frontend/src/pages/AdvancedSettings/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'setting'; - -const Labels = { - PANEL_TITLE: lang.settings, - DATATABLE_TITLE: lang.settings_list, - ADD_NEW_ENTITY: lang.add_new_settings, - ENTITY_NAME: lang.settings, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/AdvancedSettings/index.jsx b/frontend/src/pages/AdvancedSettings/index.jsx index 840c27ec6..4854ed73c 100644 --- a/frontend/src/pages/AdvancedSettings/index.jsx +++ b/frontend/src/pages/AdvancedSettings/index.jsx @@ -1,6 +1,7 @@ import React from 'react'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { Switch } from 'antd'; import { CloseOutlined, CheckOutlined } from '@ant-design/icons'; @@ -8,6 +9,7 @@ import CrudModule from '@/modules/CrudModule'; import AdvancedSettingsForm from '@/forms/AdvancedSettingsForm'; export default function AdvancedSettings() { + const entity = 'setting'; const searchConfig = { displayLabels: ['name'], searchFields: 'name', @@ -70,6 +72,22 @@ export default function AdvancedSettings() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.setting, + DATATABLE_TITLE: lang.setting_list, + ADD_NEW_ENTITY: lang.add_new_setting, + ENTITY_NAME: lang.setting, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + RECORD_ENTITY: lang.record_payment, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, readColumns, diff --git a/frontend/src/pages/Currency/index.jsx b/frontend/src/pages/Currency/index.jsx index a70cc80d8..9ed5e315f 100644 --- a/frontend/src/pages/Currency/index.jsx +++ b/frontend/src/pages/Currency/index.jsx @@ -1,6 +1,7 @@ import React from 'react'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { Switch } from 'antd'; import { CloseOutlined, CheckOutlined } from '@ant-design/icons'; @@ -8,6 +9,8 @@ import CrudModule from '@/modules/CrudModule'; import CurrencyForm from '@/forms/CurrencyForm'; export default function Currency() { + const entity = 'currency'; + const searchConfig = { displayLabels: ['name'], searchFields: 'name', @@ -78,6 +81,21 @@ export default function Currency() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.currency, + DATATABLE_TITLE: lang.currency_list, + ADD_NEW_ENTITY: lang.add_new_currency, + ENTITY_NAME: lang.currency, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, readColumns, diff --git a/frontend/src/pages/Customer/index.jsx b/frontend/src/pages/Customer/index.jsx index c2e0117fc..0d50d108e 100644 --- a/frontend/src/pages/Customer/index.jsx +++ b/frontend/src/pages/Customer/index.jsx @@ -3,9 +3,12 @@ import React from 'react'; import CrudModule from '@/modules/CrudModule'; import CustomerForm from '@/forms/CustomerForm'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; function Customer() { + const entity = 'client'; + const searchConfig = { displayLabels: ['company'], searchFields: 'company,managerSurname,managerName', @@ -55,6 +58,20 @@ function Customer() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.customer, + DATATABLE_TITLE: lang.customer_list, + ADD_NEW_ENTITY: lang.add_new_customer, + ENTITY_NAME: lang.customer, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, readColumns, diff --git a/frontend/src/pages/Email/EmailRead.jsx b/frontend/src/pages/Email/EmailRead.jsx index 652cfc1a5..58f9d62c8 100644 --- a/frontend/src/pages/Email/EmailRead.jsx +++ b/frontend/src/pages/Email/EmailRead.jsx @@ -1,13 +1,24 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import ReadEmailModule from '@/modules/EmailModule/ReadEmailModule'; export default function EmailRead() { - const customConfig = { - /*your custom config*/ + const entity = 'email'; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.email_template, + DATATABLE_TITLE: lang.email_template_list, + ADD_NEW_ENTITY: lang.add_new_email_template, + ENTITY_NAME: lang.email_template, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; - const config = { - ...configPage, - //customConfig, + + const configPage = { + entity, + create: false, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Email/EmailUpdate.jsx b/frontend/src/pages/Email/EmailUpdate.jsx index a4c13dd57..cb3db2d22 100644 --- a/frontend/src/pages/Email/EmailUpdate.jsx +++ b/frontend/src/pages/Email/EmailUpdate.jsx @@ -1,13 +1,25 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import UpdateEmailModule from '@/modules/EmailModule/UpdateEmailModule'; export default function EmailUpdate() { - const customConfig = { - /*your custom config*/ + const entity = 'email'; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.email_template, + DATATABLE_TITLE: lang.email_template_list, + ADD_NEW_ENTITY: lang.add_new_email_template, + ENTITY_NAME: lang.email_template, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; - const config = { - ...configPage, - //customConfig, + + const configPage = { + entity, + create: false, + ...Labels, }; - return ; + + return ; } diff --git a/frontend/src/pages/Email/index.jsx b/frontend/src/pages/Email/index.jsx index 0cbb157c4..d5a0f3ba2 100644 --- a/frontend/src/pages/Email/index.jsx +++ b/frontend/src/pages/Email/index.jsx @@ -1,5 +1,6 @@ import React from 'react'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import CrudModule from '@/modules/CrudModule'; import AdvancedSettingsForm from '@/forms/AdvancedSettingsForm'; import EmailDataTableModule from '@/modules/EmailModule/EmailDataTableModule'; @@ -45,8 +46,25 @@ export default function AdvancedSettings() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.email_template, + DATATABLE_TITLE: lang.email_template_list, + ADD_NEW_ENTITY: lang.add_new_email_template, + ENTITY_NAME: lang.email_template, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + create: false, + ...Labels, + }; const config = { ...configPage, + readColumns, dataTableColumns, searchConfig, entityDisplayLabels, diff --git a/frontend/src/pages/Employee/index.jsx b/frontend/src/pages/Employee/index.jsx index e6dec8e70..10b0047a3 100644 --- a/frontend/src/pages/Employee/index.jsx +++ b/frontend/src/pages/Employee/index.jsx @@ -1,10 +1,12 @@ import React from 'react'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import CrudModule from '@/modules/CrudModule'; import EmployeeForm from '@/forms/EmployeeForm'; import dayjs from 'dayjs'; export default function Employee() { + const entity = 'employee'; const searchConfig = { displayLabels: ['name', 'surname'], searchFields: 'name,surname,birthday', @@ -95,6 +97,21 @@ export default function Employee() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.employee, + DATATABLE_TITLE: lang.employee_list, + ADD_NEW_ENTITY: lang.add_new_employee, + ENTITY_NAME: lang.employee, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, readColumns, diff --git a/frontend/src/pages/Inventory/index.jsx b/frontend/src/pages/Inventory/index.jsx index 5b129d8b3..fc6f28419 100644 --- a/frontend/src/pages/Inventory/index.jsx +++ b/frontend/src/pages/Inventory/index.jsx @@ -1,9 +1,11 @@ import React from 'react'; import CrudModule from '@/modules/CrudModule'; import InventoryForm from '@/forms/InventoryForm'; // Retaining InventoryForm -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; export default function Inventory() { + const entity = 'inventory'; // Updated entity name const searchConfig = { displayLabels: ['product'], // Adjusted to search by product searchFields: 'product', @@ -41,9 +43,23 @@ export default function Inventory() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.product, + DATATABLE_TITLE: lang.product_list, + ADD_NEW_ENTITY: lang.add_new_product, + ENTITY_NAME: lang.product, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, - readColumns, dataTableColumns, searchConfig, entityDisplayLabels, diff --git a/frontend/src/pages/Invoice/InvoiceCreate.jsx b/frontend/src/pages/Invoice/InvoiceCreate.jsx index 73d6823f4..b975a3ac7 100644 --- a/frontend/src/pages/Invoice/InvoiceCreate.jsx +++ b/frontend/src/pages/Invoice/InvoiceCreate.jsx @@ -1,14 +1,23 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import CreateInvoiceModule from '@/modules/InvoiceModule/CreateInvoiceModule'; -const customConfig = { - /*your custom config*/ -}; -const config = { - ...configPage, - //customConfig, -}; - export default function InvoiceCreate() { - return ; + const entity = 'invoice'; + const lang = useSelector(selectCurrentLang); + const Labels = { + PANEL_TITLE: lang.invoice, + DATATABLE_TITLE: lang.invoice_list, + ADD_NEW_ENTITY: lang.add_new_invoice, + ENTITY_NAME: lang.invoice, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + RECORD_ENTITY: lang.record_payment, + }; + + const configPage = { + entity, + ...Labels, + }; + return ; } diff --git a/frontend/src/pages/Invoice/InvoiceRead.jsx b/frontend/src/pages/Invoice/InvoiceRead.jsx index 3009f24a9..27e36a2eb 100644 --- a/frontend/src/pages/Invoice/InvoiceRead.jsx +++ b/frontend/src/pages/Invoice/InvoiceRead.jsx @@ -1,13 +1,23 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import ReadInvoiceModule from '@/modules/InvoiceModule/ReadInvoiceModule'; export default function InvoiceRead() { - const customConfig = { - /*your custom config*/ + const entity = 'invoice'; + const lang = useSelector(selectCurrentLang); + const Labels = { + PANEL_TITLE: lang.invoice, + DATATABLE_TITLE: lang.invoice_list, + ADD_NEW_ENTITY: lang.add_new_invoice, + ENTITY_NAME: lang.invoice, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + RECORD_ENTITY: lang.record_payment, }; - const config = { - ...configPage, - //customConfig, + + const configPage = { + entity, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Invoice/InvoiceRecordPayment.jsx b/frontend/src/pages/Invoice/InvoiceRecordPayment.jsx index d1bcc5460..bf9738d52 100644 --- a/frontend/src/pages/Invoice/InvoiceRecordPayment.jsx +++ b/frontend/src/pages/Invoice/InvoiceRecordPayment.jsx @@ -1,13 +1,23 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import RecordPaymentModule from '@/modules/InvoiceModule/RecordPaymentModule'; export default function InvoiceRecord() { - const customConfig = { - /*your custom config*/ + const entity = 'invoice'; + const lang = useSelector(selectCurrentLang); + const Labels = { + PANEL_TITLE: lang.invoice, + DATATABLE_TITLE: lang.invoice_list, + ADD_NEW_ENTITY: lang.add_new_invoice, + ENTITY_NAME: lang.invoice, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + RECORD_ENTITY: lang.record_payment, }; - const config = { - ...configPage, - //customConfig, + + const configPage = { + entity, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Invoice/InvoiceUpdate.jsx b/frontend/src/pages/Invoice/InvoiceUpdate.jsx index 246ab7d74..719c8b909 100644 --- a/frontend/src/pages/Invoice/InvoiceUpdate.jsx +++ b/frontend/src/pages/Invoice/InvoiceUpdate.jsx @@ -1,13 +1,23 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import UpdateInvoiceModule from '@/modules/InvoiceModule/UpdateInvoiceModule'; export default function InvoiceUpdate() { - const customConfig = { - /*your custom config*/ + const entity = 'invoice'; + const lang = useSelector(selectCurrentLang); + const Labels = { + PANEL_TITLE: lang.invoice, + DATATABLE_TITLE: lang.invoice_list, + ADD_NEW_ENTITY: lang.add_new_invoice, + ENTITY_NAME: lang.invoice, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + RECORD_ENTITY: lang.record_payment, }; - const config = { - ...configPage, - //customConfig, + + const configPage = { + entity, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Invoice/config/index.js b/frontend/src/pages/Invoice/config/index.js index 81372e9df..ccb258a05 100644 --- a/frontend/src/pages/Invoice/config/index.js +++ b/frontend/src/pages/Invoice/config/index.js @@ -1,7 +1,5 @@ import lang from '@/lang/language'; - const entity = 'invoice'; - const Labels = { PANEL_TITLE: lang.invoice, DATATABLE_TITLE: lang.invoice_list, diff --git a/frontend/src/pages/Invoice/index.jsx b/frontend/src/pages/Invoice/index.jsx index b0d6a7dd3..9efb3ec9e 100644 --- a/frontend/src/pages/Invoice/index.jsx +++ b/frontend/src/pages/Invoice/index.jsx @@ -1,10 +1,13 @@ import dayjs from 'dayjs'; import { Tag } from 'antd'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; + import { useMoney } from '@/settings'; import InvoiceDataTableModule from '@/modules/InvoiceModule/InvoiceDataTableModule'; export default function Invoice() { + const entity = 'invoice'; const { moneyRowFormatter } = useMoney(); const searchConfig = { @@ -81,11 +84,28 @@ export default function Invoice() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.invoice, + DATATABLE_TITLE: lang.invoice_list, + ADD_NEW_ENTITY: lang.add_new_invoice, + ENTITY_NAME: lang.invoice, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + RECORD_ENTITY: lang.record_payment, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, dataTableColumns, searchConfig, entityDisplayLabels, }; + return ; } diff --git a/frontend/src/pages/Lead/index.jsx b/frontend/src/pages/Lead/index.jsx index 7687a7800..8b6bc92d7 100644 --- a/frontend/src/pages/Lead/index.jsx +++ b/frontend/src/pages/Lead/index.jsx @@ -5,9 +5,11 @@ import React from 'react'; import CrudModule from '@/modules/CrudModule'; import LeadForm from '@/forms/LeadForm'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; export default function Lead() { + const entity = 'lead'; const searchConfig = { displayLabels: ['firstname', 'company'], searchFields: 'firstname,company', @@ -88,10 +90,24 @@ export default function Lead() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.lead, + DATATABLE_TITLE: lang.lead_list, + ADD_NEW_ENTITY: lang.add_new_lead, + ENTITY_NAME: lang.lead, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, - readColumns, dataTableColumns, + readColumns, searchConfig, entityDisplayLabels, }; diff --git a/frontend/src/pages/Offer/OfferCreate.jsx b/frontend/src/pages/Offer/OfferCreate.jsx index 54da915c3..b63ed5809 100644 --- a/frontend/src/pages/Offer/OfferCreate.jsx +++ b/frontend/src/pages/Offer/OfferCreate.jsx @@ -1,11 +1,23 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import CreateOfferModule from '@/modules/OfferModule/CreateOfferModule'; -const config = { - ...configPage, - //customConfig, -}; - export default function OfferCreate() { - return ; + const lang = useSelector(selectCurrentLang); + + const entity = 'offer'; + const Labels = { + PANEL_TITLE: lang.offer, + DATATABLE_TITLE: lang.offer_list, + ADD_NEW_ENTITY: lang.add_new_offer, + ENTITY_NAME: lang.offer, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; + return ; } diff --git a/frontend/src/pages/Offer/OfferRead.jsx b/frontend/src/pages/Offer/OfferRead.jsx index 05a6a55ec..0c4f32b04 100644 --- a/frontend/src/pages/Offer/OfferRead.jsx +++ b/frontend/src/pages/Offer/OfferRead.jsx @@ -1,10 +1,23 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import ReadOfferModule from '@/modules/OfferModule/ReadOfferModule'; export default function OfferRead() { - const config = { - ...configPage, - //customConfig, + const lang = useSelector(selectCurrentLang); + + const entity = 'offer'; + const Labels = { + PANEL_TITLE: lang.offer, + DATATABLE_TITLE: lang.offer_list, + ADD_NEW_ENTITY: lang.add_new_offer, + ENTITY_NAME: lang.offer, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Offer/OfferUpdate.jsx b/frontend/src/pages/Offer/OfferUpdate.jsx index ae00c1f6a..a031a192c 100644 --- a/frontend/src/pages/Offer/OfferUpdate.jsx +++ b/frontend/src/pages/Offer/OfferUpdate.jsx @@ -1,11 +1,23 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import UpdateOfferModule from '@/modules/OfferModule/UpdateOfferModule'; export default function OfferUpdate() { + const lang = useSelector(selectCurrentLang); - const config = { - ...configPage, - //customConfig, + const entity = 'offer'; + const Labels = { + PANEL_TITLE: lang.offer, + DATATABLE_TITLE: lang.offer_list, + ADD_NEW_ENTITY: lang.add_new_offer, + ENTITY_NAME: lang.offer, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; - return ; + + const configPage = { + entity, + ...Labels, + }; + return ; } diff --git a/frontend/src/pages/Offer/index.jsx b/frontend/src/pages/Offer/index.jsx index 1b6591f77..d119df67a 100644 --- a/frontend/src/pages/Offer/index.jsx +++ b/frontend/src/pages/Offer/index.jsx @@ -3,7 +3,8 @@ import { Tag } from 'antd'; import OfferDataTableModule from '@/modules/OfferModule/OfferDataTableModule'; import { useMoney } from '@/settings'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; export default function Offer() { const { moneyRowFormatter } = useMoney(); @@ -63,6 +64,22 @@ export default function Offer() { }, ]; + const lang = useSelector(selectCurrentLang); + + const entity = 'offer'; + const Labels = { + PANEL_TITLE: lang.offer, + DATATABLE_TITLE: lang.offer_list, + ADD_NEW_ENTITY: lang.add_new_offer, + ENTITY_NAME: lang.offer, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, dataTableColumns, diff --git a/frontend/src/pages/Order/index.jsx b/frontend/src/pages/Order/index.jsx index b92ee18a9..2b1fbb030 100644 --- a/frontend/src/pages/Order/index.jsx +++ b/frontend/src/pages/Order/index.jsx @@ -2,9 +2,11 @@ import React from 'react'; import CrudModule from '@/modules/CrudModule'; import OrderForm from '@/forms/OrderForm'; // Ensure to create this form -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; -function Order() { +export default function Order() { + const entity = 'order'; const searchConfig = { displayLabels: ['orderId', 'status'], searchFields: 'orderId,status', @@ -67,10 +69,25 @@ function Order() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.order, + DATATABLE_TITLE: lang.order_list, + ADD_NEW_ENTITY: lang.add_new_order, + ENTITY_NAME: lang.order, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, - readColumns, dataTableColumns, + readColumns, searchConfig, entityDisplayLabels, }; @@ -82,5 +99,3 @@ function Order() { /> ); } - -export default Order; diff --git a/frontend/src/pages/Payment/PaymentRead.jsx b/frontend/src/pages/Payment/PaymentRead.jsx index 2edd450ab..250d3d1f0 100644 --- a/frontend/src/pages/Payment/PaymentRead.jsx +++ b/frontend/src/pages/Payment/PaymentRead.jsx @@ -1,13 +1,24 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import ReadPaymentModule from '@/modules/PaymentModule/ReadPaymentModule'; export default function PaymentRead() { - const customConfig = { - /*your custom config*/ + const lang = useSelector(selectCurrentLang); + + const entity = 'payment'; + + const Labels = { + PANEL_TITLE: lang.payment, + DATATABLE_TITLE: lang.payment_list, + ADD_NEW_ENTITY: lang.add_new_payment, + ENTITY_NAME: lang.payment, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; - const config = { - ...configPage, - //customConfig, + + const configPage = { + entity, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Payment/PaymentUpdate.jsx b/frontend/src/pages/Payment/PaymentUpdate.jsx index e2d6dfa08..ebc888c93 100644 --- a/frontend/src/pages/Payment/PaymentUpdate.jsx +++ b/frontend/src/pages/Payment/PaymentUpdate.jsx @@ -1,9 +1,24 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import UpdatePaymentModule from '@/modules/PaymentModule/UpdatePaymentModule'; export default function PaymentUpdate() { - const config = { - ...configPage, + const lang = useSelector(selectCurrentLang); + + const entity = 'payment'; + + const Labels = { + PANEL_TITLE: lang.payment, + DATATABLE_TITLE: lang.payment_list, + ADD_NEW_ENTITY: lang.add_new_payment, + ENTITY_NAME: lang.payment, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Payment/index.jsx b/frontend/src/pages/Payment/index.jsx index 70452d4e1..037b1d845 100644 --- a/frontend/src/pages/Payment/index.jsx +++ b/frontend/src/pages/Payment/index.jsx @@ -1,5 +1,6 @@ import dayjs from 'dayjs'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import PaymentDataTableModule from '@/modules/PaymentModule/PaymentDataTableModule'; export default function Payment() { @@ -45,6 +46,23 @@ export default function Payment() { }, ]; + const lang = useSelector(selectCurrentLang); + + const entity = 'payment'; + + const Labels = { + PANEL_TITLE: lang.payment, + DATATABLE_TITLE: lang.payment_list, + ADD_NEW_ENTITY: lang.add_new_payment, + ENTITY_NAME: lang.payment, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, dataTableColumns, diff --git a/frontend/src/pages/PaymentMode/index.jsx b/frontend/src/pages/PaymentMode/index.jsx index 1efd25f26..1b1f8d7bc 100644 --- a/frontend/src/pages/PaymentMode/index.jsx +++ b/frontend/src/pages/PaymentMode/index.jsx @@ -1,6 +1,7 @@ import React from 'react'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { Switch } from 'antd'; import { CloseOutlined, CheckOutlined } from '@ant-design/icons'; @@ -8,6 +9,7 @@ import CrudModule from '@/modules/CrudModule'; import PaymentModeForm from '@/forms/PaymentModeForm'; export default function PaymentMode() { + const entity = 'paymentMode'; const searchConfig = { displayLabels: ['name'], searchFields: 'name', @@ -87,6 +89,21 @@ export default function PaymentMode() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.payment_mode, + DATATABLE_TITLE: lang.payment_mode_list, + ADD_NEW_ENTITY: lang.add_new_payment_mode, + ENTITY_NAME: lang.payment_mode, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, readColumns, diff --git a/frontend/src/pages/Quote/QuoteCreate.jsx b/frontend/src/pages/Quote/QuoteCreate.jsx index 31bdd0734..f6288a3ae 100644 --- a/frontend/src/pages/Quote/QuoteCreate.jsx +++ b/frontend/src/pages/Quote/QuoteCreate.jsx @@ -1,14 +1,24 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import CreateQuoteModule from '@/modules/QuoteModule/CreateQuoteModule'; -const customConfig = { - /*your custom config*/ -}; -const config = { - ...configPage, - //customConfig, -}; - export default function QuoteCreate() { - return ; + const lang = useSelector(selectCurrentLang); + + const entity = 'quote'; + + const Labels = { + PANEL_TITLE: lang.quote, + DATATABLE_TITLE: lang.quote_list, + ADD_NEW_ENTITY: lang.add_new_quote, + ENTITY_NAME: lang.quote, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; + return ; } diff --git a/frontend/src/pages/Quote/QuoteRead.jsx b/frontend/src/pages/Quote/QuoteRead.jsx index 102fdf0f1..f0a81eee7 100644 --- a/frontend/src/pages/Quote/QuoteRead.jsx +++ b/frontend/src/pages/Quote/QuoteRead.jsx @@ -1,13 +1,24 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import ReadQuoteModule from '@/modules/QuoteModule/ReadQuoteModule'; export default function QuoteRead() { - const customConfig = { - /*your custom config*/ + const lang = useSelector(selectCurrentLang); + + const entity = 'quote'; + + const Labels = { + PANEL_TITLE: lang.quote, + DATATABLE_TITLE: lang.quote_list, + ADD_NEW_ENTITY: lang.add_new_quote, + ENTITY_NAME: lang.quote, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; - const config = { - ...configPage, - //customConfig, + + const configPage = { + entity, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Quote/QuoteUpdate.jsx b/frontend/src/pages/Quote/QuoteUpdate.jsx index 0d5cf2188..3a1269c34 100644 --- a/frontend/src/pages/Quote/QuoteUpdate.jsx +++ b/frontend/src/pages/Quote/QuoteUpdate.jsx @@ -1,13 +1,24 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import UpdateQuoteModule from '@/modules/QuoteModule/UpdateQuoteModule'; export default function QuoteUpdate() { - const customConfig = { - /*your custom config*/ + const lang = useSelector(selectCurrentLang); + + const entity = 'quote'; + + const Labels = { + PANEL_TITLE: lang.quote, + DATATABLE_TITLE: lang.quote_list, + ADD_NEW_ENTITY: lang.add_new_quote, + ENTITY_NAME: lang.quote, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, }; - const config = { - ...configPage, - //customConfig, + + const configPage = { + entity, + ...Labels, }; - return ; + return ; } diff --git a/frontend/src/pages/Quote/index.jsx b/frontend/src/pages/Quote/index.jsx index ef9d86673..dea600bae 100644 --- a/frontend/src/pages/Quote/index.jsx +++ b/frontend/src/pages/Quote/index.jsx @@ -3,9 +3,11 @@ import { Tag } from 'antd'; import QuoteDataTableModule from '@/modules/QuoteModule/QuoteDataTableModule'; import { useMoney } from '@/settings'; -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; export default function Quote() { + const entity = 'quote'; const { moneyRowFormatter } = useMoney(); const searchConfig = { @@ -66,6 +68,21 @@ export default function Quote() { }, ]; + const lang = useSelector(selectCurrentLang); + + const Labels = { + PANEL_TITLE: lang.quote, + DATATABLE_TITLE: lang.quote_list, + ADD_NEW_ENTITY: lang.add_new_quote, + ENTITY_NAME: lang.quote, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + }; + + const configPage = { + entity, + ...Labels, + }; const config = { ...configPage, dataTableColumns, diff --git a/frontend/src/pages/Settings/AppSettings.jsx b/frontend/src/pages/Settings/AppSettings.jsx index f96819def..f95da9a00 100644 --- a/frontend/src/pages/Settings/AppSettings.jsx +++ b/frontend/src/pages/Settings/AppSettings.jsx @@ -1,12 +1,28 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import AppSettingsModule from '@/modules/SettingModule/AppSettingsModule'; -const config = { - ...configPage, - settingsCategory: 'app_settings', - SETTINGS_TITLE: 'General Settings', -}; export default function AppSettings() { - return ; + const lang = useSelector(selectCurrentLang); + + const entity = 'setting'; + + const Labels = { + PANEL_TITLE: lang.settings, + DATATABLE_TITLE: lang.settings_list, + ADD_NEW_ENTITY: lang.add_new_settings, + ENTITY_NAME: lang.settings, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + SETTINGS_TITLE: 'General Settings', + }; + + const configPage = { + entity, + settingsCategory: 'app_settings', + ...Labels, + }; + + return ; } diff --git a/frontend/src/pages/Settings/GeneralSettings.jsx b/frontend/src/pages/Settings/GeneralSettings.jsx index 3cc849321..8651f7987 100644 --- a/frontend/src/pages/Settings/GeneralSettings.jsx +++ b/frontend/src/pages/Settings/GeneralSettings.jsx @@ -1,12 +1,27 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import GeneralSettingsModule from '@/modules/SettingModule/GeneralSettingsModule'; -const config = { - ...configPage, - settingsCategory: 'app_settings', - SETTINGS_TITLE: 'General Settings', -}; export default function GeneralSettings() { - return ; + const lang = useSelector(selectCurrentLang); + + const entity = 'setting'; + + const Labels = { + PANEL_TITLE: lang.settings, + DATATABLE_TITLE: lang.settings_list, + ADD_NEW_ENTITY: lang.add_new_settings, + ENTITY_NAME: lang.settings, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + SETTINGS_TITLE: 'General Settings', + }; + + const configPage = { + entity, + settingsCategory: 'app_settings', + ...Labels, + }; + return ; } diff --git a/frontend/src/pages/Settings/InvoiceSettings.jsx b/frontend/src/pages/Settings/InvoiceSettings.jsx index 3cc849321..8651f7987 100644 --- a/frontend/src/pages/Settings/InvoiceSettings.jsx +++ b/frontend/src/pages/Settings/InvoiceSettings.jsx @@ -1,12 +1,27 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import GeneralSettingsModule from '@/modules/SettingModule/GeneralSettingsModule'; -const config = { - ...configPage, - settingsCategory: 'app_settings', - SETTINGS_TITLE: 'General Settings', -}; export default function GeneralSettings() { - return ; + const lang = useSelector(selectCurrentLang); + + const entity = 'setting'; + + const Labels = { + PANEL_TITLE: lang.settings, + DATATABLE_TITLE: lang.settings_list, + ADD_NEW_ENTITY: lang.add_new_settings, + ENTITY_NAME: lang.settings, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + SETTINGS_TITLE: 'General Settings', + }; + + const configPage = { + entity, + settingsCategory: 'app_settings', + ...Labels, + }; + return ; } diff --git a/frontend/src/pages/Settings/MoneyFormatSettings.jsx b/frontend/src/pages/Settings/MoneyFormatSettings.jsx index 77d0e7117..0603aa291 100644 --- a/frontend/src/pages/Settings/MoneyFormatSettings.jsx +++ b/frontend/src/pages/Settings/MoneyFormatSettings.jsx @@ -1,12 +1,27 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import MoneyFormatSettingsModule from '@/modules/SettingModule/MoneyFormatSettingsModule'; -const config = { - ...configPage, - settingsCategory: 'money_format_settings', - SETTINGS_TITLE: 'Money Format Settings', -}; export default function MoneyFormatSettings() { - return ; + const lang = useSelector(selectCurrentLang); + + const entity = 'setting'; + + const Labels = { + PANEL_TITLE: lang.settings, + DATATABLE_TITLE: lang.settings_list, + ADD_NEW_ENTITY: lang.add_new_settings, + ENTITY_NAME: lang.settings, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + SETTINGS_TITLE: 'Money Format Settings', + }; + + const configPage = { + entity, + settingsCategory: 'money_format_settings', + ...Labels, + }; + return ; } diff --git a/frontend/src/pages/Settings/PaymentSettings.jsx b/frontend/src/pages/Settings/PaymentSettings.jsx index 3cc849321..b909c63c8 100644 --- a/frontend/src/pages/Settings/PaymentSettings.jsx +++ b/frontend/src/pages/Settings/PaymentSettings.jsx @@ -1,12 +1,27 @@ -import configPage from './config'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import GeneralSettingsModule from '@/modules/SettingModule/GeneralSettingsModule'; -const config = { - ...configPage, - settingsCategory: 'app_settings', - SETTINGS_TITLE: 'General Settings', -}; export default function GeneralSettings() { - return ; + const lang = useSelector(selectCurrentLang); + + const entity = 'setting'; + + const Labels = { + PANEL_TITLE: lang.settings, + DATATABLE_TITLE: lang.settings_list, + ADD_NEW_ENTITY: lang.add_new_settings, + ENTITY_NAME: lang.settings, + CREATE_ENTITY: lang.save, + UPDATE_ENTITY: lang.update, + SETTINGS_TITLE: 'Money Format Settings', + }; + + const configPage = { + entity, + settingsCategory: 'finance_settings', + ...Labels, + }; + return ; } diff --git a/frontend/src/redux/lang/actions.js b/frontend/src/redux/lang/actions.js new file mode 100644 index 000000000..d2e995d09 --- /dev/null +++ b/frontend/src/redux/lang/actions.js @@ -0,0 +1,32 @@ +import * as actionTypes from './types'; +import { request } from '@/request'; + +import fr_fr from '@/lang/fr_fr'; + +export const langAction = { + resetState: () => (dispatch) => { + dispatch({ + type: actionTypes.RESET_STATE, + }); + }, + translate: () => async (dispatch) => { + console.log('🚀 ~ file: actions.js:13 ~ dispatch: ~ translate:'); + dispatch({ + type: actionTypes.REQUEST_LOADING, + }); + let data = fr_fr; + console.log('🚀 ~ file: actions.js:19 ~ fr_fr:', data); + + if (data) { + dispatch({ + type: actionTypes.REQUEST_SUCCESS, + payload: data, + }); + window.localStorage.setItem('lang', JSON.stringify(data)); + } else { + dispatch({ + type: actionTypes.REQUEST_FAILED, + }); + } + }, +}; diff --git a/frontend/src/redux/lang/index.js b/frontend/src/redux/lang/index.js new file mode 100644 index 000000000..cbc56ade5 --- /dev/null +++ b/frontend/src/redux/lang/index.js @@ -0,0 +1 @@ +export { default as reducer } from './reducer'; diff --git a/frontend/src/redux/lang/reducer.js b/frontend/src/redux/lang/reducer.js new file mode 100644 index 000000000..064650e73 --- /dev/null +++ b/frontend/src/redux/lang/reducer.js @@ -0,0 +1,44 @@ +import * as actionTypes from './types'; +import lang from '@/lang/default'; + +const INITIAL_LANG_STATE = { + ...lang, +}; + +const INITIAL_STATE = { + result: INITIAL_LANG_STATE, + langCode: 'en_us', + isLoading: false, + isSuccess: false, +}; + +const langReducer = (state = INITIAL_STATE, action) => { + const { payload = null, langCode } = action; + switch (action.type) { + case actionTypes.RESET_STATE: + return INITIAL_STATE; + case actionTypes.REQUEST_LOADING: + return { + ...state, + isLoading: true, + }; + case actionTypes.REQUEST_FAILED: + return { + ...state, + isLoading: false, + isSuccess: false, + }; + + case actionTypes.REQUEST_SUCCESS: + return { + result: payload, + langCode: langCode, + isLoading: false, + isSuccess: true, + }; + default: + return state; + } +}; + +export default langReducer; diff --git a/frontend/src/redux/lang/selectors.js b/frontend/src/redux/lang/selectors.js new file mode 100644 index 000000000..035acc66f --- /dev/null +++ b/frontend/src/redux/lang/selectors.js @@ -0,0 +1,6 @@ +import { createSelector } from 'reselect'; + +export const selectLangState = (state) => state.lang; + +export const selectCurrentLang = createSelector([selectLangState], (lang) => lang.result); +export const selectLangCode = createSelector([selectLangState], (lang) => lang.langCode); diff --git a/frontend/src/redux/lang/types.js b/frontend/src/redux/lang/types.js new file mode 100644 index 000000000..cbb39b2e4 --- /dev/null +++ b/frontend/src/redux/lang/types.js @@ -0,0 +1,5 @@ +export const RESET_STATE = 'LANG_RESET_STATE'; + +export const REQUEST_LOADING = 'LANG_REQUEST_LOADING'; +export const REQUEST_SUCCESS = 'LANG_REQUEST_SUCCESS'; +export const REQUEST_FAILED = 'LANG_REQUEST_FAILED'; diff --git a/frontend/src/redux/rootReducer.js b/frontend/src/redux/rootReducer.js index 8ed08e0b7..7ec6a22d9 100644 --- a/frontend/src/redux/rootReducer.js +++ b/frontend/src/redux/rootReducer.js @@ -4,6 +4,7 @@ import { reducer as authReducer } from './auth'; import { reducer as crudReducer } from './crud'; import { reducer as erpReducer } from './erp'; import { reducer as settingsReducer } from './settings'; +import { reducer as langReducer } from './lang'; import * as actionTypes from './auth/types'; @@ -14,6 +15,7 @@ const appReducer = combineReducers({ crud: crudReducer, erp: erpReducer, settings: settingsReducer, + lang: langReducer, }); const rootReducer = (state, action) => { diff --git a/frontend/src/redux/store.js b/frontend/src/redux/store.js index 2c224c561..297ae37e9 100644 --- a/frontend/src/redux/store.js +++ b/frontend/src/redux/store.js @@ -1,6 +1,7 @@ import { createStore, applyMiddleware, compose } from 'redux'; import thunk from 'redux-thunk'; import { createLogger } from 'redux-logger'; +import lang from '@/lang/default'; import rootReducer from './rootReducer'; import storePersist from './storePersist'; @@ -26,6 +27,8 @@ const AUTH_INITIAL_STATE = { }; const initialState = storePersist.get('auth') ? { auth: AUTH_INITIAL_STATE } : {}; +window.localStorage.setItem('lang', JSON.stringify(lang)); + const store = createStore(rootReducer, initialState, configStore); export default store; From 6eec6f7530e22cfbe20d175c385ad48b625913ff Mon Sep 17 00:00:00 2001 From: Salah Eddine Lalami <50052356+idurar@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:38:56 +0100 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=94=A5=20remove=20unused=20config=20f?= =?UTF-8?q?ile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/Currency/config/index.js | 19 ------------------ frontend/src/pages/Customer/config/index.js | 19 ------------------ frontend/src/pages/Email/config/index.js | 20 ------------------- frontend/src/pages/Employee/config/index.js | 19 ------------------ frontend/src/pages/Inventory/config/index.js | 19 ------------------ frontend/src/pages/Invoice/config/index.js | 18 ----------------- frontend/src/pages/Lead/config/index.js | 19 ------------------ frontend/src/pages/Offer/config/index.js | 19 ------------------ frontend/src/pages/Order/config/index.js | 19 ------------------ frontend/src/pages/Payment/config/index.js | 19 ------------------ .../src/pages/PaymentMode/config/index.js | 19 ------------------ frontend/src/pages/Quote/config/index.js | 19 ------------------ frontend/src/pages/Settings/config/index.js | 19 ------------------ 13 files changed, 247 deletions(-) delete mode 100644 frontend/src/pages/Currency/config/index.js delete mode 100644 frontend/src/pages/Customer/config/index.js delete mode 100644 frontend/src/pages/Email/config/index.js delete mode 100644 frontend/src/pages/Employee/config/index.js delete mode 100644 frontend/src/pages/Inventory/config/index.js delete mode 100644 frontend/src/pages/Invoice/config/index.js delete mode 100644 frontend/src/pages/Lead/config/index.js delete mode 100644 frontend/src/pages/Offer/config/index.js delete mode 100644 frontend/src/pages/Order/config/index.js delete mode 100644 frontend/src/pages/Payment/config/index.js delete mode 100644 frontend/src/pages/PaymentMode/config/index.js delete mode 100644 frontend/src/pages/Quote/config/index.js delete mode 100644 frontend/src/pages/Settings/config/index.js diff --git a/frontend/src/pages/Currency/config/index.js b/frontend/src/pages/Currency/config/index.js deleted file mode 100644 index 8ef12171e..000000000 --- a/frontend/src/pages/Currency/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'currency'; - -const Labels = { - PANEL_TITLE: lang.currency, - DATATABLE_TITLE: lang.currency_list, - ADD_NEW_ENTITY: lang.add_new_currency, - ENTITY_NAME: lang.currency, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Customer/config/index.js b/frontend/src/pages/Customer/config/index.js deleted file mode 100644 index 88c6d1445..000000000 --- a/frontend/src/pages/Customer/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'client'; - -const Labels = { - PANEL_TITLE: lang.customer, - DATATABLE_TITLE: lang.customer_list, - ADD_NEW_ENTITY: lang.add_new_customer, - ENTITY_NAME: lang.customer, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Email/config/index.js b/frontend/src/pages/Email/config/index.js deleted file mode 100644 index 2d2abd8ff..000000000 --- a/frontend/src/pages/Email/config/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'email'; - -const Labels = { - PANEL_TITLE: lang.email_template, - DATATABLE_TITLE: lang.email_template_list, - ADD_NEW_ENTITY: lang.add_new_email_template, - ENTITY_NAME: lang.email_template, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - create: false, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Employee/config/index.js b/frontend/src/pages/Employee/config/index.js deleted file mode 100644 index 9dde58bf3..000000000 --- a/frontend/src/pages/Employee/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'employee'; - -const Labels = { - PANEL_TITLE: lang.employee, - DATATABLE_TITLE: lang.employee_list, - ADD_NEW_ENTITY: lang.add_new_employee, - ENTITY_NAME: lang.employee, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Inventory/config/index.js b/frontend/src/pages/Inventory/config/index.js deleted file mode 100644 index 2f9400f2f..000000000 --- a/frontend/src/pages/Inventory/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'inventory'; // Updated entity name - -const Labels = { - PANEL_TITLE: lang.product, - DATATABLE_TITLE: lang.product_list, - ADD_NEW_ENTITY: lang.add_new_product, - ENTITY_NAME: lang.product, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Invoice/config/index.js b/frontend/src/pages/Invoice/config/index.js deleted file mode 100644 index ccb258a05..000000000 --- a/frontend/src/pages/Invoice/config/index.js +++ /dev/null @@ -1,18 +0,0 @@ -import lang from '@/lang/language'; -const entity = 'invoice'; -const Labels = { - PANEL_TITLE: lang.invoice, - DATATABLE_TITLE: lang.invoice_list, - ADD_NEW_ENTITY: lang.add_new_invoice, - ENTITY_NAME: lang.invoice, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, - RECORD_ENTITY: lang.record_payment, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Lead/config/index.js b/frontend/src/pages/Lead/config/index.js deleted file mode 100644 index f3f074832..000000000 --- a/frontend/src/pages/Lead/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'lead'; - -const Labels = { - PANEL_TITLE: lang.lead, - DATATABLE_TITLE: lang.lead_list, - ADD_NEW_ENTITY: lang.add_new_lead, - ENTITY_NAME: lang.lead, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Offer/config/index.js b/frontend/src/pages/Offer/config/index.js deleted file mode 100644 index 558b3ebd6..000000000 --- a/frontend/src/pages/Offer/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'offer'; - -const Labels = { - PANEL_TITLE: lang.offer, - DATATABLE_TITLE: lang.offer_list, - ADD_NEW_ENTITY: lang.add_new_offer, - ENTITY_NAME: lang.offer, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Order/config/index.js b/frontend/src/pages/Order/config/index.js deleted file mode 100644 index a1302013c..000000000 --- a/frontend/src/pages/Order/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'order'; // Keeping entity value as 'order' - -const Labels = { - PANEL_TITLE: lang.order, - DATATABLE_TITLE: lang.order_list, - ADD_NEW_ENTITY: lang.add_new_order, - ENTITY_NAME: lang.order, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Payment/config/index.js b/frontend/src/pages/Payment/config/index.js deleted file mode 100644 index d34c02899..000000000 --- a/frontend/src/pages/Payment/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'payment'; - -const Labels = { - PANEL_TITLE: lang.payment, - DATATABLE_TITLE: lang.payment_list, - ADD_NEW_ENTITY: lang.add_new_payment, - ENTITY_NAME: lang.payment, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/PaymentMode/config/index.js b/frontend/src/pages/PaymentMode/config/index.js deleted file mode 100644 index 1f36d526b..000000000 --- a/frontend/src/pages/PaymentMode/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'paymentMode'; - -const Labels = { - PANEL_TITLE: lang.payment_mode, - DATATABLE_TITLE: lang.payment_mode_list, - ADD_NEW_ENTITY: lang.add_new_payment_mode, - ENTITY_NAME: lang.payment_mode, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Quote/config/index.js b/frontend/src/pages/Quote/config/index.js deleted file mode 100644 index 5221e10db..000000000 --- a/frontend/src/pages/Quote/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'quote'; - -const Labels = { - PANEL_TITLE: lang.quote, - DATATABLE_TITLE: lang.quote_list, - ADD_NEW_ENTITY: lang.add_new_quote, - ENTITY_NAME: lang.quote, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; diff --git a/frontend/src/pages/Settings/config/index.js b/frontend/src/pages/Settings/config/index.js deleted file mode 100644 index ba1e549b2..000000000 --- a/frontend/src/pages/Settings/config/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import lang from '@/lang/language'; - -const entity = 'setting'; - -const Labels = { - PANEL_TITLE: lang.settings, - DATATABLE_TITLE: lang.settings_list, - ADD_NEW_ENTITY: lang.add_new_settings, - ENTITY_NAME: lang.settings, - CREATE_ENTITY: lang.save, - UPDATE_ENTITY: lang.update, -}; - -const configPage = { - entity, - ...Labels, -}; - -export default configPage; From 94ba528f837276ffe6ba7d4509a7e5dbe0c474be Mon Sep 17 00:00:00 2001 From: Salah Eddine Lalami <50052356+idurar@users.noreply.github.com> Date: Fri, 27 Oct 2023 18:43:03 +0100 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=8C=90=20Add=20lang=20localisation=20?= =?UTF-8?q?to=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/lang/default.js | 358 +++++++++--------- .../AdminCrudModule/AdminDataTable.jsx | 1 + .../AdminCrudModule/UpdatePassword.jsx | 1 + .../src/modules/AdminCrudModule/index.jsx | 1 + .../src/modules/CrudModule/CrudDataTable.jsx | 1 + frontend/src/modules/CrudModule/index.jsx | 1 + .../components/PreviewCard.jsx | 2 + .../components/RecentTable/index.jsx | 2 + .../src/modules/DashboardModule/index.jsx | 2 + .../components/DataTableDropMenu.jsx | 1 + .../ReadEmailModule/components/ReadItem.jsx | 8 +- .../EmailModule/ReadEmailModule/index.jsx | 1 + .../componenets/EmailForm.jsx | 2 + .../EmailModule/UpdateEmailModule/index.jsx | 1 + .../src/modules/ErpPanelModule/CreateItem.jsx | 2 + .../src/modules/ErpPanelModule/DataTable.jsx | 1 + .../src/modules/ErpPanelModule/DeleteItem.jsx | 1 + .../src/modules/ErpPanelModule/ReadItem.jsx | 1 + .../src/modules/ErpPanelModule/UpdateItem.jsx | 1 + .../InvoiceModule/Forms/InvoiceForm.jsx | 1 + .../components/DataTableDropMenu.jsx | 1 + .../InvoiceModule/ReadInvoiceModule/index.jsx | 1 + .../components/Payment.jsx | 1 + .../components/RecordPayment.jsx | 2 +- .../UpdateInvoiceModule/index.jsx | 1 + .../modules/OfferModule/Forms/OfferForm.jsx | 1 + .../components/DataTableDropMenu.jsx | 1 + .../ReadOfferModule/ReadOfferItem.jsx | 1 + .../OfferModule/ReadOfferModule/index.jsx | 1 + .../OfferModule/UpdateOfferModule/index.jsx | 1 + .../PaymentModule/Forms/PaymentForm.jsx | 2 + .../components/DataTableDropMenu.jsx | 1 + .../components/PaymentDataTable.jsx | 1 + .../ReadPaymentModule/components/ReadItem.jsx | 1 + .../components/Payment.jsx | 2 + .../components/UpdatePayment.jsx | 2 + .../ProfileModule/components/AdminInfo.jsx | 2 + .../components/PasswordModal.jsx | 2 + .../ProfileModule/components/UpdateAdmin.jsx | 2 + .../ProfileModule/components/UploadImg.jsx | 2 + .../modules/QuoteModule/Forms/QuoteForm.jsx | 1 + .../components/DataTableDropMenu.jsx | 3 +- .../QuoteModule/ReadQuoteModule/index.jsx | 1 + .../QuoteModule/UpdateQuoteModule/index.jsx | 1 + 44 files changed, 234 insertions(+), 189 deletions(-) diff --git a/frontend/src/lang/default.js b/frontend/src/lang/default.js index 1c8fb99f6..a57686e98 100644 --- a/frontend/src/lang/default.js +++ b/frontend/src/lang/default.js @@ -202,185 +202,185 @@ const lang = { add_new_product: 'Add New Product', order_list: 'Order List', add_new_order: 'Add New Order', - // long description - // postal_code: 'Postal Code', - // phone_number: 'Phone Number', - // email_address: 'Email Address', - // notification_settings: 'Notification Settings', - // language_settings: 'Language Settings', - // theme_settings: 'Theme Settings', - // account_settings: 'Account Settings', - // privacy_settings: 'Privacy Settings', - // security_settings: 'Security Settings', - // accessibility_settings: 'Accessibility Settings', - // view_all: 'View All', - // create_new: 'Create New', - // edit_profile: 'Edit Profile', - // change_password: 'Change Password', - // account_details: 'Account Details', - // billing_address: 'Billing Address', - // shipping_address: 'Shipping Address', - // order_details: 'Order Details', - // payment_details: 'Payment Details', - // item_details: 'Item Details', - // currency_code: 'Currency Code', - // tax_rate: 'Tax Rate', - // terms_and_conditions: 'Terms and Conditions', - // delivery_date: 'Delivery Date', - // order_summary: 'Order Summary', - // invoice_details: 'Invoice Details', - // payment_method: 'Payment Method', - // card_number: 'Card Number', - // expiration_date: 'Expiration Date', - // payment_status: 'Payment Status', - // report_details: 'Report Details', - // analytics_details: 'Analytics Details', - // audit_trail: 'Audit Trail', - // history_log: 'History Log', - // documentation_details: 'Documentation Details', - // support_details: 'Support Details', - // chat_with_us: 'Chat with Us', - // email_us: 'Email Us', - // call_us: 'Call Us', - // mailing_address: 'Mailing Address', - // task_details: 'Task Details', - // event_details: 'Event Details', - // meeting_details: 'Meeting Details', - // reminder_details: 'Reminder Details', - // schedule_details: 'Schedule Details', - // calendar_details: 'Calendar Details', - // add_to_cart: 'Add to Cart', - // continue_shopping: 'Continue Shopping', - // product_details: 'Product Details', - // customer_details: 'Customer Details', - // shipping_details: 'Shipping Details', - // billing_details: 'Billing Details', - // payment_confirmation: 'Payment Confirmation', - // order_confirmation: 'Order Confirmation', - // thank_you: 'Thank You', - // track_order: 'Track Order', - // order_history: 'Order History', - // delivery_options: 'Delivery Options', - // shipping_method: 'Shipping Method', - // order_status: 'Order Status', - // on_hold: 'On Hold', - // back_to_shop: 'Back to Shop', - // my_account: 'My Account', - // forgot_password: 'Forgot Password', - // reset_password: 'Reset Password', - // change_email: 'Change Email', - // change_username: 'Change Username', - // change_avatar: 'Change Avatar', - // account_verification: 'Account Verification', - // terms_of_service: 'Terms of Service', - // privacy_policy: 'Privacy Policy', - // cookie_policy: 'Cookie Policy', - // data_protection: 'Data Protection', - // accessibility_statement: 'Accessibility Statement', - // error_404: 'Error 404 - Page Not Found', - // error_500: 'Error 500 - Internal Server Error', - // invalid_credentials: 'Invalid Credentials', - // username_taken: 'Username Already Taken', - // email_taken: 'Email Already Taken', - // password_length: 'Password Length', - // password_strength: 'Password Strength', - // password_match: "Passwords Don't Match", - // email_incorrect_format: 'Incorrect Email Format', - // username_required: 'Username is Required', - // email_required: 'Email is Required', - // password_required: 'Password is Required', - // confirm_password_required: 'Confirm Password is Required', - // first_name_required: 'First Name is Required', - // last_name_required: 'Last Name is Required', - // phone_number_required: 'Phone Number is Required', - // address_required: 'Address is Required', - // city_required: 'City is Required', - // state_required: 'State is Required', - // postal_code_required: 'Postal Code is Required', - // card_number_required: 'Card Number is Required', - // expiration_date_required: 'Expiration Date is Required', - // cvv_required: 'CVV is Required', - // quantity_greater_than_zero: 'Quantity should be greater than zero', - // invalid_card_number: 'Invalid Card Number', - // invalid_expiration_date: 'Invalid Expiration Date', - // invalid_cvv: 'Invalid CVV', - // payment_declined: 'Payment Declined', - // payment_pending: 'Payment Pending', - // payment_failed: 'Payment Failed', - // payment_success: 'Payment Success', - // invalid_email_format: 'Invalid Email Format', - // invalid_phone_number: 'Invalid Phone Number', - // invalid_postal_code: 'Invalid Postal Code', - // invalid_coupon_code: 'Invalid Coupon Code', - // expired_coupon_code: 'Expired Coupon Code', - // coupon_already_applied: 'Coupon Already Applied', - // coupon_limit_reached: 'Coupon Limit Reached', - // coupon_not_applicable: 'Coupon Not Applicable', - // coupon_applied: 'Coupon Applied', - // coupon_removed: 'Coupon Removed', - // coupon_discount: 'Coupon Discount', - // discount_percent: 'Discount Percent', - // discount_amount: 'Discount Amount', - // tax_percent: 'Tax Percent', - // sub_total: 'Sub Total', - // purchase_history: 'Purchase History', - // order_number: 'Order Number', - // date_ordered: 'Date Ordered', - // payment_due: 'Payment Due', - // due_date: 'Due Date', - // payment_received: 'Payment Received', - // received_date: 'Received Date', - // unit_price: 'Unit Price', - // transaction_id: 'Transaction ID', - // in_progress: 'In Progress', - // refund_requested: 'Refund Requested', - // exchange_requested: 'Exchange Requested', - // high_priority: 'High Priority', - // medium_priority: 'Medium Priority', - // low_priority: 'Low Priority', - // this_week: 'This Week', - // this_month: 'This Month', - // select_date: 'Select Date', - // select_time: 'Select Time', - // start_date: 'Start Date', - // end_date: 'End Date', - // repeat_every: 'Repeat Every', - // select_file: 'Select File', - // upload_file: 'Upload File', - // download_file: 'Download File', - // file_size_limit: 'File Size Limit', - // invalid_file_type: 'Invalid File Type', - // file_upload_failed: 'File Upload Failed', - // file_download_failed: 'File Download Failed', - // file_not_found: 'File Not Found', - // file_removed: 'File Removed', - // send_message: 'Send Message', - // mark_as_read: 'Mark as Read', - // mark_as_unread: 'Mark as Unread', - // mark_as_important: 'Mark as Important', - // mark_as_not_important: 'Mark as Not Important', - // delete_message: 'Delete Message', - // email_notification: 'Email Notification', - // push_notification: 'Push Notification', - // sms_notification: 'SMS Notification', - // web_notification: 'Web Notification', - // notification_sound: 'Notification Sound', - // search_placeholder: 'Search', - // no_results_found: 'No Results Found', - // please_wait: 'Please Wait', - // are_you_sure: 'Are you sure?', - // confirm_password: 'Confirm Password', - // current_password: 'Current Password', - // new_password: 'New Password', - // remember_me: 'Remember Me', - // thank_you_exclamation: 'Thank you!', - // welcome_back: 'Welcome Back!', - // account_activation: 'Account Activation', - // email_verification: 'Email Verification', - // password_reset: 'Password Reset', - // order_tracking: 'Order Tracking', - // contact_us: 'Contact Us', - // live_chat: 'Live Chat', + + postal_code: 'Postal Code', + phone_number: 'Phone Number', + email_address: 'Email Address', + notification_settings: 'Notification Settings', + language_settings: 'Language Settings', + theme_settings: 'Theme Settings', + account_settings: 'Account Settings', + privacy_settings: 'Privacy Settings', + security_settings: 'Security Settings', + accessibility_settings: 'Accessibility Settings', + view_all: 'View All', + create_new: 'Create New', + edit_profile: 'Edit Profile', + change_password: 'Change Password', + account_details: 'Account Details', + billing_address: 'Billing Address', + shipping_address: 'Shipping Address', + order_details: 'Order Details', + payment_details: 'Payment Details', + item_details: 'Item Details', + currency_code: 'Currency Code', + tax_rate: 'Tax Rate', + terms_and_conditions: 'Terms and Conditions', + delivery_date: 'Delivery Date', + order_summary: 'Order Summary', + invoice_details: 'Invoice Details', + payment_method: 'Payment Method', + card_number: 'Card Number', + expiration_date: 'Expiration Date', + payment_status: 'Payment Status', + report_details: 'Report Details', + analytics_details: 'Analytics Details', + audit_trail: 'Audit Trail', + history_log: 'History Log', + documentation_details: 'Documentation Details', + support_details: 'Support Details', + chat_with_us: 'Chat with Us', + email_us: 'Email Us', + call_us: 'Call Us', + mailing_address: 'Mailing Address', + task_details: 'Task Details', + event_details: 'Event Details', + meeting_details: 'Meeting Details', + reminder_details: 'Reminder Details', + schedule_details: 'Schedule Details', + calendar_details: 'Calendar Details', + add_to_cart: 'Add to Cart', + continue_shopping: 'Continue Shopping', + product_details: 'Product Details', + customer_details: 'Customer Details', + shipping_details: 'Shipping Details', + billing_details: 'Billing Details', + payment_confirmation: 'Payment Confirmation', + order_confirmation: 'Order Confirmation', + thank_you: 'Thank You', + track_order: 'Track Order', + order_history: 'Order History', + delivery_options: 'Delivery Options', + shipping_method: 'Shipping Method', + order_status: 'Order Status', + on_hold: 'On Hold', + back_to_shop: 'Back to Shop', + my_account: 'My Account', + forgot_password: 'Forgot Password', + reset_password: 'Reset Password', + change_email: 'Change Email', + change_username: 'Change Username', + change_avatar: 'Change Avatar', + account_verification: 'Account Verification', + terms_of_service: 'Terms of Service', + privacy_policy: 'Privacy Policy', + cookie_policy: 'Cookie Policy', + data_protection: 'Data Protection', + accessibility_statement: 'Accessibility Statement', + error_404: 'Error 404 - Page Not Found', + error_500: 'Error 500 - Internal Server Error', + invalid_credentials: 'Invalid Credentials', + username_taken: 'Username Already Taken', + email_taken: 'Email Already Taken', + password_length: 'Password Length', + password_strength: 'Password Strength', + password_match: "Passwords Don't Match", + email_incorrect_format: 'Incorrect Email Format', + username_required: 'Username is Required', + email_required: 'Email is Required', + password_required: 'Password is Required', + confirm_password_required: 'Confirm Password is Required', + first_name_required: 'First Name is Required', + last_name_required: 'Last Name is Required', + phone_number_required: 'Phone Number is Required', + address_required: 'Address is Required', + city_required: 'City is Required', + state_required: 'State is Required', + postal_code_required: 'Postal Code is Required', + card_number_required: 'Card Number is Required', + expiration_date_required: 'Expiration Date is Required', + cvv_required: 'CVV is Required', + quantity_greater_than_zero: 'Quantity should be greater than zero', + invalid_card_number: 'Invalid Card Number', + invalid_expiration_date: 'Invalid Expiration Date', + invalid_cvv: 'Invalid CVV', + payment_declined: 'Payment Declined', + payment_pending: 'Payment Pending', + payment_failed: 'Payment Failed', + payment_success: 'Payment Success', + invalid_email_format: 'Invalid Email Format', + invalid_phone_number: 'Invalid Phone Number', + invalid_postal_code: 'Invalid Postal Code', + invalid_coupon_code: 'Invalid Coupon Code', + expired_coupon_code: 'Expired Coupon Code', + coupon_already_applied: 'Coupon Already Applied', + coupon_limit_reached: 'Coupon Limit Reached', + coupon_not_applicable: 'Coupon Not Applicable', + coupon_applied: 'Coupon Applied', + coupon_removed: 'Coupon Removed', + coupon_discount: 'Coupon Discount', + discount_percent: 'Discount Percent', + discount_amount: 'Discount Amount', + tax_percent: 'Tax Percent', + sub_total: 'Sub Total', + purchase_history: 'Purchase History', + order_number: 'Order Number', + date_ordered: 'Date Ordered', + payment_due: 'Payment Due', + due_date: 'Due Date', + payment_received: 'Payment Received', + received_date: 'Received Date', + unit_price: 'Unit Price', + transaction_id: 'Transaction ID', + in_progress: 'In Progress', + refund_requested: 'Refund Requested', + exchange_requested: 'Exchange Requested', + high_priority: 'High Priority', + medium_priority: 'Medium Priority', + low_priority: 'Low Priority', + this_week: 'This Week', + this_month: 'This Month', + select_date: 'Select Date', + select_time: 'Select Time', + start_date: 'Start Date', + end_date: 'End Date', + repeat_every: 'Repeat Every', + select_file: 'Select File', + upload_file: 'Upload File', + download_file: 'Download File', + file_size_limit: 'File Size Limit', + invalid_file_type: 'Invalid File Type', + file_upload_failed: 'File Upload Failed', + file_download_failed: 'File Download Failed', + file_not_found: 'File Not Found', + file_removed: 'File Removed', + send_message: 'Send Message', + mark_as_read: 'Mark as Read', + mark_as_unread: 'Mark as Unread', + mark_as_important: 'Mark as Important', + mark_as_not_important: 'Mark as Not Important', + delete_message: 'Delete Message', + email_notification: 'Email Notification', + push_notification: 'Push Notification', + sms_notification: 'SMS Notification', + web_notification: 'Web Notification', + notification_sound: 'Notification Sound', + search_placeholder: 'Search', + no_results_found: 'No Results Found', + please_wait: 'Please Wait', + are_you_sure: 'Are you sure?', + confirm_password: 'Confirm Password', + current_password: 'Current Password', + new_password: 'New Password', + remember_me: 'Remember Me', + thank_you_exclamation: 'Thank you!', + welcome_back: 'Welcome Back!', + account_activation: 'Account Activation', + email_verification: 'Email Verification', + password_reset: 'Password Reset', + order_tracking: 'Order Tracking', + contact_us: 'Contact Us', + live_chat: 'Live Chat', }; export default lang; diff --git a/frontend/src/modules/AdminCrudModule/AdminDataTable.jsx b/frontend/src/modules/AdminCrudModule/AdminDataTable.jsx index e2a9b22bc..7268c5c38 100644 --- a/frontend/src/modules/AdminCrudModule/AdminDataTable.jsx +++ b/frontend/src/modules/AdminCrudModule/AdminDataTable.jsx @@ -6,6 +6,7 @@ import { useSelector, useDispatch } from 'react-redux'; import { crud } from '@/redux/crud/actions'; import { selectItemById } from '@/redux/crud/selectors'; import { useCrudContext } from '@/context/crud'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import uniqueId from '@/utils/uinqueId'; import DataTable from '@/components/DataTable'; diff --git a/frontend/src/modules/AdminCrudModule/UpdatePassword.jsx b/frontend/src/modules/AdminCrudModule/UpdatePassword.jsx index 62b0822ac..605fd6701 100644 --- a/frontend/src/modules/AdminCrudModule/UpdatePassword.jsx +++ b/frontend/src/modules/AdminCrudModule/UpdatePassword.jsx @@ -2,6 +2,7 @@ import React, { useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { crud } from '@/redux/crud/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useCrudContext } from '@/context/crud'; import { selectUpdatedItem } from '@/redux/crud/selectors'; diff --git a/frontend/src/modules/AdminCrudModule/index.jsx b/frontend/src/modules/AdminCrudModule/index.jsx index 3d619d7a5..e4b76a59e 100644 --- a/frontend/src/modules/AdminCrudModule/index.jsx +++ b/frontend/src/modules/AdminCrudModule/index.jsx @@ -17,6 +17,7 @@ import SearchItem from '@/components/SearchItem'; import { useDispatch, useSelector } from 'react-redux'; import { crud } from '@/redux/crud/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useCrudContext } from '@/context/crud'; import { CrudLayout } from '@/layout'; diff --git a/frontend/src/modules/CrudModule/CrudDataTable.jsx b/frontend/src/modules/CrudModule/CrudDataTable.jsx index 7c1e980a4..d3c966958 100644 --- a/frontend/src/modules/CrudModule/CrudDataTable.jsx +++ b/frontend/src/modules/CrudModule/CrudDataTable.jsx @@ -5,6 +5,7 @@ import { EyeOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; import { crud } from '@/redux/crud/actions'; import { selectItemById } from '@/redux/crud/selectors'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useCrudContext } from '@/context/crud'; import uniqueId from '@/utils/uinqueId'; import DataTable from '@/components/DataTable'; diff --git a/frontend/src/modules/CrudModule/index.jsx b/frontend/src/modules/CrudModule/index.jsx index 973832816..5824e7ae4 100644 --- a/frontend/src/modules/CrudModule/index.jsx +++ b/frontend/src/modules/CrudModule/index.jsx @@ -17,6 +17,7 @@ import SearchItem from '@/components/SearchItem'; import { useDispatch, useSelector } from 'react-redux'; import { selectCurrentItem } from '@/redux/crud/selectors'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { crud } from '@/redux/crud/actions'; import { useCrudContext } from '@/context/crud'; diff --git a/frontend/src/modules/DashboardModule/components/PreviewCard.jsx b/frontend/src/modules/DashboardModule/components/PreviewCard.jsx index 32cca006c..bd7d9e17b 100644 --- a/frontend/src/modules/DashboardModule/components/PreviewCard.jsx +++ b/frontend/src/modules/DashboardModule/components/PreviewCard.jsx @@ -1,5 +1,7 @@ import React, { useMemo } from 'react'; import { Col, Progress, Spin } from 'antd'; +import { useDispatch, useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; const colours = { draft: '#595959', diff --git a/frontend/src/modules/DashboardModule/components/RecentTable/index.jsx b/frontend/src/modules/DashboardModule/components/RecentTable/index.jsx index 28799d1db..8b7120ec9 100644 --- a/frontend/src/modules/DashboardModule/components/RecentTable/index.jsx +++ b/frontend/src/modules/DashboardModule/components/RecentTable/index.jsx @@ -11,6 +11,8 @@ import { DeleteOutlined, FilePdfOutlined, } from '@ant-design/icons'; +import { useDispatch, useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useHistory } from 'react-router-dom'; import { DOWNLOAD_BASE_URL } from '@/config/serverApiConfig'; import useResponsiveTable from '@/hooks/useResponsiveTable'; diff --git a/frontend/src/modules/DashboardModule/index.jsx b/frontend/src/modules/DashboardModule/index.jsx index 38e9b710c..030f23f70 100644 --- a/frontend/src/modules/DashboardModule/index.jsx +++ b/frontend/src/modules/DashboardModule/index.jsx @@ -1,5 +1,7 @@ import React from 'react'; import { Tag, Row, Col } from 'antd'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { DashboardLayout } from '@/layout'; diff --git a/frontend/src/modules/EmailModule/EmailDataTableModule/components/DataTableDropMenu.jsx b/frontend/src/modules/EmailModule/EmailDataTableModule/components/DataTableDropMenu.jsx index 2e9582bd3..c442d5a50 100644 --- a/frontend/src/modules/EmailModule/EmailDataTableModule/components/DataTableDropMenu.jsx +++ b/frontend/src/modules/EmailModule/EmailDataTableModule/components/DataTableDropMenu.jsx @@ -8,6 +8,7 @@ import { CreditCardOutlined, } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import { selectItemById } from '@/redux/erp/selectors'; import { useErpContext } from '@/context/erp'; diff --git a/frontend/src/modules/EmailModule/ReadEmailModule/components/ReadItem.jsx b/frontend/src/modules/EmailModule/ReadEmailModule/components/ReadItem.jsx index aa5e00bcc..a8ba47045 100644 --- a/frontend/src/modules/EmailModule/ReadEmailModule/components/ReadItem.jsx +++ b/frontend/src/modules/EmailModule/ReadEmailModule/components/ReadItem.jsx @@ -10,14 +10,12 @@ import { useErpContext } from '@/context/erp'; import uniqueId from '@/utils/uinqueId'; import { selectCurrentItem } from '@/redux/erp/selectors'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useHistory } from 'react-router-dom/cjs/react-router-dom.min'; - const { Title, Paragraph } = Typography; - - export default function ReadItem({ config, selectedItem }) { const { entity, ENTITY_NAME } = config; const dispatch = useDispatch(); @@ -29,14 +27,12 @@ export default function ReadItem({ config, selectedItem }) { const { readPanel, updatePanel } = erpContextAction; const resetErp = { - emailName: '', emailKey: '', emailSubject: '', emailBody: '', emailVariables: [], _id: '', - }; const [currentErp, setCurrentErp] = useState(selectedItem ?? resetErp); @@ -91,7 +87,6 @@ export default function ReadItem({ config, selectedItem }) { style={{ padding: '20px 0px', }} - >
@@ -99,7 +94,6 @@ export default function ReadItem({ config, selectedItem }) { {currentErp.emailSubject} Body
-
); diff --git a/frontend/src/modules/EmailModule/ReadEmailModule/index.jsx b/frontend/src/modules/EmailModule/ReadEmailModule/index.jsx index 5e037e534..e839575f7 100644 --- a/frontend/src/modules/EmailModule/ReadEmailModule/index.jsx +++ b/frontend/src/modules/EmailModule/ReadEmailModule/index.jsx @@ -7,6 +7,7 @@ import { erp } from '@/redux/erp/actions'; import { selectReadItem } from '@/redux/erp/selectors'; import { useLayoutEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useParams, useHistory } from 'react-router-dom'; export default function ReadEmailModule({ config }) { diff --git a/frontend/src/modules/EmailModule/UpdateEmailModule/componenets/EmailForm.jsx b/frontend/src/modules/EmailModule/UpdateEmailModule/componenets/EmailForm.jsx index c23105b11..9dcdd40de 100644 --- a/frontend/src/modules/EmailModule/UpdateEmailModule/componenets/EmailForm.jsx +++ b/frontend/src/modules/EmailModule/UpdateEmailModule/componenets/EmailForm.jsx @@ -3,6 +3,8 @@ import { Form, Input, InputNumber, Button, Select, Divider, Row, Col, Typography import ReactQuill from 'react-quill'; import 'react-quill/dist/quill.snow.css'; import { PlusOutlined } from '@ant-design/icons'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; const { Paragraph } = Typography; diff --git a/frontend/src/modules/EmailModule/UpdateEmailModule/index.jsx b/frontend/src/modules/EmailModule/UpdateEmailModule/index.jsx index 31225759f..fe2f25449 100644 --- a/frontend/src/modules/EmailModule/UpdateEmailModule/index.jsx +++ b/frontend/src/modules/EmailModule/UpdateEmailModule/index.jsx @@ -10,6 +10,7 @@ import { erp } from '@/redux/erp/actions'; import { selectReadItem } from '@/redux/erp/selectors'; import { useLayoutEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useParams, useHistory } from 'react-router-dom'; export default function UpdateEmailModule({ config }) { diff --git a/frontend/src/modules/ErpPanelModule/CreateItem.jsx b/frontend/src/modules/ErpPanelModule/CreateItem.jsx index c8bd0ded6..ade4ed082 100644 --- a/frontend/src/modules/ErpPanelModule/CreateItem.jsx +++ b/frontend/src/modules/ErpPanelModule/CreateItem.jsx @@ -5,6 +5,8 @@ import { Button, PageHeader, Tag } from 'antd'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; + import { settingsAction } from '@/redux/settings/actions'; import { erp } from '@/redux/erp/actions'; import { selectCreatedItem } from '@/redux/erp/selectors'; diff --git a/frontend/src/modules/ErpPanelModule/DataTable.jsx b/frontend/src/modules/ErpPanelModule/DataTable.jsx index 8486d0fdb..131316f03 100644 --- a/frontend/src/modules/ErpPanelModule/DataTable.jsx +++ b/frontend/src/modules/ErpPanelModule/DataTable.jsx @@ -3,6 +3,7 @@ import { Descriptions, Dropdown, Table } from 'antd'; import { Button, PageHeader } from 'antd'; import { EllipsisOutlined } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import { selectListItems } from '@/redux/erp/selectors'; import { useErpContext } from '@/context/erp'; diff --git a/frontend/src/modules/ErpPanelModule/DeleteItem.jsx b/frontend/src/modules/ErpPanelModule/DeleteItem.jsx index 9587abff1..77a69db4a 100644 --- a/frontend/src/modules/ErpPanelModule/DeleteItem.jsx +++ b/frontend/src/modules/ErpPanelModule/DeleteItem.jsx @@ -2,6 +2,7 @@ import React, { useEffect, useState } from 'react'; import { Modal } from 'antd'; import { useDispatch, useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import { useErpContext } from '@/context/erp'; import { selectDeletedItem } from '@/redux/erp/selectors'; diff --git a/frontend/src/modules/ErpPanelModule/ReadItem.jsx b/frontend/src/modules/ErpPanelModule/ReadItem.jsx index 9e5a8bb94..b223b444e 100644 --- a/frontend/src/modules/ErpPanelModule/ReadItem.jsx +++ b/frontend/src/modules/ErpPanelModule/ReadItem.jsx @@ -11,6 +11,7 @@ import { } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import uniqueId from '@/utils/uinqueId'; diff --git a/frontend/src/modules/ErpPanelModule/UpdateItem.jsx b/frontend/src/modules/ErpPanelModule/UpdateItem.jsx index 41292bc51..eb873243e 100644 --- a/frontend/src/modules/ErpPanelModule/UpdateItem.jsx +++ b/frontend/src/modules/ErpPanelModule/UpdateItem.jsx @@ -4,6 +4,7 @@ import dayjs from 'dayjs'; import { Button, PageHeader, Row, Col, Tag } from 'antd'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import calculate from '@/utils/calculate'; diff --git a/frontend/src/modules/InvoiceModule/Forms/InvoiceForm.jsx b/frontend/src/modules/InvoiceModule/Forms/InvoiceForm.jsx index 769179fd6..e2e0e6b03 100644 --- a/frontend/src/modules/InvoiceModule/Forms/InvoiceForm.jsx +++ b/frontend/src/modules/InvoiceModule/Forms/InvoiceForm.jsx @@ -12,6 +12,7 @@ import ItemRow from '@/modules/ErpPanelModule/ItemRow'; import MoneyInputFormItem from '@/components/MoneyInputFormItem'; import { selectFinanceSettings } from '@/redux/settings/selectors'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import calculate from '@/utils/calculate'; import { useSelector } from 'react-redux'; diff --git a/frontend/src/modules/InvoiceModule/InvoiceDataTableModule/components/DataTableDropMenu.jsx b/frontend/src/modules/InvoiceModule/InvoiceDataTableModule/components/DataTableDropMenu.jsx index 2792c23c3..61d212a5c 100644 --- a/frontend/src/modules/InvoiceModule/InvoiceDataTableModule/components/DataTableDropMenu.jsx +++ b/frontend/src/modules/InvoiceModule/InvoiceDataTableModule/components/DataTableDropMenu.jsx @@ -8,6 +8,7 @@ import { CreditCardOutlined, } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import { selectItemById } from '@/redux/erp/selectors'; import { useErpContext } from '@/context/erp'; diff --git a/frontend/src/modules/InvoiceModule/ReadInvoiceModule/index.jsx b/frontend/src/modules/InvoiceModule/ReadInvoiceModule/index.jsx index b6cb19466..3304b028f 100644 --- a/frontend/src/modules/InvoiceModule/ReadInvoiceModule/index.jsx +++ b/frontend/src/modules/InvoiceModule/ReadInvoiceModule/index.jsx @@ -7,6 +7,7 @@ import { erp } from '@/redux/erp/actions'; import { selectReadItem } from '@/redux/erp/selectors'; import { useLayoutEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useParams, useHistory } from 'react-router-dom'; export default function ReadInvoiceModule({ config }) { diff --git a/frontend/src/modules/InvoiceModule/RecordPaymentModule/components/Payment.jsx b/frontend/src/modules/InvoiceModule/RecordPaymentModule/components/Payment.jsx index b20a96f0d..193f9c13d 100644 --- a/frontend/src/modules/InvoiceModule/RecordPaymentModule/components/Payment.jsx +++ b/frontend/src/modules/InvoiceModule/RecordPaymentModule/components/Payment.jsx @@ -11,6 +11,7 @@ import { useMoney } from '@/settings'; import RecordPayment from './RecordPayment'; import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { selectRecordPaymentItem } from '@/redux/erp/selectors'; import history from '@/utils/history'; diff --git a/frontend/src/modules/InvoiceModule/RecordPaymentModule/components/RecordPayment.jsx b/frontend/src/modules/InvoiceModule/RecordPaymentModule/components/RecordPayment.jsx index 7b94d330d..8d92a4533 100644 --- a/frontend/src/modules/InvoiceModule/RecordPaymentModule/components/RecordPayment.jsx +++ b/frontend/src/modules/InvoiceModule/RecordPaymentModule/components/RecordPayment.jsx @@ -4,7 +4,7 @@ import { Form, Divider, Button, PageHeader, Tag } from 'antd'; import { useSelector, useDispatch } from 'react-redux'; import { erp } from '@/redux/erp/actions'; import { selectCurrentItem, selectRecordPaymentItem } from '@/redux/erp/selectors'; - +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useErpContext } from '@/context/erp'; import Loading from '@/components/Loading'; diff --git a/frontend/src/modules/InvoiceModule/UpdateInvoiceModule/index.jsx b/frontend/src/modules/InvoiceModule/UpdateInvoiceModule/index.jsx index 8e68ac481..e03679076 100644 --- a/frontend/src/modules/InvoiceModule/UpdateInvoiceModule/index.jsx +++ b/frontend/src/modules/InvoiceModule/UpdateInvoiceModule/index.jsx @@ -7,6 +7,7 @@ import InvoiceForm from '@/modules/InvoiceModule/Forms/InvoiceForm'; import PageLoader from '@/components/PageLoader'; import { erp } from '@/redux/erp/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { selectReadItem } from '@/redux/erp/selectors'; import { useLayoutEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/frontend/src/modules/OfferModule/Forms/OfferForm.jsx b/frontend/src/modules/OfferModule/Forms/OfferForm.jsx index 1447a6c6c..2358b7bb8 100644 --- a/frontend/src/modules/OfferModule/Forms/OfferForm.jsx +++ b/frontend/src/modules/OfferModule/Forms/OfferForm.jsx @@ -16,6 +16,7 @@ import calculate from '@/utils/calculate'; import { selectFinanceSettings } from '@/redux/settings/selectors'; import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; export default function OfferForm({ subTotal = 0, current = null }) { const { last_offer_number } = useSelector(selectFinanceSettings); diff --git a/frontend/src/modules/OfferModule/OfferDataTableModule/components/DataTableDropMenu.jsx b/frontend/src/modules/OfferModule/OfferDataTableModule/components/DataTableDropMenu.jsx index 1bef9d1b2..2c652a408 100644 --- a/frontend/src/modules/OfferModule/OfferDataTableModule/components/DataTableDropMenu.jsx +++ b/frontend/src/modules/OfferModule/OfferDataTableModule/components/DataTableDropMenu.jsx @@ -8,6 +8,7 @@ import { CreditCardOutlined, } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import { selectItemById } from '@/redux/erp/selectors'; import { useErpContext } from '@/context/erp'; diff --git a/frontend/src/modules/OfferModule/ReadOfferModule/ReadOfferItem.jsx b/frontend/src/modules/OfferModule/ReadOfferModule/ReadOfferItem.jsx index 20bc76a55..a2ecfbd27 100644 --- a/frontend/src/modules/OfferModule/ReadOfferModule/ReadOfferItem.jsx +++ b/frontend/src/modules/OfferModule/ReadOfferModule/ReadOfferItem.jsx @@ -11,6 +11,7 @@ import { } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import uniqueId from '@/utils/uinqueId'; diff --git a/frontend/src/modules/OfferModule/ReadOfferModule/index.jsx b/frontend/src/modules/OfferModule/ReadOfferModule/index.jsx index 104d3a339..32a0ebec8 100644 --- a/frontend/src/modules/OfferModule/ReadOfferModule/index.jsx +++ b/frontend/src/modules/OfferModule/ReadOfferModule/index.jsx @@ -4,6 +4,7 @@ import ReadOfferItem from './ReadOfferItem'; import PageLoader from '@/components/PageLoader'; import { erp } from '@/redux/erp/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { selectReadItem } from '@/redux/erp/selectors'; import { useLayoutEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/frontend/src/modules/OfferModule/UpdateOfferModule/index.jsx b/frontend/src/modules/OfferModule/UpdateOfferModule/index.jsx index a4d0b58e2..6800ffd5e 100644 --- a/frontend/src/modules/OfferModule/UpdateOfferModule/index.jsx +++ b/frontend/src/modules/OfferModule/UpdateOfferModule/index.jsx @@ -7,6 +7,7 @@ import OfferForm from '@/modules/OfferModule/Forms/OfferForm'; import PageLoader from '@/components/PageLoader'; import { erp } from '@/redux/erp/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { selectReadItem } from '@/redux/erp/selectors'; import { useLayoutEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/frontend/src/modules/PaymentModule/Forms/PaymentForm.jsx b/frontend/src/modules/PaymentModule/Forms/PaymentForm.jsx index 73a78c173..72f713597 100644 --- a/frontend/src/modules/PaymentModule/Forms/PaymentForm.jsx +++ b/frontend/src/modules/PaymentModule/Forms/PaymentForm.jsx @@ -4,6 +4,8 @@ import { Form, Input, InputNumber } from 'antd'; import { DatePicker } from '@/components/CustomAntd'; import SelectAsync from '@/components/SelectAsync'; import { useMoney } from '@/settings'; +import { selectCurrentLang } from '@/redux/lang/selectors'; + export default function PaymentForm({ maxAmount = null, current = null }) { const { TextArea } = Input; const money = useMoney(); diff --git a/frontend/src/modules/PaymentModule/PaymentDataTableModule/components/DataTableDropMenu.jsx b/frontend/src/modules/PaymentModule/PaymentDataTableModule/components/DataTableDropMenu.jsx index 344a5d20c..84aa0fbff 100644 --- a/frontend/src/modules/PaymentModule/PaymentDataTableModule/components/DataTableDropMenu.jsx +++ b/frontend/src/modules/PaymentModule/PaymentDataTableModule/components/DataTableDropMenu.jsx @@ -9,6 +9,7 @@ import { } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; import { erp } from '@/redux/erp/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { selectItemById } from '@/redux/erp/selectors'; import { useErpContext } from '@/context/erp'; diff --git a/frontend/src/modules/PaymentModule/PaymentDataTableModule/components/PaymentDataTable.jsx b/frontend/src/modules/PaymentModule/PaymentDataTableModule/components/PaymentDataTable.jsx index 34cfaa5d6..99ce57dde 100644 --- a/frontend/src/modules/PaymentModule/PaymentDataTableModule/components/PaymentDataTable.jsx +++ b/frontend/src/modules/PaymentModule/PaymentDataTableModule/components/PaymentDataTable.jsx @@ -4,6 +4,7 @@ import { Button, PageHeader } from 'antd'; import { EllipsisOutlined } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; import { erp } from '@/redux/erp/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { selectListItems } from '@/redux/erp/selectors'; import { useErpContext } from '@/context/erp'; import uniqueId from '@/utils/uinqueId'; diff --git a/frontend/src/modules/PaymentModule/ReadPaymentModule/components/ReadItem.jsx b/frontend/src/modules/PaymentModule/ReadPaymentModule/components/ReadItem.jsx index 84b51975f..386e69b12 100644 --- a/frontend/src/modules/PaymentModule/ReadPaymentModule/components/ReadItem.jsx +++ b/frontend/src/modules/PaymentModule/ReadPaymentModule/components/ReadItem.jsx @@ -13,6 +13,7 @@ import { import { useSelector, useDispatch } from 'react-redux'; import { erp } from '@/redux/erp/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { useErpContext } from '@/context/erp'; import uniqueId from '@/utils/uinqueId'; diff --git a/frontend/src/modules/PaymentModule/UpdatePaymentModule/components/Payment.jsx b/frontend/src/modules/PaymentModule/UpdatePaymentModule/components/Payment.jsx index bfa4f2814..41322911a 100644 --- a/frontend/src/modules/PaymentModule/UpdatePaymentModule/components/Payment.jsx +++ b/frontend/src/modules/PaymentModule/UpdatePaymentModule/components/Payment.jsx @@ -5,6 +5,8 @@ import { FileTextOutlined, CloseCircleOutlined } from '@ant-design/icons'; import uniqueId from '@/utils/uinqueId'; import { useMoney } from '@/settings'; import history from '@/utils/history'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import UpdatePayment from './UpdatePayment'; export default function Payment({ config, currentItem }) { diff --git a/frontend/src/modules/PaymentModule/UpdatePaymentModule/components/UpdatePayment.jsx b/frontend/src/modules/PaymentModule/UpdatePaymentModule/components/UpdatePayment.jsx index 7c314d964..5f5202df9 100644 --- a/frontend/src/modules/PaymentModule/UpdatePaymentModule/components/UpdatePayment.jsx +++ b/frontend/src/modules/PaymentModule/UpdatePaymentModule/components/UpdatePayment.jsx @@ -7,6 +7,8 @@ import { selectUpdatedItem } from '@/redux/erp/selectors'; import { useErpContext } from '@/context/erp'; +import { selectCurrentLang } from '@/redux/lang/selectors'; + import Loading from '@/components/Loading'; import calculate from '@/utils/calculate'; diff --git a/frontend/src/modules/ProfileModule/components/AdminInfo.jsx b/frontend/src/modules/ProfileModule/components/AdminInfo.jsx index 14b3f9002..9d9324d7c 100644 --- a/frontend/src/modules/ProfileModule/components/AdminInfo.jsx +++ b/frontend/src/modules/ProfileModule/components/AdminInfo.jsx @@ -7,6 +7,8 @@ import photo from '@/style/images/photo.png'; import history from '@/utils/history'; import { selectCurrentItem, selectReadItem } from '@/redux/crud/selectors'; import { selectCurrentAdmin } from '@/redux/auth/selectors'; + +import { selectCurrentLang } from '@/redux/lang/selectors'; import { BASE_URL } from '@/config/serverApiConfig'; import { checkImage } from '@/request'; diff --git a/frontend/src/modules/ProfileModule/components/PasswordModal.jsx b/frontend/src/modules/ProfileModule/components/PasswordModal.jsx index d5d5290af..8b0cdd7a5 100644 --- a/frontend/src/modules/ProfileModule/components/PasswordModal.jsx +++ b/frontend/src/modules/ProfileModule/components/PasswordModal.jsx @@ -3,6 +3,8 @@ import useOnFetch from '@/hooks/useOnFetch'; import { request } from '@/request'; import { Button, Form, Input, Modal } from 'antd'; import React, { useEffect } from 'react'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; const PasswordModal = ({ config }) => { const { state, profileContextAction } = useProfileContext(); diff --git a/frontend/src/modules/ProfileModule/components/UpdateAdmin.jsx b/frontend/src/modules/ProfileModule/components/UpdateAdmin.jsx index af0b30883..5f5f4b490 100644 --- a/frontend/src/modules/ProfileModule/components/UpdateAdmin.jsx +++ b/frontend/src/modules/ProfileModule/components/UpdateAdmin.jsx @@ -10,6 +10,8 @@ import { updateProfile } from '@/redux/auth/actions'; import { selectCurrentAdmin } from '@/redux/auth/selectors'; +import { selectCurrentLang } from '@/redux/lang/selectors'; + const UpdateAdmin = ({ config }) => { const { profileContextAction } = useProfileContext(); const { updatePanel } = profileContextAction; diff --git a/frontend/src/modules/ProfileModule/components/UploadImg.jsx b/frontend/src/modules/ProfileModule/components/UploadImg.jsx index d4a55e099..00118db41 100644 --- a/frontend/src/modules/ProfileModule/components/UploadImg.jsx +++ b/frontend/src/modules/ProfileModule/components/UploadImg.jsx @@ -1,5 +1,7 @@ import { UploadOutlined } from '@ant-design/icons'; import { message, Upload, Form, Button } from 'antd'; +import { useSelector } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; // import photo from '@/style/images/photo.png'; diff --git a/frontend/src/modules/QuoteModule/Forms/QuoteForm.jsx b/frontend/src/modules/QuoteModule/Forms/QuoteForm.jsx index 747b2c19a..50829f20c 100644 --- a/frontend/src/modules/QuoteModule/Forms/QuoteForm.jsx +++ b/frontend/src/modules/QuoteModule/Forms/QuoteForm.jsx @@ -12,6 +12,7 @@ import ItemRow from '@/modules/ErpPanelModule/ItemRow'; import MoneyInputFormItem from '@/components/MoneyInputFormItem'; import { selectFinanceSettings } from '@/redux/settings/selectors'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import calculate from '@/utils/calculate'; import { useSelector } from 'react-redux'; diff --git a/frontend/src/modules/QuoteModule/QuoteDataTableModule/components/DataTableDropMenu.jsx b/frontend/src/modules/QuoteModule/QuoteDataTableModule/components/DataTableDropMenu.jsx index 2c93f794d..e57767fcb 100644 --- a/frontend/src/modules/QuoteModule/QuoteDataTableModule/components/DataTableDropMenu.jsx +++ b/frontend/src/modules/QuoteModule/QuoteDataTableModule/components/DataTableDropMenu.jsx @@ -8,6 +8,7 @@ import { CreditCardOutlined, } from '@ant-design/icons'; import { useSelector, useDispatch } from 'react-redux'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { erp } from '@/redux/erp/actions'; import { selectItemById } from '@/redux/erp/selectors'; import { useErpContext } from '@/context/erp'; @@ -24,13 +25,11 @@ export default function DataTableDropMenu({ row, entity }) { const item = useSelector(selectItemById(row._id)); function Read() { dispatch(erp.currentItem({ data: item })); - // readPanel.open(); history.push(`/quote/read/${row._id}`); } function Edit() { dispatch(erp.currentAction({ actionType: 'update', data: item })); - // updatePanel.open(); history.push(`/quote/update/${row._id}`); } function Delete() { diff --git a/frontend/src/modules/QuoteModule/ReadQuoteModule/index.jsx b/frontend/src/modules/QuoteModule/ReadQuoteModule/index.jsx index 8aefcc202..4664587da 100644 --- a/frontend/src/modules/QuoteModule/ReadQuoteModule/index.jsx +++ b/frontend/src/modules/QuoteModule/ReadQuoteModule/index.jsx @@ -4,6 +4,7 @@ import ReadItem from '@/modules/ErpPanelModule/ReadItem'; import PageLoader from '@/components/PageLoader'; import { erp } from '@/redux/erp/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { selectReadItem } from '@/redux/erp/selectors'; import { useLayoutEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/frontend/src/modules/QuoteModule/UpdateQuoteModule/index.jsx b/frontend/src/modules/QuoteModule/UpdateQuoteModule/index.jsx index c497833c2..c9c5b7c66 100644 --- a/frontend/src/modules/QuoteModule/UpdateQuoteModule/index.jsx +++ b/frontend/src/modules/QuoteModule/UpdateQuoteModule/index.jsx @@ -7,6 +7,7 @@ import QuoteForm from '@/modules/QuoteModule/Forms/QuoteForm'; import PageLoader from '@/components/PageLoader'; import { erp } from '@/redux/erp/actions'; +import { selectCurrentLang } from '@/redux/lang/selectors'; import { selectReadItem } from '@/redux/erp/selectors'; import { useLayoutEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; From de1fe83faec006f49f963833a62abe1985527a54 Mon Sep 17 00:00:00 2001 From: Salah Eddine Lalami <50052356+idurar@users.noreply.github.com> Date: Fri, 27 Oct 2023 19:17:26 +0100 Subject: [PATCH 5/5] =?UTF-8?q?=E2=9C=A8=20Add=20Ant=20lang=20ConfigProvid?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/app/index.jsx | 42 +++++++++++++++++++++++------- frontend/src/redux/lang/actions.js | 1 + frontend/src/redux/lang/reducer.js | 2 +- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/frontend/src/app/index.jsx b/frontend/src/app/index.jsx index a45faef90..1cab1b622 100644 --- a/frontend/src/app/index.jsx +++ b/frontend/src/app/index.jsx @@ -1,14 +1,18 @@ - +import { useState, useEffect } from 'react'; import Router from '@/router'; +import enUS from 'antd/es/locale/en_US'; +import zhCN from 'antd/es/locale/zh_CN'; +import frFR from 'antd/es/locale/fr_FR'; import useNetwork from '@/hooks/useNetwork'; -import { Layout, notification } from 'antd'; +import { Layout, ConfigProvider } from 'antd'; import Navigation from '@/app/Navigation'; import { useSelector, useDispatch } from 'react-redux'; import { selectAuth } from '@/redux/auth/selectors'; +import { selectLangCode } from '@/redux/lang/selectors'; import HeaderContent from '@/app/HeaderContent'; // import { useNetworkState } from "react-use"; @@ -26,23 +30,41 @@ function App() { // description: "Cannot connect to the server, Check your internet network", // }); // } - const dispatch = useDispatch(); + const { isLoggedIn } = useSelector(selectAuth); + const langCode = useSelector(selectLangCode); + const [locale, setLocal] = useState(enUS); + useEffect(() => { + if (langCode === 'fr_FR') { + setLocal(frFR); + } else { + setLocal(enUS); + } - const { isLoggedIn } = useSelector(selectAuth); + return () => { + return false; + }; + }, [langCode]); - if (!isLoggedIn) return ; + if (!isLoggedIn) + return ( + + + + ); else { return ( - - + - - + + + + + - + ); } } diff --git a/frontend/src/redux/lang/actions.js b/frontend/src/redux/lang/actions.js index d2e995d09..3f93c9d13 100644 --- a/frontend/src/redux/lang/actions.js +++ b/frontend/src/redux/lang/actions.js @@ -21,6 +21,7 @@ export const langAction = { dispatch({ type: actionTypes.REQUEST_SUCCESS, payload: data, + langCode: 'fr_FR', }); window.localStorage.setItem('lang', JSON.stringify(data)); } else { diff --git a/frontend/src/redux/lang/reducer.js b/frontend/src/redux/lang/reducer.js index 064650e73..57555fc1a 100644 --- a/frontend/src/redux/lang/reducer.js +++ b/frontend/src/redux/lang/reducer.js @@ -7,7 +7,7 @@ const INITIAL_LANG_STATE = { const INITIAL_STATE = { result: INITIAL_LANG_STATE, - langCode: 'en_us', + langCode: 'en_US', isLoading: false, isSuccess: false, };