frappe-ui 0.0.38 → 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/components/Dropdown.vue +5 -5
- package/src/utils/resources.js +47 -0
- package/src/utils/socketio.js +10 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "frappe-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.39",
|
|
4
4
|
"description": "A set of components and utilities for rapid UI development",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"autoprefixer": "^10.4.2",
|
|
31
31
|
"feather-icons": "^4.28.0",
|
|
32
32
|
"postcss": "^8.4.5",
|
|
33
|
-
"socket.io-client": "^
|
|
33
|
+
"socket.io-client": "^4.5.1",
|
|
34
34
|
"tailwindcss": "^3.0.12"
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
>
|
|
18
18
|
<MenuItems
|
|
19
19
|
class="absolute z-10 mt-2 bg-white divide-y divide-gray-100 rounded-md shadow-lg min-w-40 ring-1 ring-black ring-opacity-5 focus:outline-none"
|
|
20
|
-
:class="
|
|
21
|
-
placement
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
20
|
+
:class="{
|
|
21
|
+
'left-0 origin-top-left': placement == 'left',
|
|
22
|
+
'right-0 origin-top-right': placement == 'right',
|
|
23
|
+
'inset-x-0 origin-top': placement == 'center',
|
|
24
|
+
}"
|
|
25
25
|
>
|
|
26
26
|
<div v-for="group in groups" :key="group.key" class="px-1 py-1">
|
|
27
27
|
<div
|
package/src/utils/resources.js
CHANGED
|
@@ -4,6 +4,7 @@ import { reactive, watch } from 'vue'
|
|
|
4
4
|
let cached = {}
|
|
5
5
|
let documentCache = reactive({})
|
|
6
6
|
let listCache = reactive({})
|
|
7
|
+
let listResources = {}
|
|
7
8
|
|
|
8
9
|
export function createResource(options, vm, getResource) {
|
|
9
10
|
let cacheKey = null
|
|
@@ -181,6 +182,8 @@ export function createDocumentResource(options, vm) {
|
|
|
181
182
|
beforeSubmit(params) {
|
|
182
183
|
out.previousDoc = JSON.stringify(out.doc)
|
|
183
184
|
Object.assign(out.doc, params.fieldname || {})
|
|
185
|
+
// update data in list resources
|
|
186
|
+
updateRowInListResource(out.doctype, out.doc)
|
|
184
187
|
},
|
|
185
188
|
onSuccess(data) {
|
|
186
189
|
out.doc = transform(data)
|
|
@@ -189,6 +192,8 @@ export function createDocumentResource(options, vm) {
|
|
|
189
192
|
onError(error) {
|
|
190
193
|
out.doc = JSON.parse(out.previousDoc)
|
|
191
194
|
options.setValue?.onError?.call(vm, error)
|
|
195
|
+
// revert data in list resource
|
|
196
|
+
revertRowInListResource(out.doctype, out.doc)
|
|
192
197
|
},
|
|
193
198
|
}
|
|
194
199
|
|
|
@@ -426,6 +431,7 @@ export function createListResource(options, vm, getResource) {
|
|
|
426
431
|
update,
|
|
427
432
|
reload,
|
|
428
433
|
setData,
|
|
434
|
+
transform,
|
|
429
435
|
})
|
|
430
436
|
|
|
431
437
|
function update(updatedOptions) {
|
|
@@ -467,9 +473,50 @@ export function createListResource(options, vm, getResource) {
|
|
|
467
473
|
listCache[cacheKey] = out
|
|
468
474
|
}
|
|
469
475
|
|
|
476
|
+
listResources[out.doctype] = listResources[out.doctype] || []
|
|
477
|
+
listResources[out.doctype].push(out)
|
|
478
|
+
|
|
470
479
|
return out
|
|
471
480
|
}
|
|
472
481
|
|
|
482
|
+
function updateRowInListResource(doctype, doc) {
|
|
483
|
+
let resources = listResources[doctype]
|
|
484
|
+
for (let resource of resources) {
|
|
485
|
+
if (resource.originalData) {
|
|
486
|
+
for (let row of resource.originalData) {
|
|
487
|
+
if (row.name && row.name == doc.name) {
|
|
488
|
+
let previousRowData = JSON.stringify(row)
|
|
489
|
+
for (let key in row) {
|
|
490
|
+
if (key in doc) {
|
|
491
|
+
row[key] = doc[key]
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
row._previousData = previousRowData
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
resource.data = resource.transform(resource.originalData)
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
function revertRowInListResource(doctype, doc) {
|
|
503
|
+
let resources = listResources[doctype]
|
|
504
|
+
for (let resource of resources) {
|
|
505
|
+
if (resource.originalData) {
|
|
506
|
+
for (let row of resource.originalData) {
|
|
507
|
+
if (row.name && row.name == doc.name) {
|
|
508
|
+
let previousRowData = JSON.parse(row._previousData)
|
|
509
|
+
for (let key in row) {
|
|
510
|
+
row[key] = previousRowData[key]
|
|
511
|
+
}
|
|
512
|
+
delete row._previousData
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
resource.data = resource.transform(resource.originalData)
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
473
520
|
function createResourceForOptions(options, vm, getResource) {
|
|
474
521
|
if (options.type === 'document') {
|
|
475
522
|
return createDocumentResource(options, vm, getResource)
|
package/src/utils/socketio.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import io from 'socket.io-client
|
|
1
|
+
import { io } from 'socket.io-client'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
let
|
|
5
|
-
let
|
|
6
|
-
let
|
|
7
|
-
let
|
|
3
|
+
function initSocket() {
|
|
4
|
+
let host = window.location.hostname
|
|
5
|
+
let port = window.location.port ? ':9000' : ''
|
|
6
|
+
let protocol = port ? 'http' : 'https'
|
|
7
|
+
let url = `${protocol}://${host}${port}`
|
|
8
|
+
return io(url)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let socket = initSocket()
|
|
8
12
|
|
|
9
13
|
export default socket
|