diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 82afdb19..30f16244 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -53,6 +53,7 @@ declare module 'vue' { ContactsListView: typeof import('./src/components/ListViews/ContactsListView.vue')['default'] ConvertIcon: typeof import('./src/components/Icons/ConvertIcon.vue')['default'] CountUpTimer: typeof import('./src/components/CountUpTimer.vue')['default'] + CreateDocumentModal: typeof import('./src/components/Modals/CreateDocumentModal.vue')['default'] CRMLogo: typeof import('./src/components/Icons/CRMLogo.vue')['default'] CustomActions: typeof import('./src/components/CustomActions.vue')['default'] DashboardIcon: typeof import('./src/components/Icons/DashboardIcon.vue')['default'] @@ -116,6 +117,7 @@ declare module 'vue' { FrappeCloudIcon: typeof import('./src/components/Icons/FrappeCloudIcon.vue')['default'] GenderIcon: typeof import('./src/components/Icons/GenderIcon.vue')['default'] GeneralSettings: typeof import('./src/components/Settings/GeneralSettings.vue')['default'] + GlobalModals: typeof import('./src/components/Modals/GlobalModals.vue')['default'] GoogleIcon: typeof import('./src/components/Icons/GoogleIcon.vue')['default'] Grid: typeof import('./src/components/Controls/Grid.vue')['default'] GridFieldsEditorModal: typeof import('./src/components/Controls/GridFieldsEditorModal.vue')['default'] diff --git a/frontend/src/components/Controls/Grid.vue b/frontend/src/components/Controls/Grid.vue index 51f14b43..668072fd 100644 --- a/frontend/src/components/Controls/Grid.vue +++ b/frontend/src/components/Controls/Grid.vue @@ -126,6 +126,7 @@ " :filters="field.filters" @change="(v) => fieldChange(v, field, row)" + :onCreate="field.create" /> { }) function getFieldObj(field) { + if (field.fieldtype === 'Link' && field.options !== 'User') { + if (!field.create) { + field.create = (obj, close) => createDocument(field.options, obj, close) + } + } + return { ...field, filters: field.link_filters && JSON.parse(field.link_filters), diff --git a/frontend/src/components/FieldLayout/Field.vue b/frontend/src/components/FieldLayout/Field.vue index b8a7c11d..534a151e 100644 --- a/frontend/src/components/FieldLayout/Field.vue +++ b/frontend/src/components/FieldLayout/Field.vue @@ -215,6 +215,7 @@ import UserAvatar from '@/components/UserAvatar.vue' import TableMultiselectInput from '@/components/Controls/TableMultiselectInput.vue' import Link from '@/components/Controls/Link.vue' import Grid from '@/components/Controls/Grid.vue' +import { createDocument } from '@/composables/document' import { getFormat, evaluateDependsOnValue } from '@/utils' import { flt } from '@/utils/numberFormat.js' import { getMeta } from '@/stores/meta' @@ -272,6 +273,12 @@ const field = computed(() => { field.fieldtype = 'User' } + if (field.fieldtype === 'Link' && field.options !== 'User') { + if (!field.create) { + field.create = (obj, close) => createDocument(field.options, obj, close) + } + } + let _field = { ...field, filters: field.link_filters && JSON.parse(field.link_filters), diff --git a/frontend/src/components/Layouts/DesktopLayout.vue b/frontend/src/components/Layouts/DesktopLayout.vue index f244b6ff..9d4416b2 100644 --- a/frontend/src/components/Layouts/DesktopLayout.vue +++ b/frontend/src/components/Layouts/DesktopLayout.vue @@ -7,9 +7,11 @@ + diff --git a/frontend/src/components/Modals/CreateDocumentModal.vue b/frontend/src/components/Modals/CreateDocumentModal.vue new file mode 100644 index 00000000..6c1ccaf8 --- /dev/null +++ b/frontend/src/components/Modals/CreateDocumentModal.vue @@ -0,0 +1,146 @@ + + + diff --git a/frontend/src/components/Modals/GlobalModals.vue b/frontend/src/components/Modals/GlobalModals.vue new file mode 100644 index 00000000..c01dfd23 --- /dev/null +++ b/frontend/src/components/Modals/GlobalModals.vue @@ -0,0 +1,32 @@ + + diff --git a/frontend/src/composables/document.js b/frontend/src/composables/document.js new file mode 100644 index 00000000..cd9b1a5c --- /dev/null +++ b/frontend/src/composables/document.js @@ -0,0 +1,14 @@ +import { ref } from 'vue' + +export const showCreateDocumentModal = ref(false) +export const createDocumentDoctype = ref('') +export const createDocumentData = ref({}) + +export function createDocument(doctype, obj, close) { + if (doctype) { + close() + createDocumentDoctype.value = doctype + createDocumentData.value = obj || {} + showCreateDocumentModal.value = true + } +}