From 3c7454d5c701ca9306abf89a35105672d0a2a285 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 30 Dec 2024 15:33:16 +0530 Subject: [PATCH 01/12] fix: get default field layout is not exist not returning options properly --- .../crm_fields_layout/crm_fields_layout.py | 26 ++++++++----------- .../src/components/Controls/GridRowModal.vue | 23 +--------------- frontend/src/components/FieldLayout.vue | 1 - 3 files changed, 12 insertions(+), 38 deletions(-) diff --git a/crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.py b/crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.py index 54797ba2..a20138c0 100644 --- a/crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.py +++ b/crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.py @@ -46,15 +46,11 @@ def get_fields_layout(doctype: str, type: str): for field in section.get("fields") if section.get("fields") else []: field = next((f for f in fields if f.fieldname == field), None) if field: - if field.fieldtype == "Select" and field.options: - field.options = field.options.split("\n") - field.options = [{"label": _(option), "value": option} for option in field.options] - field.options.insert(0, {"label": "", "value": ""}) field = { "label": _(field.label), "name": field.fieldname, "type": field.fieldtype, - "options": field.options, + "options": getOptions(field), "mandatory": field.reqd, "placeholder": field.get("placeholder"), "filters": field.get("link_filters"), @@ -86,17 +82,17 @@ def save_fields_layout(doctype: str, type: str, layout: str): def get_default_layout(doctype: str): fields = frappe.get_meta(doctype).fields fields = [ - { - "label": _(field.label), - "name": field.fieldname, - "type": field.fieldtype, - "options": field.options, - "mandatory": field.reqd, - "placeholder": field.get("placeholder"), - "filters": field.get("link_filters"), - } + field.fieldname for field in fields - if field.fieldtype not in ["Section Break", "Column Break"] + if field.fieldtype not in ["Tab Break", "Section Break", "Column Break"] ] return [{"no_tabs": True, "sections": [{"hideLabel": True, "fields": fields}]}] + + +def getOptions(field): + if field.fieldtype == "Select" and field.options: + field.options = field.options.split("\n") + field.options = [{"label": _(option), "value": option} for option in field.options] + field.options.insert(0, {"label": "", "value": ""}) + return field.options diff --git a/frontend/src/components/Controls/GridRowModal.vue b/frontend/src/components/Controls/GridRowModal.vue index 91ad60c0..93351b4e 100644 --- a/frontend/src/components/Controls/GridRowModal.vue +++ b/frontend/src/components/Controls/GridRowModal.vue @@ -33,7 +33,6 @@ From 03ec2db6dd2ff058755e60026de98e9263896440 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 30 Dec 2024 15:35:50 +0530 Subject: [PATCH 05/12] feat: moved crm settings to portal --- .../components/Settings/GeneralSettings.vue | 130 ++++++++++++++++++ frontend/src/components/Settings/Settings.vue | 7 + frontend/src/stores/meta.js | 2 +- frontend/src/stores/settings.js | 3 +- 4 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 frontend/src/components/Settings/GeneralSettings.vue diff --git a/frontend/src/components/Settings/GeneralSettings.vue b/frontend/src/components/Settings/GeneralSettings.vue new file mode 100644 index 00000000..b0155b25 --- /dev/null +++ b/frontend/src/components/Settings/GeneralSettings.vue @@ -0,0 +1,130 @@ + + diff --git a/frontend/src/components/Settings/Settings.vue b/frontend/src/components/Settings/Settings.vue index 85176c79..8e9fceb7 100644 --- a/frontend/src/components/Settings/Settings.vue +++ b/frontend/src/components/Settings/Settings.vue @@ -44,6 +44,7 @@ import WhatsAppIcon from '@/components/Icons/WhatsAppIcon.vue' import ERPNextIcon from '@/components/Icons/ERPNextIcon.vue' import PhoneIcon from '@/components/Icons/PhoneIcon.vue' +import GeneralSettings from '@/components/Settings/GeneralSettings.vue' import InviteMemberPage from '@/components/Settings/InviteMemberPage.vue' import ProfileSettings from '@/components/Settings/ProfileSettings.vue' import WhatsAppSettings from '@/components/Settings/WhatsAppSettings.vue' @@ -79,6 +80,12 @@ const tabs = computed(() => { }), component: markRaw(ProfileSettings), }, + { + label: __('General'), + icon: 'settings', + component: markRaw(GeneralSettings), + condition: () => isManager(), + }, { label: __('Invite Members'), icon: 'user-plus', diff --git a/frontend/src/stores/meta.js b/frontend/src/stores/meta.js index 6042ba81..0d64b99f 100644 --- a/frontend/src/stores/meta.js +++ b/frontend/src/stores/meta.js @@ -57,7 +57,7 @@ export function getMeta(doctype) { function getGridSettings(parentDoctype, dt = null) { dt = dt || doctype - if (!userSettings[parentDoctype]['GridView']?.[doctype]) return {} + if (!userSettings[parentDoctype]?.['GridView']?.[doctype]) return {} return userSettings[parentDoctype]['GridView'][doctype] } diff --git a/frontend/src/stores/settings.js b/frontend/src/stores/settings.js index 551a87aa..829a162e 100644 --- a/frontend/src/stores/settings.js +++ b/frontend/src/stores/settings.js @@ -5,7 +5,7 @@ const settings = ref({}) const brand = reactive({}) export function getSettings() { - createDocumentResource({ + const _settings = createDocumentResource({ doctype: 'FCRM Settings', name: 'FCRM Settings', onSuccess: (data) => { @@ -18,6 +18,7 @@ export function getSettings() { }) return { + _settings, settings, brand, } From 22dc47d1bff792aa82670db8f1e4ccbcb86ff9b3 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 30 Dec 2024 15:55:17 +0530 Subject: [PATCH 06/12] fix: reload after updating settings --- .../components/Settings/GeneralSettings.vue | 31 ++--- .../components/Settings/InviteMemberPage.vue | 114 +++++++++--------- frontend/src/stores/settings.js | 11 +- 3 files changed, 85 insertions(+), 71 deletions(-) diff --git a/frontend/src/components/Settings/GeneralSettings.vue b/frontend/src/components/Settings/GeneralSettings.vue index b0155b25..f590310a 100644 --- a/frontend/src/components/Settings/GeneralSettings.vue +++ b/frontend/src/components/Settings/GeneralSettings.vue @@ -10,7 +10,7 @@ /> -
+
-
-
- +
+ {{ __('Logo') }}
@@ -57,10 +56,9 @@
-
-
- +
+ {{ __('Favicon') }}
@@ -93,10 +91,9 @@
-
-
- +
+ {{ __('Dropdown settings') }}
@@ -107,10 +104,15 @@ />
+
-
-
+
+
@@ -121,10 +123,11 @@ import { FormControl, Badge } from 'frappe-ui' import { getSettings } from '@/stores/settings' import { showSettings } from '@/composables/settings' -const { _settings: settings } = getSettings() +const { _settings: settings, setupBrand } = getSettings() function updateSettings() { settings.save.submit() showSettings.value = false + setupBrand() } diff --git a/frontend/src/components/Settings/InviteMemberPage.vue b/frontend/src/components/Settings/InviteMemberPage.vue index 325dd8a2..5ce5d2bb 100644 --- a/frontend/src/components/Settings/InviteMemberPage.vue +++ b/frontend/src/components/Settings/InviteMemberPage.vue @@ -3,62 +3,68 @@

{{ __('Send Invites To') }}

-
- - - - +
+
+ + + + +
diff --git a/frontend/src/stores/settings.js b/frontend/src/stores/settings.js index 829a162e..99439587 100644 --- a/frontend/src/stores/settings.js +++ b/frontend/src/stores/settings.js @@ -10,16 +10,21 @@ export function getSettings() { name: 'FCRM Settings', onSuccess: (data) => { settings.value = data - brand.name = settings.value?.brand_name - brand.logo = settings.value?.brand_logo - brand.favicon = settings.value?.favicon + setupBrand() return data }, }) + function setupBrand() { + brand.name = settings.value?.brand_name + brand.logo = settings.value?.brand_logo + brand.favicon = settings.value?.favicon + } + return { _settings, settings, brand, + setupBrand, } } From 156770b635ba3354fe011b091c977a8c0892bfec Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 30 Dec 2024 16:01:35 +0530 Subject: [PATCH 07/12] fix: dark mode in grid in modals --- frontend/src/components/Controls/Grid.vue | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/Controls/Grid.vue b/frontend/src/components/Controls/Grid.vue index 5b96ccee..08d4cb21 100644 --- a/frontend/src/components/Controls/Grid.vue +++ b/frontend/src/components/Controls/Grid.vue @@ -57,7 +57,7 @@ class="grid-row flex cursor-pointer items-center border-b border-outline-gray-modals bg-surface-modals last:rounded-b last:border-b-0" >
{{ index + 1 }}
@@ -88,7 +88,7 @@ />
{ height: 38px; } +:deep(.grid-row:last-child .grid-row-checkbox) { + border-bottom-left-radius: 7px; +} + :deep(.grid-row .edit-row button) { border-bottom-right-radius: 7px; } From 3ef9d783df7eafa2a17d9509408a47b2874585b4 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 30 Dec 2024 16:06:17 +0530 Subject: [PATCH 08/12] fix: added close settings modal button --- frontend/src/components/Settings/Settings.vue | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/Settings/Settings.vue b/frontend/src/components/Settings/Settings.vue index 8e9fceb7..16a646d5 100644 --- a/frontend/src/components/Settings/Settings.vue +++ b/frontend/src/components/Settings/Settings.vue @@ -33,7 +33,14 @@
-
+
+
@@ -57,7 +64,7 @@ import { showSettings, activeSettingsPage, } from '@/composables/settings' -import { Dialog, Avatar } from 'frappe-ui' +import { Dialog, Button, Avatar } from 'frappe-ui' import { ref, markRaw, computed, watch, h } from 'vue' const { isManager, getUser } = usersStore() From 97d25835aebd84747b475aa1292aad445b135f81 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 30 Dec 2024 16:40:13 +0530 Subject: [PATCH 09/12] fix: open grid row modal if editable_grid is false --- frontend/src/components/Controls/Grid.vue | 28 ++++++++++++++----- .../Controls/GridFieldsEditorModal.vue | 8 +++--- frontend/src/stores/meta.js | 9 ++++-- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/frontend/src/components/Controls/Grid.vue b/frontend/src/components/Controls/Grid.vue index 08d4cb21..30076de9 100644 --- a/frontend/src/components/Controls/Grid.vue +++ b/frontend/src/components/Controls/Grid.vue @@ -55,6 +55,13 @@