mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 19:17:48 +00:00 
			
		
		
		
	 b989ca6397
			
		
	
	b989ca6397
	
	
	
		
			
			# Pull Request Template ## Description This Pull Request will provide a language selector in the Profile Settings for each user, and allows them to change the UI language per agent, defaulting back to the account locale. Fixes # #678 This does PR addresses the Dashboard view but does not change the language of the agents emails ## Type of change Please delete options that are not relevant. - [X ] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? 1. Go to an Agents Profile settings page 2. Select a language from the Language drop down 3. the UI will update to the new i18n locale 4. navigate through the UI to make sure the appropriate language is being used 5. Refresh the page to test that the locale persists 270 - [X] My code follows the style guidelines of this project - [X] I have performed a self-review of my code - [X] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [X] My changes generate no new warnings - [X] I have added tests that prove my fix is effective or that my feature works - [X] New and existing unit tests pass locally with my changes - [X] Any dependent changes have been merged and published in downstream modules Checklist:.724.2708 --------- Co-authored-by: Sojan Jose <sojan@pepalo.com> Co-authored-by: Pranav <pranav@chatwoot.com> Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: iamsivin <iamsivin@gmail.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
		
			
				
	
	
		
			140 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * @file useFontSize.js
 | |
|  * @description A composable for managing font size settings throughout the application.
 | |
|  * This handles font size selection, application to the DOM, and persistence in user settings.
 | |
|  */
 | |
| 
 | |
| import { computed, watch } from 'vue';
 | |
| import { useUISettings } from 'dashboard/composables/useUISettings';
 | |
| import { useAlert } from 'dashboard/composables';
 | |
| import { useI18n } from 'vue-i18n';
 | |
| 
 | |
| /**
 | |
|  * Font size options with their pixel values
 | |
|  * @type {Object}
 | |
|  */
 | |
| const FONT_SIZE_OPTIONS = {
 | |
|   SMALLER: '14px',
 | |
|   SMALL: '15px',
 | |
|   DEFAULT: '16px',
 | |
|   LARGE: '18px',
 | |
|   LARGER: '20px',
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Array of font size option keys
 | |
|  * @type {Array<string>}
 | |
|  */
 | |
| const FONT_SIZE_NAMES = Object.keys(FONT_SIZE_OPTIONS);
 | |
| 
 | |
| /**
 | |
|  * Get font size label translation key
 | |
|  *
 | |
|  * @param {string} name - Font size name
 | |
|  * @returns {string} Translation key
 | |
|  */
 | |
| const getFontSizeLabelKey = name =>
 | |
|   `PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.OPTIONS.${name}`;
 | |
| 
 | |
| /**
 | |
|  * Create font size option object
 | |
|  *
 | |
|  * @param {Function} t - Translation function
 | |
|  * @param {string} name - Font size name
 | |
|  * @returns {Object} Font size option with value and label
 | |
|  */
 | |
| const createFontSizeOption = (t, name) => ({
 | |
|   value: FONT_SIZE_OPTIONS[name],
 | |
|   label: t(getFontSizeLabelKey(name)),
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Apply font size value to document root
 | |
|  *
 | |
|  * @param {string} pixelValue - Font size value in pixels
 | |
|  */
 | |
| const applyFontSizeToDOM = pixelValue => {
 | |
|   document.documentElement.style.setProperty(
 | |
|     'font-size',
 | |
|     pixelValue ?? FONT_SIZE_OPTIONS.DEFAULT
 | |
|   );
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Font size management composable
 | |
|  *
 | |
|  * @returns {Object} Font size utilities and state
 | |
|  * @property {Array} fontSizeOptions - Array of font size options for select components
 | |
|  * @property {import('vue').ComputedRef<string>} currentFontSize - Current font size from UI settings
 | |
|  * @property {Function} applyFontSize - Function to apply font size to document
 | |
|  * @property {Function} updateFontSize - Function to update font size in settings with alert feedback
 | |
|  */
 | |
| export const useFontSize = () => {
 | |
|   const { uiSettings, updateUISettings } = useUISettings();
 | |
|   const { t } = useI18n();
 | |
| 
 | |
|   /**
 | |
|    * Font size options for select dropdown
 | |
|    * @type {Array<{value: string, label: string}>}
 | |
|    */
 | |
|   const fontSizeOptions = computed(() =>
 | |
|     FONT_SIZE_NAMES.map(name => createFontSizeOption(t, name))
 | |
|   );
 | |
| 
 | |
|   /**
 | |
|    * Current font size from UI settings
 | |
|    * @type {import('vue').ComputedRef<string>}
 | |
|    */
 | |
|   const currentFontSize = computed(
 | |
|     () => uiSettings.value.font_size || FONT_SIZE_OPTIONS.DEFAULT
 | |
|   );
 | |
| 
 | |
|   /**
 | |
|    * Apply font size to document root
 | |
|    * @param {string} pixelValue - Font size in pixels (e.g., '16px')
 | |
|    * @returns {void}
 | |
|    */
 | |
|   const applyFontSize = pixelValue => {
 | |
|     // Use requestAnimationFrame for better performance
 | |
|     requestAnimationFrame(() => applyFontSizeToDOM(pixelValue));
 | |
|   };
 | |
| 
 | |
|   /**
 | |
|    * Update font size in settings and apply to document
 | |
|    * Shows success/error alerts
 | |
|    * @param {string} pixelValue - Font size in pixels (e.g., '16px')
 | |
|    * @returns {Promise<void>}
 | |
|    */
 | |
|   const updateFontSize = async pixelValue => {
 | |
|     try {
 | |
|       await updateUISettings({ font_size: pixelValue });
 | |
|       applyFontSize(pixelValue);
 | |
|       useAlert(
 | |
|         t('PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.UPDATE_SUCCESS')
 | |
|       );
 | |
|     } catch (error) {
 | |
|       useAlert(
 | |
|         t('PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.UPDATE_ERROR')
 | |
|       );
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   // Watch for changes to the font size in UI settings
 | |
|   watch(
 | |
|     () => uiSettings.value.font_size,
 | |
|     newSize => {
 | |
|       applyFontSize(newSize);
 | |
|     },
 | |
|     { immediate: true }
 | |
|   );
 | |
| 
 | |
|   return {
 | |
|     fontSizeOptions,
 | |
|     currentFontSize,
 | |
|     applyFontSize,
 | |
|     updateFontSize,
 | |
|   };
 | |
| };
 | |
| 
 | |
| export default useFontSize;
 |