Skip to content
Open
Show file tree
Hide file tree
Changes from 37 commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
6f0467e
feat: add profile, general settings page & search bars for lists
pratikb64 Oct 9, 2025
6d42461
fix: handle case where agent_name is not available
pratikb64 Oct 9, 2025
4778372
fix: add email account empty state & fix agent before_save hook
pratikb64 Oct 9, 2025
718bae3
fix: agent name while creating new agent
pratikb64 Oct 9, 2025
910f1b5
fix: padding & spacing
pratikb64 Oct 9, 2025
cab87ec
fix: agents dropdown placement
pratikb64 Oct 9, 2025
5abc5e8
fix: empty state icon alignment & brand logo, favicon edge case
pratikb64 Oct 9, 2025
626546b
fix: logo upload disable state
pratikb64 Oct 9, 2025
37c16f6
fix: assignment rule new button label
pratikb64 Oct 9, 2025
cb3c76a
fix: hide search bar when items are less than 10
pratikb64 Oct 10, 2025
dc30039
fix: profile image upload loading state
pratikb64 Oct 10, 2025
83a5928
fix: handle roles for settings modal tabs
pratikb64 Oct 10, 2025
5aa9d85
fix: add unsaved changes badge in profile
pratikb64 Oct 10, 2025
8507c62
fix: improve logo upload functionality
pratikb64 Oct 10, 2025
6bca4de
fix: layouts & alignments
pratikb64 Oct 10, 2025
fec186a
Merge branch 'develop' into feat/add-pages-in-settings
pratikb64 Oct 10, 2025
7ee3a1b
fix: import paths
pratikb64 Oct 10, 2025
770660e
fix: horizontal line conditional rendering in general settings
pratikb64 Oct 10, 2025
ca2b3fd
fix: semgrep CI error
pratikb64 Oct 10, 2025
3e3979c
fix: add empty state for team edit page
pratikb64 Oct 12, 2025
a904779
fix: improve team edit
pratikb64 Oct 12, 2025
c0a10dc
fix: agent flow test
pratikb64 Oct 12, 2025
652c903
fix: internationalization & state re-rendering
pratikb64 Oct 13, 2025
bdbf4a6
refactor: improve assignment rule invite agent handling
pratikb64 Oct 15, 2025
9a24761
fix: semgrep lint fix
pratikb64 Oct 15, 2025
417126f
fix: semgrep lint fix
pratikb64 Oct 15, 2025
37fa7d1
refactor: remove some setting options & add i18n
pratikb64 Oct 16, 2025
8848e49
fix: favicon icon
pratikb64 Oct 16, 2025
285f490
fix: improve telephony dirty state logic
pratikb64 Oct 16, 2025
43c5e96
chore: add i18n and code cleanup
pratikb64 Oct 16, 2025
039c968
refactor: add common settings layout base component
pratikb64 Oct 23, 2025
dc8a452
fix: CI lint error
pratikb64 Oct 23, 2025
f2b04ae
ci: remove frappe db commit
pratikb64 Oct 23, 2025
0b87316
feat: add teams agents selector
pratikb64 Oct 27, 2025
fc45408
fix: order list view's by modified desc
pratikb64 Oct 27, 2025
d920c03
fix: ui alignment
pratikb64 Oct 29, 2025
6625efb
fix: remove i18n for week days
pratikb64 Oct 29, 2025
d5fa634
fix: ui cleanup & move SettingsLayoutBase component
pratikb64 Nov 2, 2025
91c1f97
Merge branch `frappe:develop` into feat/add-pages-in-settings
pratikb64 Nov 3, 2025
afe0899
chore: CI lint fix
pratikb64 Nov 3, 2025
e91c510
feat: add language setting
pratikb64 Nov 3, 2025
f684bfb
fix: assignee search bug
pratikb64 Nov 4, 2025
42e1f43
fix: button label & use symbol for inject/provide
pratikb64 Nov 6, 2025
5a0a632
chore: add Dropdown component imports
pratikb64 Nov 9, 2025
5b248ce
fix: spacing in agents list view dropdowns
pratikb64 Nov 10, 2025
b49ba83
fix: dropdown bug & labels
pratikb64 Nov 12, 2025
11a2032
chore: fix description
pratikb64 Nov 12, 2025
f69cd6f
chore: code cleanup
pratikb64 Nov 14, 2025
7da438e
Merge branch 'develop' into feat/add-pages-in-settings
pratikb64 Nov 14, 2025
0b6f7b9
fix: agents list filter hover state
pratikb64 Nov 14, 2025
36fb1a5
fix: hover state
pratikb64 Nov 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions desk/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Helpdesk</title>
<meta name="mobile-web-app-capable" content="yes" />
Expand Down Expand Up @@ -206,12 +205,7 @@
<div id="popovers"></div>
<script type="module" src="/src/main.js"></script>
<script>
window.favicon = "{{ favicon }}";
window.site_name = "{{ site_name }}";

