From 14d9d1891f9fbe89f32ca0e1cf7160c4870fae95 Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Wed, 1 Mar 2023 20:45:35 +0100 Subject: [PATCH] Add new feature: loading grids which are disabled and show loaders --- src/DragGrid.vue | 100 +++++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/src/DragGrid.vue b/src/DragGrid.vue index 2b926ef..94079e3 100644 --- a/src/DragGrid.vue +++ b/src/DragGrid.vue @@ -1,53 +1,64 @@ <template> <interact droppable - @dropmove="disabled ? undefined : handleDragOver($event)" - @drop.prevent="disabled ? undefined : handleDrop($event)" + @dropmove="disabled || loading ? undefined : handleDragOver($event)" + @drop.prevent="disabled || loading ? undefined : handleDrop($event)" @dragleave="$refs.highlightContainer.style.display = 'none'" class="grid" > - <div class="highlight-container" ref="highlightContainer"> - <slot name="highlight"> - <div class="highlight"></div> - </slot> - </div> - <DragContainer - v-for="item in value" - :key="item.key" - :drag-i-d="item.key" - :x="getInt('x', item)" - :y="getInt('y', item)" - :w="getInt('w', item)" - :h="getInt('h', item)" - :data="getObject('data', item)" - :context="context" - :grid-id="gridId" - :disabled="disabled || item.disabled" - > - <slot v-bind="transformItem(item)" :raw-item="item" name="item"> - <dl> - <dt>Key</dt> - <dd>{{ item.key }}</dd> - <dt>Position</dt> - <dd>{{ item.x }}, {{ item.y }}</dd> - <dt>Size</dt> - <dd>{{ item.w }} × {{ item.h }}</dd> - <dt>Data</dt> - <dd>{{ item.data }}</dd> - </dl> - </slot> - </DragContainer> - <template v-for="disabledField in disabledFields"> - <GridItem - class="disabledField" - :x="disabledField.x" - :y="disabledField.y" - :key="disabledField.x + '|' + disabledField.y" + <template v-if="loading"> + <template v-for="loader in cols * rows"> + <div :key="loader"> + <slot name="loader"></slot> + </div> + </template> + </template> + + <template v-else> + <div class="highlight-container" ref="highlightContainer"> + <slot name="highlight"> + <div class="highlight"></div> + </slot> + </div> + + <DragContainer + v-for="item in value" + :key="item.key" + :drag-i-d="item.key" + :x="getInt('x', item)" + :y="getInt('y', item)" + :w="getInt('w', item)" + :h="getInt('h', item)" + :data="getObject('data', item)" + :context="context" + :grid-id="gridId" + :disabled="disabled || loading || item.disabled" > - <slot name="disabledField"></slot> - </GridItem> + <slot v-bind="transformItem(item)" :raw-item="item" name="item"> + <dl> + <dt>Key</dt> + <dd>{{ item.key }}</dd> + <dt>Position</dt> + <dd>{{ item.x }}, {{ item.y }}</dd> + <dt>Size</dt> + <dd>{{ item.w }} × {{ item.h }}</dd> + <dt>Data</dt> + <dd>{{ item.data }}</dd> + </dl> + </slot> + </DragContainer> + <template v-for="disabledField in disabledFields"> + <GridItem + class="disabledField" + :x="disabledField.x" + :y="disabledField.y" + :key="disabledField.x + '|' + disabledField.y" + > + <slot name="disabledField"></slot> + </GridItem> + </template> + <slot></slot> </template> - <slot></slot> </interact> </template> @@ -111,6 +122,11 @@ export default { required: false, default: () => [], }, + loading: { + type: Boolean, + required: false, + default: false, + }, }, methods: { positionAllowed(x, y, key) { -- GitLab