{{
__('Are you sure you want to delete {0} - {1}?', [
props.doctype,
@@ -66,23 +58,42 @@
+
+
+
+
+
+
+ {{ confirmDeleteInfo.title }}
+
+
+
+
+
+
+
+ {{ confirmDeleteInfo.message }}
+
+
+
+
+
+
+
diff --git a/frontend/src/components/ListBulkActions.vue b/frontend/src/components/ListBulkActions.vue
index 227b1ec0..75026362 100644
--- a/frontend/src/components/ListBulkActions.vue
+++ b/frontend/src/components/ListBulkActions.vue
@@ -14,6 +14,20 @@
:doctype="doctype"
@reload="reload"
/>
+
+
diff --git a/frontend/src/pages/CallLogs.vue b/frontend/src/pages/CallLogs.vue
index c39c0019..5ca66240 100644
--- a/frontend/src/pages/CallLogs.vue
+++ b/frontend/src/pages/CallLogs.vue
@@ -79,7 +79,7 @@ import CallLogDetailModal from '@/components/Modals/CallLogDetailModal.vue'
import CallLogModal from '@/components/Modals/CallLogModal.vue'
import { getCallLogDetail } from '@/utils/callLog'
import { createResource } from 'frappe-ui'
-import { computed, ref } from 'vue'
+import { computed, ref, onMounted } from 'vue'
const callLogsListView = ref(null)
const showCallLogModal = ref(false)
@@ -123,4 +123,19 @@ function createCallLog() {
callLog.value = {}
showCallLogModal.value = true
}
+
+const openCallLogFromURL = () => {
+ const searchParams = new URLSearchParams(window.location.search)
+ const callLogName = searchParams.get('open')
+
+ if (callLogName) {
+ showCallLog(callLogName)
+ searchParams.delete('open')
+ window.history.replaceState(null, '', window.location.pathname)
+ }
+}
+
+onMounted(() => {
+ openCallLogFromURL()
+})
diff --git a/frontend/src/pages/Notes.vue b/frontend/src/pages/Notes.vue
index 340a8c43..0c111edd 100644
--- a/frontend/src/pages/Notes.vue
+++ b/frontend/src/pages/Notes.vue
@@ -127,6 +127,7 @@ const viewControls = ref(null)
watch(
() => notes.value?.data?.page_length_count,
(val, old_value) => {
+ openNoteFromURL()
if (!val || val === old_value) return
updatedPageCount.value = val
},
@@ -152,4 +153,20 @@ async function deleteNote(name) {
})
notes.value.reload()
}
+
+const openNoteFromURL = () => {
+ const searchParams = new URLSearchParams(window.location.search)
+ const noteName = searchParams.get('open')
+
+ if (noteName && notes.value?.data?.data) {
+ const foundNote = notes.value.data.data.find(
+ (note) => note.name === noteName,
+ )
+ if (foundNote) {
+ editNote(foundNote)
+ }
+ searchParams.delete('open')
+ window.history.replaceState(null, '', window.location.pathname)
+ }
+}
diff --git a/frontend/src/pages/Tasks.vue b/frontend/src/pages/Tasks.vue
index f73e1804..5a2c2f1c 100644
--- a/frontend/src/pages/Tasks.vue
+++ b/frontend/src/pages/Tasks.vue
@@ -211,7 +211,7 @@ import { getMeta } from '@/stores/meta'
import { usersStore } from '@/stores/users'
import { formatDate, timeAgo } from '@/utils'
import { Tooltip, Avatar, TextEditor, Dropdown, call } from 'frappe-ui'
-import { computed, ref } from 'vue'
+import { computed, ref, watch } from 'vue'
import { useRouter } from 'vue-router'
const { getFormattedPercent, getFormattedFloat, getFormattedCurrency } =
@@ -246,6 +246,7 @@ const rows = computed(() => {
return getKanbanRows(tasks.value.data.data, tasks.value.data.fields)
}
+ openTaskFromURL()
return parseRows(tasks.value?.data.data, tasks.value?.data.columns)
})
@@ -391,4 +392,15 @@ function redirect(doctype, docname) {
}
router.push({ name: name, params: params })
}
+
+const openTaskFromURL = () => {
+ const searchParams = new URLSearchParams(window.location.search)
+ const taskName = searchParams.get('open')
+
+ if (taskName && rows.value?.length) {
+ showTask(parseInt(taskName))
+ searchParams.delete('open')
+ window.history.replaceState(null, '', window.location.pathname)
+ }
+}