diff --git a/components.d.ts b/components.d.ts index a54dbed..5d89172 100644 --- a/components.d.ts +++ b/components.d.ts @@ -8,6 +8,9 @@ export {} declare module 'vue' { export interface GlobalComponents { Button: typeof import('primevue/button')['default'] + Card: typeof import('primevue/card')['default'] + Chat: typeof import('./src/components/ChatComponent.vue')['default'] + ChatComponent: typeof import('./src/components/ChatComponent.vue')['default'] Checkbox: typeof import('primevue/checkbox')['default'] ContactInfo: typeof import('./src/components/read/ReadContactInfo.vue')['default'] CreateActionsSection: typeof import('./src/components/create/CreateActionsSection.vue')['default'] @@ -35,6 +38,7 @@ declare module 'vue' { MessageSender: typeof import('./src/components/read/ReadMessageSender.vue')['default'] PlacementInstructions: typeof import('./src/components/manage/ManagePlacementInstructions.vue')['default'] QRCodeReadySection: typeof import('./src/components/create/CreateReadySection.vue')['default'] + QueryRender: typeof import('./src/components/QueryRender.vue')['default'] RadioButton: typeof import('primevue/radiobutton')['default'] ReadContactInfo: typeof import('./src/components/read/ReadContactInfo.vue')['default'] ReadMessageSender: typeof import('./src/components/read/ReadMessageSender.vue')['default'] diff --git a/package-lock.json b/package-lock.json index 11eeccf..524868c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,10 +16,12 @@ "md5": "^2.3.0", "pinia": "^2.2.6", "pouchdb-browser": "^9.0.0", + "pouchdb-find": "^9.0.0", "primeicons": "^7.0.0", "primevue": "^4.2.1", "qr-code-styling": "^1.8.4", "svgo": "^3.3.2", + "tailwind-scrollbar": "^3.1.0", "tailwindcss-primeui": "^0.3.4", "vue": "^3.5.12", "vue-query": "^1.26.0", @@ -30,6 +32,7 @@ "@primevue/auto-import-resolver": "^4.2.1", "@tsconfig/node20": "^20.1.4", "@types/jsdom": "^21.1.7", + "@types/md5": "^2.3.5", "@types/node": "^20.17.6", "@types/pouchdb-browser": "^6.1.5", "@vitejs/plugin-vue": "^5.1.4", @@ -1911,6 +1914,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/md5": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.5.tgz", + "integrity": "sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", @@ -4126,6 +4136,40 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-cookie": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-2.2.0.tgz", + "integrity": "sha512-h9AgfjURuCgA2+2ISl8GbavpUdR+WGAM2McW/ovn4tVccegp8ZqCKWSBR8uRdM8dDNlx5WdKRWxBYUwteLDCNQ==", + "license": "Unlicense", + "dependencies": { + "set-cookie-parser": "^2.4.8", + "tough-cookie": "^4.0.0" + } + }, + "node_modules/fetch-cookie/node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/fetch-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -5281,6 +5325,48 @@ "dev": true, "license": "MIT" }, + "node_modules/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", @@ -5978,6 +6064,27 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "license": "MIT" }, + "node_modules/pouchdb-abstract-mapreduce": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-9.0.0.tgz", + "integrity": "sha512-SnTtqwAEiAa3uxKbc1J7LfiBViwEkKe2xkK92zxyTXPqWBvMnh4UU3GXxx7GrXTM4L9llsQ3lSjpbH4CNqG1Mw==", + "license": "Apache-2.0", + "dependencies": { + "pouchdb-binary-utils": "9.0.0", + "pouchdb-collate": "9.0.0", + "pouchdb-errors": "9.0.0", + "pouchdb-fetch": "9.0.0", + "pouchdb-mapreduce-utils": "9.0.0", + "pouchdb-md5": "9.0.0", + "pouchdb-utils": "9.0.0" + } + }, + "node_modules/pouchdb-binary-utils": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-9.0.0.tgz", + "integrity": "sha512-2OMtgDZi82vqs+zNDE0YiYjOaWkYCUcZJZKK3WkRr+XYRu+2B7umJrnygJFhUwoGedBbHSrlQBLhdNV3F1AX1A==", + "license": "Apache-2.0" + }, "node_modules/pouchdb-browser": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/pouchdb-browser/-/pouchdb-browser-9.0.0.tgz", @@ -5989,6 +6096,83 @@ "vuvuzela": "1.0.3" } }, + "node_modules/pouchdb-collate": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-9.0.0.tgz", + "integrity": "sha512-TrnEDNZEmIIl+W3xKUO8h+geqVLQ90oZe5ujPkl8myUzpREULWXWQBnV5EzPXVEKDBpJlb8T3I6oy/zdWGQpdA==", + "license": "Apache-2.0" + }, + "node_modules/pouchdb-errors": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-9.0.0.tgz", + "integrity": "sha512-961PSMLhW0UqqdJ566g+CdLZ5pkBJRd6l4WWpCDdD0USvE4xYfYGzv43w7nZZBw1k3Xdy092yqPge7yX/tfnyw==", + "license": "Apache-2.0" + }, + "node_modules/pouchdb-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-9.0.0.tgz", + "integrity": "sha512-TbE3cUcAJQrwb9kr44tDP0X+NAbcqgjsTvcL30L4xzBNJeCPTIRjukYX80s154SHJUXBxcWRiPsMmNqpXsjfCA==", + "license": "Apache-2.0", + "dependencies": { + "fetch-cookie": "2.2.0", + "node-fetch": "2.6.9" + } + }, + "node_modules/pouchdb-find": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-9.0.0.tgz", + "integrity": "sha512-vvVhq4eEOmSkwSRwf2NBYtdhURB7ryJ7sUI4WDN00GuLUj2g8jAXBJuZIryVgdYt/5S5cfn70iRL6Eow+LFhpA==", + "license": "Apache-2.0", + "dependencies": { + "pouchdb-abstract-mapreduce": "9.0.0", + "pouchdb-collate": "9.0.0", + "pouchdb-errors": "9.0.0", + "pouchdb-fetch": "9.0.0", + "pouchdb-md5": "9.0.0", + "pouchdb-selector-core": "9.0.0", + "pouchdb-utils": "9.0.0" + } + }, + "node_modules/pouchdb-mapreduce-utils": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-9.0.0.tgz", + "integrity": "sha512-Bjh8W6QXqp1j7MKmHhYYp5cYlcQsm5drD8Jd/F+ZlfNt18uiD2SQXWzGM5797+tiW/LszFGb8ttw0uHWjxufCQ==", + "license": "Apache-2.0", + "dependencies": { + "pouchdb-utils": "9.0.0" + } + }, + "node_modules/pouchdb-md5": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-9.0.0.tgz", + "integrity": "sha512-58xUYBvW3/s+aH0j4uOhhN8yCk0LQ254cxBzI/gbKA9PrfwHpe4zrr0L/ia5ml3A30oH1f8aTnuVMwWDkFcuww==", + "license": "Apache-2.0", + "dependencies": { + "pouchdb-binary-utils": "9.0.0", + "spark-md5": "3.0.2" + } + }, + "node_modules/pouchdb-selector-core": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-9.0.0.tgz", + "integrity": "sha512-ZYHYsdoedwm8j5tYofz+3+uUSK8i+7tRCBb01T0OuqDQb17+w5mzjHF8Ppi160xdPUPaWCo1Un+nLWGJzkmA3g==", + "license": "Apache-2.0", + "dependencies": { + "pouchdb-collate": "9.0.0", + "pouchdb-utils": "9.0.0" + } + }, + "node_modules/pouchdb-utils": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-9.0.0.tgz", + "integrity": "sha512-xWZE5c+nAslgmLC8JBZbky8AYgdz7pKtv7KTSi6CD2tuQD0WyNKib0YnhZndeE84dksTeZlqlg56RQHsHoB2LQ==", + "license": "Apache-2.0", + "dependencies": { + "pouchdb-errors": "9.0.0", + "pouchdb-md5": "9.0.0", + "uuid": "8.3.2" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6056,11 +6240,19 @@ "dev": true, "license": "ISC" }, + "node_modules/psl": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.10.0.tgz", + "integrity": "sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6093,6 +6285,12 @@ "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==", "license": "MIT" }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6199,6 +6397,12 @@ "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", "license": "MIT" }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -6416,6 +6620,12 @@ "node": ">=10" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6775,6 +6985,18 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tailwind-scrollbar": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-3.1.0.tgz", + "integrity": "sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==", + "license": "MIT", + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "tailwindcss": "3.x" + } + }, "node_modules/tailwindcss": { "version": "3.4.14", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", @@ -7184,6 +7406,16 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 3727e03..d33a058 100644 --- a/package.json +++ b/package.json @@ -27,10 +27,12 @@ "md5": "^2.3.0", "pinia": "^2.2.6", "pouchdb-browser": "^9.0.0", + "pouchdb-find": "^9.0.0", "primeicons": "^7.0.0", "primevue": "^4.2.1", "qr-code-styling": "^1.8.4", "svgo": "^3.3.2", + "tailwind-scrollbar": "^3.1.0", "tailwindcss-primeui": "^0.3.4", "vue": "^3.5.12", "vue-query": "^1.26.0", @@ -41,6 +43,7 @@ "@primevue/auto-import-resolver": "^4.2.1", "@tsconfig/node20": "^20.1.4", "@types/jsdom": "^21.1.7", + "@types/md5": "^2.3.5", "@types/node": "^20.17.6", "@types/pouchdb-browser": "^6.1.5", "@vitejs/plugin-vue": "^5.1.4", diff --git a/src/api/PouchDB.ts b/src/api/PouchDB.ts new file mode 100644 index 0000000..f5fa359 --- /dev/null +++ b/src/api/PouchDB.ts @@ -0,0 +1,4 @@ +import PouchDB from 'pouchdb-browser' +import PouchDBFindPlugin from 'pouchdb-find' + +export default PouchDB.plugin(PouchDBFindPlugin) diff --git a/src/api/dbs.ts b/src/api/dbs.ts index 86253cf..1005a5f 100644 --- a/src/api/dbs.ts +++ b/src/api/dbs.ts @@ -1,8 +1,18 @@ -import PouchDB from 'pouchdb-browser' -import { type QRCodeDocument } from '@/types/DBDocumentTypes' +import PouchDB from '@/api/PouchDB' + +import type { QRCodeDocument, MessageDocument } from '@/types/DBDocumentTypes' export const qrCodeDbRemote = new PouchDB('https://hereconnect.condev.ru/api/qr', { skip_setup: true, }) export const qrCodeDbLocal = new PouchDB('qr') + +export const messagesDbLocal = new PouchDB('messages') + +export const messagesDbRemote = new PouchDB( + 'https://hereconnect.condev.ru/api/messages', + { + skip_setup: true, + }, +) diff --git a/src/components/ChatComponent.vue b/src/components/ChatComponent.vue new file mode 100644 index 0000000..55852e7 --- /dev/null +++ b/src/components/ChatComponent.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/components/QueryRender.vue b/src/components/QueryRender.vue new file mode 100644 index 0000000..4db1c04 --- /dev/null +++ b/src/components/QueryRender.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/components/read/ReadContactInfo.vue b/src/components/read/ReadContactInfo.vue index 7b99754..d2902c9 100644 --- a/src/components/read/ReadContactInfo.vue +++ b/src/components/read/ReadContactInfo.vue @@ -48,10 +48,9 @@ diff --git a/src/views/ReadQRCodeView.vue b/src/views/ReadQRCodeView.vue index c7b31d9..2f8f175 100644 --- a/src/views/ReadQRCodeView.vue +++ b/src/views/ReadQRCodeView.vue @@ -2,14 +2,15 @@
- + + +
@@ -28,24 +29,16 @@ diff --git a/tailwind.config.js b/tailwind.config.js index 2283710..5e7977e 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -4,5 +4,5 @@ export default { theme: { extend: {}, }, - plugins: [require('tailwindcss-primeui')], + plugins: [require('tailwindcss-primeui'), require('tailwind-scrollbar')], }