Merge pull request #159 from frappe/develop
chore: Merge develop to main
This commit is contained in:
commit
75d99ea0e8
@ -1,8 +1,8 @@
|
||||
// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("CRM Deal", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
||||
frappe.ui.form.on("CRM Deal", {
|
||||
refresh(frm) {
|
||||
frm.add_web_link(`/crm/deals/${frm.doc.name}`, __("Open in Portal"));
|
||||
},
|
||||
});
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("CRM Lead", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
||||
frappe.ui.form.on("CRM Lead", {
|
||||
refresh(frm) {
|
||||
frm.add_web_link(`/crm/leads/${frm.doc.name}`, __("Open in Portal"));
|
||||
},
|
||||
});
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<div class="mb-3 flex flex-col">
|
||||
<SidebarLink
|
||||
id="notifications-btn"
|
||||
:label="__('Notifications')"
|
||||
label="Notifications"
|
||||
:icon="NotificationsIcon"
|
||||
:isCollapsed="isSidebarCollapsed"
|
||||
@click="() => toggleNotificationPanel()"
|
||||
@ -67,7 +67,7 @@
|
||||
<SidebarLink
|
||||
v-for="link in view.views"
|
||||
:icon="link.icon"
|
||||
:label="__(link.label)"
|
||||
:label="link.label"
|
||||
:to="link.to"
|
||||
:isCollapsed="isSidebarCollapsed"
|
||||
class="mx-2 my-0.5"
|
||||
@ -78,13 +78,13 @@
|
||||
</div>
|
||||
<div class="m-2 flex flex-col gap-1">
|
||||
<SidebarLink
|
||||
:label="__('Docs')"
|
||||
label="Docs"
|
||||
:isCollapsed="isSidebarCollapsed"
|
||||
icon="book-open"
|
||||
@click="() => openDocs()"
|
||||
/>
|
||||
<SidebarLink
|
||||
:label="isSidebarCollapsed ? __('Expand') : __('Collapse')"
|
||||
:label="isSidebarCollapsed ? 'Expand' : 'Collapse'"
|
||||
:isCollapsed="isSidebarCollapsed"
|
||||
@click="isSidebarCollapsed = !isSidebarCollapsed"
|
||||
class=""
|
||||
|
||||
@ -22,10 +22,7 @@
|
||||
v-slot="{ idx, column, item }"
|
||||
:row="row"
|
||||
>
|
||||
<ListRowItem
|
||||
:item="item"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<ListRowItem :item="item">
|
||||
<template #prefix>
|
||||
<div v-if="['caller', 'receiver'].includes(column.key)">
|
||||
<Avatar
|
||||
@ -40,9 +37,13 @@
|
||||
<FeatherIcon :name="item.icon" class="h-3 w-3" />
|
||||
</div>
|
||||
</template>
|
||||
<template #default="{ label }">
|
||||
<div
|
||||
v-if="['modified', 'creation'].includes(column.key)"
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
<Tooltip :text="item.label">
|
||||
<div>{{ item.timeAgo }}</div>
|
||||
@ -54,6 +55,9 @@
|
||||
:theme="item.color"
|
||||
size="md"
|
||||
:label="__(item.label)"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div v-else-if="column.type === 'Check'">
|
||||
@ -64,6 +68,16 @@
|
||||
class="text-gray-900"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
{{ label }}
|
||||
</div>
|
||||
</template>
|
||||
</ListRowItem>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
|
||||
@ -23,10 +23,7 @@
|
||||
v-slot="{ idx, column, item }"
|
||||
:row="row"
|
||||
>
|
||||
<ListRowItem
|
||||
:item="item"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<ListRowItem :item="item">
|
||||
<template #prefix>
|
||||
<div v-if="column.key === 'full_name'">
|
||||
<Avatar
|
||||
@ -50,9 +47,13 @@
|
||||
<PhoneIcon class="h-4 w-4" />
|
||||
</div>
|
||||
</template>
|
||||
<template #default="{ label }">
|
||||
<div
|
||||
v-if="['modified', 'creation'].includes(column.key)"
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
<Tooltip :text="item.label">
|
||||
<div>{{ item.timeAgo }}</div>
|
||||
@ -66,6 +67,16 @@
|
||||
class="text-gray-900"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
{{ label }}
|
||||
</div>
|
||||
</template>
|
||||
</ListRowItem>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
|
||||
@ -20,18 +20,16 @@
|
||||
v-slot="{ idx, column, item }"
|
||||
:row="row"
|
||||
>
|
||||
<div
|
||||
v-if="column.key === '_assign'"
|
||||
class="flex items-center"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<MultipleAvatar :avatars="item" size="sm" />
|
||||
<div v-if="column.key === '_assign'" class="flex items-center">
|
||||
<MultipleAvatar
|
||||
:avatars="item"
|
||||
size="sm"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<ListRowItem
|
||||
v-else
|
||||
:item="item"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<ListRowItem v-else :item="item">
|
||||
<template #prefix>
|
||||
<div v-if="column.key === 'status'">
|
||||
<IndicatorIcon :class="item.color" />
|
||||
@ -58,6 +56,7 @@
|
||||
<PhoneIcon class="h-4 w-4" />
|
||||
</div>
|
||||
</template>
|
||||
<template #default="{ label }">
|
||||
<div
|
||||
v-if="
|
||||
[
|
||||
@ -69,6 +68,9 @@
|
||||
].includes(column.key)
|
||||
"
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
<Tooltip :text="item.label">
|
||||
<div>{{ item.timeAgo }}</div>
|
||||
@ -84,6 +86,9 @@
|
||||
:theme="item.color"
|
||||
size="md"
|
||||
:label="item.value"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div v-else-if="column.type === 'Check'">
|
||||
@ -94,6 +99,16 @@
|
||||
class="text-gray-900"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
{{ label }}
|
||||
</div>
|
||||
</template>
|
||||
</ListRowItem>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
|
||||
@ -19,16 +19,17 @@
|
||||
v-slot="{ idx, column, item }"
|
||||
:row="row"
|
||||
>
|
||||
<ListRowItem
|
||||
:item="item"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<ListRowItem :item="item">
|
||||
<!-- <template #prefix>
|
||||
|
||||
</template> -->
|
||||
<template #default="{ label }">
|
||||
<div
|
||||
v-if="['modified', 'creation'].includes(column.key)"
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
<Tooltip :text="item.label">
|
||||
<div>{{ item.timeAgo }}</div>
|
||||
@ -40,6 +41,9 @@
|
||||
:theme="item.color"
|
||||
size="md"
|
||||
:label="item.label"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div v-else-if="column.type === 'Check'">
|
||||
@ -50,6 +54,16 @@
|
||||
class="text-gray-900"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
{{ label }}
|
||||
</div>
|
||||
</template>
|
||||
</ListRowItem>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
|
||||
@ -20,18 +20,16 @@
|
||||
v-slot="{ idx, column, item }"
|
||||
:row="row"
|
||||
>
|
||||
<div
|
||||
v-if="column.key === '_assign'"
|
||||
class="flex items-center"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<MultipleAvatar :avatars="item" size="sm" />
|
||||
<div v-if="column.key === '_assign'" class="flex items-center">
|
||||
<MultipleAvatar
|
||||
:avatars="item"
|
||||
size="sm"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<ListRowItem
|
||||
v-else
|
||||
:item="item"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<ListRowItem v-else :item="item">
|
||||
<template #prefix>
|
||||
<div v-if="column.key === 'status'">
|
||||
<IndicatorIcon :class="item.color" />
|
||||
@ -67,6 +65,7 @@
|
||||
<PhoneIcon class="h-4 w-4" />
|
||||
</div>
|
||||
</template>
|
||||
<template #default="{ label }">
|
||||
<div
|
||||
v-if="
|
||||
[
|
||||
@ -78,6 +77,9 @@
|
||||
].includes(column.key)
|
||||
"
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
<Tooltip :text="item.label">
|
||||
<div>{{ item.timeAgo }}</div>
|
||||
@ -93,6 +95,9 @@
|
||||
:theme="item.color"
|
||||
size="md"
|
||||
:label="item.value"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div v-else-if="column.type === 'Check'">
|
||||
@ -103,6 +108,16 @@
|
||||
class="text-gray-900"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
{{ label }}
|
||||
</div>
|
||||
</template>
|
||||
</ListRowItem>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
@ -213,7 +228,9 @@ function editValues(selections, unselectAll) {
|
||||
function deleteValues(selections, unselectAll) {
|
||||
$dialog({
|
||||
title: __('Delete'),
|
||||
message: __('Are you sure you want to delete {0} item(s)?', [selections.size]),
|
||||
message: __('Are you sure you want to delete {0} item(s)?', [
|
||||
selections.size,
|
||||
]),
|
||||
variant: 'danger',
|
||||
actions: [
|
||||
{
|
||||
|
||||
@ -22,10 +22,7 @@
|
||||
v-slot="{ idx, column, item }"
|
||||
:row="row"
|
||||
>
|
||||
<ListRowItem
|
||||
:item="item"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<ListRowItem :item="item">
|
||||
<template #prefix>
|
||||
<div v-if="column.key === 'organization_name'">
|
||||
<Avatar
|
||||
@ -37,9 +34,13 @@
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="{ label }">
|
||||
<div
|
||||
v-if="['modified', 'creation'].includes(column.key)"
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
<Tooltip :text="item.label">
|
||||
<div>{{ item.timeAgo }}</div>
|
||||
@ -53,6 +54,16 @@
|
||||
class="text-gray-900"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
{{ label }}
|
||||
</div>
|
||||
</template>
|
||||
</ListRowItem>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
|
||||
@ -29,11 +29,7 @@
|
||||
</div>
|
||||
</Tooltip>
|
||||
</div>
|
||||
<ListRowItem
|
||||
v-else
|
||||
:item="item"
|
||||
@click="(event) => emit('applyFilter', { event, idx, column, item })"
|
||||
>
|
||||
<ListRowItem v-else :item="item">
|
||||
<template #prefix>
|
||||
<div v-if="column.key === 'status'">
|
||||
<TaskStatusIcon :status="item" />
|
||||
@ -51,9 +47,13 @@
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="{ label }">
|
||||
<div
|
||||
v-if="['modified', 'creation'].includes(column.key)"
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
<Tooltip :text="item.label">
|
||||
<div>{{ item.timeAgo }}</div>
|
||||
@ -67,6 +67,16 @@
|
||||
class="text-gray-900"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="truncate text-base"
|
||||
@click="
|
||||
(event) => emit('applyFilter', { event, idx, column, item })
|
||||
"
|
||||
>
|
||||
{{ label }}
|
||||
</div>
|
||||
</template>
|
||||
</ListRowItem>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
@ -177,7 +187,9 @@ function editValues(selections, unselectAll) {
|
||||
function deleteValues(selections, unselectAll) {
|
||||
$dialog({
|
||||
title: __('Delete'),
|
||||
message: __('Are you sure you want to delete {0} item(s)?'),
|
||||
message: __('Are you sure you want to delete {0} item(s)?', [
|
||||
selections.size,
|
||||
]),
|
||||
variant: 'danger',
|
||||
actions: [
|
||||
{
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
<Switch v-model="chooseExistingContact" />
|
||||
</div>
|
||||
</div>
|
||||
<Fields class="border-t" :sections="sections" :data="deal" />
|
||||
<Fields class="border-t pt-4" :sections="sections" :data="deal" />
|
||||
<ErrorMessage class="mt-4" v-if="error" :message="__(error)" />
|
||||
</template>
|
||||
<template #actions>
|
||||
|
||||
@ -6,10 +6,12 @@
|
||||
:class="[field.hidden && 'hidden']"
|
||||
class="flex items-center gap-2 px-3 leading-5 first:mt-3"
|
||||
>
|
||||
<div class="w-[106px] shrink-0 text-sm text-gray-600">
|
||||
{{ __(field.label) }}
|
||||
<Tooltip :text="__(field.label)" hoverDelay="1">
|
||||
<div class="w-[106px] shrink-0 truncate text-sm text-gray-600">
|
||||
<span>{{ __(field.label) }}</span>
|
||||
<span class="text-red-500">{{ field.reqd ? ' *' : '' }}</span>
|
||||
</div>
|
||||
</Tooltip>
|
||||
<div
|
||||
class="grid min-h-[28px] flex-1 items-center overflow-hidden text-base"
|
||||
>
|
||||
|
||||
@ -8,8 +8,8 @@
|
||||
class="flex w-full items-center justify-between duration-300 ease-in-out"
|
||||
:class="isCollapsed ? 'ml-[3px] p-1' : 'px-2 py-1'"
|
||||
>
|
||||
<div class="flex items-center">
|
||||
<Tooltip :text="label" placement="right" :disabled="!isCollapsed">
|
||||
<div class="flex items-center truncate">
|
||||
<Tooltip :text="__(label)" placement="right" :disabled="!isCollapsed">
|
||||
<slot name="icon">
|
||||
<span class="grid h-4.5 w-4.5 flex-shrink-0 place-items-center">
|
||||
<FeatherIcon
|
||||
@ -21,16 +21,18 @@
|
||||
</span>
|
||||
</slot>
|
||||
</Tooltip>
|
||||
<Tooltip :text="__(label)" placement="right" :disabled="isCollapsed" hoverDelay="1.5">
|
||||
<span
|
||||
class="flex-1 flex-shrink-0 text-base duration-300 ease-in-out"
|
||||
class="flex-1 flex-shrink-0 truncate text-base duration-300 ease-in-out"
|
||||
:class="
|
||||
isCollapsed
|
||||
? 'ml-0 w-0 overflow-hidden opacity-0'
|
||||
: 'ml-2 w-auto opacity-100'
|
||||
"
|
||||
>
|
||||
{{ label }}
|
||||
{{ __(label) }}
|
||||
</span>
|
||||
</Tooltip>
|
||||
</div>
|
||||
<slot name="right" />
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user