fix: load public views

This commit is contained in:
Shariq Ansari 2024-01-19 20:47:00 +05:30
parent 0dc0509be4
commit d193c05c96
4 changed files with 48 additions and 22 deletions

View File

@ -3,6 +3,8 @@ from frappe.model.document import get_controller
from frappe.model import no_value_fields
from pypika import Criterion
from crm.api.views import get_views
@frappe.whitelist()
def sort_options(doctype: str):
@ -164,14 +166,6 @@ def get_list_data(
"row_count": len(data),
}
def get_views(doctype):
views = frappe.get_all(
"CRM View Settings",
fields=["*"],
filters={"dt": doctype, "user": frappe.session.user}
)
return views
def get_doctype_fields(doctype):
not_allowed_fieldtypes = [

19
crm/api/views.py Normal file
View File

@ -0,0 +1,19 @@
import frappe
from pypika import Criterion
@frappe.whitelist()
def get_views(doctype):
if frappe.session.user == "Guest":
frappe.throw("Authentication failed", exc=frappe.AuthenticationError)
View = frappe.qb.DocType("CRM View Settings")
query = (
frappe.qb.from_(View)
.select("*")
.where(Criterion.any([View.user == '', View.user == frappe.session.user]))
)
if doctype:
query = query.where(View.dt == doctype)
views = query.run(as_dict=True)
return views

View File

@ -11,6 +11,7 @@
"dt",
"route_name",
"pinned",
"public",
"columns_tab",
"load_default_columns",
"columns",
@ -97,11 +98,17 @@
"fieldname": "load_default_columns",
"fieldtype": "Check",
"label": "Load Default Columns"
},
{
"default": "0",
"fieldname": "public",
"fieldtype": "Check",
"label": "Public"
}
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2024-01-03 16:54:52.195687",
"modified": "2024-01-19 19:55:14.876998",
"modified_by": "Administrator",
"module": "FCRM",
"name": "CRM View Settings",

View File

@ -1,29 +1,30 @@
import { defineStore } from 'pinia'
import { usersStore } from '@/stores/users'
import { createListResource } from 'frappe-ui'
import { createResource } from 'frappe-ui'
import { reactive, ref } from 'vue'
export const viewsStore = defineStore('crm-views', () => {
const { getUser } = usersStore()
export const viewsStore = defineStore('crm-views', (doctype) => {
let viewsByName = reactive({})
let pinnedViews = ref([])
let publicViews = ref([])
const views = createListResource({
doctype: 'CRM View Settings',
fields: ['*'],
filters: { user: getUser().email },
cache: 'crm-views',
// Views
const views = createResource({
url: 'crm.api.views.get_views',
params: { doctype: doctype || '' },
cache: "crm-views",
initialData: [],
auto: true,
transform(views) {
pinnedViews.value = []
publicViews.value = []
for (let view of views) {
viewsByName[view.name] = view
if (view.pinned) {
pinnedViews.value?.push(view)
}
if (view.public) {
publicViews.value?.push(view)
}
}
return views
},
@ -42,13 +43,18 @@ export const viewsStore = defineStore('crm-views', () => {
return pinnedViews.value
}
async function reload(wait = false) {
function getPublicViews() {
if (!publicViews.value?.length) return []
return publicViews.value
}
async function reload() {
await views.reload()
}
return {
views,
getPinnedViews,
getPublicViews,
reload,
getView,
}