document.querySelectorAll("link[rel='icon']").forEach((link) => {
link.href = window.favicon;
});
</script>
</body>
</html>
13 changes: 10 additions & 3 deletions desk/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,26 @@ import { computed, defineAsyncComponent, h, onMounted, onUnmounted } from "vue";
import Wifi from "~icons/lucide/wifi";
import WifiOff from "~icons/lucide/wifi-off";
import { useAuthStore } from "./stores/auth";
useConfigStore();
import { useFavicon } from "@vueuse/core";
import { storeToRefs } from "pinia";
import { __ } from "./translation";

const configStore = useConfigStore();
const { favicon } = storeToRefs(configStore);

useFavicon(favicon);

onMounted(() => {
window.addEventListener("online", () => {
toast.create({
message: "You are now online",
message: __("You are now online"),
icon: h(Wifi, { class: "text-white" }),
});
});

window.addEventListener("offline", () => {
toast.create({
message: "You are now offline",
message: __("You are now offline"),
icon: h(WifiOff, { class: "text-white" }),
});
});
Expand Down
87 changes: 87 additions & 0 deletions desk/src/components/SelectDropdown.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<template>
<Popover :placement="'bottom-start'">
<template #target="{ togglePopover }">
<div
class="flex items-center justify-between text-base rounded h-7 py-1.5 pl-2 pr-2 border border-[--surface-gray-2] bg-surface-gray-2 placeholder-ink-gray-4 hover:border-outline-gray-modals hover:bg-surface-gray-3 focus:bg-surface-white focus:border-outline-gray-4 focus:shadow-sm focus:ring-0 focus-visible:ring-2 focus-visible:ring-outline-gray-3 text-ink-gray-8 transition-colors w-full dark:[color-scheme:dark] cursor-default gap-2 min-w-36"
@click="togglePopover()"
:class="targetClass"
>
<div class="w-full truncate">
{{
options?.find((option) => option.value == model)?.label || "Select"
}}
</div>
<FeatherIcon name="chevron-down" class="size-4" />
</div>
</template>
<template #body="{ togglePopover }">
<div
class="p-1 text-ink-gray-6 top-1 absolute w-full bg-white shadow-2xl rounded"
:class="bodyClass"
>
<div class="max-h-52 overflow-y-auto">
<div
v-for="option in options"
:key="option.value"
class="p-2 cursor-pointer hover:bg-gray-50 text-base flex items-center justify-between rounded"
@click="
() => {
onChange(option.value);
togglePopover();
}
"
>
<div class="w-full truncate">
{{ option.label }}
</div>
<FeatherIcon
v-if="model == option.value"
name="check"
class="size-4 ml-2"
/>
</div>
</div>
<hr class="my-1" />
<Button
variant="ghost"
:label="__('Reset')"
icon-left="refresh-ccw"
class="w-full focus-visible:ring-0"
@click="onReset"
/>
</div>
</template>
</Popover>
</template>

<script setup lang="ts">
import { Popover } from "frappe-ui";
import { PopoverProps } from "frappe-ui/src/components/Popover/types";

const model = defineModel();

const emit = defineEmits(["update:modelValue", "onReset", "onChange"]);

interface Props {
options: Array<{ value: string; label: string }>;
targetClass?: string;
bodyClass?: string;
placement?: PopoverProps["placement"];
}

const props = withDefaults(defineProps<Props>(), {
placement: "bottom-start",
});

const onReset = () => {
emit("onReset");
emit("update:modelValue", null);
model.value = null;
};

const onChange = (value: string) => {
emit("onChange", value);
emit("update:modelValue", value);
model.value = value;
};
</script>
Loading