@vc-shell/framework 1.0.219 → 1.0.221
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/CHANGELOG.md +26 -0
- package/core/types/index.ts +6 -0
- package/dist/core/types/index.d.ts +6 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/framework.js +14196 -13907
- package/dist/index.css +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/locales/en.json +2 -1
- package/dist/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts.map +1 -1
- package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/props.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts +6 -15
- package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/useTableTemplates/index.d.ts +1 -0
- package/dist/shared/modules/dynamic/composables/useTableTemplates/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts +1 -1
- package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/factories/types/index.d.ts +2 -2
- package/dist/shared/modules/dynamic/factories/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +2 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +2 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/index.d.ts +70 -20
- package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/models.d.ts +1 -1
- package/dist/shared/modules/dynamic/types/models.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/index.d.ts +1 -0
- package/dist/ui/components/atoms/index.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +6 -0
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-status/vc-status.stories.d.ts +7 -7
- package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts +2 -2
- package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-tooltip/index.d.ts +2 -0
- package/dist/ui/components/atoms/vc-tooltip/index.d.ts.map +1 -0
- package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts +41 -0
- package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts.map +1 -0
- package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts +6 -0
- package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts +3 -0
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts +30 -16
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts +35 -0
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.stories.d.ts +63 -63
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts +9 -9
- package/dist/ui/components/molecules/vc-select/vc-select.stories.d.ts +90 -90
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts +9 -9
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts +1 -0
- package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue.d.ts +26 -0
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts +10 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts +315 -15
- package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +63 -3
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/shared/components/app-switcher/composables/useAppSwitcher/index.ts +0 -2
- package/shared/components/blade-navigation/composables/useBladeNavigation/index.ts +1 -2
- package/shared/modules/dynamic/components/fields/Button.ts +5 -3
- package/shared/modules/dynamic/components/fields/Fieldset.ts +2 -19
- package/shared/modules/dynamic/components/fields/InputCurrency.ts +18 -2
- package/shared/modules/dynamic/components/fields/InputField.ts +5 -1
- package/shared/modules/dynamic/components/fields/MultivalueField.ts +4 -1
- package/shared/modules/dynamic/components/fields/SelectField.ts +4 -1
- package/shared/modules/dynamic/components/fields/Table.ts +52 -6
- package/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.ts +1 -63
- package/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/InputField.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/SelectField.stories.ts +13 -0
- package/shared/modules/dynamic/composables/useTableTemplates/index.ts +2 -0
- package/shared/modules/dynamic/composables/useToolbarReducer/index.ts +30 -17
- package/shared/modules/dynamic/factories/types/index.ts +5 -2
- package/shared/modules/dynamic/pages/dynamic-blade-form.vue +1 -1
- package/shared/modules/dynamic/pages/dynamic-blade-list.vue +3 -1
- package/shared/modules/dynamic/types/index.ts +78 -26
- package/shared/modules/dynamic/types/models.ts +3 -1
- package/ui/components/atoms/index.ts +1 -0
- package/ui/components/atoms/vc-label/vc-label.vue +10 -29
- package/ui/components/atoms/vc-status/vc-status.vue +6 -3
- package/ui/components/atoms/vc-tooltip/index.ts +1 -0
- package/ui/components/atoms/vc-tooltip/vc-tooltip.vue +57 -0
- package/ui/components/molecules/vc-input/vc-input.vue +7 -3
- package/ui/components/molecules/vc-input-currency/vc-input-currency.vue +53 -1
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +5 -1
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +1 -0
- package/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue +1 -0
- package/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue +46 -0
- package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +108 -23
- package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +6 -2
- package/ui/components/organisms/vc-table/vc-table.vue +156 -70
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
3
|
v-loading="unref(loading) || columnsInit"
|
|
4
|
-
class="tw-relative tw-overflow-hidden tw-flex tw-flex-col tw-grow"
|
|
4
|
+
class="tw-relative tw-overflow-hidden tw-flex tw-flex-col tw-grow tw-basis-0 tw-border tw-border-[color:#eef0f2] tw-border-solid tw-border-t-0"
|
|
5
5
|
>
|
|
6
6
|
<!-- Header slot with filter and searchbar -->
|
|
7
7
|
<slot
|
|
8
|
-
v-if="
|
|
9
|
-
($slots['header'] || header) &&
|
|
10
|
-
((items && items.length && !columnsInit) || searchValue || searchValue === '' || activeFilterCount)
|
|
11
|
-
"
|
|
8
|
+
v-if="($slots['header'] || header) && (!columnsInit || searchValue || searchValue === '' || activeFilterCount)"
|
|
12
9
|
name="header"
|
|
13
10
|
>
|
|
14
11
|
<div class="tw-shrink-0 tw-flex tw-items-center tw-justify-between tw-p-4">
|
|
@@ -61,7 +58,6 @@
|
|
|
61
58
|
<div class="tw-flex tw-relative tw-overflow-hidden tw-grow">
|
|
62
59
|
<!-- Table scroll container -->
|
|
63
60
|
<VcContainer
|
|
64
|
-
v-if="items && items.length && !columnsInit"
|
|
65
61
|
ref="scrollContainer"
|
|
66
62
|
:no-padding="true"
|
|
67
63
|
class="tw-grow tw-basis-0 tw-relative"
|
|
@@ -96,15 +92,15 @@
|
|
|
96
92
|
<table
|
|
97
93
|
v-else
|
|
98
94
|
ref="tableRef"
|
|
99
|
-
class="[border-spacing:0] tw-border-collapse tw-relative tw-pt-[43px] tw-table-fixed tw-box-border tw-w-full"
|
|
95
|
+
class="[border-spacing:0] tw-border-collapse tw-relative tw-pt-[43px] tw-table-fixed tw-box-border tw-w-full tw-h-full"
|
|
100
96
|
:class="{
|
|
101
97
|
'vc-table_empty': !items || !items.length,
|
|
102
98
|
'vc-table_multiselect': multiselect,
|
|
103
99
|
}"
|
|
104
100
|
>
|
|
105
101
|
<thead
|
|
106
|
-
v-if="filteredCols"
|
|
107
|
-
class="vc-table__header tw-
|
|
102
|
+
v-if="filteredCols.length"
|
|
103
|
+
class="vc-table__header tw-sticky tw-top-0 tw-bg-[#f9f9f9] tw-z-[1] tw-box-border"
|
|
108
104
|
@mouseenter="handleHeaderMouseOver(true)"
|
|
109
105
|
@mouseleave="handleHeaderMouseOver(false)"
|
|
110
106
|
>
|
|
@@ -155,6 +151,11 @@
|
|
|
155
151
|
:class="item.align ? tableAlignment[item.align as keyof typeof tableAlignment] : ''"
|
|
156
152
|
>
|
|
157
153
|
<div class="tw-truncate">
|
|
154
|
+
<span
|
|
155
|
+
v-if="editing && item.rules?.required"
|
|
156
|
+
class="tw-text-[color:var(--label-required-color)] tw-mr-1"
|
|
157
|
+
>*</span
|
|
158
|
+
>
|
|
158
159
|
<slot :name="`header_${item.id}`">{{ item.title }}</slot>
|
|
159
160
|
</div>
|
|
160
161
|
<div
|
|
@@ -201,7 +202,15 @@
|
|
|
201
202
|
@on-active="handleColumnSwitcher"
|
|
202
203
|
></VcTableColumnSwitcher>
|
|
203
204
|
</div>
|
|
205
|
+
<th
|
|
206
|
+
v-if="editing && removeRowButton"
|
|
207
|
+
width="90px"
|
|
208
|
+
class="tw-w-[90px] tw-h-[42px] tw-bg-[#f9f9f9] !tw-border-0 tw-shadow-[inset_0px_1px_0px_#eaedf3,_inset_0px_-1px_0px_#eaedf3] tw-box-border tw-sticky tw-top-0 tw-select-none tw-overflow-hidden tw-z-[1]"
|
|
209
|
+
>
|
|
210
|
+
{{ $t("COMPONENTS.ORGANISMS.VC_TABLE.ACTIONS") }}
|
|
211
|
+
</th>
|
|
204
212
|
</tr>
|
|
213
|
+
|
|
205
214
|
<div
|
|
206
215
|
ref="resizer"
|
|
207
216
|
class="tw-w-px tw-absolute tw-z-10 tw-hidden tw-h-full tw-bg-[#e5e7eb] tw-cursor-col-resize"
|
|
@@ -236,8 +245,8 @@
|
|
|
236
245
|
</div>
|
|
237
246
|
</div>
|
|
238
247
|
<tbody
|
|
239
|
-
v-if="items"
|
|
240
|
-
class="vc-table__body"
|
|
248
|
+
v-if="items && items.length && !columnsInit"
|
|
249
|
+
class="vc-table__body tw-block tw-overflow-auto"
|
|
241
250
|
:class="{ 'tw-translate-y-[60px]': selectAll && showSelectionChoice }"
|
|
242
251
|
>
|
|
243
252
|
<tr
|
|
@@ -342,7 +351,7 @@
|
|
|
342
351
|
:class="[
|
|
343
352
|
cell.class,
|
|
344
353
|
{
|
|
345
|
-
'last:tw-w-full': cell.id === filteredCols[filteredCols.length - 1].id,
|
|
354
|
+
// 'last:tw-w-full': cell.id === filteredCols[filteredCols.length - 1].id,
|
|
346
355
|
},
|
|
347
356
|
]"
|
|
348
357
|
:style="{ maxWidth: cell.width, width: cell.width }"
|
|
@@ -351,69 +360,125 @@
|
|
|
351
360
|
:name="`item_${cell.id}`"
|
|
352
361
|
:item="item"
|
|
353
362
|
:cell="cell"
|
|
363
|
+
:index="itemIndex"
|
|
354
364
|
>
|
|
355
365
|
<VcTableCell
|
|
356
366
|
v-if="typeof item === 'object'"
|
|
357
367
|
:cell="cell"
|
|
358
368
|
:item="item"
|
|
359
|
-
:
|
|
369
|
+
:editing="editing"
|
|
370
|
+
:index="itemIndex"
|
|
360
371
|
:width="
|
|
361
372
|
calculateElWidth(
|
|
362
373
|
`${(typeof item === 'object' && 'id' in item && item.id) || itemIndex}_${cell.id}`,
|
|
363
374
|
)
|
|
364
375
|
"
|
|
365
376
|
@update="$emit('onEditComplete', { event: $event, index: itemIndex })"
|
|
377
|
+
@blur="$emit('onCellBlur', $event)"
|
|
366
378
|
></VcTableCell>
|
|
367
379
|
</slot>
|
|
368
380
|
</td>
|
|
381
|
+
<td
|
|
382
|
+
v-if="editing && removeRowButton"
|
|
383
|
+
class="tw-box-border tw-overflow-hidden tw-px-3 tw-w-[90px]"
|
|
384
|
+
width="90px"
|
|
385
|
+
>
|
|
386
|
+
<div class="tw-w-full tw-flex tw-justify-center tw-items-center">
|
|
387
|
+
<div
|
|
388
|
+
class="tw-h-[26px] tw-w-[26px] tw-inline-flex tw-items-center tw-justify-center tw-outline-none"
|
|
389
|
+
@click="
|
|
390
|
+
$emit('onRowRemove', {
|
|
391
|
+
index: itemIndex,
|
|
392
|
+
})
|
|
393
|
+
"
|
|
394
|
+
>
|
|
395
|
+
<svg
|
|
396
|
+
width="12"
|
|
397
|
+
height="12"
|
|
398
|
+
viewBox="0 0 12 12"
|
|
399
|
+
fill="none"
|
|
400
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
401
|
+
>
|
|
402
|
+
<path
|
|
403
|
+
d="M7.27173 5.99939L11.1499 2.12967C11.3198 1.95981 11.4152 1.72943 11.4152 1.48922C11.4152 1.24901 11.3198 1.01863 11.1499 0.848777C10.9801 0.67892 10.7497 0.583496 10.5096 0.583496C10.2694 0.583496 10.0391 0.67892 9.86922 0.848777L6.00004 4.72752L2.13086 0.848777C1.96103 0.67892 1.73069 0.583496 1.49051 0.583496C1.25033 0.583496 1.01999 0.67892 0.850156 0.848777C0.680324 1.01863 0.584913 1.24901 0.584913 1.48922C0.584913 1.72943 0.680324 1.95981 0.850156 2.12967L4.72835 5.99939L0.850156 9.86912C0.765622 9.95298 0.698526 10.0527 0.652737 10.1627C0.606948 10.2726 0.583374 10.3905 0.583374 10.5096C0.583374 10.6286 0.606948 10.7465 0.652737 10.8565C0.698526 10.9664 0.765622 11.0662 0.850156 11.15C0.934 11.2346 1.03375 11.3017 1.14366 11.3475C1.25356 11.3933 1.37145 11.4168 1.49051 11.4168C1.60957 11.4168 1.72746 11.3933 1.83736 11.3475C1.94727 11.3017 2.04702 11.2346 2.13086 11.15L6.00004 7.27126L9.86922 11.15C9.95306 11.2346 10.0528 11.3017 10.1627 11.3475C10.2726 11.3933 10.3905 11.4168 10.5096 11.4168C10.6286 11.4168 10.7465 11.3933 10.8564 11.3475C10.9663 11.3017 11.0661 11.2346 11.1499 11.15C11.2345 11.0662 11.3016 10.9664 11.3473 10.8565C11.3931 10.7465 11.4167 10.6286 11.4167 10.5096C11.4167 10.3905 11.3931 10.2726 11.3473 10.1627C11.3016 10.0527 11.2345 9.95298 11.1499 9.86912L7.27173 5.99939Z"
|
|
404
|
+
fill="#6E8BA5"
|
|
405
|
+
/>
|
|
406
|
+
</svg>
|
|
407
|
+
</div>
|
|
408
|
+
</div>
|
|
409
|
+
</td>
|
|
369
410
|
</tr>
|
|
411
|
+
<VcTableAddNew
|
|
412
|
+
:editing="editing"
|
|
413
|
+
:add-new-row-button="addNewRowButton"
|
|
414
|
+
@on-add-new-row="$emit('onAddNewRow')"
|
|
415
|
+
/>
|
|
416
|
+
</tbody>
|
|
417
|
+
<tbody
|
|
418
|
+
v-else
|
|
419
|
+
class="tw-table tw-overflow-auto tw-h-[calc(100%-42px)]"
|
|
420
|
+
>
|
|
421
|
+
<tr class="tw-h-full">
|
|
422
|
+
<th :colspan="colspan">
|
|
423
|
+
<!-- Empty table view -->
|
|
424
|
+
<template v-if="!(items && items.length && !columnsInit)">
|
|
425
|
+
<div>
|
|
426
|
+
<slot
|
|
427
|
+
v-if="searchValue || searchValue === '' || activeFilterCount"
|
|
428
|
+
name="notfound"
|
|
429
|
+
>
|
|
430
|
+
<div
|
|
431
|
+
class="tw-w-full tw-h-full tw-box-border tw-flex tw-flex-col tw-items-center tw-justify-center"
|
|
432
|
+
>
|
|
433
|
+
<img
|
|
434
|
+
v-if="notfound?.image"
|
|
435
|
+
:src="notfound.image"
|
|
436
|
+
/>
|
|
437
|
+
<div class="tw-m-4 vc-table__empty-text">
|
|
438
|
+
{{ notfound?.text || t("COMPONENTS.ORGANISMS.VC_TABLE.NOT_FOUND") }}
|
|
439
|
+
</div>
|
|
440
|
+
<VcButton
|
|
441
|
+
v-if="notfound?.action"
|
|
442
|
+
@click="notfound?.clickHandler"
|
|
443
|
+
>
|
|
444
|
+
{{ notfound.action }}
|
|
445
|
+
</VcButton>
|
|
446
|
+
</div>
|
|
447
|
+
</slot>
|
|
448
|
+
<slot
|
|
449
|
+
v-else
|
|
450
|
+
name="empty"
|
|
451
|
+
>
|
|
452
|
+
<div
|
|
453
|
+
class="tw-w-full tw-h-full tw-box-border tw-flex tw-flex-col tw-items-center tw-justify-center"
|
|
454
|
+
>
|
|
455
|
+
<img
|
|
456
|
+
v-if="empty?.image"
|
|
457
|
+
:src="empty.image"
|
|
458
|
+
/>
|
|
459
|
+
<div class="tw-m-4 tw-text-xl tw-font-medium">
|
|
460
|
+
{{ empty?.text || t("COMPONENTS.ORGANISMS.VC_TABLE.EMPTY") }}
|
|
461
|
+
</div>
|
|
462
|
+
<VcButton
|
|
463
|
+
v-if="empty?.action"
|
|
464
|
+
@click="empty?.clickHandler"
|
|
465
|
+
>
|
|
466
|
+
{{ empty.action }}
|
|
467
|
+
</VcButton>
|
|
468
|
+
</div>
|
|
469
|
+
</slot>
|
|
470
|
+
</div>
|
|
471
|
+
</template>
|
|
472
|
+
</th>
|
|
473
|
+
</tr>
|
|
474
|
+
<VcTableAddNew
|
|
475
|
+
:editing="editing"
|
|
476
|
+
:add-new-row-button="addNewRowButton"
|
|
477
|
+
@on-add-new-row="$emit('onAddNewRow')"
|
|
478
|
+
/>
|
|
370
479
|
</tbody>
|
|
371
480
|
</table>
|
|
372
481
|
</VcContainer>
|
|
373
|
-
|
|
374
|
-
<!-- Empty table view -->
|
|
375
|
-
<template v-else>
|
|
376
|
-
<slot
|
|
377
|
-
v-if="searchValue || searchValue === '' || activeFilterCount"
|
|
378
|
-
name="notfound"
|
|
379
|
-
>
|
|
380
|
-
<div class="tw-w-full tw-h-full tw-box-border tw-flex tw-flex-col tw-items-center tw-justify-center">
|
|
381
|
-
<img
|
|
382
|
-
v-if="notfound?.image"
|
|
383
|
-
:src="notfound.image"
|
|
384
|
-
/>
|
|
385
|
-
<div class="tw-m-4 vc-table__empty-text">
|
|
386
|
-
{{ notfound?.text || t("COMPONENTS.ORGANISMS.VC_TABLE.NOT_FOUND") }}
|
|
387
|
-
</div>
|
|
388
|
-
<VcButton
|
|
389
|
-
v-if="notfound?.action"
|
|
390
|
-
@click="notfound?.clickHandler"
|
|
391
|
-
>
|
|
392
|
-
{{ notfound.action }}
|
|
393
|
-
</VcButton>
|
|
394
|
-
</div>
|
|
395
|
-
</slot>
|
|
396
|
-
<slot
|
|
397
|
-
v-else
|
|
398
|
-
name="empty"
|
|
399
|
-
>
|
|
400
|
-
<div class="tw-w-full tw-h-full tw-box-border tw-flex tw-flex-col tw-items-center tw-justify-center">
|
|
401
|
-
<img
|
|
402
|
-
v-if="empty?.image"
|
|
403
|
-
:src="empty.image"
|
|
404
|
-
/>
|
|
405
|
-
<div class="tw-m-4 tw-text-xl tw-font-medium">
|
|
406
|
-
{{ empty?.text || t("COMPONENTS.ORGANISMS.VC_TABLE.EMPTY") }}
|
|
407
|
-
</div>
|
|
408
|
-
<VcButton
|
|
409
|
-
v-if="empty?.action"
|
|
410
|
-
@click="empty?.clickHandler"
|
|
411
|
-
>
|
|
412
|
-
{{ empty.action }}
|
|
413
|
-
</VcButton>
|
|
414
|
-
</div>
|
|
415
|
-
</slot>
|
|
416
|
-
</template>
|
|
417
482
|
</div>
|
|
418
483
|
|
|
419
484
|
<!-- Table footer -->
|
|
@@ -470,6 +535,7 @@ import VcTableMobileItem from "./_internal/vc-table-mobile-item/vc-table-mobile-
|
|
|
470
535
|
import * as _ from "lodash-es";
|
|
471
536
|
import "core-js/actual/array/to-spliced";
|
|
472
537
|
import "core-js/actual/array/to-sorted";
|
|
538
|
+
import VcTableAddNew from "./_internal/vc-table-add-new/vc-table-add-new.vue";
|
|
473
539
|
|
|
474
540
|
export interface StatusImage {
|
|
475
541
|
image?: string;
|
|
@@ -488,7 +554,7 @@ defineSlots<{
|
|
|
488
554
|
filters: (args: { closePanel: () => void }) => any;
|
|
489
555
|
"mobile-item": (args: { item: T }) => any;
|
|
490
556
|
[key: `header_${string}`]: (props: any) => any;
|
|
491
|
-
[key: `item_${string}`]: (args: { item: T; cell: ITableColumns }) => any;
|
|
557
|
+
[key: `item_${string}`]: (args: { item: T; cell: ITableColumns; index: number }) => any;
|
|
492
558
|
notfound: (props: any) => any;
|
|
493
559
|
empty: (props: any) => any;
|
|
494
560
|
footer: (props: any) => any;
|
|
@@ -522,7 +588,12 @@ const props = withDefaults(
|
|
|
522
588
|
stateKey: string;
|
|
523
589
|
selectAll?: boolean;
|
|
524
590
|
enableItemActions?: boolean;
|
|
525
|
-
|
|
591
|
+
editing?: boolean;
|
|
592
|
+
addNewRowButton?: {
|
|
593
|
+
show: boolean;
|
|
594
|
+
title: string;
|
|
595
|
+
};
|
|
596
|
+
removeRowButton?: boolean;
|
|
526
597
|
}>(),
|
|
527
598
|
{
|
|
528
599
|
items: () => [],
|
|
@@ -553,6 +624,9 @@ const emit = defineEmits<{
|
|
|
553
624
|
"row:reorder": [args: { dragIndex: number; dropIndex: number; value: T[] }];
|
|
554
625
|
"select:all": [values: boolean];
|
|
555
626
|
onEditComplete: [args: { event: { field: string; value: string | number }; index: number }];
|
|
627
|
+
onAddNewRow: [];
|
|
628
|
+
onRowRemove: [args: { index: number }];
|
|
629
|
+
onCellBlur: [args: { row: number | undefined; field: string }];
|
|
556
630
|
}>();
|
|
557
631
|
|
|
558
632
|
const { t } = useI18n({ useScope: "global" });
|
|
@@ -610,6 +684,10 @@ onBeforeUpdate(() => {
|
|
|
610
684
|
tooltipRefs.value = [];
|
|
611
685
|
});
|
|
612
686
|
|
|
687
|
+
const colspan = computed(() => {
|
|
688
|
+
return filteredCols.value.length + (props.multiselect ? 1 : 0) + (props.enableItemActions ? 1 : 0);
|
|
689
|
+
});
|
|
690
|
+
|
|
613
691
|
const sortDirection = computed(() => {
|
|
614
692
|
const entry = props.sort?.split(":");
|
|
615
693
|
return entry && entry.length === 2 && entry[1];
|
|
@@ -645,8 +723,9 @@ const mobileTemplateRenderer = ({ item }: { item: TableItem }) => {
|
|
|
645
723
|
watch(
|
|
646
724
|
() => props.items,
|
|
647
725
|
(newVal) => {
|
|
726
|
+
let cols: ITableColumns[] = [];
|
|
648
727
|
if (newVal && newVal.length) {
|
|
649
|
-
|
|
728
|
+
cols = Object.keys(newVal[0]).map((key) => {
|
|
650
729
|
return {
|
|
651
730
|
id: key,
|
|
652
731
|
// From camelCase to human readable with first letter capitalized
|
|
@@ -655,16 +734,16 @@ watch(
|
|
|
655
734
|
predefined: false,
|
|
656
735
|
};
|
|
657
736
|
});
|
|
737
|
+
}
|
|
658
738
|
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
739
|
+
const predefined = props.columns.map((item) => ({
|
|
740
|
+
...item,
|
|
741
|
+
predefined: true,
|
|
742
|
+
visible: typeof item.visible !== "undefined" ? item.visible : true,
|
|
743
|
+
}));
|
|
744
|
+
allColumns.value = _.unionBy(predefined, cols, "id");
|
|
665
745
|
|
|
666
|
-
|
|
667
|
-
}
|
|
746
|
+
restoreState();
|
|
668
747
|
columnsInit.value = false;
|
|
669
748
|
},
|
|
670
749
|
{ deep: true, immediate: true },
|
|
@@ -692,7 +771,7 @@ const tableAlignment = {
|
|
|
692
771
|
|
|
693
772
|
const headerCheckbox = computed({
|
|
694
773
|
get() {
|
|
695
|
-
return props.items ? selection.value.length === props.items.length : false;
|
|
774
|
+
return props.items && props.items.length ? selection.value.length === props.items.length : false;
|
|
696
775
|
},
|
|
697
776
|
set(checked: boolean) {
|
|
698
777
|
let _selected: T[] = [];
|
|
@@ -1111,7 +1190,7 @@ function restoreState() {
|
|
|
1111
1190
|
if (state.value && state.value.length) {
|
|
1112
1191
|
// Iterate over the state value and update corresponding columns in allColumns
|
|
1113
1192
|
for (const item of state.value) {
|
|
1114
|
-
const matchingColumn = allColumns.value.find((col) => col.id === item.id);
|
|
1193
|
+
const matchingColumn = _.cloneDeep(allColumns.value.find((col) => col.id === item.id));
|
|
1115
1194
|
if (matchingColumn) {
|
|
1116
1195
|
matchingColumn.width = item.width || matchingColumn.width;
|
|
1117
1196
|
matchingColumn.visible = item.visible;
|
|
@@ -1315,4 +1394,11 @@ $variants: (
|
|
|
1315
1394
|
@apply tw-shadow-[inset_0_2px_0_0_var(--row-drag-color)];
|
|
1316
1395
|
}
|
|
1317
1396
|
}
|
|
1397
|
+
|
|
1398
|
+
thead,
|
|
1399
|
+
tbody tr {
|
|
1400
|
+
display: table;
|
|
1401
|
+
width: 100%;
|
|
1402
|
+
table-layout: fixed;
|
|
1403
|
+
}
|
|
1318
1404
|
</style>
|