1import { call, createListResource } from "frappe-ui";
2import { computed, reactive } from "vue";
3
4export const fieldDependenciesList = createListResource({
5 doctype: "OD Form Script",
6 filters: { is_standard: 1, name: ["like", "%Field Dependency%"] },
7 fields: ["name", "enabled", "owner"],
8 cache: ["FD", "List"],
9 orderBy: "modified desc",
10 start: 0,
11 pageLength: 999,
12});
13
14export const hiddenChildFields = computed(() => {
15 let _fields = [];
16 fieldDependenciesList.data?.forEach((item) => {
17 let [_, parent, child] = item.name.split("-");
18 if (parent && child) {
19 _fields.push(child);
20 _fields.push(parent);
21 }
22 });
23 return _fields;
24});
25
26const optionsMap = reactive({});
27
28export function clearFieldOptionsCache(): void {
29 Object.keys(optionsMap).forEach((key) => delete optionsMap[key]);
30}
31
32export async function getFieldOptions(field: any): Promise<string[]> {
33 if (optionsMap[field.value]) {
34 return optionsMap[field.value];
35 }
36
37 if (field.type === "Select") {
38 optionsMap[field.value] = field.options.split("\n");
39 return optionsMap[field.value];
40 } else if (field.type === "Link") {
41 let options = await call("frappe.client.get_list", {
42 doctype: field.options,
43 fields: ["name"],
44 limit_page_length: 999,
45 });
46 optionsMap[field.value] = options.map((o) => o.name);
47 return optionsMap[field.value];
48 }
49}
50