lkt-table 1.2.0 → 1.2.1

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/style.css CHANGED
@@ -1 +1 @@
1
- .lkt-table-page,.lkt-table-page-content-wrapper{display:flex;width:100%;flex-direction:column;gap:var(--lkt-table-page-gap)}.lkt-table{width:var(--lkt-table-width);overflow-x:auto;font-family:var(--lkt-table-font-family),serif}.lkt-table>table{width:100%;max-width:100%;border-collapse:separate;border-radius:var(--lkt-table-border-radius);border-spacing:0}.lkt-table th,.lkt-table td{vertical-align:middle;text-align:var(--lkt-table-text-align);padding:var(--lkt-table-padding-row);font-size:var(--lkt-table-font-size-row);color:var(--lkt-table-color-row)}.lkt-table th{font-family:var(--lkt-table-font-family-header),serif;padding:var(--lkt-table-padding-header)}.lkt-table thead tr{background-color:var(--lkt-table-bg-header)}.lkt-table tbody tr{background-color:var(--lkt-table-bg-row)}.lkt-table tbody tr:nth-child(odd){background-color:var(--lkt-table-bg-row-odd)}.lkt-table [data-sort=asc]>div,.lkt-table [data-sort=desc]>div{display:inline-block}.lkt-table [data-sort=asc]>div:after,.lkt-table [data-sort=desc]>div:after{font-family:var(--lkt-table-font-family-sort-icon),serif;display:inline-block;font-size:var(--lkt-table-font-size-sort-icon)}.lkt-table [data-sort=asc]>div:after{content:var(--lkt-table-sort-icon-content-asc)}.lkt-table [data-sort=desc]>div:after{content:var(--lkt-table-sort-icon-content-desc)}.lkt-table td[data-role=drag-indicator],.lkt-table td[data-role=invalid-drag-indicator]{width:var(--lkt-table-width-drag);height:40px;padding:0!important;position:relative;background:#eee;cursor:pointer}.lkt-table td[data-role=drag-indicator]:before,.lkt-table td[data-role=invalid-drag-indicator]:before{content:"";display:block;background:#eee;width:18px;height:36px;margin:auto}.lkt-table td[data-role=drag-indicator]:after,.lkt-table td[data-role=invalid-drag-indicator]:after{content:"…";color:#000;display:block;position:absolute;top:50%;left:50%;font-weight:700;width:15px;height:7px;transform:rotate(90deg);transform-origin:center center}[data-lkt=empty-table]{border:1px solid #ddd;border-radius:var(--lkt-table-border-radius);width:100%;padding:10px;background-color:#f8f7e5;font-family:var(--lkt-table-font-family);font-size:13px;color:#444;text-align:var(--lkt-table-text-align)}.sortable-chosen{border:var(--lkt-table-border-sortable-chosen)}.sortable-chosen.ghost{background:var(--lkt-table-bg-sortable-chosen-ghost)}.lkt-table td.lkt-table-nav-cell{padding:0}.lkt-table-nav-container{display:flex;align-items:center;flex-direction:column;justify-content:center}.lkt-table-page-buttons{position:sticky;top:calc(-1 * var(--lkt-table-gap-buttons));display:flex;align-items:center;gap:var(--lkt-table-gap-buttons);transition:all linear .15s;background:transparent;z-index:2}.lkt-table-page-buttons-bottom{justify-content:center}.lkt-table-page-buttons>.switch-edition-mode{margin-left:auto}
1
+ .lkt-table-page,.lkt-table-page-content-wrapper{display:flex;width:100%;flex-direction:column;gap:var(--lkt-table-page-gap)}.lkt-table{width:var(--lkt-table-width);overflow-x:auto;font-family:var(--lkt-table-font-family),serif}.lkt-table>table{width:100%;max-width:100%;border-collapse:separate;border-radius:var(--lkt-table-border-radius);border-spacing:0}.lkt-table th,.lkt-table td{vertical-align:middle;text-align:var(--lkt-table-text-align);padding:var(--lkt-table-padding-row);font-size:var(--lkt-table-font-size-row);color:var(--lkt-table-color-row)}.lkt-table th{font-family:var(--lkt-table-font-family-header),serif;padding:var(--lkt-table-padding-header)}.lkt-table thead tr{background-color:var(--lkt-table-bg-header)}.lkt-table tbody tr{background-color:var(--lkt-table-bg-row)}.lkt-table tbody tr:nth-child(odd){background-color:var(--lkt-table-bg-row-odd)}.lkt-table [data-sort=asc]>div,.lkt-table [data-sort=desc]>div{display:inline-block}.lkt-table [data-sort=asc]>div:after,.lkt-table [data-sort=desc]>div:after{font-family:var(--lkt-table-font-family-sort-icon),serif;display:inline-block;font-size:var(--lkt-table-font-size-sort-icon)}.lkt-table [data-sort=asc]>div:after{content:var(--lkt-table-sort-icon-content-asc)}.lkt-table [data-sort=desc]>div:after{content:var(--lkt-table-sort-icon-content-desc)}.lkt-table td[data-role=drag-indicator],.lkt-table td[data-role=invalid-drag-indicator]{width:var(--lkt-table-width-drag);height:40px;padding:0!important;position:relative;background:#eee;cursor:pointer}.lkt-table td[data-role=drag-indicator]:before,.lkt-table td[data-role=invalid-drag-indicator]:before{content:"";display:block;background:#eee;width:18px;height:36px;margin:auto}.lkt-table td[data-role=drag-indicator]:after,.lkt-table td[data-role=invalid-drag-indicator]:after{content:"…";color:#000;display:block;position:absolute;top:50%;left:50%;font-weight:700;width:15px;height:7px;transform:rotate(90deg);transform-origin:center center}[data-lkt=empty-table]{border:1px solid #ddd;border-radius:var(--lkt-table-border-radius);width:100%;padding:10px;background-color:#f8f7e5;font-family:var(--lkt-table-font-family);font-size:13px;color:#444;text-align:var(--lkt-table-text-align)}.sortable-chosen{border:var(--lkt-table-border-sortable-chosen)}.sortable-chosen.ghost{background:var(--lkt-table-bg-sortable-chosen-ghost)}.lkt-table td.lkt-table-nav-cell{padding:0}.lkt-table-nav-container{display:flex;align-items:center;flex-direction:column;justify-content:center}.lkt-table-page-buttons{position:sticky;top:calc(-1 * var(--lkt-table-gap-buttons));display:flex;align-items:center;gap:var(--lkt-table-gap-buttons);transition:all linear .15s;background:transparent;z-index:2}.lkt-table-page-buttons-bottom{justify-content:center}.lkt-table-page-buttons>.switch-edition-mode{margin-left:auto}.lkt-table .lkt-table-col-drop{width:var(--lkt-table-width-col-drop);text-align:var(--lkt-table-text-align-col-drop)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lkt-table",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "lkt",
@@ -2,15 +2,22 @@
2
2
  import {computed} from "vue";
3
3
  import {Settings} from "../settings/Settings";
4
4
  import {__} from "lkt-i18n";
5
+ import {LktObject} from "lkt-ts-interfaces";
5
6
 
6
7
  const emit = defineEmits(['click']);
7
8
 
8
9
  const props = withDefaults(defineProps<{
9
10
  disabled: boolean
10
- text: boolean
11
+ text: string
12
+ confirm: string
13
+ resource: string
14
+ resourceData: LktObject
11
15
  }>(), {
12
16
  disabled: false,
13
17
  text: '',
18
+ confirm: '',
19
+ resource: '',
20
+ resourceData: () => ({}),
14
21
  });
15
22
 
16
23
  const hasButtonSlot = computed(() => {
@@ -30,6 +37,9 @@ const hasButtonSlot = computed(() => {
30
37
  <template>
31
38
  <lkt-button
32
39
  palette="table-delete"
40
+ :resource="resource"
41
+ :resource-data="resourceData"
42
+ :confirm-modal="confirm"
33
43
  :disabled="disabled"
34
44
  @click.prevent.stop="emit('click')">
35
45
  <template v-if="hasButtonSlot">
@@ -26,6 +26,7 @@ const props = withDefaults(defineProps<{
26
26
  emptyColumns: string[]
27
27
  dropConfirm: string
28
28
  dropText: string
29
+ dropResource: string
29
30
  }>(), {
30
31
  modelValue: () => ({}),
31
32
  isDraggable: true,
@@ -41,6 +42,7 @@ const props = withDefaults(defineProps<{
41
42
  emptyColumns: () => [],
42
43
  dropConfirm: '',
43
44
  dropText: '',
45
+ dropResource: '',
44
46
  });
45
47
 
46
48
  const Item = ref(props.modelValue);
@@ -139,8 +141,11 @@ watch(Item, (v) => {
139
141
  </template>
140
142
  </td>
141
143
  </template>
142
- <td v-if="canDrop && editModeEnabled" class="lkt-table-delete-cell">
144
+ <td v-if="canDrop && editModeEnabled" class="lkt-table-col-drop">
143
145
  <drop-button
146
+ :resource="dropResource"
147
+ :resource-data="Item"
148
+ :confirm="dropConfirm"
144
149
  :text="dropText"
145
150
  @click="onClickDrop"/>
146
151
  </td>
@@ -111,9 +111,11 @@ const Sorter = ref(typeof props.sorter === 'function' ? props.sorter : defaultTa
111
111
  tableBody = ref(null),
112
112
  Columns = ref(props.columns);
113
113
 
114
+ let basePerms: string[] = [];
114
115
  const Page = ref(props.page),
115
116
  loading = ref(true),
116
117
  firstLoadReady = ref(false),
118
+ perms = ref(basePerms),
117
119
  paginator = ref(null),
118
120
  sortableObject = ref({}),
119
121
  dataState = ref(new DataState({items: Items.value}, props.dataStateConfig)),
@@ -127,6 +129,9 @@ const onResults = (r: any) => {
127
129
  firstLoadReady.value = true;
128
130
  dataState.value.store({items: Items.value}).turnStoredIntoOriginal();
129
131
  },
132
+ onPerms = (r: string[]) => {
133
+ perms.value = r;
134
+ },
130
135
  onLoading = () => nextTick(() => loading.value = true),
131
136
  doRefresh = () => {
132
137
  //@ts-ignore
@@ -231,7 +236,11 @@ const emptyColumns = computed(() => {
231
236
  return __(props.editModeText.substring(3));
232
237
  }
233
238
  return props.editModeText;
234
- });
239
+ }),
240
+ hasCreatePerm = computed(() => perms.value.includes('create')),
241
+ hasReadPerm = computed(() => perms.value.includes('read')),
242
+ hasUpdatePerm = computed(() => perms.value.includes('update')),
243
+ hasDropPerm = computed(() => perms.value.includes('drop'));
235
244
 
236
245
 
237
246
  const getItemByEvent = (e: any) => {
@@ -497,7 +506,10 @@ defineExpose({
497
506
  v-on:click="sort(column)"
498
507
  />
499
508
  </template>
500
- <th v-if="canDrop && editModeEnabled"/>
509
+ <th
510
+ v-if="canDrop && hasDropPerm && editModeEnabled"
511
+ class="lkt-table-col-drop"
512
+ />
501
513
  </tr>
502
514
  </thead>
503
515
  <tbody
@@ -517,8 +529,9 @@ defineExpose({
517
529
  :add-navigation="addNavigation"
518
530
  :hidden-is-visible="isVisible(i)"
519
531
  :latest-row="i+1 === amountOfItems"
520
- :can-drop="canDrop"
532
+ :can-drop="canDrop && hasDropPerm && editModeEnabled"
521
533
  :drop-confirm="dropConfirm"
534
+ :drop-resource="dropResource"
522
535
  :drop-text="dropText"
523
536
  :edit-mode-enabled="editModeEnabled"
524
537
  v-on:click="onClick"
@@ -594,6 +607,7 @@ defineExpose({
594
607
  :filters="filters"
595
608
  v-on:results="onResults"
596
609
  v-on:loading="onLoading"
610
+ v-on:perms="onPerms"
597
611
  />
598
612
 
599
613
  </component>
package/theme/default.css CHANGED
@@ -28,4 +28,6 @@
28
28
  --lkt-table-bg-sortable-chosen-ghost: #aaaaaa;
29
29
 
30
30
  --lkt-table-gap-buttons: 15px;
31
+ --lkt-table-width-col-drop: auto;
32
+ --lkt-table-text-align-col-drop: right;
31
33
  }