From 1318473b37864077d51244727483f1425021ec7f Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 28 May 2024 11:15:22 +0530 Subject: [PATCH 01/22] fix: show use_html & response_html in Email Template Modal --- crm/overrides/email_template.py | 2 ++ .../components/Modals/EmailTemplateModal.vue | 23 ++++++++++++++++++- frontend/src/pages/EmailTemplates.vue | 4 ++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/crm/overrides/email_template.py b/crm/overrides/email_template.py index da14c714..3a4e30f7 100644 --- a/crm/overrides/email_template.py +++ b/crm/overrides/email_template.py @@ -41,9 +41,11 @@ class CustomEmailTemplate(EmailTemplate): rows = [ "name", "enabled", + "use_html", "reference_doctype", "subject", "response", + "response_html", "modified", ] return {'columns': columns, 'rows': rows} diff --git a/frontend/src/components/Modals/EmailTemplateModal.vue b/frontend/src/components/Modals/EmailTemplateModal.vue index 2cee3742..21702957 100644 --- a/frontend/src/components/Modals/EmailTemplateModal.vue +++ b/frontend/src/components/Modals/EmailTemplateModal.vue @@ -55,19 +55,40 @@ {{ __('Content') }} * +
+
+ +
diff --git a/frontend/src/pages/EmailTemplates.vue b/frontend/src/pages/EmailTemplates.vue index 4cbb701b..71e41fee 100644 --- a/frontend/src/pages/EmailTemplates.vue +++ b/frontend/src/pages/EmailTemplates.vue @@ -114,8 +114,10 @@ const showEmailTemplateModal = ref(false) const emailTemplate = ref({ subject: '', response: '', + response_html: '', name: '', enabled: 1, + use_html: 0, owner: '', reference_doctype: 'CRM Deal', }) @@ -125,8 +127,10 @@ function showEmailTemplate(name) { emailTemplate.value = { subject: et.subject, response: et.response, + response_html: et.response_html, name: et.name, enabled: et.enabled, + use_html: et.use_html, owner: et.owner, reference_doctype: et.reference_doctype, } From 187bc55d468cd627e576c910927fcc5d30ddf7da Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 28 May 2024 11:15:52 +0530 Subject: [PATCH 02/22] fix: show response_html in email template selector --- .../components/Modals/EmailTemplateSelectorModal.vue | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Modals/EmailTemplateSelectorModal.vue b/frontend/src/components/Modals/EmailTemplateSelectorModal.vue index 2538e7f7..fb414880 100644 --- a/frontend/src/components/Modals/EmailTemplateSelectorModal.vue +++ b/frontend/src/components/Modals/EmailTemplateSelectorModal.vue @@ -31,7 +31,14 @@ {{ __('Subject: {0}', [template.subject]) }} + Date: Tue, 28 May 2024 11:58:16 +0530 Subject: [PATCH 03/22] fix: render grouped button with label --- frontend/src/components/CustomActions.vue | 39 +++++++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/CustomActions.vue b/frontend/src/components/CustomActions.vue index 9342892e..5bfc79fb 100644 --- a/frontend/src/components/CustomActions.vue +++ b/frontend/src/components/CustomActions.vue @@ -11,6 +11,22 @@ + + From 951efb2ea9770888bc0454f787e187688e88cc18 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 28 May 2024 14:49:12 +0530 Subject: [PATCH 06/22] fix: ListActions not rendering --- frontend/src/components/ListViews/CallLogsListView.vue | 4 +++- frontend/src/components/ListViews/ContactsListView.vue | 4 +++- frontend/src/components/ListViews/DealsListView.vue | 4 +++- frontend/src/components/ListViews/EmailTemplatesListView.vue | 4 +++- frontend/src/components/ListViews/LeadsListView.vue | 4 +++- frontend/src/components/ListViews/OrganizationsListView.vue | 4 +++- frontend/src/components/ListViews/TasksListView.vue | 4 +++- 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/ListViews/CallLogsListView.vue b/frontend/src/components/ListViews/CallLogsListView.vue index 20096327..c4fa49b9 100644 --- a/frontend/src/components/ListViews/CallLogsListView.vue +++ b/frontend/src/components/ListViews/CallLogsListView.vue @@ -231,6 +231,8 @@ watch(pageLengthCount, (val, old_value) => { const listBulkActionsRef = ref(null) defineExpose({ - customListActions: listBulkActionsRef.value?.customListActions, + customListActions: computed( + () => listBulkActionsRef.value?.customListActions + ), }) diff --git a/frontend/src/components/ListViews/ContactsListView.vue b/frontend/src/components/ListViews/ContactsListView.vue index bd31ca4a..2550f76a 100644 --- a/frontend/src/components/ListViews/ContactsListView.vue +++ b/frontend/src/components/ListViews/ContactsListView.vue @@ -227,6 +227,8 @@ watch(pageLengthCount, (val, old_value) => { const listBulkActionsRef = ref(null) defineExpose({ - customListActions: listBulkActionsRef.value?.customListActions, + customListActions: computed( + () => listBulkActionsRef.value?.customListActions + ), }) diff --git a/frontend/src/components/ListViews/DealsListView.vue b/frontend/src/components/ListViews/DealsListView.vue index 94a292d4..3fd04a00 100644 --- a/frontend/src/components/ListViews/DealsListView.vue +++ b/frontend/src/components/ListViews/DealsListView.vue @@ -269,6 +269,8 @@ watch(pageLengthCount, (val, old_value) => { const listBulkActionsRef = ref(null) defineExpose({ - customListActions: listBulkActionsRef.value?.customListActions, + customListActions: computed( + () => listBulkActionsRef.value?.customListActions + ), }) diff --git a/frontend/src/components/ListViews/EmailTemplatesListView.vue b/frontend/src/components/ListViews/EmailTemplatesListView.vue index 1ab985bc..c089296c 100644 --- a/frontend/src/components/ListViews/EmailTemplatesListView.vue +++ b/frontend/src/components/ListViews/EmailTemplatesListView.vue @@ -219,6 +219,8 @@ watch(pageLengthCount, (val, old_value) => { const listBulkActionsRef = ref(null) defineExpose({ - customListActions: listBulkActionsRef.value?.customListActions, + customListActions: computed( + () => listBulkActionsRef.value?.customListActions + ), }) diff --git a/frontend/src/components/ListViews/LeadsListView.vue b/frontend/src/components/ListViews/LeadsListView.vue index fcb09702..4b701274 100644 --- a/frontend/src/components/ListViews/LeadsListView.vue +++ b/frontend/src/components/ListViews/LeadsListView.vue @@ -278,6 +278,8 @@ watch(pageLengthCount, (val, old_value) => { const listBulkActionsRef = ref(null) defineExpose({ - customListActions: listBulkActionsRef.value?.customListActions, + customListActions: computed( + () => listBulkActionsRef.value?.customListActions + ), }) diff --git a/frontend/src/components/ListViews/OrganizationsListView.vue b/frontend/src/components/ListViews/OrganizationsListView.vue index 7368c246..0fb32563 100644 --- a/frontend/src/components/ListViews/OrganizationsListView.vue +++ b/frontend/src/components/ListViews/OrganizationsListView.vue @@ -212,6 +212,8 @@ watch(pageLengthCount, (val, old_value) => { const listBulkActionsRef = ref(null) defineExpose({ - customListActions: listBulkActionsRef.value?.customListActions, + customListActions: computed( + () => listBulkActionsRef.value?.customListActions + ), }) diff --git a/frontend/src/components/ListViews/TasksListView.vue b/frontend/src/components/ListViews/TasksListView.vue index 8bb8fe78..2273697f 100644 --- a/frontend/src/components/ListViews/TasksListView.vue +++ b/frontend/src/components/ListViews/TasksListView.vue @@ -230,6 +230,8 @@ watch(pageLengthCount, (val, old_value) => { const listBulkActionsRef = ref(null) defineExpose({ - customListActions: listBulkActionsRef.value?.customListActions, + customListActions: computed( + () => listBulkActionsRef.value?.customListActions + ), }) From 8c3b1b7d254ddd3d84f1e3e7f70c85a7a837bdae Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 28 May 2024 14:50:50 +0530 Subject: [PATCH 07/22] fix: allow adding multiple form script --- .../crm_form_script/crm_form_script.py | 25 ++----------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/crm/fcrm/doctype/crm_form_script/crm_form_script.py b/crm/fcrm/doctype/crm_form_script/crm_form_script.py index ff93ff4f..c45ff55a 100644 --- a/crm/fcrm/doctype/crm_form_script/crm_form_script.py +++ b/crm/fcrm/doctype/crm_form_script/crm_form_script.py @@ -6,27 +6,7 @@ from frappe.model.document import Document class CRMFormScript(Document): - def validate(self): - self.check_if_duplicate() - - def check_if_duplicate(self): - """Check if there is already a script for this doctype""" - if self.dt and self.enabled: - filters = { - "dt": self.dt, - "view": self.view, - "enabled": 1, - } - if self.name: - filters["name"] = ["!=", self.name] - - if frappe.db.exists("CRM Form Script", filters): - frappe.throw( - frappe._( - "Script already exists for this doctype and is enabled" - ), - frappe.DuplicateEntryError, - ) + pass def get_form_script(dt, view="Form"): """Returns the form script for the given doctype""" @@ -37,11 +17,10 @@ def get_form_script(dt, view="Form"): .where(FormScript.dt == dt) .where(FormScript.view == view) .where(FormScript.enabled == 1) - .limit(1) ) doc = query.run(as_dict=True) if doc: - return doc[0].script + return [d.script for d in doc] if len(doc) > 1 else doc[0].script else: return None From c0ae5f051cf426dfd7852695f950cb95b026d848 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 28 May 2024 14:51:36 +0530 Subject: [PATCH 08/22] fix: handle multiple actions on list & form from different form scripts --- frontend/src/utils/index.js | 51 ++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/frontend/src/utils/index.js b/frontend/src/utils/index.js index 0c3f389e..1cd66c1c 100644 --- a/frontend/src/utils/index.js +++ b/frontend/src/utils/index.js @@ -125,19 +125,56 @@ export function setupAssignees(data) { })) } +function getActionsFromScript(script, obj) { + let scriptFn = new Function(script + '\nreturn setupForm')() + let formScript = scriptFn(obj) + return formScript?.actions || [] +} + export function setupCustomActions(data, obj) { if (!data._form_script) return [] - let script = new Function(data._form_script + '\nreturn setupForm')() - let formScript = script(obj) - data._customActions = formScript?.actions || [] + + let actions = [] + if (Array.isArray(data._form_script)) { + data._form_script.forEach((script) => { + actions = actions.concat(getActionsFromScript(script, obj)) + }) + } else { + actions = getActionsFromScript(data._form_script, obj) + } + + data._customActions = actions +} + +function getActionsFromListScript(script, obj) { + let scriptFn = new Function(script + '\nreturn setupList')() + let listScript = scriptFn(obj) + return { + actions: listScript?.actions || [], + bulk_actions: listScript?.bulk_actions || [], + } } export function setupListActions(data, obj = {}) { if (!data.list_script) return [] - let script = new Function(data.list_script + '\nreturn setupList')() - let listScript = script(obj) - data.listActions = listScript?.actions || [] - data.bulkActions = listScript?.bulk_actions || [] + + let actions = [] + let bulkActions = [] + + if (Array.isArray(data.list_script)) { + data.list_script.forEach((script) => { + let _actions = getActionsFromListScript(script, obj) + actions = actions.concat(_actions.actions) + bulkActions = bulkActions.concat(_actions.bulk_actions) + }) + } else { + let _actions = getActionsFromListScript(data.list_script, obj) + actions = _actions.actions + bulkActions = _actions.bulk_actions + } + + data.listActions = actions + data.bulkActions = bulkActions } export function errorMessage(title, message) { From 3e64f1ff1cab2d4de67de3061250b1a53571fd20 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 29 May 2024 11:53:41 +0530 Subject: [PATCH 09/22] fix: restrict email editor height to max 35vh --- frontend/src/components/EmailEditor.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/EmailEditor.vue b/frontend/src/components/EmailEditor.vue index b27e0eb1..d60baaf1 100644 --- a/frontend/src/components/EmailEditor.vue +++ b/frontend/src/components/EmailEditor.vue @@ -62,7 +62,7 @@ @@ -64,20 +64,10 @@ import LayoutHeader from '@/components/LayoutHeader.vue' import ViewControls from '@/components/ViewControls.vue' import CallLogsListView from '@/components/ListViews/CallLogsListView.vue' import CallLogModal from '@/components/Modals/CallLogModal.vue' -import { - secondsToDuration, - dateFormat, - dateTooltipFormat, - timeAgo, -} from '@/utils' -import { usersStore } from '@/stores/users' -import { contactsStore } from '@/stores/contacts' +import { getCallLogDetail } from '@/utils/callLog' import { Breadcrumbs } from 'frappe-ui' import { computed, ref } from 'vue' -const { getUser } = usersStore() -const { getContact, getLeadContact } = contactsStore() - const breadcrumbs = [{ label: __('Call Logs'), route: { name: 'Call Logs' } }] const callLogsListView = ref(null) @@ -94,119 +84,17 @@ const rows = computed(() => { return callLogs.value?.data.data.map((callLog) => { let _rows = {} callLogs.value?.data.rows.forEach((row) => { - _rows[row] = callLog[row] - - let incoming = callLog.type === 'Incoming' - - if (row === 'caller') { - _rows[row] = { - label: incoming - ? getContact(callLog.from)?.full_name || - getLeadContact(callLog.from)?.full_name || - 'Unknown' - : getUser(callLog.caller).full_name, - image: incoming - ? getContact(callLog.from)?.image || - getLeadContact(callLog.from)?.image - : getUser(callLog.caller).user_image, - } - } else if (row === 'receiver') { - _rows[row] = { - label: incoming - ? getUser(callLog.receiver).full_name - : getContact(callLog.to)?.full_name || - getLeadContact(callLog.to)?.full_name || - 'Unknown', - image: incoming - ? getUser(callLog.receiver).user_image - : getContact(callLog.to)?.image || - getLeadContact(callLog.to)?.image, - } - } else if (row === 'duration') { - _rows[row] = { - label: secondsToDuration(callLog.duration), - icon: 'clock', - } - } else if (row === 'type') { - _rows[row] = { - label: callLog.type, - icon: incoming ? 'phone-incoming' : 'phone-outgoing', - } - } else if (row === 'status') { - _rows[row] = { - label: statusLabelMap[callLog.status], - color: statusColorMap[callLog.status], - } - } else if (['modified', 'creation'].includes(row)) { - _rows[row] = { - label: dateFormat(callLog[row], dateTooltipFormat), - timeAgo: __(timeAgo(callLog[row])), - } - } + _rows[row] = getCallLogDetail(row, callLog) }) return _rows }) }) const showCallLogModal = ref(false) - -const callLog = ref({ - name: '', - caller: '', - receiver: '', - duration: '', - type: '', - status: '', - from: '', - to: '', - note: '', - recording_url: '', - reference_doctype: '', - reference_docname: '', - creation: '', -}) +const selectedCallLog = ref(null) function showCallLog(name) { - let d = rows.value?.find((row) => row.name === name) - callLog.value = { - name: d.name, - caller: d.caller, - receiver: d.receiver, - duration: d.duration, - type: d.type, - status: d.status, - from: d.from, - to: d.to, - note: d.note, - recording_url: d.recording_url, - reference_doctype: d.reference_doctype, - reference_docname: d.reference_docname, - creation: d.creation, - } + selectedCallLog.value = name showCallLogModal.value = true } - -const statusLabelMap = { - Completed: 'Completed', - Initiated: 'Initiated', - Busy: 'Declined', - Failed: 'Failed', - Queued: 'Queued', - Cancelled: 'Cancelled', - Ringing: 'Ringing', - 'No Answer': 'Missed Call', - 'In Progress': 'In Progress', -} - -const statusColorMap = { - Completed: 'green', - Busy: 'orange', - Failed: 'red', - Initiated: 'gray', - Queued: 'gray', - Cancelled: 'gray', - Ringing: 'gray', - 'No Answer': 'red', - 'In Progress': 'blue', -} diff --git a/frontend/src/utils/callLog.js b/frontend/src/utils/callLog.js new file mode 100644 index 00000000..9b8ad118 --- /dev/null +++ b/frontend/src/utils/callLog.js @@ -0,0 +1,84 @@ +import { + secondsToDuration, + dateFormat, + dateTooltipFormat, + timeAgo, +} from '@/utils' +import { usersStore } from '@/stores/users' +import { contactsStore } from '@/stores/contacts' + +const { getUser } = usersStore() +const { getContact, getLeadContact } = contactsStore() + +export function getCallLogDetail(row, log) { + let incoming = log.type === 'Incoming' + + if (row === 'caller') { + return { + label: incoming + ? getContact(log.from)?.full_name || + getLeadContact(log.from)?.full_name || + 'Unknown' + : getUser(log.caller).full_name, + image: incoming + ? getContact(log.from)?.image || getLeadContact(log.from)?.image + : getUser(log.caller).user_image, + } + } else if (row === 'receiver') { + return { + label: incoming + ? getUser(log.receiver).full_name + : getContact(log.to)?.full_name || + getLeadContact(log.to)?.full_name || + 'Unknown', + image: incoming + ? getUser(log.receiver).user_image + : getContact(log.to)?.image || getLeadContact(log.to)?.image, + } + } else if (row === 'duration') { + return { + label: secondsToDuration(log.duration), + icon: 'clock', + } + } else if (row === 'type') { + return { + label: log.type, + icon: incoming ? 'phone-incoming' : 'phone-outgoing', + } + } else if (row === 'status') { + return { + label: statusLabelMap[log.status], + color: statusColorMap[log.status], + } + } else if (['modified', 'creation'].includes(row)) { + return { + label: dateFormat(log[row], dateTooltipFormat), + timeAgo: __(timeAgo(log[row])), + } + } + return log[row] +} + +export const statusLabelMap = { + Completed: 'Completed', + Initiated: 'Initiated', + Busy: 'Declined', + Failed: 'Failed', + Queued: 'Queued', + Cancelled: 'Cancelled', + Ringing: 'Ringing', + 'No Answer': 'Missed Call', + 'In Progress': 'In Progress', +} + +export const statusColorMap = { + Completed: 'green', + Busy: 'orange', + Failed: 'red', + Initiated: 'gray', + Queued: 'gray', + Cancelled: 'gray', + Ringing: 'gray', + 'No Answer': 'red', + 'In Progress': 'blue', +} From 7c5696ee75b18296f2cda5822be5f3beaceb17d3 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Thu, 30 May 2024 14:09:05 +0530 Subject: [PATCH 15/22] fix: scroll to bottom in each tab --- frontend/src/components/Activities.vue | 683 ++++++++++++------------- 1 file changed, 339 insertions(+), 344 deletions(-) diff --git a/frontend/src/components/Activities.vue b/frontend/src/components/Activities.vue index 1baf58a1..9e8a2b31 100644 --- a/frontend/src/components/Activities.vue +++ b/frontend/src/components/Activities.vue @@ -102,11 +102,11 @@ >
@@ -156,10 +156,10 @@
-
+
-
+
@@ -313,7 +310,7 @@
-
+
-
- -
-
-
-
-
-
- - {{ activity.data.sender_full_name }} - · - -
- {{ __(timeAgo(activity.creation)) }} -
-
- -
-
- - - - - - -
-
-
- {{ activity.data.subject }} -
-
- - {{ __('TO') }}: - - {{ activity.data.recipients }} - , - - {{ __('CC') }}: - - {{ activity.data.cc }} - , - - {{ __('BCC') }}: - - {{ activity.data.bcc }} -
-
+
+
+
-
-
- - {{ activity.owner_name }} - - {{ __('added a') }} - - {{ __('comment') }} - -
-
+
+
+ + {{ activity.data.sender_full_name }} + ·
{{ __(timeAgo(activity.creation)) }}
-
-
-
-
-
-
+
+ + + + + + +
+
+
+ {{ activity.data.subject }} +
+
+ + {{ __('TO') }}: + + {{ activity.data.recipients }} + , + + {{ __('CC') }}: + + {{ activity.data.cc }} + , + + {{ __('BCC') }}: + + {{ activity.data.bcc }} +
+
+
+
+
+
+ + {{ activity.owner_name }} + + {{ __('added a') }} + + {{ __('comment') }} + +
+
+ +
+ {{ __(timeAgo(activity.creation)) }} +
+
-
-
+
+
+ +
+
+
+
+
+
+ {{ + activity.type == 'Incoming' + ? __('Inbound Call') + : __('Outbound Call') + }} +
+
+ +
+ {{ __(timeAgo(activity.creation)) }} +
+
+
+
+
+
+ +
{{ __('Duration') }}
+
+ {{ activity.duration }} +
+
+
+ +
{{ - activity.type == 'Incoming' - ? __('Inbound Call') - : __('Outbound Call') + activity.show_recording + ? __('Hide Recording') + : __('Listen to Call') }}
-
- -
- {{ __(timeAgo(activity.creation)) }} -
-
-
-
-
- -
{{ __('Duration') }}
-
- {{ activity.duration }} -
-
-
- -
- {{ - activity.show_recording - ? __('Hide Recording') - : __('Listen to Call') - }} -
-
-
-
- -
-
-
- -
-
- {{ __(activity.caller.label) }} -
-
- {{ activity.from }} -
-
-
- +
+ +
+
+
+ -
- -
-
- {{ __(activity.receiver.label) }} -
-
- {{ activity.to }} -
+
+
+ {{ __(activity.caller.label) }} +
+
+ {{ activity.from }} +
+
+
+ +
+ +
+
+ {{ __(activity.receiver.label) }} +
+
+ {{ activity.to }}
-
-
-
- - {{ activity.owner_name }} - - {{ __(activity.type) }} +
+
+
+
+ + {{ activity.owner_name }} + + {{ __(activity.type) }} + + {{ __(activity.data.field_label) }} + + {{ __(activity.value) }} + +
+ + {{ getUser(activity.data.old_value).full_name }} +
+
+ {{ activity.data.old_value }} +
+
+ {{ __('to') }} + +
+ + {{ getUser(activity.data.value).full_name }} +
+
+ {{ activity.data.value }} +
+
+
+ +
+ +
+ {{ __(timeAgo(activity.creation)) }} +
+
+
+
+
+
+
{{ __(activity.data.field_label) }} - {{ __(activity.value) }} + +
+
+ {{ + startCase(__(activity.type)) + }}
- -
- -
- {{ __(timeAgo(activity.creation)) }} -
-
-
-
+ +
+ {{ __(timeAgo(activity.creation)) }} +
+
+
+
+
+
-
- -
+ +
From c8146b7c3c2377afbf439471183c3e1cc9b77708 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Thu, 30 May 2024 16:59:34 +0530 Subject: [PATCH 16/22] fix: added as prop in FadedScrollableDiv --- frontend/src/components/FadedScrollableDiv.vue | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/FadedScrollableDiv.vue b/frontend/src/components/FadedScrollableDiv.vue index 7881b28e..3cc44638 100644 --- a/frontend/src/components/FadedScrollableDiv.vue +++ b/frontend/src/components/FadedScrollableDiv.vue @@ -1,16 +1,21 @@ From 20241dd7353e28c970f20f3db5b0e7aab845aec4 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Thu, 30 May 2024 18:18:44 +0530 Subject: [PATCH 18/22] fix: quickFilter should apply on input not on change --- frontend/src/components/ViewControls.vue | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 9d613b96..49fccf84 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -127,13 +127,13 @@ @change="(v) => applyQuickFilter(filter, v)" :placeholder="filter.label" /> -
@@ -264,7 +264,13 @@ import { globalStore } from '@/stores/global' import { viewsStore } from '@/stores/views' import { usersStore } from '@/stores/users' import { isEmoji } from '@/utils' -import { createResource, Dropdown, call, FeatherIcon } from 'frappe-ui' +import { + createResource, + Dropdown, + call, + FeatherIcon, + TextInput, +} from 'frappe-ui' import { computed, ref, onMounted, watch, h } from 'vue' import { useRouter, useRoute } from 'vue-router' import { useDebounceFn } from '@vueuse/core' From 5d234965d506af496bc8807058a46dd7cc59d452 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Thu, 30 May 2024 19:05:40 +0530 Subject: [PATCH 19/22] fix: clear All x button is called twice --- frontend/src/components/Filter.vue | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/Filter.vue b/frontend/src/components/Filter.vue index 077e3d0b..931f0f28 100644 --- a/frontend/src/components/Filter.vue +++ b/frontend/src/components/Filter.vue @@ -15,11 +15,13 @@ -