From 352bebcd698bf9268c472768a68dfcae39efd2b6 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Thu, 10 Aug 2023 19:14:29 +0530 Subject: [PATCH] fix: added socket io to listen for cached documents --- frontend/package.json | 5 +++-- frontend/src/main.js | 13 +++++++++++++ frontend/src/socket.js | 14 ++++++++++++++ yarn.lock | 33 +++++++++++++++++++++++++++------ 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 frontend/src/socket.js diff --git a/frontend/package.json b/frontend/package.json index 3d78bffa..4344a945 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,12 +17,13 @@ "frappe-ui": "^0.1.0-alpha.11", "pinia": "^2.0.33", "postcss": "^8.4.5", + "socket.io-client": "^4.7.2", "tailwindcss": "^3.3.3", "vite": "^4.4.9" }, "peerDependencies": { + "sortablejs": "^1.15.0", "vue": "^3.3.4", - "vue-router": "^4.2.2", - "sortablejs": "^1.15.0" + "vue-router": "^4.2.2" } } diff --git a/frontend/src/main.js b/frontend/src/main.js index 6715fa4e..5cc12ed2 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -6,6 +6,9 @@ import App from './App.vue' import { createPinia } from 'pinia' import { FrappeUI, Button, setConfig, frappeRequest } from 'frappe-ui' +import socket from './socket' +import { getCachedListResource } from 'frappe-ui/src/resources/listResource' +import { getCachedResource } from 'frappe-ui/src/resources/resources' // create a pinia instance let pinia = createPinia() @@ -19,3 +22,13 @@ app.use(router) app.component('Button', Button) app.mount('#app') + +socket.on('refetch_resource', (data) => { + if (data.cache_key) { + let resource = + getCachedResource(data.cache_key) || getCachedListResource(data.cache_key) + if (resource) { + resource.reload() + } + } +}) diff --git a/frontend/src/socket.js b/frontend/src/socket.js new file mode 100644 index 00000000..ca30f38a --- /dev/null +++ b/frontend/src/socket.js @@ -0,0 +1,14 @@ +import { io } from 'socket.io-client' +import { socketio_port } from '../../../../sites/common_site_config.json' + +function initSocket() { + let host = window.location.hostname + let port = window.location.port ? `:${socketio_port}` : '' + let protocol = port ? 'http' : 'https' + let url = `${protocol}://${host}${port}/${host}` + let socket = io(url, { withCredentials: true }) + return socket +} + +let socket = initSocket() +export default socket \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 3faa51e3..3e51bdf2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4223,11 +4223,27 @@ engine.io-client@~6.5.1: ws "~8.11.0" xmlhttprequest-ssl "~2.0.0" +engine.io-client@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" + integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.11.0" + xmlhttprequest-ssl "~2.0.0" + engine.io-parser@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.1.0.tgz#d593d6372d7f79212df48f807b8cace1ea1cb1b8" integrity sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w== +engine.io-parser@~5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.1.tgz#9f213c77512ff1a6cc0c7a86108a7ffceb16fcfb" + integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== + entities@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" @@ -7261,6 +7277,16 @@ socket.io-client@^4.5.1: engine.io-client "~6.5.1" socket.io-parser "~4.2.4" +socket.io-client@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.2.tgz#f2f13f68058bd4e40f94f2a1541f275157ff2c08" + integrity sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.2" + engine.io-client "~6.5.2" + socket.io-parser "~4.2.4" + socket.io-parser@~4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" @@ -7269,11 +7295,6 @@ socket.io-parser@~4.2.4: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -sortablejs@^1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a" - integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w== - 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" @@ -7965,7 +7986,7 @@ vue-inbrowser-compiler-independent-utils@^4.69.0: resolved "https://registry.yarnpkg.com/vue-inbrowser-compiler-independent-utils/-/vue-inbrowser-compiler-independent-utils-4.71.1.tgz#dc6830b204f7cfdc30ffc4f31ba81b0c72c52136" integrity sha512-K3wt3iVmNGaFEOUR4JIThQRWfqokxLfnPslD41FDZB2ajXp789+wCqJyGYlIFsvEQ2P61PInw6/ph5iiqg51gg== -vue-router@^4.1.6, vue-router@^4.2.2: +vue-router@^4.1.6: version "4.2.4" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.4.tgz#382467a7e2923e6a85f015d081e1508052c191b9" integrity sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==