Skip to content

Commit a608bc4

Browse files
committed
refactor(desk): remove register code
1 parent 2c0513e commit a608bc4

File tree

9 files changed

+234
-350
lines changed

9 files changed

+234
-350
lines changed

packages/desktop/i18n/en-US.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export default {
1212
file: 'File | Files',
1313
folder: 'Folder | Folders',
1414
filter: 'Filter | Filters',
15+
view: 'View | Views',
1516
listEntity: '{0} list',
1617
addEntity: 'Add {0}',
1718
editEntity: 'Edit {0}',
@@ -75,6 +76,7 @@ export default {
7576
table: 'Table',
7677
gallery: 'Gallery',
7778
errors: {
79+
unknown: 'Unknown error',
7880
workspaceNotFound: '@:workspace not found: {0}',
7981
collectionNotFound: '@:collection not found: {1}',
8082
},
Lines changed: 55 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script setup lang="ts">
22
import ViewCommon from '@/../core/entities/view-common'
3-
import ViewTable from '@/../core/entities/view-table'
3+
44
import { debounce } from 'lodash'
55
import { ref, watch, computed, onMounted } from 'vue'
66
import { useStore } from '../store'
@@ -35,14 +35,9 @@ onMounted(async () => {
3535
3636
const view = computed(() => store.view.getView(props.collectionId, props.viewId))
3737
38-
watch(props, () => store.view.setRegister(props.collectionId, props.viewId), {
39-
deep: true,
40-
immediate: true,
41-
})
42-
4338
// items
4439
45-
const register = computed(() => store.item.getRegister(props.collectionId))
40+
const register = computed(() => store.item.getStoreItem(props.collectionId))
4641
4742
const search = ref({
4843
input: '',
@@ -51,68 +46,70 @@ const search = ref({
5146
})
5247
5348
async function load() {
54-
await store.item.setRegister(props.collectionId)
49+
await store.item.setItems(props.collectionId)
5550
}
5651
5752
watch(() => search.value.input, debounce(load, 500))
5853
</script>
5954
<template>
60-
<v-card-head :class="register.loading ? 'border-b-accent' : ''">
55+
<v-card-head :class="register?.loading ? 'border-b-accent' : ''">
6156
<slot name="left" />
6257

6358
<div class="grow"></div>
6459

65-
<is-menu offset-y>
66-
<template #activator="{ on }">
67-
<v-btn text size="sm" v-bind="on">
68-
<is-icon name="cog" />
69-
</v-btn>
60+
<template v-if="view">
61+
<template v-if="view instanceof ViewCommon">
62+
<div class="flex items-center transition-all">
63+
<transition name="slide-left">
64+
<is-input
65+
v-if="search.show || !!search.input"
66+
:model-value="search.input"
67+
:placeholder="$t('search')"
68+
size="sm"
69+
class="w-[300px] mr-2"
70+
@update:model-value="search.onInput"
71+
>
72+
<template #append>
73+
<v-btn
74+
v-if="search.input"
75+
text
76+
size="none"
77+
class="w-5 h-5"
78+
@click="search.input = ''"
79+
>
80+
<is-icon name="times" />
81+
</v-btn>
82+
</template>
83+
</is-input>
84+
</transition>
85+
86+
<v-btn text size="sm" @click="search.show = !search.show">
87+
<is-icon name="search" />
88+
</v-btn>
89+
90+
<v-btn text size="sm" @click="load">
91+
<is-icon name="rotate" />
92+
</v-btn>
93+
94+
<c-drawer-hide-columns v-model="view.columns" :collection-id="collectionId" />
95+
96+
<c-drawer-filter v-model="view.filters" :columns="collection?.columns" />
97+
</div>
7098
</template>
7199

72-
<v-card color="b-secondary">
73-
<v-card-content>
74-
<is-input v-model="view.label" :label="$t('label')" />
75-
</v-card-content>
76-
</v-card>
77-
</is-menu>
78-
79-
<template v-if="view instanceof ViewCommon">
80-
<div class="flex items-center transition-all">
81-
<transition name="slide-left">
82-
<is-input
83-
v-if="search.show || !!search.input"
84-
:model-value="search.input"
85-
:placeholder="$t('search')"
86-
size="sm"
87-
class="w-[300px] mr-2"
88-
@update:model-value="search.onInput"
89-
>
90-
<template #append>
91-
<v-btn
92-
v-if="search.input"
93-
text
94-
size="none"
95-
class="w-5 h-5"
96-
@click="search.input = ''"
97-
>
98-
<is-icon name="times" />
99-
</v-btn>
100-
</template>
101-
</is-input>
102-
</transition>
103-
104-
<v-btn text size="sm" @click="search.show = !search.show">
105-
<is-icon name="search" />
106-
</v-btn>
107-
108-
<v-btn text size="sm" @click="load">
109-
<is-icon name="rotate" />
110-
</v-btn>
111-
112-
<c-drawer-hide-columns v-model="view.columns" :collection-id="collectionId" />
113-
114-
<c-drawer-filter v-model="view.filters" :columns="collection?.columns" />
115-
</div>
100+
<is-menu offset-y>
101+
<template #activator="{ on }">
102+
<v-btn text size="sm" v-bind="on">
103+
<is-icon name="cog" />
104+
</v-btn>
105+
</template>
106+
107+
<v-card color="b-secondary">
108+
<v-card-content>
109+
<is-input v-model="view.label" :label="$t('label')" />
110+
</v-card-content>
111+
</v-card>
112+
</is-menu>
116113
</template>
117114
</v-card-head>
118115
</template>

packages/desktop/modules/collection/components/CGallery.vue

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import CActions from './CActions.vue'
1515
1616
import IValue from '@/modules/item/components/IValue.vue'
1717
import EImg from '@/modules/entry/components/EImg.vue'
18+
import { createPayload } from '../composables/filter'
19+
import Item from '@/../core/entities/item'
1820
1921
// Props & Emits
2022
const props = defineProps({
@@ -69,7 +71,7 @@ async function setViews() {
6971
7072
innerViewId.value = view.id
7173
72-
await store.view.createView(props.collectionId, view, !!props.viewId)
74+
await store.view.create(props.collectionId, view, !!props.viewId)
7375
}
7476
}
7577
@@ -145,19 +147,35 @@ const visibleColumns = computed(() => view.value.columns.filter((c) => !c.hide).
145147
146148
// items
147149
148-
const items = computed(() => store.item.getRegister(props.collectionId).items)
150+
const items = computed(() => store.item.getItems(props.collectionId))
149151
150-
const loading = computed(() => store.item.getRegister(props.collectionId).loading)
152+
const register = computed(() => store.item.getStoreItem(props.collectionId))
151153
152154
async function load() {
153-
await store.item.setRegister(props.collectionId)
155+
await store.item.setItems(props.collectionId)
154156
}
155157
156158
watch(() => view.value.filters, debounce(load, 500), { deep: true, immediate: true })
157159
158160
// update item with debounce
159161
160-
const updateItem = debounce(store.item.update, 500)
162+
const updateItem = debounce((item: Item, field: string, value: any) => {
163+
const old = item[field]
164+
165+
item[field] = value
166+
167+
store.item.update(props.collectionId, item.id, { [field]: value }).catch(() => {
168+
item[field] = old
169+
})
170+
}, 500)
171+
172+
// create item
173+
174+
async function create() {
175+
const item = new Item(createPayload(view.value.filters, collection.value?.columns))
176+
177+
await store.item.create(props.collectionId, item)
178+
}
161179
</script>
162180

163181
<template>
@@ -273,10 +291,10 @@ const updateItem = debounce(store.item.update, 500)
273291
:items="items"
274292
:columns="columns"
275293
v-bind="bindings.gallery"
276-
:loading="loading"
294+
:loading="register?.loading"
277295
:sizes="sizes"
278296
item-key="id"
279-
class="pt-4"
297+
class="py-4"
280298
>
281299
<template #item="data">
282300
<v-card
@@ -307,9 +325,7 @@ const updateItem = debounce(store.item.update, 500)
307325
:column="c"
308326
:item="data.item"
309327
class="w-full"
310-
@update:model-value="
311-
updateItem(collectionId, data.item, c.field, $event)
312-
"
328+
@update:model-value="updateItem(data.item, c.field, $event)"
313329
/>
314330
</is-list-item>
315331
</template>
@@ -322,7 +338,7 @@ const updateItem = debounce(store.item.update, 500)
322338
:height="data.size.height"
323339
class="rounded border border-lines flex items-center justify-center cursor-pointer"
324340
v-bind="data.bindings.card"
325-
@click="store.item.create"
341+
@click="create"
326342
>
327343
<is-icon class="text-2xl text-lines" name="plus" />
328344
</v-card>

packages/desktop/modules/collection/components/CTable.vue

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import CActions from './CActions.vue'
1919
2020
import IValue from '@/modules/item/components/IValue.vue'
2121
import ViewTable from '@/../core/entities/view-table'
22+
import Item from '@/../core/entities/item'
23+
import { createPayload } from '../composables/filter'
2224
2325
const props = defineProps({
2426
width: {
@@ -88,7 +90,7 @@ async function setViews() {
8890
8991
innerViewId.value = view.id
9092
91-
await store.view.createView(props.collectionId, view, !!props.viewId)
93+
await store.view.create(props.collectionId, view, !!props.viewId)
9294
}
9395
}
9496
@@ -148,18 +150,35 @@ function resizeColumn(id: string, width: number) {
148150
149151
// items
150152
151-
const items = computed(() => store.item.getRegister(props.collectionId).items)
152-
const loading = computed(() => store.item.getRegister(props.collectionId).loading)
153+
const items = computed(() => store.item.getItems(props.collectionId))
154+
155+
const register = computed(() => store.item.getStoreItem(props.collectionId))
153156
154157
async function load() {
155-
await store.item.setRegister(props.collectionId)
158+
await store.item.setItems(props.collectionId)
156159
}
157160
158161
watch(() => view.value.filters, debounce(load, 500), { deep: true, immediate: true })
159162
160163
// update item with debounce
161164
162-
const updateItem = debounce(store.item.update, 500)
165+
const updateItem = debounce((item: Item, field: string, value: any) => {
166+
const old = item[field]
167+
168+
item[field] = value
169+
170+
store.item.update(props.collectionId, item.id, { [field]: value }).catch(() => {
171+
item[field] = old
172+
})
173+
}, 500)
174+
175+
// create item
176+
177+
async function create() {
178+
const item = new Item(createPayload(view.value.filters, collection.value?.columns))
179+
180+
await store.item.create(props.collectionId, item)
181+
}
163182
</script>
164183

165184
<template>
@@ -175,7 +194,12 @@ const updateItem = debounce(store.item.update, 500)
175194
class="overflow-auto w-full"
176195
:class="!hideActions ? 'h-[calc(100%_-_53px)]' : 'h-full'"
177196
>
178-
<v-table :items="items" :columns="columns" v-bind="bindings.table" :loading="loading">
197+
<v-table
198+
:items="items"
199+
:columns="columns"
200+
v-bind="bindings.table"
201+
:loading="register?.loading"
202+
>
179203
<template #column>
180204
<Draggable v-model="columns" handle=".drag" item-key="id" tag="v-tr">
181205
<template #item="{ element: c }">
@@ -234,7 +258,7 @@ const updateItem = debounce(store.item.update, 500)
234258
>
235259
<template #activator="{ on }">
236260
<v-btn
237-
class="w-full h-[43px] opacity-0 group-hover/item:opacity-100"
261+
class="w-full h-[40px] opacity-0 group-hover/item:opacity-100"
238262
size="none"
239263
color="b-secondary"
240264
tile
@@ -249,7 +273,7 @@ const updateItem = debounce(store.item.update, 500)
249273
size="xs"
250274
color="danger"
251275
dark
252-
@click="store.item.destroy(collectionId, data.item)"
276+
@click="store.item.destroy(collectionId, data.item.id)"
253277
>
254278
<is-icon name="trash" class="mr-2" />
255279
{{ $t('deleteEntity', [$t('item')]) }}
@@ -264,19 +288,14 @@ const updateItem = debounce(store.item.update, 500)
264288
:model-value="data.item[c.field as string]"
265289
:column="(c as Column)"
266290
:item="data.item"
267-
@update:model-value="
268-
updateItem(collectionId, data.item, c.field!, $event)
269-
"
291+
@update:model-value="updateItem(data.item, c.field!, $event)"
270292
/>
271293
</v-td>
272294
</v-tr>
273295
</template>
274296

275297
<template #append>
276-
<v-tr
277-
class="cursor-pointer hover:bg-b-secondary"
278-
@click="store.item.create(collectionId)"
279-
>
298+
<v-tr class="cursor-pointer hover:bg-b-secondary" @click="create">
280299
<v-td class="!border-x-0"></v-td>
281300

282301
<v-td

0 commit comments

Comments
 (0)