-
Home
+
Home
Tickets {
- this.$router.push({ path: "/helpdesk/my-tickets" })
+ this.$router.push({ path: "/my-tickets" })
this.$resources.tickets.fetch()
}
}
@@ -82,7 +82,7 @@ export default {
}
this.$socket.on("list_update", (data) => {
switch (data.doctype) {
- case "Ticket":
+ case "HD Ticket":
this.ticketController.update()
break
}
diff --git a/desk/src/router.js b/desk/src/router.js
index 70194feb9..999615d9f 100644
--- a/desk/src/router.js
+++ b/desk/src/router.js
@@ -3,367 +3,351 @@ import { call } from "frappe-ui";
const routes = [
{
- path: "/helpdesk",
- name: "Root",
+ path: "",
+ component: () => import("@/pages/WebsiteRoot.vue"),
+ },
+ {
+ path: "/login",
+ name: "Login",
+ component: () => import("@/pages/auth/Login.vue"),
+ },
+ {
+ path: "/signup",
+ name: "Signup",
+ component: () => import("@/pages/auth/Signup.vue"),
+ },
+ {
+ path: "/verify/:requestKey",
+ name: "Verify Account",
+ component: () =>
+ import(
+ /* webpackChunkName: "setup-account" */ "@/pages/auth/VerifyAccount.vue"
+ ),
+ props: true,
+ },
+ {
+ path: "/setup",
+ name: "DeskSetup",
+ component: () => import("@/pages/desk/Setup.vue"),
+ },
+ {
+ path: "",
+ name: "PortalRoot",
+ component: () => import("@/pages/portal/Portal.vue"),
children: [
{
- path: "",
- redirect: () => {
- return { path: "/helpdesk/my-tickets" };
- },
- },
- {
- path: "login",
- name: "Login",
- component: () => import("@/pages/auth/Login.vue"),
+ path: "my-tickets",
+ name: "Ticketing",
+ component: () => import("@/pages/portal/ticketing/Ticketing.vue"),
+ children: [
+ {
+ path: "",
+ name: "PortalTickets",
+ component: () => import("@/pages/portal/ticketing/Tickets.vue"),
+ },
+ {
+ path: ":ticketId",
+ name: "PortalTicket",
+ component: () => import("@/pages/portal/ticketing/Ticket.vue"),
+ props: true,
+ },
+ {
+ path: "new/:templateId",
+ name: "TemplatedNewTicket",
+ component: () => import("@/pages/portal/ticketing/NewTicket.vue"),
+ props: true,
+ },
+ {
+ path: "new",
+ name: "DefaultNewTicket",
+ component: () => import("@/pages/portal/ticketing/NewTicket.vue"),
+ },
+ {
+ path: "impersonate",
+ name: "Impersonate",
+ component: () => import("@/pages/portal/ticketing/Impersonate.vue"),
+ },
+ ],
},
{
- path: "signup",
- name: "Signup",
- component: () => import("@/pages/auth/Signup.vue"),
+ path: "knowledge-base",
+ name: "PortalBK",
+ component: () => import("@/pages/portal/kb/KnowledgeBase.vue"),
+ children: [
+ {
+ path: "",
+ name: "PortalKBHome",
+ component: () =>
+ // shows root categories and faqs
+ import("@/pages/common/kb/Category.vue"),
+ meta: {
+ editable: false,
+ isRoot: true,
+ },
+ },
+ {
+ path: "categories/:categoryId",
+ name: "PortalKBCategory", // Category Page
+ component: () =>
+ // shows sub categories and articles
+ import("@/pages/common/kb/Category.vue"),
+ props: true,
+ meta: {
+ editable: false,
+ },
+ },
+ {
+ path: "articles/:articleId/:articleTitleSlug",
+ name: "PortalKBArticle",
+ component: () => import("@/pages/common/kb/Article.vue"),
+ props: true,
+ meta: {
+ editable: false,
+ },
+ },
+ ],
},
+ ],
+ },
+
+ {
+ path: "",
+ name: "AgentRoot",
+ component: () => import("@/pages/desk/Desk.vue"),
+ children: [
{
- path: "verify/:requestKey",
- name: "Verify Account",
- component: () =>
- import(
- /* webpackChunkName: "setup-account" */ "@/pages/auth/VerifyAccount.vue"
- ),
- props: true,
+ path: "dashboard",
+ name: "Dashboard",
+ component: () => import("@/pages/desk/Dashboard.vue"),
},
{
- path: "setup",
- name: "DeskSetup",
- component: () => import("@/pages/desk/Setup.vue"),
+ path: "tickets",
+ name: "DeskTickets",
+ component: () => import("@/pages/desk/Tickets.vue"),
},
{
- path: "",
- name: "PortalRoot",
- component: () => import("@/pages/portal/Portal.vue"),
- children: [
- {
- path: "my-tickets",
- name: "Ticketing",
- component: () => import("@/pages/portal/ticketing/Ticketing.vue"),
- children: [
- {
- path: "",
- name: "ProtalTickets",
- component: () => import("@/pages/portal/ticketing/Tickets.vue"),
- },
- {
- path: ":ticketId",
- name: "PortalTicket",
- component: () => import("@/pages/portal/ticketing/Ticket.vue"),
- props: true,
- },
- {
- path: "new/:templateId",
- name: "TemplatedNewTicket",
- component: () =>
- import("@/pages/portal/ticketing/NewTicket.vue"),
- props: true,
- },
- {
- path: "new",
- name: "DefaultNewTicket",
- component: () =>
- import("@/pages/portal/ticketing/NewTicket.vue"),
- },
- {
- path: "impersonate",
- name: "Impersonate",
- component: () =>
- import("@/pages/portal/ticketing/Impersonate.vue"),
- },
- ],
- },
- {
- path: "knowledge-base",
- name: "PortalBK",
- component: () => import("@/pages/portal/kb/KnowledgeBase.vue"),
- children: [
- {
- path: "",
- name: "PortalKBHome",
- component: () =>
- // shows root categories and faqs
- import("@/pages/common/kb/Category.vue"),
- meta: {
- editable: false,
- isRoot: true,
- },
- },
+ path: "tickets/:ticketId",
+ name: "DeskTicket",
+ component: () => import("@/pages/desk/Ticket.vue"),
+ props: true,
+ meta: {
+ breadcrumbs(route) {
+ return [
{
- path: "categories/:categoryId",
- name: "PortalKBCategory", // Category Page
- component: () =>
- // shows sub categories and articles
- import("@/pages/common/kb/Category.vue"),
- props: true,
- meta: {
- editable: false,
- },
+ label: "Tickets",
+ path: "/helpdesk/tickets",
},
{
- path: "articles/:articleId/:articleTitleSlug",
- name: "PortalKBArticle",
- component: () => import("@/pages/common/kb/Article.vue"),
- props: true,
- meta: {
- editable: false,
- },
+ label: route.params.ticketId,
},
- ],
+ ];
},
- ],
+ },
},
-
{
- path: "",
- name: "AgentRoot",
- component: () => import("@/pages/desk/Desk.vue"),
+ path: "kb",
+ name: "DeskKB",
+ component: () => import("@/pages/desk/kb/KnowledgeBase.vue"),
children: [
{
- path: "dashboard",
- name: "Dashboard",
- component: () => import("@/pages/desk/Dashboard.vue"),
+ path: "",
+ name: "DeskKBHome",
+ // shows root categories and faqs
+ component: () => import("@/pages/common/kb/Category.vue"),
+ meta: {
+ editable: true,
+ isRoot: true,
+ },
},
{
- path: "tickets",
- name: "DeskTickets",
- component: () => import("@/pages/desk/Tickets.vue"),
+ path: "categories/:categoryId",
+ // Category Page
+ name: "DeskKBCategory",
+ component: () =>
+ // shows sub categories and articles
+ import("@/pages/common/kb/Category.vue"),
+ props: true,
+ meta: {
+ editable: true,
+ },
},
{
- path: "tickets/:ticketId",
- name: "DeskTicket",
- component: () => import("@/pages/desk/Ticket.vue"),
+ path: "articles",
+ name: "DeskKBArticles",
+ // Articles.vue - shows all articles
+ component: () => import("@/pages/desk/kb/Articles.vue"),
+ },
+ {
+ path: "articles/:articleId",
+ // Article Edit page
+ name: "DeskKBArticle",
+ component: () =>
+ // Article.vue - article edit page
+ import("@/pages/common/kb/Article.vue"),
props: true,
meta: {
- breadcrumbs(route) {
- return [
- {
- label: "Tickets",
- path: "/helpdesk/tickets",
- },
- {
- label: route.params.ticketId,
- },
- ];
- },
+ editable: true,
},
},
{
- path: "kb",
- name: "DeskKB",
- component: () => import("@/pages/desk/kb/KnowledgeBase.vue"),
- children: [
- {
- path: "",
- name: "DeskKBHome",
- // shows root categories and faqs
- component: () => import("@/pages/common/kb/Category.vue"),
- meta: {
- editable: true,
- isRoot: true,
- },
- },
- {
- path: "categories/:categoryId",
- // Category Page
- name: "DeskKBCategory",
- component: () =>
- // shows sub categories and articles
- import("@/pages/common/kb/Category.vue"),
- props: true,
- meta: {
- editable: true,
- },
- },
- {
- path: "articles",
- name: "DeskKBArticles",
- // Articles.vue - shows all articles
- component: () => import("@/pages/desk/kb/Articles.vue"),
- },
+ path: "articles/new",
+ // Article Edit page
+ name: "DeskKBArticleNew",
+ component: () =>
+ // Article.vue - article edit page
+ import("@/pages/common/kb/Article.vue"),
+ props: true,
+ meta: {
+ editable: true,
+ editMode: true,
+ isNew: true,
+ },
+ },
+ ],
+ },
+ {
+ path: "customers",
+ name: "Customers",
+ component: () => import("@/pages/desk/Customers.vue"),
+ },
+ {
+ path: "customers/:customerId",
+ name: "Customer",
+ component: () => import("@/pages/desk/Customer.vue"),
+ props: true,
+ },
+ {
+ path: "contacts",
+ name: "Contacts",
+ component: () => import("@/pages/desk/Contacts.vue"),
+ },
+ {
+ path: "contacts/:contactId",
+ name: "Contact",
+ component: () => import("@/pages/desk/Contact.vue"),
+ props: true,
+ meta: {
+ breadcrumbs(route) {
+ return [
{
- path: "articles/:articleId",
- // Article Edit page
- name: "DeskKBArticle",
- component: () =>
- // Article.vue - article edit page
- import("@/pages/common/kb/Article.vue"),
- props: true,
- meta: {
- editable: true,
- },
+ label: "Contacts",
+ path: "/helpdesk/contacts",
},
{
- path: "articles/new",
- // Article Edit page
- name: "DeskKBArticleNew",
- component: () =>
- // Article.vue - article edit page
- import("@/pages/common/kb/Article.vue"),
- props: true,
- meta: {
- editable: true,
- editMode: true,
- isNew: true,
- },
+ label: route.params.contactId,
},
- ],
+ ];
+ },
+ },
+ },
+ {
+ path: "settings",
+ name: "Settings",
+ component: () => import("@/pages/desk/settings/Settings.vue"),
+ children: [
+ {
+ path: "",
+ redirect: () => {
+ return { path: "/helpdesk/settings/agents" };
+ },
},
{
- path: "customers",
- name: "Customers",
- component: () => import("@/pages/desk/Customers.vue"),
+ path: "agents",
+ name: "Agents",
+ component: () => import("@/pages/desk/settings/agent/Agents.vue"),
},
{
- path: "customers/:customerId",
- name: "Customer",
- component: () => import("@/pages/desk/Customer.vue"),
+ path: "agents/:agentId",
+ name: "Agent",
+ component: () => import("@/pages/desk/settings/agent/Agent.vue"),
props: true,
},
{
- path: "contacts",
- name: "Contacts",
- component: () => import("@/pages/desk/Contacts.vue"),
+ path: "teams",
+ name: "Teams",
+ component: () => import("@/pages/desk/settings/team/Teams.vue"),
},
{
- path: "contacts/:contactId",
- name: "Contact",
- component: () => import("@/pages/desk/Contact.vue"),
+ path: "teams/:teamId",
+ name: "Team",
+ component: () => import("@/pages/desk/settings/team/Team.vue"),
props: true,
- meta: {
- breadcrumbs(route) {
- return [
- {
- label: "Contacts",
- path: "/helpdesk/contacts",
- },
- {
- label: route.params.contactId,
- },
- ];
- },
- },
},
{
- path: "settings",
- name: "Settings",
- component: () => import("@/pages/desk/settings/Settings.vue"),
- children: [
- {
- path: "",
- redirect: () => {
- return { path: "/helpdesk/settings/agents" };
- },
- },
- {
- path: "agents",
- name: "Agents",
- component: () =>
- import("@/pages/desk/settings/agent/Agents.vue"),
- },
- {
- path: "agents/:agentId",
- name: "Agent",
- component: () =>
- import("@/pages/desk/settings/agent/Agent.vue"),
- props: true,
- },
- {
- path: "teams",
- name: "Teams",
- component: () => import("@/pages/desk/settings/team/Teams.vue"),
- },
- {
- path: "teams/:teamId",
- name: "Team",
- component: () => import("@/pages/desk/settings/team/Team.vue"),
- props: true,
- },
- {
- path: "teams/new",
- name: "NewTeam",
- component: () => import("@/pages/desk/settings/team/Team.vue"),
- },
- {
- path: "ticket_types",
- name: "TicketTypes",
- component: () =>
- import("@/pages/desk/settings/ticket_type/TicketTypes.vue"),
- },
- {
- path: "ticket_types/:ticketTypeId",
- name: "TicketType",
- component: () =>
- import("@/pages/desk/settings/ticket_type/TicketType.vue"),
- props: true,
- },
- {
- path: "ticket_types/new",
- name: "NewTicketType",
- component: () =>
- import("@/pages/desk/settings/ticket_type/TicketType.vue"),
- },
- {
- path: "sla",
- name: "SlaPolicies",
- component: () =>
- import("@/pages/desk/settings/sla/SlaPolicies.vue"),
- },
- {
- path: "sla/new",
- name: "NewSlaPolicy",
- component: () =>
- import("@/pages/desk/settings/sla/SlaPolicy.vue"),
- },
- {
- path: "sla/:slaId",
- name: "SlaPolicy",
- component: () =>
- import("@/pages/desk/settings/sla/SlaPolicy.vue"),
- props: true,
- },
- {
- path: "canned_response",
- name: "CannedResponses",
- component: () =>
- import(
- "@/pages/desk/settings/canned_response/CannedResponses.vue"
- ),
- },
- {
- path: "canned_responses/:canned_responseId",
- name: "CannedResponse",
- component: () =>
- import(
- "@/pages/desk/settings/canned_response/CannedResponse.vue"
- ),
- props: true,
- },
- {
- path: "emails",
- name: "Emails",
- component: () =>
- import("@/pages/desk/settings/email/Emails.vue"),
- },
- {
- path: "emails/new",
- name: "NewEmailAccount",
- component: () =>
- import("@/pages/desk/settings/email/EmailAccount.vue"),
- },
- {
- path: "emails/:emailAccountId",
- name: "EmailAccount",
- component: () =>
- import("@/pages/desk/settings/email/EmailAccount.vue"),
- props: true,
- },
- ],
+ path: "teams/new",
+ name: "NewTeam",
+ component: () => import("@/pages/desk/settings/team/Team.vue"),
+ },
+ {
+ path: "ticket_types",
+ name: "TicketTypes",
+ component: () =>
+ import("@/pages/desk/settings/ticket_type/TicketTypes.vue"),
+ },
+ {
+ path: "ticket_types/:ticketTypeId",
+ name: "TicketType",
+ component: () =>
+ import("@/pages/desk/settings/ticket_type/TicketType.vue"),
+ props: true,
+ },
+ {
+ path: "ticket_types/new",
+ name: "NewTicketType",
+ component: () =>
+ import("@/pages/desk/settings/ticket_type/TicketType.vue"),
+ },
+ {
+ path: "sla",
+ name: "SlaPolicies",
+ component: () =>
+ import("@/pages/desk/settings/sla/SlaPolicies.vue"),
+ },
+ {
+ path: "sla/new",
+ name: "NewSlaPolicy",
+ component: () => import("@/pages/desk/settings/sla/SlaPolicy.vue"),
+ },
+ {
+ path: "sla/:slaId",
+ name: "SlaPolicy",
+ component: () => import("@/pages/desk/settings/sla/SlaPolicy.vue"),
+ props: true,
+ },
+ {
+ path: "canned_response",
+ name: "CannedResponses",
+ component: () =>
+ import(
+ "@/pages/desk/settings/canned_response/CannedResponses.vue"
+ ),
+ },
+ {
+ path: "canned_responses/:canned_responseId",
+ name: "CannedResponse",
+ component: () =>
+ import(
+ "@/pages/desk/settings/canned_response/CannedResponse.vue"
+ ),
+ props: true,
+ },
+ {
+ path: "emails",
+ name: "Emails",
+ component: () => import("@/pages/desk/settings/email/Emails.vue"),
+ },
+ {
+ path: "emails/new",
+ name: "NewEmailAccount",
+ component: () =>
+ import("@/pages/desk/settings/email/EmailAccount.vue"),
+ },
+ {
+ path: "emails/:emailAccountId",
+ name: "EmailAccount",
+ component: () =>
+ import("@/pages/desk/settings/email/EmailAccount.vue"),
+ props: true,
},
],
},
@@ -372,7 +356,7 @@ const routes = [
];
let router = createRouter({
- history: createWebHistory("/"),
+ history: createWebHistory("/helpdesk/"),
routes,
});
diff --git a/desk/src/stores/auth.ts b/desk/src/stores/auth.ts
index 39e68ccf6..e40f4241a 100644
--- a/desk/src/stores/auth.ts
+++ b/desk/src/stores/auth.ts
@@ -19,7 +19,7 @@ export const useAuthStore = defineStore("auth", () => {
},
});
- const user__ = computed(() => userInfo.data);
+ const user__ = computed(() => userInfo.data || {});
const hasDeskAccess: ComputedRef
= computed(
() => user__.value.has_desk_access
);
diff --git a/desk/vite.config.js b/desk/vite.config.js
index 86ed19a0e..91ec3b6b1 100644
--- a/desk/vite.config.js
+++ b/desk/vite.config.js
@@ -1,12 +1,13 @@
+import path from "path";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
-import path from "path";
+import svgLoader from "vite-svg-loader";
import { getProxyOptions } from "frappe-ui/src/utils/vite-dev-server";
import { webserver_port } from "../../../sites/common_site_config.json";
// https://vitejs.dev/config/
export default defineConfig({
- plugins: [vue()],
+ plugins: [vue(), svgLoader()],
server: {
port: 8080,
proxy: getProxyOptions({ port: webserver_port }),
@@ -17,7 +18,7 @@ export default defineConfig({
},
},
build: {
- outDir: `../${path.basename(path.resolve(".."))}/public/desk`,
+ outDir: `../helpdesk/public/desk`,
emptyOutDir: true,
target: "es2021",
},
diff --git a/desk/yarn.lock b/desk/yarn.lock
index 629afa7dd..7a5eb2e9d 100644
--- a/desk/yarn.lock
+++ b/desk/yarn.lock
@@ -466,6 +466,11 @@
"@tiptap/extension-bubble-menu" "^2.0.0-beta.220"
"@tiptap/extension-floating-menu" "^2.0.0-beta.220"
+"@trysound/sax@0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
+ integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+
"@types/object.omit@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/object.omit/-/object.omit-3.0.0.tgz#0d31e1208eac8fe2ad5c9499a1016a8273bbfafc"
@@ -513,7 +518,7 @@
"@vue/compiler-core" "3.2.47"
"@vue/shared" "3.2.47"
-"@vue/compiler-sfc@3.2.47":
+"@vue/compiler-sfc@3.2.47", "@vue/compiler-sfc@^3.2.20":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz#1bdc36f6cdc1643f72e2c397eb1a398f5004ad3d"
integrity sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==
@@ -644,6 +649,11 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+boolbase@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -701,6 +711,11 @@ color-name@^1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+commander@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+ integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
commander@^9.0.0:
version "9.5.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
@@ -716,11 +731,50 @@ crelt@^1.0.0:
resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.5.tgz#57c0d52af8c859e354bace1883eb2e1eb182bb94"
integrity sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==
+css-select@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+ integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^6.1.0"
+ domhandler "^5.0.2"
+ domutils "^3.0.1"
+ nth-check "^2.0.1"
+
+css-tree@^2.2.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
+ integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==
+ dependencies:
+ mdn-data "2.0.30"
+ source-map-js "^1.0.1"
+
+css-tree@~2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032"
+ integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==
+ dependencies:
+ mdn-data "2.0.28"
+ source-map-js "^1.0.1"
+
+css-what@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+ integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+csso@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6"
+ integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==
+ dependencies:
+ css-tree "~2.2.0"
+
csstype@^2.6.8:
version "2.6.21"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e"
@@ -772,6 +826,36 @@ dlv@^1.1.3:
resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+dom-serializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+ integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.2"
+ entities "^4.2.0"
+
+domelementtype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+ integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^5.0.1, domhandler@^5.0.2:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+ integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+ dependencies:
+ domelementtype "^2.3.0"
+
+domutils@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c"
+ integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==
+ dependencies:
+ dom-serializer "^2.0.0"
+ domelementtype "^2.3.0"
+ domhandler "^5.0.1"
+
echarts@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/echarts/-/echarts-5.4.1.tgz#d7f65a584d78beff62568d878b16151b3381811c"
@@ -801,6 +885,11 @@ engine.io-parser@~5.0.3:
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.6.tgz#7811244af173e157295dec9b2718dfe42a64ef45"
integrity sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==
+entities@^4.2.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
+ integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
+
entities@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
@@ -1076,6 +1165,16 @@ markdown-it@^13.0.1:
mdurl "^1.0.1"
uc.micro "^1.0.5"
+mdn-data@2.0.28:
+ version "2.0.28"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
+ integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==
+
+mdn-data@2.0.30:
+ version "2.0.30"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
+ integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
+
mdurl@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
@@ -1129,6 +1228,13 @@ normalize-range@^0.1.2:
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+nth-check@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+ integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+ dependencies:
+ boolbase "^1.0.0"
+
object-hash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
@@ -1498,7 +1604,7 @@ sortablejs@1.14.0:
resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8"
integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==
-source-map-js@^1.0.2:
+source-map-js@^1.0.1, source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
@@ -1518,6 +1624,18 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+svgo@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a"
+ integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==
+ dependencies:
+ "@trysound/sax" "0.2.0"
+ commander "^7.2.0"
+ css-select "^5.1.0"
+ css-tree "^2.2.1"
+ csso "^5.0.5"
+ picocolors "^1.0.0"
+
tailwindcss@^3.0.12, tailwindcss@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.7.tgz#5936dd08c250b05180f0944500c01dce19188c07"
@@ -1606,6 +1724,14 @@ vee-validate@^4.8.2:
dependencies:
"@vue/devtools-api" "^6.5.0"
+vite-svg-loader@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vite-svg-loader/-/vite-svg-loader-4.0.0.tgz#1cec4337dba3c23ab13bcabb111896e251b047ac"
+ integrity sha512-0MMf1yzzSYlV4MGePsLVAOqXsbF5IVxbn4EEzqRnWxTQl8BJg/cfwIzfQNmNQxZp5XXwd4kyRKF1LytuHZTnqA==
+ dependencies:
+ "@vue/compiler-sfc" "^3.2.20"
+ svgo "^3.0.2"
+
vite@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/vite/-/vite-4.1.4.tgz#170d93bcff97e0ebc09764c053eebe130bfe6ca0"
diff --git a/helpdesk/__init__.py b/helpdesk/__init__.py
index 49e0fc1e0..8088f7513 100644
--- a/helpdesk/__init__.py
+++ b/helpdesk/__init__.py
@@ -1 +1 @@
-__version__ = "0.7.0"
+__version__ = "0.8.1"
diff --git a/helpdesk/api/ticket.py b/helpdesk/api/ticket.py
index b0bc27e6a..2b121da36 100644
--- a/helpdesk/api/ticket.py
+++ b/helpdesk/api/ticket.py
@@ -386,9 +386,9 @@ def assign_ticket_status(ticket_id, status):
@frappe.whitelist()
def update_ticket_status(ticket_id, status):
- frappe.db.set_value("Ticket", ticket_id, "status", status, update_modified=False)
+ frappe.db.set_value("HD Ticket", ticket_id, "status", status, update_modified=False)
- doc = frappe.get_doc("Ticket", ticket_id)
+ doc = frappe.get_doc("HD Ticket", ticket_id)
return doc
diff --git a/helpdesk/hooks.py b/helpdesk/hooks.py
index ac07d108d..61e529c68 100644
--- a/helpdesk/hooks.py
+++ b/helpdesk/hooks.py
@@ -11,14 +11,14 @@
after_install = "helpdesk.setup.install.after_install"
website_route_rules = [
- {
- "from_route": "/helpdesk/",
- "to_route": "helpdesk",
- },
+ {
+ "from_route": "/helpdesk/",
+ "to_route": "helpdesk",
+ },
]
has_website_permission = {
- "Ticket": "helpdesk.helpdesk.doctype.hd_ticket.hd_ticket.has_website_permission",
+ "HD Ticket": "helpdesk.helpdesk.doctype.hd_ticket.hd_ticket.has_website_permission",
}
scheduler_events = {
@@ -31,8 +31,8 @@
doc_events = {
"*": {
- "validate": "helpdesk.helpdesk.doctype.hd_service_level_agreement.hd_service_level_agreement.apply",
- },
+ "validate": "helpdesk.helpdesk.doctype.hd_service_level_agreement.hd_service_level_agreement.apply",
+ },
"Communication": {
"on_update": [
"helpdesk.helpdesk.doctype.hd_service_level_agreement.hd_service_level_agreement.on_communication_update",
@@ -53,11 +53,11 @@
],
},
"Assignment Rule": {
- "on_trash": "helpdesk.overrides.on_assignment_rule_trash",
- },
+ "on_trash": "helpdesk.overrides.on_assignment_rule_trash",
+ },
"HD Agent": {
- "before_insert": "helpdesk.limits.validate_agent_count",
- },
+ "before_insert": "helpdesk.limits.validate_agent_count",
+ },
"HD Ticket": {
"after_insert": (
"helpdesk.helpdesk.doctype.hd_customer.hd_customer.get_ticket_count"
diff --git a/helpdesk/patches.txt b/helpdesk/patches.txt
index dc5f8fe1a..baff3ad96 100644
--- a/helpdesk/patches.txt
+++ b/helpdesk/patches.txt
@@ -6,4 +6,3 @@ helpdesk.patches.ticket_naming_rule_to_autoincrement
[post_model_sync]
execute:frappe.delete_doc("Workspace", "Frappe Desk", force=True)
-execute:frappe.delete_doc("Module Def", "FrappeDesk")
diff --git a/package.json b/package.json
index 92d46b569..43823513a 100644
--- a/package.json
+++ b/package.json
@@ -1,9 +1,5 @@
{
"private": true,
- "aworkspaces": [
- "desk",
- "frappe-ui"
- ],
"scripts": {
"postinstall": "husky install && cd desk && yarn install",
"dev": "cd desk && yarn dev",
@@ -23,6 +19,5 @@
"prettier": "2.8.4",
"tailwindcss": "^3.2.6",
"typescript": "^5.0.2"
- },
- "dependencies": {}
+ }
}