frappe-ui 0.0.38 → 0.0.43
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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "frappe-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.43",
|
|
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
|
|
@@ -70,12 +70,16 @@
|
|
|
70
70
|
</div>
|
|
71
71
|
</template>
|
|
72
72
|
<script>
|
|
73
|
-
import { Popover } from 'frappe-ui'
|
|
74
|
-
|
|
73
|
+
import { Popover, Dialog, Input, Button } from 'frappe-ui'
|
|
75
74
|
export default {
|
|
76
75
|
name: 'TipTapMenu',
|
|
77
76
|
props: ['editor', 'buttons'],
|
|
78
|
-
components: {
|
|
77
|
+
components: {
|
|
78
|
+
Popover,
|
|
79
|
+
Dialog,
|
|
80
|
+
Input,
|
|
81
|
+
Button,
|
|
82
|
+
},
|
|
79
83
|
data() {
|
|
80
84
|
return {
|
|
81
85
|
setLinkDialog: { url: '', show: false },
|
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
|
|
|
@@ -311,10 +316,12 @@ export function createListResource(options, vm, getResource) {
|
|
|
311
316
|
fields: options.fields,
|
|
312
317
|
filters: options.filters,
|
|
313
318
|
order_by: options.order_by,
|
|
314
|
-
start: options.start,
|
|
315
|
-
limit: options.limit,
|
|
319
|
+
start: options.start || 0,
|
|
320
|
+
limit: options.limit || 20,
|
|
316
321
|
originalData: null,
|
|
317
322
|
data: null,
|
|
323
|
+
next,
|
|
324
|
+
hasNextPage: true,
|
|
318
325
|
list: createResource(
|
|
319
326
|
{
|
|
320
327
|
method: 'frappe.client.get_list',
|
|
@@ -329,8 +336,15 @@ export function createListResource(options, vm, getResource) {
|
|
|
329
336
|
}
|
|
330
337
|
},
|
|
331
338
|
onSuccess(data) {
|
|
332
|
-
out.
|
|
333
|
-
|
|
339
|
+
if (data.length < out.limit) {
|
|
340
|
+
out.hasNextPage = false
|
|
341
|
+
}
|
|
342
|
+
if (!out.start || out.start == 0) {
|
|
343
|
+
out.originalData = data
|
|
344
|
+
} else if (out.start > 0) {
|
|
345
|
+
out.originalData = out.originalData.concat(data)
|
|
346
|
+
}
|
|
347
|
+
out.data = transform(out.originalData)
|
|
334
348
|
options.onSuccess?.call(vm, out.data)
|
|
335
349
|
},
|
|
336
350
|
onError: options.onError,
|
|
@@ -426,6 +440,7 @@ export function createListResource(options, vm, getResource) {
|
|
|
426
440
|
update,
|
|
427
441
|
reload,
|
|
428
442
|
setData,
|
|
443
|
+
transform,
|
|
429
444
|
})
|
|
430
445
|
|
|
431
446
|
function update(updatedOptions) {
|
|
@@ -449,6 +464,7 @@ export function createListResource(options, vm, getResource) {
|
|
|
449
464
|
}
|
|
450
465
|
|
|
451
466
|
function reload() {
|
|
467
|
+
out.start = 0
|
|
452
468
|
return out.list.fetch()
|
|
453
469
|
}
|
|
454
470
|
|
|
@@ -459,6 +475,11 @@ export function createListResource(options, vm, getResource) {
|
|
|
459
475
|
out.data = data
|
|
460
476
|
}
|
|
461
477
|
|
|
478
|
+
function next() {
|
|
479
|
+
out.start = out.start + out.limit
|
|
480
|
+
out.list.fetch()
|
|
481
|
+
}
|
|
482
|
+
|
|
462
483
|
// fetch list
|
|
463
484
|
out.list.fetch()
|
|
464
485
|
|
|
@@ -467,9 +488,50 @@ export function createListResource(options, vm, getResource) {
|
|
|
467
488
|
listCache[cacheKey] = out
|
|
468
489
|
}
|
|
469
490
|
|
|
491
|
+
listResources[out.doctype] = listResources[out.doctype] || []
|
|
492
|
+
listResources[out.doctype].push(out)
|
|
493
|
+
|
|
470
494
|
return out
|
|
471
495
|
}
|
|
472
496
|
|
|
497
|
+
function updateRowInListResource(doctype, doc) {
|
|
498
|
+
let resources = listResources[doctype]
|
|
499
|
+
for (let resource of resources) {
|
|
500
|
+
if (resource.originalData) {
|
|
501
|
+
for (let row of resource.originalData) {
|
|
502
|
+
if (row.name && row.name == doc.name) {
|
|
503
|
+
let previousRowData = JSON.stringify(row)
|
|
504
|
+
for (let key in row) {
|
|
505
|
+
if (key in doc) {
|
|
506
|
+
row[key] = doc[key]
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
row._previousData = previousRowData
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
resource.data = resource.transform(resource.originalData)
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
function revertRowInListResource(doctype, doc) {
|
|
518
|
+
let resources = listResources[doctype]
|
|
519
|
+
for (let resource of resources) {
|
|
520
|
+
if (resource.originalData) {
|
|
521
|
+
for (let row of resource.originalData) {
|
|
522
|
+
if (row.name && row.name == doc.name) {
|
|
523
|
+
let previousRowData = JSON.parse(row._previousData)
|
|
524
|
+
for (let key in row) {
|
|
525
|
+
row[key] = previousRowData[key]
|
|
526
|
+
}
|
|
527
|
+
delete row._previousData
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
resource.data = resource.transform(resource.originalData)
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
473
535
|
function createResourceForOptions(options, vm, getResource) {
|
|
474
536
|
if (options.type === 'document') {
|
|
475
537
|
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
|