From cfcc1b06f96b48ff493634d272afcff45d0e158b Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Tue, 6 Feb 2024 09:57:03 +0200 Subject: [PATCH] calendar scroll hour --- .../Resources/i18n/en_US/Preferences.json | 3 +- .../Resources/layouts/Preferences/detail.json | 8 ++- .../metadata/entityDefs/Preferences.json | 6 ++ .../crm/src/views/calendar/calendar.js | 30 ++++++++-- .../fields/calendar-scroll-hour.js | 56 +++++++++++++++++++ 5 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 client/src/views/preferences/fields/calendar-scroll-hour.js diff --git a/application/Espo/Resources/i18n/en_US/Preferences.json b/application/Espo/Resources/i18n/en_US/Preferences.json index 7440f6bef7..c8f1072205 100644 --- a/application/Espo/Resources/i18n/en_US/Preferences.json +++ b/application/Espo/Resources/i18n/en_US/Preferences.json @@ -34,7 +34,8 @@ "scopeColorsDisabled": "Disable scope colors", "tabColorsDisabled": "Disable tab colors", "textSearchStoringDisabled": "Disable text filter storing", - "calendarSlotDuration": "Calendar Slot Duration" + "calendarSlotDuration": "Calendar Slot Duration", + "calendarScrollHour": "Calendar Scroll to Hour" }, "links": { }, diff --git a/application/Espo/Resources/layouts/Preferences/detail.json b/application/Espo/Resources/layouts/Preferences/detail.json index 15d15b90f0..748529591d 100644 --- a/application/Espo/Resources/layouts/Preferences/detail.json +++ b/application/Espo/Resources/layouts/Preferences/detail.json @@ -85,8 +85,12 @@ { "rows": [ [ - {"name": "defaultReminders"}, - {"name": "calendarSlotDuration"} + {"name": "calendarSlotDuration"}, + {"name": "defaultReminders"} + ], + [ + {"name": "calendarScrollHour"}, + false ] ] }, diff --git a/application/Espo/Resources/metadata/entityDefs/Preferences.json b/application/Espo/Resources/metadata/entityDefs/Preferences.json index 542784fdb6..543a0f8e13 100644 --- a/application/Espo/Resources/metadata/entityDefs/Preferences.json +++ b/application/Espo/Resources/metadata/entityDefs/Preferences.json @@ -196,6 +196,12 @@ "options": ["", 15, 30], "default": null, "view": "views/preferences/fields/calendar-slot-duration" + }, + "calendarScrollHour": { + "type": "enumInt", + "options": ["", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15], + "default": null, + "view": "views/preferences/fields/calendar-scroll-hour" } }, "noDeletedAttribute": true, diff --git a/client/modules/crm/src/views/calendar/calendar.js b/client/modules/crm/src/views/calendar/calendar.js index e0695813a4..bdee74ea96 100644 --- a/client/modules/crm/src/views/calendar/calendar.js +++ b/client/modules/crm/src/views/calendar/calendar.js @@ -191,12 +191,7 @@ class CalendarView extends View { this.getMetadata().get('clientDefs.Calendar.slotDuration') || this.slotDuration; - this.scrollHour = this.options.scrollHour !== undefined ? - this.options.scrollHour : this.scrollHour; - - if (this.options.scrollHour === undefined && this.slotDuration < 30) { - this.scrollHour = 8; - } + this.setupScrollHour(); this.colors = {...this.colors, ...this.getHelper().themeManager.getParam('calendarColors')}; @@ -245,6 +240,29 @@ class CalendarView extends View { } } + /** + * @private + */ + setupScrollHour() { + if (this.options.scrollHour !== undefined) { + this.scrollHour = this.options.scrollHour; + + return; + } + + const scrollHour = this.getPreferences().get('calendarScrollHour'); + + if (scrollHour !== null) { + this.scrollHour = scrollHour; + + return; + } + + if (this.slotDuration < 30) { + this.scrollHour = 8; + } + } + setupMode() { this.viewMode = this.mode; diff --git a/client/src/views/preferences/fields/calendar-scroll-hour.js b/client/src/views/preferences/fields/calendar-scroll-hour.js new file mode 100644 index 0000000000..8b96e9eaa2 --- /dev/null +++ b/client/src/views/preferences/fields/calendar-scroll-hour.js @@ -0,0 +1,56 @@ +/************************************************************************ + * This file is part of EspoCRM. + * + * EspoCRM – Open Source CRM application. + * Copyright (C) 2014-2024 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko + * Website: https://www.espocrm.com + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +import EnumIntFieldView from 'views/fields/enum-int'; +import moment from 'moment'; + +class PreferencesCalendarScrollHourView extends EnumIntFieldView { + + setupOptions() { + super.setupOptions(); + + this.translatedOptions = {}; + this.translatedOptions[''] = this.translate('Default'); + + const timeFormat = this.getDateTime().getTimeFormat(); + const today = this.getDateTime().getToday(); + + this.params.options.forEach(item => { + if (item === '') { + return; + } + + const itemString = today + ' ' + item.toString().padStart(2, '0') + ':00'; + + this.translatedOptions[item] = moment.utc(itemString).format(timeFormat); + }); + } +} + +// noinspection JSUnusedGlobalSymbols +export default PreferencesCalendarScrollHourView;