@ditojs/admin 2.0.1 → 2.0.2
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/dist/dito-admin.es.js +321 -319
- package/dist/dito-admin.umd.js +4 -4
- package/package.json +3 -4
- package/src/components/DitoTreeItem.vue +21 -20
- package/src/types/TypeList.vue +70 -69
- package/src/types/TypeUpload.vue +35 -34
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ditojs/admin",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Dito.js Admin is a schema based admin interface for Dito.js Server, featuring auto-generated views and forms and built with Vue.js",
|
|
6
6
|
"repository": "https://github.com/ditojs/dito/tree/master/packages/admin",
|
|
@@ -62,10 +62,9 @@
|
|
|
62
62
|
"filesize": "^10.0.7",
|
|
63
63
|
"filesize-parser": "^1.5.0",
|
|
64
64
|
"nanoid": "^4.0.2",
|
|
65
|
-
"sortablejs": "^1.15.0",
|
|
66
|
-
"sortablejs-vue3": "^1.2.9",
|
|
67
65
|
"tinycolor2": "^1.6.0",
|
|
68
66
|
"vue": "^3.2.47",
|
|
67
|
+
"vue-draggable-plus": "^0.1.1",
|
|
69
68
|
"vue-multiselect": "^3.0.0-beta.1",
|
|
70
69
|
"vue-router": "^4.1.6",
|
|
71
70
|
"vue-upload-component": "^3.1.8"
|
|
@@ -81,7 +80,7 @@
|
|
|
81
80
|
"vite": "^4.2.1"
|
|
82
81
|
},
|
|
83
82
|
"types": "types",
|
|
84
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "3e7213fbe25c5697f4f11dada830037934e396c8",
|
|
85
84
|
"scripts": {
|
|
86
85
|
"build": "vite build",
|
|
87
86
|
"watch": "yarn build --mode 'development' --watch",
|
|
@@ -60,29 +60,30 @@
|
|
|
60
60
|
:store="store"
|
|
61
61
|
:disabled="disabled"
|
|
62
62
|
)
|
|
63
|
-
vue-
|
|
63
|
+
vue-draggable(
|
|
64
64
|
v-if="childrenSchema"
|
|
65
65
|
v-show="opened"
|
|
66
|
-
:
|
|
67
|
-
:
|
|
68
|
-
:itemKey="item => getItemUid(childrenSchema, item.data)"
|
|
66
|
+
:modelValue="updateOrder(childrenSchema, childrenList)"
|
|
67
|
+
@update:modelValue="value => childrenList = value"
|
|
69
68
|
@start="onStartDrag"
|
|
70
69
|
@end="onEndDrag($event, childrenSchema)"
|
|
70
|
+
v-bind="getDragOptions(childrenDraggable, true)"
|
|
71
71
|
)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
72
|
+
dito-tree-item(
|
|
73
|
+
v-for="(item, index) in childrenItems"
|
|
74
|
+
:key="getItemUid(childrenSchema, item.data)"
|
|
75
|
+
:schema="childrenSchema"
|
|
76
|
+
:dataPath="getItemDataPath(childrenSchema, index)"
|
|
77
|
+
:data="item.data"
|
|
78
|
+
:path="item.path"
|
|
79
|
+
:open="item.open"
|
|
80
|
+
:active="item.active"
|
|
81
|
+
:draggable="childrenDraggable"
|
|
82
|
+
:label="getItemLabel(childrenSchema, item.data, { index })"
|
|
83
|
+
:level="level + 1"
|
|
84
|
+
)
|
|
85
|
+
//- TODO: Convert dito-tree-item to use dito-label internally, and then
|
|
86
|
+
//- pass `asObject: true` in the `getItemLabel()` call above.
|
|
86
87
|
</template>
|
|
87
88
|
|
|
88
89
|
<style lang="sass">
|
|
@@ -151,7 +152,7 @@
|
|
|
151
152
|
</style>
|
|
152
153
|
|
|
153
154
|
<script>
|
|
154
|
-
import {
|
|
155
|
+
import { VueDraggable } from 'vue-draggable-plus'
|
|
155
156
|
import DitoComponent from '../DitoComponent.js'
|
|
156
157
|
import OrderedMixin from '../mixins/OrderedMixin.js'
|
|
157
158
|
import { appendDataPath } from '../utils/data.js'
|
|
@@ -160,7 +161,7 @@ import { getNamedSchemas, hasFormSchema } from '../utils/schema.js'
|
|
|
160
161
|
|
|
161
162
|
// @vue/component
|
|
162
163
|
export default DitoComponent.component('dito-tree-item', {
|
|
163
|
-
components: {
|
|
164
|
+
components: { VueDraggable },
|
|
164
165
|
mixins: [OrderedMixin],
|
|
165
166
|
inject: ['container'],
|
|
166
167
|
|
package/src/types/TypeList.vue
CHANGED
|
@@ -38,86 +38,87 @@
|
|
|
38
38
|
:columns="columns"
|
|
39
39
|
:hasEditButtons="hasEditButtons"
|
|
40
40
|
)
|
|
41
|
-
vue-
|
|
41
|
+
vue-draggable(
|
|
42
42
|
tag="tbody"
|
|
43
|
-
:
|
|
44
|
-
:
|
|
45
|
-
:itemKey="item => getItemUid(schema, item)"
|
|
43
|
+
:modelValue="updateOrder(sourceSchema, listData, paginationRange)"
|
|
44
|
+
@update:modelValue="value => listData = value"
|
|
46
45
|
@start="onStartDrag"
|
|
47
46
|
@end="onEndDrag"
|
|
47
|
+
:v-bind="getDragOptions(draggable)"
|
|
48
48
|
)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
v-for="column in columns"
|
|
56
|
-
)
|
|
57
|
-
dito-table-cell(
|
|
58
|
-
v-if="shouldRender(column)"
|
|
59
|
-
:key="column.name"
|
|
60
|
-
:class="getCellClass(column)"
|
|
61
|
-
:cell="column"
|
|
62
|
-
:schema="schema"
|
|
63
|
-
:dataPath="getDataPath(index)"
|
|
64
|
-
:data="item"
|
|
65
|
-
:meta="nestedMeta"
|
|
66
|
-
:store="store"
|
|
67
|
-
:nested="false"
|
|
68
|
-
:disabled="disabled || isLoading"
|
|
69
|
-
)
|
|
49
|
+
tr(
|
|
50
|
+
v-for="item, index in listData"
|
|
51
|
+
:key="getItemUid(schema, item)"
|
|
52
|
+
:id="getDataPath(index)"
|
|
53
|
+
)
|
|
54
|
+
template(v-if="columns")
|
|
70
55
|
template(
|
|
71
|
-
v-
|
|
72
|
-
)
|
|
73
|
-
td
|
|
74
|
-
dito-schema-inlined(
|
|
75
|
-
v-if="isInlined"
|
|
76
|
-
:label="getItemLabel(schema, item, { index, asObject: true })"
|
|
77
|
-
:schema="getItemFormSchema(schema, item, context)"
|
|
78
|
-
:dataPath="getDataPath(index)"
|
|
79
|
-
:data="item"
|
|
80
|
-
:meta="nestedMeta"
|
|
81
|
-
:store="getChildStore(index)"
|
|
82
|
-
:disabled="disabled || isLoading"
|
|
83
|
-
:collapsed="collapsed"
|
|
84
|
-
:collapsible="collapsible"
|
|
85
|
-
:deletable="deletable"
|
|
86
|
-
:draggable="draggable"
|
|
87
|
-
:editable="editable"
|
|
88
|
-
:editPath="getEditPath(item, index)"
|
|
89
|
-
@delete="deleteItem(item, index)"
|
|
90
|
-
)
|
|
91
|
-
component(
|
|
92
|
-
v-else-if="schema.component"
|
|
93
|
-
:is="schema.component"
|
|
94
|
-
:dataPath="getDataPath(index)"
|
|
95
|
-
:data="item"
|
|
96
|
-
:nested="false"
|
|
97
|
-
)
|
|
98
|
-
span(
|
|
99
|
-
v-else-if="render"
|
|
100
|
-
v-html="render(getContext(item, index))"
|
|
101
|
-
)
|
|
102
|
-
span(
|
|
103
|
-
v-else
|
|
104
|
-
v-html="getItemLabel(schema, item, { index })"
|
|
105
|
-
)
|
|
106
|
-
td.dito-cell-edit-buttons(
|
|
107
|
-
v-if="hasCellEditButtons"
|
|
56
|
+
v-for="column in columns"
|
|
108
57
|
)
|
|
109
|
-
dito-
|
|
110
|
-
|
|
111
|
-
:
|
|
112
|
-
:
|
|
113
|
-
:
|
|
58
|
+
dito-table-cell(
|
|
59
|
+
v-if="shouldRender(column)"
|
|
60
|
+
:key="column.name"
|
|
61
|
+
:class="getCellClass(column)"
|
|
62
|
+
:cell="column"
|
|
63
|
+
:schema="schema"
|
|
64
|
+
:dataPath="getDataPath(index)"
|
|
65
|
+
:data="item"
|
|
66
|
+
:meta="nestedMeta"
|
|
67
|
+
:store="store"
|
|
68
|
+
:nested="false"
|
|
69
|
+
:disabled="disabled || isLoading"
|
|
70
|
+
)
|
|
71
|
+
template(
|
|
72
|
+
v-else
|
|
73
|
+
)
|
|
74
|
+
td
|
|
75
|
+
dito-schema-inlined(
|
|
76
|
+
v-if="isInlined"
|
|
77
|
+
:label="getItemLabel(schema, item, { index, asObject: true })"
|
|
114
78
|
:schema="getItemFormSchema(schema, item, context)"
|
|
115
79
|
:dataPath="getDataPath(index)"
|
|
116
80
|
:data="item"
|
|
117
81
|
:meta="nestedMeta"
|
|
118
82
|
:store="getChildStore(index)"
|
|
83
|
+
:disabled="disabled || isLoading"
|
|
84
|
+
:collapsed="collapsed"
|
|
85
|
+
:collapsible="collapsible"
|
|
86
|
+
:deletable="deletable"
|
|
87
|
+
:draggable="draggable"
|
|
88
|
+
:editable="editable"
|
|
89
|
+
:editPath="getEditPath(item, index)"
|
|
119
90
|
@delete="deleteItem(item, index)"
|
|
120
91
|
)
|
|
92
|
+
component(
|
|
93
|
+
v-else-if="schema.component"
|
|
94
|
+
:is="schema.component"
|
|
95
|
+
:dataPath="getDataPath(index)"
|
|
96
|
+
:data="item"
|
|
97
|
+
:nested="false"
|
|
98
|
+
)
|
|
99
|
+
span(
|
|
100
|
+
v-else-if="render"
|
|
101
|
+
v-html="render(getContext(item, index))"
|
|
102
|
+
)
|
|
103
|
+
span(
|
|
104
|
+
v-else
|
|
105
|
+
v-html="getItemLabel(schema, item, { index })"
|
|
106
|
+
)
|
|
107
|
+
td.dito-cell-edit-buttons(
|
|
108
|
+
v-if="hasCellEditButtons"
|
|
109
|
+
)
|
|
110
|
+
dito-edit-buttons(
|
|
111
|
+
:deletable="deletable"
|
|
112
|
+
:draggable="draggable"
|
|
113
|
+
:editable="editable"
|
|
114
|
+
:editPath="getEditPath(item, index)"
|
|
115
|
+
:schema="getItemFormSchema(schema, item, context)"
|
|
116
|
+
:dataPath="getDataPath(index)"
|
|
117
|
+
:data="item"
|
|
118
|
+
:meta="nestedMeta"
|
|
119
|
+
:store="getChildStore(index)"
|
|
120
|
+
@delete="deleteItem(item, index)"
|
|
121
|
+
)
|
|
121
122
|
//- Render create buttons inside table when not in a single component view:
|
|
122
123
|
tfoot(
|
|
123
124
|
v-if="hasListButtons && !single"
|
|
@@ -175,11 +176,11 @@
|
|
|
175
176
|
</style>
|
|
176
177
|
|
|
177
178
|
<script>
|
|
179
|
+
import { VueDraggable } from 'vue-draggable-plus'
|
|
178
180
|
import TypeComponent from '../TypeComponent.js'
|
|
179
181
|
import DitoContext from '../DitoContext.js'
|
|
180
182
|
import SourceMixin from '../mixins/SourceMixin.js'
|
|
181
183
|
import OrderedMixin from '../mixins/OrderedMixin.js'
|
|
182
|
-
import { Sortable as VueSortable } from 'sortablejs-vue3'
|
|
183
184
|
import {
|
|
184
185
|
getNamedSchemas, getViewEditPath,
|
|
185
186
|
resolveSchemaComponent, resolveSchemaComponents
|
|
@@ -190,7 +191,7 @@ import { pickBy, equals, hyphenate } from '@ditojs/utils'
|
|
|
190
191
|
|
|
191
192
|
// @vue/component
|
|
192
193
|
export default TypeComponent.register('list', {
|
|
193
|
-
components: {
|
|
194
|
+
components: { VueDraggable },
|
|
194
195
|
mixins: [SourceMixin, OrderedMixin],
|
|
195
196
|
|
|
196
197
|
getSourceType(type) {
|
package/src/types/TypeUpload.vue
CHANGED
|
@@ -12,41 +12,42 @@
|
|
|
12
12
|
span Status
|
|
13
13
|
th
|
|
14
14
|
span
|
|
15
|
-
vue-
|
|
15
|
+
vue-draggable(
|
|
16
16
|
tag="tbody"
|
|
17
|
-
:list="files"
|
|
18
|
-
:options="getDragOptions(draggable)"
|
|
19
|
-
itemKey="key"
|
|
20
17
|
@start="onStartDrag"
|
|
21
18
|
@end="onEndDrag"
|
|
19
|
+
v-model="files"
|
|
20
|
+
v-bind="getDragOptions(draggable)"
|
|
22
21
|
)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
template(v-else)
|
|
36
|
-
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
)
|
|
22
|
+
tr(
|
|
23
|
+
v-for="(file, index) in files"
|
|
24
|
+
:key="file.key"
|
|
25
|
+
)
|
|
26
|
+
td(v-html="renderFile(file, index)")
|
|
27
|
+
td {{ formatFileSize(file.size) }}
|
|
28
|
+
td
|
|
29
|
+
template(v-if="file.upload")
|
|
30
|
+
template(v-if="file.upload.error")
|
|
31
|
+
| Error: {{ file.upload.error }}
|
|
32
|
+
template(v-else-if="file.upload.active")
|
|
33
|
+
| Uploading...
|
|
34
|
+
template(v-else-if="file.upload.success")
|
|
35
|
+
| Uploaded
|
|
36
|
+
template(v-else)
|
|
37
|
+
| Stored
|
|
38
|
+
td.dito-cell-edit-buttons
|
|
39
|
+
.dito-buttons.dito-buttons-round
|
|
40
|
+
//- Firefox doesn't like <button> here, so use <a> instead:
|
|
41
|
+
a.dito-button(
|
|
42
|
+
v-if="draggable"
|
|
43
|
+
v-bind="getButtonAttributes(verbs.drag)"
|
|
44
|
+
)
|
|
45
|
+
button.dito-button(
|
|
46
|
+
v-if="deletable"
|
|
47
|
+
type="button"
|
|
48
|
+
@click="deleteFile(file, index)"
|
|
49
|
+
v-bind="getButtonAttributes(verbs.delete)"
|
|
50
|
+
)
|
|
50
51
|
tfoot
|
|
51
52
|
tr
|
|
52
53
|
td(:colspan="4")
|
|
@@ -106,11 +107,11 @@
|
|
|
106
107
|
</style>
|
|
107
108
|
|
|
108
109
|
<script>
|
|
110
|
+
import VueUpload from 'vue-upload-component'
|
|
111
|
+
import { VueDraggable } from 'vue-draggable-plus'
|
|
109
112
|
import TypeComponent from '../TypeComponent.js'
|
|
110
113
|
import DitoContext from '../DitoContext.js'
|
|
111
114
|
import OrderedMixin from '../mixins/OrderedMixin.js'
|
|
112
|
-
import VueUpload from 'vue-upload-component'
|
|
113
|
-
import { Sortable as VueSortable } from 'sortablejs-vue3'
|
|
114
115
|
import parseFileSize from 'filesize-parser'
|
|
115
116
|
import { getSchemaAccessor } from '../utils/accessor.js'
|
|
116
117
|
import { formatFileSize } from '../utils/units.js'
|
|
@@ -119,7 +120,7 @@ import { isArray, asArray, escapeHtml } from '@ditojs/utils'
|
|
|
119
120
|
|
|
120
121
|
// @vue/component
|
|
121
122
|
export default TypeComponent.register('upload', {
|
|
122
|
-
components: { VueUpload,
|
|
123
|
+
components: { VueUpload, VueDraggable },
|
|
123
124
|
mixins: [OrderedMixin],
|
|
124
125
|
|
|
125
126
|
data() {
|